00001 #pragma ident "$Id: Msise00Drag.hpp 3140 2012-06-18 15:03:02Z susancummins $"
00002
00008 #ifndef GPSTK_MSISE00_DRAG_HPP
00009 #define GPSTK_MSISE00_DRAG_HPP
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "AtmosphericDrag.hpp"
00036
00037 namespace gpstk
00038 {
00039
00042
00055 class Msise00Drag : public AtmosphericDrag
00056 {
00057 public:
00058
00060 Msise00Drag()
00061 : ap_opt(16),
00062 f107_opt(92.5)
00063 { }
00064
00065
00067 virtual ~Msise00Drag(){}
00068
00069
00070 void test();
00071
00079 virtual double computeDensity(UTCTime utc,
00080 EarthBody& rb,
00081 Vector<double> r,
00082 Vector<double> v);
00083
00084 protected:
00085
00086 double ap_opt;
00087 double f107_opt;
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 struct nrlmsise_flags
00128 {
00129 int switches[24];
00130 double sw[24];
00131 double swc[24];
00132 };
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 struct ap_array
00147 {
00148 double a[7];
00149 };
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 struct nrlmsise_input
00173 {
00174 int year;
00175 int doy;
00176 double sec;
00177 double alt;
00178 double g_lat;
00179 double g_long;
00180 double lst;
00181 double f107A;
00182 double f107;
00183 double ap;
00184 struct ap_array *ap_a;
00185 };
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 struct nrlmsise_output
00221 {
00222 double d[9];
00223 double t[2];
00224 };
00225
00227 void gtd7 (struct nrlmsise_input *input,
00228 struct nrlmsise_flags *flags,
00229 struct nrlmsise_output *output);
00230
00231
00236 void gtd7d(struct nrlmsise_input *input,
00237 struct nrlmsise_flags *flags,
00238 struct nrlmsise_output *output);
00239
00240
00242 void gts7 (struct nrlmsise_input *input,
00243 struct nrlmsise_flags *flags,
00244 struct nrlmsise_output *output);
00245
00246
00247
00249 void ghp7 (struct nrlmsise_input *input,
00250 struct nrlmsise_flags *flags,
00251 struct nrlmsise_output *output,
00252 double press);
00253
00254 private:
00255
00256
00257
00258
00259 void tselec(struct nrlmsise_flags *flags);
00260
00261 void glatf(double lat, double *gv, double *reff);
00262
00263 double ccor(double alt, double r, double h1, double zh);
00264
00265 double ccor2(double alt, double r, double h1, double zh, double h2);
00266
00267 double scalh(double alt, double xm, double temp);
00268
00269 double dnet (double dd, double dm, double zhm, double xmm, double xm);
00270
00271 void splini (double *xa, double *ya, double *y2a, int n, double x, double *y);
00272
00273 void splint (double *xa, double *ya, double *y2a, int n, double x, double *y);
00274
00275 void spline (double *x, double *y, int n, double yp1, double ypn, double *y2);
00276
00277 double zeta(double zz, double zl);
00278
00279 double densm (double alt, double d0, double xm, double *tz, int mn3,
00280 double *zn3, double *tn3, double *tgn3, int mn2,
00281 double *zn2, double *tn2, double *tgn2);
00282
00283 double densu (double alt, double dlb, double tinf, double tlb, double xm,
00284 double alpha, double *tz, double zlb, double s2, int mn1,
00285 double *zn1, double *tn1, double *tgn1);
00286
00287 double g0(double a, double *p);
00288
00289 double sumex(double ex);
00290
00291 double sg0(double ex, double *p, double *ap);
00292
00293 double globe7(double *p, struct nrlmsise_input *input,
00294 struct nrlmsise_flags *flags);
00295
00296 double glob7s(double *p, struct nrlmsise_input *input,
00297 struct nrlmsise_flags *flags);
00298
00299
00300 private:
00301
00302
00303 static double pt[150];
00304 static double pd[9][150];
00305 static double ps[150];
00306 static double pdl[2][25];
00307 static double ptl[4][100];
00308 static double pma[10][100];
00309 static double sam[100];
00310
00311
00312 static double ptm[10];
00313 static double pdm[8][10];
00314 static double pavgm[10];
00315
00316
00317 static double gsurf;
00318 static double re;
00319
00320
00321 static double dd;
00322
00323
00324 static double dm04, dm16, dm28, dm32, dm40, dm01, dm14;
00325
00326
00327 static double meso_tn1[5];
00328 static double meso_tn2[4];
00329 static double meso_tn3[5];
00330 static double meso_tgn1[2];
00331 static double meso_tgn2[2];
00332 static double meso_tgn3[2];
00333
00334
00335 static double dfa;
00336 static double plg[4][9];
00337 static double ctloc, stloc;
00338 static double c2tloc, s2tloc;
00339 static double s3tloc, c3tloc;
00340 static double apdf, apt[4];
00341
00342 };
00343
00344
00345
00346 }
00347
00348 #endif // GPSTK_MSISE00_DRAG_HPP
00349