Bugfix against memory corruption
[~brodo/nrlmsise-00.git] / nrlmsise-00_test.c
1 /* -------------------------------------------------------------------- */
2 /* ---------  N R L M S I S E - 0 0    M O D E L    2 0 0 1  ---------- */
3 /* -------------------------------------------------------------------- */
4
5 /* This file is part of the NRLMSISE-00  C source code package - release
6  * 20041227
7  *
8  * The NRLMSISE-00 model was developed by Mike Picone, Alan Hedin, and
9  * Doug Drob. They also wrote a NRLMSISE-00 distribution package in 
10  * FORTRAN which is available at
11  * http://uap-www.nrl.navy.mil/models_web/msis/msis_home.htm
12  *
13  * Dominik Brodowski implemented and maintains this C version. You can
14  * reach him at mail@brodo.de. See the file "DOCUMENTATION" for details,
15  * and check http://www.brodo.de/english/pub/nrlmsise/index.html for
16  * updated releases of this package.
17  */
18
19
20
21 /* ------------------------------------------------------------------- */
22 /* ------------------------------ INCLUDES --------------------------- */
23 /* ------------------------------------------------------------------- */
24
25 #include <stdio.h>
26 #include "nrlmsise-00.h"
27
28
29
30 /* ------------------------------------------------------------------- */
31 /* ----------------------------- TEST_GTD7 --------------------------- */
32 /* ------------------------------------------------------------------- */
33
34 void test_gtd7(void) {
35         struct nrlmsise_output output[17];
36         struct nrlmsise_input input[17];
37         struct nrlmsise_flags flags;
38         struct ap_array aph;
39         int i;
40         int j;
41         /* input values */
42         for (i=0;i<7;i++)
43                 aph.a[i]=100;
44         flags.switches[0]=0;
45         for (i=1;i<24;i++)
46                 flags.switches[i]=1;
47         for (i=0;i<17;i++) {
48                 input[i].doy=172;
49                 input[i].year=0; /* without effect */
50                 input[i].sec=29000;
51                 input[i].alt=400;
52                 input[i].g_lat=60;
53                 input[i].g_long=-70;
54                 input[i].lst=16;
55                 input[i].f107A=150;
56                 input[i].f107=150;
57                 input[i].ap=4;
58         }
59         input[1].doy=81;
60         input[2].sec=75000;
61         input[2].alt=1000;
62         input[3].alt=100;
63         input[10].alt=0;
64         input[11].alt=10;
65         input[12].alt=30;
66         input[13].alt=50;
67         input[14].alt=70;
68         input[16].alt=100;
69         input[4].g_lat=0;
70         input[5].g_long=0;
71         input[6].lst=4;
72         input[7].f107A=70;
73         input[8].f107=180;
74         input[9].ap=40;
75         input[15].ap_a=&aph;
76         input[16].ap_a=&aph;
77         /* evaluate 0 to 14 */
78         for (i=0;i<15;i++)
79                 gtd7(&input[i], &flags, &output[i]);
80         /* evaluate 15 and 16 */
81         flags.switches[9]=-1;
82         for (i=15;i<17;i++)
83                 gtd7(&input[i], &flags, &output[i]);
84         /* output type 1 */
85         for (i=0;i<17;i++) {
86                 printf("\n");
87                 for (j=0;j<9;j++)
88                         printf("%E ",output[i].d[j]);
89                 printf("%E ",output[i].t[0]);
90                 printf("%E \n",output[i].t[1]);
91                 /* DL omitted */
92         }
93
94         /* output type 2 */
95         for (i=0;i<3;i++) {
96                 printf("\n");
97                 printf("\nDAY   ");
98                 for (j=0;j<5;j++)
99                         printf("         %3i",input[i*5+j].doy);
100                 printf("\nUT    ");
101                 for (j=0;j<5;j++)
102                         printf("       %5.0f",input[i*5+j].sec);
103                 printf("\nALT   ");
104                 for (j=0;j<5;j++)
105                         printf("        %4.0f",input[i*5+j].alt);
106                 printf("\nLAT   ");
107                 for (j=0;j<5;j++)
108                         printf("         %3.0f",input[i*5+j].g_lat);
109                 printf("\nLONG  ");
110                 for (j=0;j<5;j++)
111                         printf("         %3.0f",input[i*5+j].g_long);
112                 printf("\nLST   ");
113                 for (j=0;j<5;j++)
114                         printf("       %5.0f",input[i*5+j].lst);
115                 printf("\nF107A ");
116                 for (j=0;j<5;j++)
117                         printf("         %3.0f",input[i*5+j].f107A);
118                 printf("\nF107  ");
119                 for (j=0;j<5;j++)
120                         printf("         %3.0f",input[i*5+j].f107);
121                 printf("\n\n");
122                 printf("\nTINF  ");
123                 for (j=0;j<5;j++)
124                         printf("     %7.2f",output[i*5+j].t[0]);
125                 printf("\nTG    ");
126                 for (j=0;j<5;j++)
127                         printf("     %7.2f",output[i*5+j].t[1]);
128                 printf("\nHE    ");
129                 for (j=0;j<5;j++)
130                         printf("   %1.3e",output[i*5+j].d[0]);
131                 printf("\nO     ");
132                 for (j=0;j<5;j++)
133                         printf("   %1.3e",output[i*5+j].d[1]);
134                 printf("\nN2    ");
135                 for (j=0;j<5;j++)
136                         printf("   %1.3e",output[i*5+j].d[2]);
137                 printf("\nO2    ");
138                 for (j=0;j<5;j++)
139                         printf("   %1.3e",output[i*5+j].d[3]);
140                 printf("\nAR    ");
141                 for (j=0;j<5;j++)
142                         printf("   %1.3e",output[i*5+j].d[4]);
143                 printf("\nH     ");
144                 for (j=0;j<5;j++)
145                         printf("   %1.3e",output[i*5+j].d[6]);
146                 printf("\nN     ");
147                 for (j=0;j<5;j++)
148                         printf("   %1.3e",output[i*5+j].d[7]);
149                 printf("\nANM 0 ");
150                 for (j=0;j<5;j++)
151                         printf("   %1.3e",output[i*5+j].d[8]);
152                 printf("\nRHO   ");
153                 for (j=0;j<5;j++)
154                         printf("   %1.3e",output[i*5+j].d[5]);
155                         printf("\n");
156         }
157         printf("\n");
158 }
159
160
161 /* ------------------------------------------------------------------- */
162 /* -------------------------------- MAIN ----------------------------- */
163 /* ------------------------------------------------------------------- */
164
165 int main(void) {
166         test_gtd7();
167         return 0;
168 }