Bugfix against memory corruption
[~brodo/nrlmsise-00.git] / DOCUMENTATION
1 --------------------------------------------------------------------
2 ---------  N R L M S I S E - 0 0    M O D E L    2 0 0 1  ----------
3 --------------------------------------------------------------------
4
5
6 Table of Contents
7 -----------------
8
9 1. Legal Information
10 2. Brief Description
11 3. Source Code Availability
12 4. This C Release
13     4.1  Files
14     4.2  Differences between FORTRAN and C version
15 5. Interface
16 6. Release Notes
17 7. Testing Output
18
19
20
21 1. LEGAL INFORMATION
22 ====================
23
24 This package is distributed in the hope that it will be useful,
25 but WITHOUT ANY WARRANTY; without even the implied warranty of
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please inform the
27 maintainer of the C release (Dominik Brodowski - mail@brodo.de) of
28 any patches and bug-fixes you implement for NRLMSISE-00 so that this C
29 package can be updated with these improvements.
30
31
32
33 2. BRIEF DESCRIPTION
34 ====================
35
36 The NRLMSIS-00 empirical atmosphere model was developed by Mike
37 Picone, Alan Hedin, and Doug Drob based on the MSISE90 model.
38
39 The MSISE90 model describes the neutral temperature and densities in
40 Earth's atmosphere from ground to thermospheric heights. Below 72.5 km
41 the model is primarily based on the MAP Handbook (Labitzke et al.,
42 1985) tabulation of zonal average temperature and pressure by Barnett
43 and Corney, which was also used for the CIRA-86. Below 20 km these
44 data were supplemented with averages from the National Meteorological
45 Center (NMC). In addition, pitot tube, falling sphere, and grenade
46 sounder rocket measurements from 1947 to 1972 were taken into
47 consideration. Above 72.5 km MSISE-90 is essentially a revised MSIS-86
48 model taking into account data derived from space shuttle flights and
49 newer incoherent scatter results. For someone interested only in the
50 thermosphere (above 120 km), the author recommends the MSIS-86
51 model. MSISE is also not the model of preference for specialized
52 tropospheric work. It is rather for studies that reach across several
53 atmospheric boundaries.
54 (quoted from http://nssdc.gsfc.nasa.gov/space/model/atmos/nrlmsise00.html)
55
56
57
58 3. SOURCE CODE AVAILABILITY
59 ===========================
60
61 The authors of the NRLMSISE-00 model have released a FORTRAN version
62 which is available at
63 http://uap-www.nrl.navy.mil/models_web/msis/msis_home.htm
64
65 Based on the Official Beta Release 1.0 (NRLMSISE-00.DIST12.TXT)
66 Dominik Brodowski wrote an implementation in C which is available on
67 http://www.brodo.de/english/pub/nrlmsise/
68 This release is based on the Official Beta Release 2.0 
69 (NRLMSISE-00.DIST17.TXT).
70
71
72
73 4. THIS C RELEASE
74 =================
75
76 When "INLINE" is not externally defined the source code should be
77 clean, plain ANSI which any C compiler should be able to work with. If
78 you find any problems, please report them to the maintainer Dominik
79 Brodowski at mail@brodo.de. Thank you!
80
81
82 4.1 Files
83 ---------
84
85 DOCUMENTATION      - this Documentation
86 nrlmsise-00.h      - header file for nrlmsise-00
87 nrlmsise-00.c      - source code for nrlmsise-00
88 nrlmsise-00_data.c - block data for nrlmsise-00
89 nrlmsise-00_test.c - test-driver for nrlmsise-00
90 makefile           - makefile for nrlmsise-test (gnu-make and gcc)
91
92
93 4.2 Differences between FORTRAN and C version
94 ---------------------------------------------
95
96 The C package does not save the last results internally to speed up
97 program execution as the FORTRAN version does.
98
99 The "switches" have to be specified before _every_ call.
100
101 The "DL" array is not printed in the testing routine since it's not an
102 output value.
103
104 The C version probably contains some bugs and still has to be regarded
105 more unstable than the FORTRAN relase. Please report any bugs or
106 incorrect values to the maintainer at devel@brodo.de
107
108
109
110 5. INTERFACE
111 ============
112
113 To access the NRLMSISE-00 functions you need to include the header
114 file nrlmsise-00.h. In this file you can find comments which explain
115 the in- and output, and the differences between the various functions.
116
117
118
119 6. RELEASE NOTES
120 ================
121
122 20020302        -       first release
123
124 20040322        -       fix gtd7d output if sw->flags[0] is set 
125                         (noted by Dr. Vasiliy Yurasov)
126
127 20041227        -       bugfix against memory corruption 
128                         (Donald F. Linton)
129
130
131
132 7. TESTING OUTPUT
133 =================
134
135 nrlmsise-test should generate the following output:
136
137
138
139 6.665177E+05 1.138806E+08 1.998211E+07 4.022764E+05 3.557465E+03 4.074714E-15 3.475312E+04 4.095913E+06 2.667273E+04 1.250540E+03 1.241416E+03 
140
141 3.407293E+06 1.586333E+08 1.391117E+07 3.262560E+05 1.559618E+03 5.001846E-15 4.854208E+04 4.380967E+06 6.956682E+03 1.166754E+03 1.161710E+03 
142
143 1.123767E+05 6.934130E+04 4.247105E+01 1.322750E-01 2.618848E-05 2.756772E-18 2.016750E+04 5.741256E+03 2.374394E+04 1.239892E+03 1.239891E+03 
144
145 5.411554E+07 1.918893E+11 6.115826E+12 1.225201E+12 6.023212E+10 3.584426E-10 1.059880E+07 2.615737E+05 2.819879E-42 1.027318E+03 2.068878E+02 
146
147 1.851122E+06 1.476555E+08 1.579356E+07 2.633795E+05 1.588781E+03 4.809630E-15 5.816167E+04 5.478984E+06 1.264446E+03 1.212396E+03 1.208135E+03 
148
149 8.673095E+05 1.278862E+08 1.822577E+07 2.922214E+05 2.402962E+03 4.355866E-15 3.686389E+04 3.897276E+06 2.667273E+04 1.220146E+03 1.212712E+03 
150
151 5.776251E+05 6.979139E+07 1.236814E+07 2.492868E+05 1.405739E+03 2.470651E-15 5.291986E+04 1.069814E+06 2.667273E+04 1.116385E+03 1.112999E+03 
152
153 3.740304E+05 4.782720E+07 5.240380E+06 1.759875E+05 5.501649E+02 1.571889E-15 8.896776E+04 1.979741E+06 9.121815E+03 1.031247E+03 1.024848E+03 
154
155 6.748339E+05 1.245315E+08 2.369010E+07 4.911583E+05 4.578781E+03 4.564420E-15 3.244595E+04 5.370833E+06 2.667273E+04 1.306052E+03 1.293374E+03 
156
157 5.528601E+05 1.198041E+08 3.495798E+07 9.339618E+05 1.096255E+04 4.974543E-15 2.686428E+04 4.889974E+06 2.805445E+04 1.361868E+03 1.347389E+03 
158
159 1.375488E+14 0.000000E+00 2.049687E+19 5.498695E+18 2.451733E+17 1.261066E-03 0.000000E+00 0.000000E+00 0.000000E+00 1.027318E+03 2.814648E+02 
160
161 4.427443E+13 0.000000E+00 6.597567E+18 1.769929E+18 7.891680E+16 4.059139E-04 0.000000E+00 0.000000E+00 0.000000E+00 1.027318E+03 2.274180E+02 
162
163 2.127829E+12 0.000000E+00 3.170791E+17 8.506280E+16 3.792741E+15 1.950822E-05 0.000000E+00 0.000000E+00 0.000000E+00 1.027318E+03 2.374389E+02 
164
165 1.412184E+11 0.000000E+00 2.104370E+16 5.645392E+15 2.517142E+14 1.294709E-06 0.000000E+00 0.000000E+00 0.000000E+00 1.027318E+03 2.795551E+02 
166
167 1.254884E+10 0.000000E+00 1.874533E+15 4.923051E+14 2.239685E+13 1.147668E-07 0.000000E+00 0.000000E+00 0.000000E+00 1.027318E+03 2.190732E+02 
168
169 5.196477E+05 1.274494E+08 4.850450E+07 1.720838E+06 2.354487E+04 5.881940E-15 2.500078E+04 6.279210E+06 2.667273E+04 1.426412E+03 1.408608E+03 
170
171 4.260860E+07 1.241342E+11 4.929562E+12 1.048407E+12 4.993465E+10 2.914304E-10 8.831229E+06 2.252516E+05 2.415246E-42 1.027318E+03 1.934071E+02 
172
173
174 DAY            172          81         172         172         172
175 UT           29000       29000       75000       29000       29000
176 ALT            400         400        1000         100         400
177 LAT             60          60          60          60           0
178 LONG           -70         -70         -70         -70         -70
179 LST             16          16          16          16          16
180 F107A          150         150         150         150         150
181 F107           150         150         150         150         150
182
183
184 TINF       1250.54     1166.75     1239.89     1027.32     1212.40
185 TG         1241.42     1161.71     1239.89      206.89     1208.14
186 HE       6.665e+05   3.407e+06   1.124e+05   5.412e+07   1.851e+06
187 O        1.139e+08   1.586e+08   6.934e+04   1.919e+11   1.477e+08
188 N2       1.998e+07   1.391e+07   4.247e+01   6.116e+12   1.579e+07
189 O2       4.023e+05   3.263e+05   1.323e-01   1.225e+12   2.634e+05
190 AR       3.557e+03   1.560e+03   2.619e-05   6.023e+10   1.589e+03
191 H        3.475e+04   4.854e+04   2.017e+04   1.060e+07   5.816e+04
192 N        4.096e+06   4.381e+06   5.741e+03   2.616e+05   5.479e+06
193 ANM 0    2.667e+04   6.957e+03   2.374e+04   2.820e-42   1.264e+03
194 RHO      4.075e-15   5.002e-15   2.757e-18   3.584e-10   4.810e-15
195
196
197 DAY            172         172         172         172         172
198 UT           29000       29000       29000       29000       29000
199 ALT            400         400         400         400         400
200 LAT             60          60          60          60          60
201 LONG             0         -70         -70         -70         -70
202 LST             16           4          16          16          16
203 F107A          150         150          70         150         150
204 F107           150         150         150         180         150
205
206
207 TINF       1220.15     1116.39     1031.25     1306.05     1361.87
208 TG         1212.71     1113.00     1024.85     1293.37     1347.39
209 HE       8.673e+05   5.776e+05   3.740e+05   6.748e+05   5.529e+05
210 O        1.279e+08   6.979e+07   4.783e+07   1.245e+08   1.198e+08
211 N2       1.823e+07   1.237e+07   5.240e+06   2.369e+07   3.496e+07
212 O2       2.922e+05   2.493e+05   1.760e+05   4.912e+05   9.340e+05
213 AR       2.403e+03   1.406e+03   5.502e+02   4.579e+03   1.096e+04
214 H        3.686e+04   5.292e+04   8.897e+04   3.245e+04   2.686e+04
215 N        3.897e+06   1.070e+06   1.980e+06   5.371e+06   4.890e+06
216 ANM 0    2.667e+04   2.667e+04   9.122e+03   2.667e+04   2.805e+04
217 RHO      4.356e-15   2.471e-15   1.572e-15   4.564e-15   4.975e-15
218
219
220 DAY            172         172         172         172         172
221 UT           29000       29000       29000       29000       29000
222 ALT              0          10          30          50          70
223 LAT             60          60          60          60          60
224 LONG           -70         -70         -70         -70         -70
225 LST             16          16          16          16          16
226 F107A          150         150         150         150         150
227 F107           150         150         150         150         150
228
229
230 TINF       1027.32     1027.32     1027.32     1027.32     1027.32
231 TG          281.46      227.42      237.44      279.56      219.07
232 HE       1.375e+14   4.427e+13   2.128e+12   1.412e+11   1.255e+10
233 O        0.000e+00   0.000e+00   0.000e+00   0.000e+00   0.000e+00
234 N2       2.050e+19   6.598e+18   3.171e+17   2.104e+16   1.875e+15
235 O2       5.499e+18   1.770e+18   8.506e+16   5.645e+15   4.923e+14
236 AR       2.452e+17   7.892e+16   3.793e+15   2.517e+14   2.240e+13
237 H        0.000e+00   0.000e+00   0.000e+00   0.000e+00   0.000e+00
238 N        0.000e+00   0.000e+00   0.000e+00   0.000e+00   0.000e+00
239 ANM 0    0.000e+00   0.000e+00   0.000e+00   0.000e+00   0.000e+00
240 RHO      1.261e-03   4.059e-04   1.951e-05   1.295e-06   1.148e-07
241
242
243 Note: These values equal those of the official FORTRAN package with
244 one notable exception: the FORTRAN version reports for "anomalous
245 oxygen" in test-run 4 exactly 0.000E-00, while my C compiler
246 generates code which calculates 2.820e-42. When only 16-bit wide
247 double variables are used, this value reduces to 0.000E-00 as well.
248
249
250
251 ========================================================
252
253 Tuebingen, Germany, on December 27nd, 2004
254
255 Dominik Brodowski