// ESAF : Euso Simulation and Analysis Framework
// $Id: MSISEtool.cc,v 1.4 2004/06/15 12:31:40 thea Exp $
// S. Moreggia created 18 November 2003
//
// nrlmsise-00 C code adapted in C++ structure
// nrlmsise-00 commentaries
/* -------------------------------------------------------------------- */
/* --------- N R L M S I S E - 0 0 M O D E L 2 0 0 1 ---------- */
/* -------------------------------------------------------------------- */
/* This file is part of the NRLMSISE-00 C source code package - release
* 20020503
*
* The NRLMSISE-00 model was developed by Mike Picone, Alan Hedin, and
* Doug Drob. They also wrote a NRLMSISE-00 distribution package in
* FORTRAN which is available at
* http://uap-www.nrl.navy.mil/models_web/msis/msis_home.htm
*
* Dominik Brodowski implemented and maintains this C version. You can
* reach him at devel@brodo.de. See the file "DOCUMENTATION" for details,
* and check http://www.brodo.de/english/pub/nrlmsise/index.html for
* updated releases of this package.
*/
#include "MSISEtool.hh"
#include <stdio.h>
#include <math.h>
ClassImp(MSISEtool)
/* ------------------------------------------------------------------- */
/* ------------------------- SHARED VARIABLES ------------------------ */
/* ------------------------------------------------------------------- */
/* PARMB */
static double gsurf;
static double re;
/* GTS3C */
static double dd;
/* DMIX */
static double dm04, dm16, dm28, dm32, dm40, dm01, dm14;
/* MESO7 */
static double meso_tn1[5];
static double meso_tn2[4];
static double meso_tn3[5];
static double meso_tgn1[2];
static double meso_tgn2[2];
static double meso_tgn3[2];
/* LPOLY */
static double dfa;
static double plg[4][9];
static double ctloc, stloc;
static double c2tloc, s2tloc;
static double s3tloc, c3tloc;
static double apdf, apt[4];
MSISEtool::MSISEtool() {
InitData();
}
// Content of nrlmsise-00_data.c copied in that method
void MSISEtool::InitData() {
// Data from nrlmsise-00 files
/* ------------------------------------------------------------------- */
/* ------------------------ BLOCK DATA GTD7BK ------------------------ */
/* ------------------------------------------------------------------- */
/* TEMPERATURE */
double temp_pt[150] = {
9.86573E-01, 1.62228E-02, 1.55270E-02,-1.04323E-01,-3.75801E-03,
-1.18538E-03,-1.24043E-01, 4.56820E-03, 8.76018E-03,-1.36235E-01,
-3.52427E-02, 8.84181E-03,-5.92127E-03,-8.61650E+00, 0.00000E+00,
1.28492E-02, 0.00000E+00, 1.30096E+02, 1.04567E-02, 1.65686E-03,
-5.53887E-06, 2.97810E-03, 0.00000E+00, 5.13122E-03, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00,-7.27026E-06,
0.00000E+00, 6.74494E+00, 4.93933E-03, 2.21656E-03, 2.50802E-03,
0.00000E+00, 0.00000E+00,-2.08841E-02,-1.79873E+00, 1.45103E-03,
2.81769E-04,-1.44703E-03,-5.16394E-05, 8.47001E-02, 1.70147E-01,
5.72562E-03, 5.07493E-05, 4.36148E-03, 1.17863E-04, 4.74364E-03,
6.61278E-03, 4.34292E-05, 1.44373E-03, 2.41470E-05, 2.84426E-03,
8.56560E-04, 2.04028E-03, 0.00000E+00,-3.15994E+03,-2.46423E-03,
1.13843E-03, 4.20512E-04, 0.00000E+00,-9.77214E+01, 6.77794E-03,
5.27499E-03, 1.14936E-03, 0.00000E+00,-6.61311E-03,-1.84255E-02,
-1.96259E-02, 2.98618E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
6.44574E+02, 8.84668E-04, 5.05066E-04, 0.00000E+00, 4.02881E+03,
-1.89503E-03, 0.00000E+00, 0.00000E+00, 8.21407E-04, 2.06780E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-1.20410E-02,-3.63963E-03, 9.92070E-05,-1.15284E-04,-6.33059E-05,
-6.05545E-01, 8.34218E-03,-9.13036E+01, 3.71042E-04, 0.00000E+00,
4.19000E-04, 2.70928E-03, 3.31507E-03,-4.44508E-03,-4.96334E-03,
-1.60449E-03, 3.95119E-03, 2.48924E-03, 5.09815E-04, 4.05302E-03,
2.24076E-03, 0.00000E+00, 6.84256E-03, 4.66354E-04, 0.00000E+00,
-3.68328E-04, 0.00000E+00, 0.00000E+00,-1.46870E+02, 0.00000E+00,
0.00000E+00, 1.09501E-03, 4.65156E-04, 5.62583E-04, 3.21596E+00,
6.43168E-04, 3.14860E-03, 3.40738E-03, 1.78481E-03, 9.62532E-04,
5.58171E-04, 3.43731E+00,-2.33195E-01, 5.10289E-04, 0.00000E+00,
0.00000E+00,-9.25347E+04, 0.00000E+00,-1.99639E-03, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
};
int i, j;
for(i=0; i<150; i++)
pt[i] = temp_pt[i];
double temp_pd[9][150] = {
/* HE DENSITY */ {
1.09979E+00,-4.88060E-02,-1.97501E-01,-9.10280E-02,-6.96558E-03,
2.42136E-02, 3.91333E-01,-7.20068E-03,-3.22718E-02, 1.41508E+00,
1.68194E-01, 1.85282E-02, 1.09384E-01,-7.24282E+00, 0.00000E+00,
2.96377E-01,-4.97210E-02, 1.04114E+02,-8.61108E-02,-7.29177E-04,
1.48998E-06, 1.08629E-03, 0.00000E+00, 0.00000E+00, 8.31090E-02,
1.12818E-01,-5.75005E-02,-1.29919E-02,-1.78849E-02,-2.86343E-06,
0.00000E+00,-1.51187E+02,-6.65902E-03, 0.00000E+00,-2.02069E-03,
0.00000E+00, 0.00000E+00, 4.32264E-02,-2.80444E+01,-3.26789E-03,
2.47461E-03, 0.00000E+00, 0.00000E+00, 9.82100E-02, 1.22714E-01,
-3.96450E-02, 0.00000E+00,-2.76489E-03, 0.00000E+00, 1.87723E-03,
-8.09813E-03, 4.34428E-05,-7.70932E-03, 0.00000E+00,-2.28894E-03,
-5.69070E-03,-5.22193E-03, 6.00692E-03,-7.80434E+03,-3.48336E-03,
-6.38362E-03,-1.82190E-03, 0.00000E+00,-7.58976E+01,-2.17875E-02,
-1.72524E-02,-9.06287E-03, 0.00000E+00, 2.44725E-02, 8.66040E-02,
1.05712E-01, 3.02543E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-6.01364E+03,-5.64668E-03,-2.54157E-03, 0.00000E+00, 3.15611E+02,
-5.69158E-03, 0.00000E+00, 0.00000E+00,-4.47216E-03,-4.49523E-03,
4.64428E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
4.51236E-02, 2.46520E-02, 6.17794E-03, 0.00000E+00, 0.00000E+00,
-3.62944E-01,-4.80022E-02,-7.57230E+01,-1.99656E-03, 0.00000E+00,
-5.18780E-03,-1.73990E-02,-9.03485E-03, 7.48465E-03, 1.53267E-02,
1.06296E-02, 1.18655E-02, 2.55569E-03, 1.69020E-03, 3.51936E-02,
-1.81242E-02, 0.00000E+00,-1.00529E-01,-5.10574E-03, 0.00000E+00,
2.10228E-03, 0.00000E+00, 0.00000E+00,-1.73255E+02, 5.07833E-01,
-2.41408E-01, 8.75414E-03, 2.77527E-03,-8.90353E-05,-5.25148E+00,
-5.83899E-03,-2.09122E-02,-9.63530E-03, 9.77164E-03, 4.07051E-03,
2.53555E-04,-5.52875E+00,-3.55993E-01,-2.49231E-03, 0.00000E+00,
0.00000E+00, 2.86026E+01, 0.00000E+00, 3.42722E-04, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* O DENSITY */ {
1.02315E+00,-1.59710E-01,-1.06630E-01,-1.77074E-02,-4.42726E-03,
3.44803E-02, 4.45613E-02,-3.33751E-02,-5.73598E-02, 3.50360E-01,
6.33053E-02, 2.16221E-02, 5.42577E-02,-5.74193E+00, 0.00000E+00,
1.90891E-01,-1.39194E-02, 1.01102E+02, 8.16363E-02, 1.33717E-04,
6.54403E-06, 3.10295E-03, 0.00000E+00, 0.00000E+00, 5.38205E-02,
1.23910E-01,-1.39831E-02, 0.00000E+00, 0.00000E+00,-3.95915E-06,
0.00000E+00,-7.14651E-01,-5.01027E-03, 0.00000E+00,-3.24756E-03,
0.00000E+00, 0.00000E+00, 4.42173E-02,-1.31598E+01,-3.15626E-03,
1.24574E-03,-1.47626E-03,-1.55461E-03, 6.40682E-02, 1.34898E-01,
-2.42415E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 6.13666E-04,
-5.40373E-03, 2.61635E-05,-3.33012E-03, 0.00000E+00,-3.08101E-03,
-2.42679E-03,-3.36086E-03, 0.00000E+00,-1.18979E+03,-5.04738E-02,
-2.61547E-03,-1.03132E-03, 1.91583E-04,-8.38132E+01,-1.40517E-02,
-1.14167E-02,-4.08012E-03, 1.73522E-04,-1.39644E-02,-6.64128E-02,
-6.85152E-02,-1.34414E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
6.07916E+02,-4.12220E-03,-2.20996E-03, 0.00000E+00, 1.70277E+03,
-4.63015E-03, 0.00000E+00, 0.00000E+00,-2.25360E-03,-2.96204E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
3.92786E-02, 1.31186E-02,-1.78086E-03, 0.00000E+00, 0.00000E+00,
-3.90083E-01,-2.84741E-02,-7.78400E+01,-1.02601E-03, 0.00000E+00,
-7.26485E-04,-5.42181E-03,-5.59305E-03, 1.22825E-02, 1.23868E-02,
6.68835E-03,-1.03303E-02,-9.51903E-03, 2.70021E-04,-2.57084E-02,
-1.32430E-02, 0.00000E+00,-3.81000E-02,-3.16810E-03, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-9.05762E-04,-2.14590E-03,-1.17824E-03, 3.66732E+00,
-3.79729E-04,-6.13966E-03,-5.09082E-03,-1.96332E-03,-3.08280E-03,
-9.75222E-04, 4.03315E+00,-2.52710E-01, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* N2 DENSITY */ {
1.16112E+00, 0.00000E+00, 0.00000E+00, 3.33725E-02, 0.00000E+00,
3.48637E-02,-5.44368E-03, 0.00000E+00,-6.73940E-02, 1.74754E-01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 1.74712E+02, 0.00000E+00,
1.26733E-01, 0.00000E+00, 1.03154E+02, 5.52075E-02, 0.00000E+00,
0.00000E+00, 8.13525E-04, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-2.50482E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.48894E-03,
6.16053E-04,-5.79716E-04, 2.95482E-03, 8.47001E-02, 1.70147E-01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.47425E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* TLB */ {
9.44846E-01, 0.00000E+00, 0.00000E+00,-3.08617E-02, 0.00000E+00,
-2.44019E-02, 6.48607E-03, 0.00000E+00, 3.08181E-02, 4.59392E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 1.74712E+02, 0.00000E+00,
2.13260E-02, 0.00000E+00,-3.56958E+02, 0.00000E+00, 1.82278E-04,
0.00000E+00, 3.07472E-04, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 3.83054E-03, 0.00000E+00, 0.00000E+00,
-1.93065E-03,-1.45090E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.23493E-03, 1.36736E-03, 8.47001E-02, 1.70147E-01,
3.71469E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
5.10250E-03, 2.47425E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 3.68756E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* O2 DENSITY */ {
1.35580E+00, 1.44816E-01, 0.00000E+00, 6.07767E-02, 0.00000E+00,
2.94777E-02, 7.46900E-02, 0.00000E+00,-9.23822E-02, 8.57342E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 2.38636E+01, 0.00000E+00,
7.71653E-02, 0.00000E+00, 8.18751E+01, 1.87736E-02, 0.00000E+00,
0.00000E+00, 1.49667E-02, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-3.67874E+02, 5.48158E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 8.47001E-02, 1.70147E-01,
1.22631E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
8.17187E-03, 3.71617E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.10826E-03,
-3.13640E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-7.35742E-02,-5.00266E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 1.94965E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* AR DENSITY */ {
1.04761E+00, 2.00165E-01, 2.37697E-01, 3.68552E-02, 0.00000E+00,
3.57202E-02,-2.14075E-01, 0.00000E+00,-1.08018E-01,-3.73981E-01,
0.00000E+00, 3.10022E-02,-1.16305E-03,-2.07596E+01, 0.00000E+00,
8.64502E-02, 0.00000E+00, 9.74908E+01, 5.16707E-02, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 3.46193E+02, 1.34297E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-3.48509E-03,
-1.54689E-04, 0.00000E+00, 0.00000E+00, 8.47001E-02, 1.70147E-01,
1.47753E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1.89320E-02, 3.68181E-05, 1.32570E-02, 0.00000E+00, 0.00000E+00,
3.59719E-03, 7.44328E-03,-1.00023E-03,-6.50528E+03, 0.00000E+00,
1.03485E-02,-1.00983E-03,-4.06916E-03,-6.60864E+01,-1.71533E-02,
1.10605E-02, 1.20300E-02,-5.20034E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-2.62769E+03, 7.13755E-03, 4.17999E-03, 0.00000E+00, 1.25910E+04,
0.00000E+00, 0.00000E+00, 0.00000E+00,-2.23595E-03, 4.60217E-03,
5.71794E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-3.18353E-02,-2.35526E-02,-1.36189E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.03522E-02,-6.67837E+01,-1.09724E-03, 0.00000E+00,
-1.38821E-02, 1.60468E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.51574E-02,
-5.44470E-04, 0.00000E+00, 7.28224E-02, 6.59413E-02, 0.00000E+00,
-5.15692E-03, 0.00000E+00, 0.00000E+00,-3.70367E+03, 0.00000E+00,
0.00000E+00, 1.36131E-02, 5.38153E-03, 0.00000E+00, 4.76285E+00,
-1.75677E-02, 2.26301E-02, 0.00000E+00, 1.76631E-02, 4.77162E-03,
0.00000E+00, 5.39354E+00, 0.00000E+00,-7.51710E-03, 0.00000E+00,
0.00000E+00,-8.82736E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* H DENSITY */ {
1.26376E+00,-2.14304E-01,-1.49984E-01, 2.30404E-01, 2.98237E-02,
2.68673E-02, 2.96228E-01, 2.21900E-02,-2.07655E-02, 4.52506E-01,
1.20105E-01, 3.24420E-02, 4.24816E-02,-9.14313E+00, 0.00000E+00,
2.47178E-02,-2.88229E-02, 8.12805E+01, 5.10380E-02,-5.80611E-03,
2.51236E-05,-1.24083E-02, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01,-3.48190E-02, 0.00000E+00, 0.00000E+00, 2.89885E-05,
0.00000E+00, 1.53595E+02,-1.68604E-02, 0.00000E+00, 1.01015E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.84552E-04,
-1.22181E-03, 0.00000E+00, 0.00000E+00, 8.47001E-02, 1.70147E-01,
-1.04927E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,-5.91313E-03,
-2.30501E-02, 3.14758E-05, 0.00000E+00, 0.00000E+00, 1.26956E-02,
8.35489E-03, 3.10513E-04, 0.00000E+00, 3.42119E+03,-2.45017E-03,
-4.27154E-04, 5.45152E-04, 1.89896E-03, 2.89121E+01,-6.49973E-03,
-1.93855E-02,-1.48492E-02, 0.00000E+00,-5.10576E-02, 7.87306E-02,
9.51981E-02,-1.49422E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
2.65503E+02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 6.37110E-03, 3.24789E-04,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
6.14274E-02, 1.00376E-02,-8.41083E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.27099E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-3.94077E-03,-1.28601E-02,-7.97616E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-6.71465E-03,-1.69799E-03, 1.93772E-03, 3.81140E+00,
-7.79290E-03,-1.82589E-02,-1.25860E-02,-1.04311E-02,-3.02465E-03,
2.43063E-03, 3.63237E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* N DENSITY */ {
7.09557E+01,-3.26740E-01, 0.00000E+00,-5.16829E-01,-1.71664E-03,
9.09310E-02,-6.71500E-01,-1.47771E-01,-9.27471E-02,-2.30862E-01,
-1.56410E-01, 1.34455E-02,-1.19717E-01, 2.52151E+00, 0.00000E+00,
-2.41582E-01, 5.92939E-02, 4.39756E+00, 9.15280E-02, 4.41292E-03,
0.00000E+00, 8.66807E-03, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 9.74701E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 6.70217E+01,-1.31660E-03, 0.00000E+00,-1.65317E-02,
0.00000E+00, 0.00000E+00, 8.50247E-02, 2.77428E+01, 4.98658E-03,
6.15115E-03, 9.50156E-03,-2.12723E-02, 8.47001E-02, 1.70147E-01,
-2.38645E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.37380E-03,
-8.41918E-03, 2.80145E-05, 7.12383E-03, 0.00000E+00,-1.66209E-02,
1.03533E-04,-1.68898E-02, 0.00000E+00, 3.64526E+03, 0.00000E+00,
6.54077E-03, 3.69130E-04, 9.94419E-04, 8.42803E+01,-1.16124E-02,
-7.74414E-03,-1.68844E-03, 1.42809E-03,-1.92955E-03, 1.17225E-01,
-2.41512E-02, 1.50521E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
1.60261E+03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00,-3.54403E-04,-1.87270E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
2.76439E-02, 6.43207E-03,-3.54300E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00,-2.80221E-02, 8.11228E+01,-6.75255E-04, 0.00000E+00,
-1.05162E-02,-3.48292E-03,-6.97321E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.45546E-03,-1.31970E-02,-3.57751E-03,-1.09021E+00,
-1.50181E-02,-7.12841E-03,-6.64590E-03,-3.52610E-03,-1.87773E-02,
-2.22432E-03,-3.93895E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}, /* HOT O DENSITY */ {
6.04050E-02, 1.57034E+00, 2.99387E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-1.51018E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00,-8.61650E+00, 1.26454E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 5.50878E-03, 0.00000E+00, 0.00000E+00, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 6.23881E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 8.47001E-02, 1.70147E-01,
-9.45934E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
}};
for(i=0; i<9; i++) {
for(j=0; j<150; j++)
pd[i][j] = temp_pd[i][j];
}
/* S PARAM */
double temp_ps[150] = {
9.56827E-01, 6.20637E-02, 3.18433E-02, 0.00000E+00, 0.00000E+00,
3.94900E-02, 0.00000E+00, 0.00000E+00,-9.24882E-03,-7.94023E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 1.74712E+02, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.74677E-03, 0.00000E+00, 1.54951E-02, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00,-6.99007E-04, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 1.24362E-02,-5.28756E-03, 8.47001E-02, 1.70147E-01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.47425E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
};
for(i=0; i<150; i++)
ps[i] = temp_ps[i];
/* TURBO */
double temp_pdl[2][25] = {
{ 1.09930E+00, 3.90631E+00, 3.07165E+00, 9.86161E-01, 1.63536E+01,
4.63830E+00, 1.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 1.28840E+00, 3.10302E-02, 1.18339E-01 },
{ 1.00000E+00, 7.00000E-01, 1.15020E+00, 3.44689E+00, 1.28840E+00,
1.00000E+00, 1.08738E+00, 1.22947E+00, 1.10016E+00, 7.34129E-01,
1.15241E+00, 2.22784E+00, 7.95046E-01, 4.01612E+00, 4.47749E+00,
1.23435E+02,-7.60535E-02, 1.68986E-06, 7.44294E-01, 1.03604E+00,
1.72783E+02, 1.15020E+00, 3.44689E+00,-7.46230E-01, 9.49154E-01 }
};
for(i=0; i<2; i++) {
for(j=0; j<25; j++)
pdl[i][j] = temp_pdl[i][j];
}
/* LOWER BOUNDARY */ /*//MSISEMODIF pmt[50] -> pmt[10]*/
double temp_ptm[10] = {
1.04130E+03, 3.86000E+02, 1.95000E+02, 1.66728E+01, 2.13000E+02,
1.20000E+02, 2.40000E+02, 1.87000E+02,-2.00000E+00, 0.00000E+00
};
for(i=0; i<10; i++)
ptm[i] = temp_ptm[i];
double temp_pdm[8][10] = {
{ 2.45600E+07, 6.71072E-06, 1.00000E+02, 0.00000E+00, 1.10000E+02,
1.00000E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00 },
{ 8.59400E+10, 1.00000E+00, 1.05000E+02,-8.00000E+00, 1.10000E+02,
1.00000E+01, 9.00000E+01, 2.00000E+00, 0.00000E+00, 0.00000E+00 },
{ 2.81000E+11, 0.00000E+00, 1.05000E+02, 2.80000E+01, 2.89500E+01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00 },
{ 3.30000E+10, 2.68270E-01, 1.05000E+02, 1.00000E+00, 1.10000E+02,
1.00000E+01, 1.10000E+02,-1.00000E+01, 0.00000E+00, 0.00000E+00 },
{ 1.33000E+09, 1.19615E-02, 1.05000E+02, 0.00000E+00, 1.10000E+02,
1.00000E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00 },
{ 1.76100E+05, 1.00000E+00, 9.50000E+01,-8.00000E+00, 1.10000E+02,
1.00000E+01, 9.00000E+01, 2.00000E+00, 0.00000E+00, 0.00000E+00, },
{ 1.00000E+07, 1.00000E+00, 1.05000E+02,-8.00000E+00, 1.10000E+02,
1.00000E+01, 9.00000E+01, 2.00000E+00, 0.00000E+00, 0.00000E+00 },
{ 1.00000E+06, 1.00000E+00, 1.05000E+02,-8.00000E+00, 5.50000E+02,
7.60000E+01, 9.00000E+01, 2.00000E+00, 0.00000E+00, 4.00000E+03 }};
for(i=0; i<8; i++) {
for(j=0; j<10; j++)
pdm[i][j] = temp_pdm[i][j];
}
double temp_ptl[4][100] = {
/* TN1(2) */ {
1.00858E+00, 4.56011E-02,-2.22972E-02,-5.44388E-02, 5.23136E-04,
-1.88849E-02, 5.23707E-02,-9.43646E-03, 6.31707E-03,-7.80460E-02,
-4.88430E-02, 0.00000E+00, 0.00000E+00,-7.60250E+00, 0.00000E+00,
-1.44635E-02,-1.76843E-02,-1.21517E+02, 2.85647E-02, 0.00000E+00,
0.00000E+00, 6.31792E-04, 0.00000E+00, 5.77197E-03, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-8.90272E+03, 3.30611E-03, 3.02172E-03, 0.00000E+00,
-2.13673E-03,-3.20910E-04, 0.00000E+00, 0.00000E+00, 2.76034E-03,
2.82487E-03,-2.97592E-04,-4.21534E-03, 8.47001E-02, 1.70147E-01,
8.96456E-03, 0.00000E+00,-1.08596E-02, 0.00000E+00, 0.00000E+00,
5.57917E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 9.65405E-03, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN1(3) */ {
9.39664E-01, 8.56514E-02,-6.79989E-03, 2.65929E-02,-4.74283E-03,
1.21855E-02,-2.14905E-02, 6.49651E-03,-2.05477E-02,-4.24952E-02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 1.19148E+01, 0.00000E+00,
1.18777E-02,-7.28230E-02,-8.15965E+01, 1.73887E-02, 0.00000E+00,
0.00000E+00, 0.00000E+00,-1.44691E-02, 2.80259E-04, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.16584E+02, 3.18713E-03, 7.37479E-03, 0.00000E+00,
-2.55018E-03,-3.92806E-03, 0.00000E+00, 0.00000E+00,-2.89757E-03,
-1.33549E-03, 1.02661E-03, 3.53775E-04, 8.47001E-02, 1.70147E-01,
-9.17497E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
3.56082E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.00902E-02, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN1(4) */ {
9.85982E-01,-4.55435E-02, 1.21106E-02, 2.04127E-02,-2.40836E-03,
1.11383E-02,-4.51926E-02, 1.35074E-02,-6.54139E-03, 1.15275E-01,
1.28247E-01, 0.00000E+00, 0.00000E+00,-5.30705E+00, 0.00000E+00,
-3.79332E-02,-6.24741E-02, 7.71062E-01, 2.96315E-02, 0.00000E+00,
0.00000E+00, 0.00000E+00, 6.81051E-03,-4.34767E-03, 8.66784E-02,
1.58727E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 1.07003E+01,-2.76907E-03, 4.32474E-04, 0.00000E+00,
1.31497E-03,-6.47517E-04, 0.00000E+00,-2.20621E+01,-1.10804E-03,
-8.09338E-04, 4.18184E-04, 4.29650E-03, 8.47001E-02, 1.70147E-01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-4.04337E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-9.52550E-04,
8.56253E-04, 4.33114E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.21223E-03,
2.38694E-04, 9.15245E-04, 1.28385E-03, 8.67668E-04,-5.61425E-06,
1.04445E+00, 3.41112E+01, 0.00000E+00,-8.40704E-01,-2.39639E+02,
7.06668E-01,-2.05873E+01,-3.63696E-01, 2.39245E+01, 0.00000E+00,
-1.06657E-03,-7.67292E-04, 1.54534E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN1(5) TN2(1) */ {
1.00320E+00, 3.83501E-02,-2.38983E-03, 2.83950E-03, 4.20956E-03,
5.86619E-04, 2.19054E-02,-1.00946E-02,-3.50259E-03, 4.17392E-02,
-8.44404E-03, 0.00000E+00, 0.00000E+00, 4.96949E+00, 0.00000E+00,
-7.06478E-03,-1.46494E-02, 3.13258E+01,-1.86493E-03, 0.00000E+00,
-1.67499E-02, 0.00000E+00, 0.00000E+00, 5.12686E-04, 8.66784E-02,
1.58727E-01,-4.64167E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
4.37353E-03,-1.99069E+02, 0.00000E+00,-5.34884E-03, 0.00000E+00,
1.62458E-03, 2.93016E-03, 2.67926E-03, 5.90449E+02, 0.00000E+00,
0.00000E+00,-1.17266E-03,-3.58890E-04, 8.47001E-02, 1.70147E-01,
0.00000E+00, 0.00000E+00, 1.38673E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.60571E-03,
6.28078E-04, 5.05469E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-1.57829E-03,
-4.00855E-04, 5.04077E-05,-1.39001E-03,-2.33406E-03,-4.81197E-04,
1.46758E+00, 6.20332E+00, 0.00000E+00, 3.66476E-01,-6.19760E+01,
3.09198E-01,-1.98999E+01, 0.00000E+00,-3.29933E+02, 0.00000E+00,
-1.10080E-03,-9.39310E-05, 1.39638E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
} };
for(i=0; i<4; i++) {
for(j=0; j<100; j++)
ptl[i][j] = temp_ptl[i][j];
}
double temp_pma[10][100] = {
/* TN2(2) */ {
9.81637E-01,-1.41317E-03, 3.87323E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-3.58707E-02,
-8.63658E-03, 0.00000E+00, 0.00000E+00,-2.02226E+00, 0.00000E+00,
-8.69424E-03,-1.91397E-02, 8.76779E+01, 4.52188E-03, 0.00000E+00,
2.23760E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-7.07572E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
-4.11210E-03, 3.50060E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-8.36657E-03, 1.61347E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-1.45130E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.24152E-03,
6.43365E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.33255E-03,
2.42657E-03, 1.60666E-03,-1.85728E-03,-1.46874E-03,-4.79163E-06,
1.22464E+00, 3.53510E+01, 0.00000E+00, 4.49223E-01,-4.77466E+01,
4.70681E-01, 8.41861E+00,-2.88198E-01, 1.67854E+02, 0.00000E+00,
7.11493E-04, 6.05601E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN2(3) */ {
1.00422E+00,-7.11212E-03, 5.24480E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-5.28914E-02,
-2.41301E-02, 0.00000E+00, 0.00000E+00,-2.12219E+01,-1.03830E-02,
-3.28077E-03, 1.65727E-02, 1.68564E+00,-6.68154E-03, 0.00000E+00,
1.45155E-02, 0.00000E+00, 8.42365E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00,-4.34645E-03, 0.00000E+00, 0.00000E+00, 2.16780E-02,
0.00000E+00,-1.38459E+02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 7.04573E-03,-4.73204E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 1.08767E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-8.08279E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 5.21769E-04,
-2.27387E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 3.26769E-03,
3.16901E-03, 4.60316E-04,-1.01431E-04, 1.02131E-03, 9.96601E-04,
1.25707E+00, 2.50114E+01, 0.00000E+00, 4.24472E-01,-2.77655E+01,
3.44625E-01, 2.75412E+01, 0.00000E+00, 7.94251E+02, 0.00000E+00,
2.45835E-03, 1.38871E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN2(4) TN3(1) */ {
1.01890E+00,-2.46603E-02, 1.00078E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-6.70977E-02,
-4.02286E-02, 0.00000E+00, 0.00000E+00,-2.29466E+01,-7.47019E-03,
2.26580E-03, 2.63931E-02, 3.72625E+01,-6.39041E-03, 0.00000E+00,
9.58383E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.85291E-03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 1.39717E+02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 9.19771E-03,-3.69121E+02, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-1.57067E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-7.07265E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.92953E-03,
-2.77739E-03,-4.40092E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.47280E-03,
2.95035E-04,-1.81246E-03, 2.81945E-03, 4.27296E-03, 9.78863E-04,
1.40545E+00,-6.19173E+00, 0.00000E+00, 0.00000E+00,-7.93632E+01,
4.44643E-01,-4.03085E+02, 0.00000E+00, 1.15603E+01, 0.00000E+00,
2.25068E-03, 8.48557E-04,-2.98493E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN3(2) */ {
9.75801E-01, 3.80680E-02,-3.05198E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 3.85575E-02,
5.04057E-02, 0.00000E+00, 0.00000E+00,-1.76046E+02, 1.44594E-02,
-1.48297E-03,-3.68560E-03, 3.02185E+01,-3.23338E-03, 0.00000E+00,
1.53569E-02, 0.00000E+00,-1.15558E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 4.89620E-03, 0.00000E+00, 0.00000E+00,-1.00616E-02,
-8.21324E-03,-1.57757E+02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 6.63564E-03, 4.58410E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-2.51280E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 9.91215E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-8.73148E-04,
-1.29648E-03,-7.32026E-05, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-4.68110E-03,
-4.66003E-03,-1.31567E-03,-7.39390E-04, 6.32499E-04,-4.65588E-04,
-1.29785E+00,-1.57139E+02, 0.00000E+00, 2.58350E-01,-3.69453E+01,
4.10672E-01, 9.78196E+00,-1.52064E-01,-3.85084E+03, 0.00000E+00,
-8.52706E-04,-1.40945E-03,-7.26786E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN3(3) */ {
9.60722E-01, 7.03757E-02,-3.00266E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.22671E-02,
4.10423E-02, 0.00000E+00, 0.00000E+00,-1.63070E+02, 1.06073E-02,
5.40747E-04, 7.79481E-03, 1.44908E+02, 1.51484E-04, 0.00000E+00,
1.97547E-02, 0.00000E+00,-1.41844E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 5.77884E-03, 0.00000E+00, 0.00000E+00, 9.74319E-03,
0.00000E+00,-2.88015E+03, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-4.44902E-03,-2.92760E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 2.34419E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 5.36685E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-4.65325E-04,
-5.50628E-04, 3.31465E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.06179E-03,
-3.08575E-03,-7.93589E-04,-1.08629E-04, 5.95511E-04,-9.05050E-04,
1.18997E+00, 4.15924E+01, 0.00000E+00,-4.72064E-01,-9.47150E+02,
3.98723E-01, 1.98304E+01, 0.00000E+00, 3.73219E+03, 0.00000E+00,
-1.50040E-03,-1.14933E-03,-1.56769E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN3(4) */ {
1.03123E+00,-7.05124E-02, 8.71615E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-3.82621E-02,
-9.80975E-03, 0.00000E+00, 0.00000E+00, 2.89286E+01, 9.57341E-03,
0.00000E+00, 0.00000E+00, 8.66153E+01, 7.91938E-04, 0.00000E+00,
0.00000E+00, 0.00000E+00, 4.68917E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 7.86638E-03, 0.00000E+00, 0.00000E+00, 9.90827E-03,
0.00000E+00, 6.55573E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00,-4.00200E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 7.07457E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 5.72268E-03,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.04970E-04,
1.21560E-03,-8.05579E-06, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.49941E-03,
-4.57256E-04,-1.59311E-04, 2.96481E-04,-1.77318E-03,-6.37918E-04,
1.02395E+00, 1.28172E+01, 0.00000E+00, 1.49903E-01,-2.63818E+01,
0.00000E+00, 4.70628E+01,-2.22139E-01, 4.82292E-02, 0.00000E+00,
-8.67075E-04,-5.86479E-04, 5.32462E-04, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TN3(5) SURFACE TEMP TSL */ {
1.00828E+00,-9.10404E-02,-2.26549E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-2.32420E-02,
-9.08925E-03, 0.00000E+00, 0.00000E+00, 3.36105E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00,-1.24957E+01,-5.87939E-03, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.79765E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 2.01237E+03, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-1.75553E-02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 3.29699E-03,
1.26659E-03, 2.68402E-04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 1.17894E-03,
1.48746E-03, 1.06478E-04, 1.34743E-04,-2.20939E-03,-6.23523E-04,
6.36539E-01, 1.13621E+01, 0.00000E+00,-3.93777E-01, 2.38687E+03,
0.00000E+00, 6.61865E+02,-1.21434E-01, 9.27608E+00, 0.00000E+00,
1.68478E-04, 1.24892E-03, 1.71345E-03, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TGN3(2) SURFACE GRAD TSLG */ {
1.57293E+00,-6.78400E-01, 6.47500E-01, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-7.62974E-02,
-3.60423E-01, 0.00000E+00, 0.00000E+00, 1.28358E+02, 0.00000E+00,
0.00000E+00, 0.00000E+00, 4.68038E+01, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.67898E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.90994E+04, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 3.15706E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TGN2(1) TGN1(2) */ {
8.60028E-01, 3.77052E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-1.17570E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 7.77757E-03, 0.00000E+00,
0.00000E+00, 0.00000E+00, 1.01024E+02, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 6.54251E+02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,-1.56959E-02,
1.91001E-02, 3.15971E-02, 1.00982E-02,-6.71565E-03, 2.57693E-03,
1.38692E+00, 2.82132E-01, 0.00000E+00, 0.00000E+00, 3.81511E+02,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
}, /* TGN3(1) TGN2(2) */ {
1.06029E+00,-5.25231E-02, 3.73034E-01, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 3.31072E-02,
-3.88409E-01, 0.00000E+00, 0.00000E+00,-1.65295E+02,-2.13801E-01,
-4.38916E-02,-3.22716E-01,-8.82393E+01, 1.18458E-01, 0.00000E+00,
-4.35863E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00,-1.19782E-01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 2.62229E+01, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00,-5.37443E+01, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00,-4.55788E-01, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 3.84009E-02,
3.96733E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 5.05494E-02,
7.39617E-02, 1.92200E-02,-8.46151E-03,-1.34244E-02, 1.96338E-02,
1.50421E+00, 1.88368E+01, 0.00000E+00, 0.00000E+00,-5.13114E+01,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
5.11923E-02, 3.61225E-02, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 2.00000E+00
} };
for(i=0; i<10; i++) {
for(j=0; j<100; j++)
pma[i][j] = temp_pma[i][j];
}
/* SEMIANNUAL MULT SAM */
double temp_sam[100] = {
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00,
0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00
};
for(i =0; i<100; i++)
sam[i] = temp_sam[i];
/* MIDDLE ATMOSPHERE AVERAGES */
double temp_pavgm[10] = {
2.61000E+02, 2.64000E+02, 2.29000E+02, 2.17000E+02, 2.17000E+02,
2.23000E+02, 2.86760E+02,-2.93940E+00, 2.50000E+00, 0.00000E+00 };
for(i=0; i<10; i++)
pavgm[i] = temp_pavgm[i];
}
/* ------------------------------------------------------------------- */
/* ------------------------------ TSELEC ----------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::tselec(struct nrlmsise_flags *flags) {
int i;
for (i=0;i<24;i++) {
if (i!=9) {
if (flags->switches[i]==1)
flags->sw[i]=1;
else
flags->sw[i]=0;
if (flags->switches[i]>0)
flags->swc[i]=1;
else
flags->swc[i]=0;
} else {
flags->sw[i]=flags->switches[i];
flags->swc[i]=flags->switches[i];
}
}
}
/* ------------------------------------------------------------------- */
/* ------------------------------ GLATF ------------------------------ */
/* ------------------------------------------------------------------- */
void MSISEtool::glatf(double lat, double *gv, double *reff) {
double dgtr = 1.74533E-2;
double c2;
c2 = cos(2.0*dgtr*lat);
*gv = 980.616 * (1.0 - 0.0026373 * c2);
*reff = 2.0 * (*gv) / (3.085462E-6 + 2.27E-9 * c2) * 1.0E-5;
}
/* ------------------------------------------------------------------- */
/* ------------------------------ CCOR ------------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::ccor(double alt, double r, double h1, double zh) {
/* CHEMISTRY/DISSOCIATION CORRECTION FOR MSIS MODELS
* ALT - altitude
* R - target ratio
* H1 - transition scale length
* ZH - altitude of 1/2 R
*/
double e;
double ex;
e = (alt - zh) / h1;
if (e>70)
return exp(0);
if (e<-70)
return exp(r);
ex = exp(e);
e = r / (1.0 + ex);
return exp(e);
}
/* ------------------------------------------------------------------- */
/* ------------------------------ CCOR ------------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::ccor2(double alt, double r, double h1, double zh, double h2) {
/* CHEMISTRY/DISSOCIATION CORRECTION FOR MSIS MODELS
* ALT - altitude
* R - target ratio
* H1 - transition scale length
* ZH - altitude of 1/2 R
* H2 - transition scale length #2 ?
*/
double e1, e2;
double ex1, ex2;
double ccor2v;
e1 = (alt - zh) / h1;
e2 = (alt - zh) / h2;
if ((e1 > 70) || (e2 > 70))
return exp(0);
if ((e1 < -70) && (e2 < -70))
return exp(r);
ex1 = exp(e1);
ex2 = exp(e2);
ccor2v = r / (1.0 + 0.5 * (ex1 + ex2));
return exp(ccor2v);
}
/* ------------------------------------------------------------------- */
/* ------------------------------- SCALH ----------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::scalh(double alt, double xm, double temp) {
double g;
double rgas=831.4;
g = gsurf / (pow((1.0 + alt/re),2.0));
g = rgas * temp / (g * xm);
return g;
}
/* ------------------------------------------------------------------- */
/* -------------------------------- DNET ----------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::dnet(double dd, double dm, double zhm, double xmm, double xm) {
/* TURBOPAUSE CORRECTION FOR MSIS MODELS
* Root mean density
* DD - diffusive density
* DM - full mixed density
* ZHM - transition scale length
* XMM - full mixed molecular weight
* XM - species molecular weight
* DNET - combined density
*/
double a;
double ylog;
a = zhm / (xmm-xm);
if (!((dm>0) && (dd>0))) {
printf("dnet log error %e %e %en",dm,dd,xm);
if ((dd==0) && (dm==0))
dd=1;
if (dm==0)
return dd;
if (dd==0)
return dm;
}
ylog = a * log(dm/dd);
if (ylog<-10)
return dd;
if (ylog>10)
return dm;
a = dd*pow((1.0 + exp(ylog)),(1.0/a));
return a;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- SPLINI ---------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::splini(double *xa, double *ya, double *y2a, int n, double x, double *y) {
/* INTEGRATE CUBIC SPLINE FUNCTION FROM XA(1) TO X
* XA,YA: ARRAYS OF TABULATED FUNCTION IN ASCENDING ORDER BY X
* Y2A: ARRAY OF SECOND DERIVATIVES
* N: SIZE OF ARRAYS XA,YA,Y2A
* X: ABSCISSA ENDPOINT FOR INTEGRATION
* Y: OUTPUT VALUE
*/
double yi=0;
int klo=0;
int khi=1;
double xx, h, a, b, a2, b2;
while ((x>xa[klo]) && (khi<n)) {
xx=x;
if (khi<(n-1)) {
if (x<xa[khi])
xx=x;
else
xx=xa[khi];
}
h = xa[khi] - xa[klo];
a = (xa[khi] - xx)/h;
b = (xx - xa[klo])/h;
a2 = a*a;
b2 = b*b;
yi += ((1.0 - a2) * ya[klo] / 2.0 + b2 * ya[khi] / 2.0 + ((-(1.0+a2*a2)/4.0 + a2/2.0) * y2a[klo] + (b2*b2/4.0 - b2/2.0) * y2a[khi]) * h * h / 6.0) * h;
klo++;
khi++;
}
*y = yi;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- SPLINT ---------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::splint(double *xa, double *ya, double *y2a, int n, double x, double *y) {
/* CALCULATE CUBIC SPLINE INTERP VALUE
* ADAPTED FROM NUMERICAL RECIPES BY PRESS ET AL.
* XA,YA: ARRAYS OF TABULATED FUNCTION IN ASCENDING ORDER BY X
* Y2A: ARRAY OF SECOND DERIVATIVES
* N: SIZE OF ARRAYS XA,YA,Y2A
* X: ABSCISSA FOR INTERPOLATION
* Y: OUTPUT VALUE
*/
int klo=0;
int khi=n-1;
int k;
double h;
double a, b, yi;
while ((khi-klo)>1) {
k=(khi+klo)/2;
if (xa[k]>x)
khi=k;
else
klo=k;
}
h = xa[khi] - xa[klo];
if (h==0.0)
printf("bad XA input to splint");
a = (xa[khi] - x)/h;
b = (x - xa[klo])/h;
yi = a * ya[klo] + b * ya[khi] + ((a*a*a - a) * y2a[klo] + (b*b*b - b) * y2a[khi]) * h * h/6.0;
*y = yi;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- SPLINE ---------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::spline(double *x, double *y, int n, double yp1, double ypn, double *y2) {
/* CALCULATE 2ND DERIVATIVES OF CUBIC SPLINE INTERP FUNCTION
* ADAPTED FROM NUMERICAL RECIPES BY PRESS ET AL
* X,Y: ARRAYS OF TABULATED FUNCTION IN ASCENDING ORDER BY X
* N: SIZE OF ARRAYS X,Y
* YP1,YPN: SPECIFIED DERIVATIVES AT X[0] AND X[N-1]; VALUES
* >= 1E30 SIGNAL SIGNAL SECOND DERIVATIVE ZERO
* Y2: OUTPUT ARRAY OF SECOND DERIVATIVES
*/
double *u;
double sig, p, qn, un;
int i, k;
//u=malloc(sizeof(double)*n); //MSISEMODIF
u = new double[n];
if (u==NULL) {
printf("Out Of Memory in spline - ERROR");
return;
}
if (yp1>0.99E30) {
y2[0]=0;
u[0]=0;
} else {
y2[0]=-0.5;
u[0]=(3.0/(x[1]-x[0]))*((y[1]-y[0])/(x[1]-x[0])-yp1);
}
for (i=1;i<(n-1);i++) {
sig = (x[i]-x[i-1])/(x[i+1] - x[i-1]);
p = sig * y2[i-1] + 2.0;
y2[i] = (sig - 1.0) / p;
u[i] = (6.0 * ((y[i+1] - y[i])/(x[i+1] - x[i]) -(y[i] - y[i-1]) / (x[i] - x[i-1]))/(x[i+1] - x[i-1]) - sig * u[i-1])/p;
}
if (ypn>0.99E30) {
qn = 0;
un = 0;
} else {
qn = 0.5;
un = (3.0 / (x[n-1] - x[n-2])) * (ypn - (y[n-1] - y[n-2])/(x[n-1] - x[n-2]));
}
y2[n-1] = (un - qn * u[n-2]) / (qn * y2[n-2] + 1.0);
for (k=n-2;k>=0;k--)
y2[k] = y2[k] * y2[k+1] + u[k];
//free(u); //MSISEMODIF
if (u) delete[] u;
u = 0;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- DENSM ----------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::zeta(double zz, double zl) {
return ((zz-zl)*(re+zl)/(re+zz));
}
double MSISEtool::densm(double alt, double d0, double xm, double *tz, int mn3, double *zn3, double *tn3, double *tgn3, int mn2, double *zn2, double *tn2, double *tgn2) {
/* Calculate Temperature and Density Profiles for lower atmos. */
double xs[10], ys[10], y2out[10];
double rgas = 831.4;
double z, z1, z2, t1, t2, zg, zgdif;
double yd1, yd2;
double x, y, yi;
double expl, gamm, glb;
double densm_tmp;
int mn;
int k;
densm_tmp=d0;
if (alt>zn2[0]) {
if (xm==0.0)
return *tz;
else
return d0;
}
/* STRATOSPHERE/MESOSPHERE TEMPERATURE */
if (alt>zn2[mn2-1])
z=alt;
else
z=zn2[mn2-1];
mn=mn2;
z1=zn2[0];
z2=zn2[mn-1];
t1=tn2[0];
t2=tn2[mn-1];
zg = zeta(z, z1);
zgdif = zeta(z2, z1);
/* set up spline nodes */
for (k=0;k<mn;k++) {
xs[k]=zeta(zn2[k],z1)/zgdif;
ys[k]=1.0 / tn2[k];
}
yd1=-tgn2[0] / (t1*t1) * zgdif;
yd2=-tgn2[1] / (t2*t2) * zgdif * (pow(((re+z2)/(re+z1)),2.0));
/* calculate spline coefficients */
spline(xs, ys, mn, yd1, yd2, y2out);
x = zg/zgdif;
splint(xs, ys, y2out, mn, x, &y);
/* temperature at altitude */
*tz = 1.0 / y;
if (xm!=0.0) {
/* calaculate stratosphere / mesospehere density */
glb = gsurf / (pow((1.0 + z1/re),2.0));
gamm = xm * glb * zgdif / rgas;
/* Integrate temperature profile */
splini(xs, ys, y2out, mn, x, &yi);
expl=gamm*yi;
if (expl>50.0)
expl=50.0;
/* Density at altitude */
densm_tmp = densm_tmp * (t1 / *tz) * exp(-expl);
}
if (alt>zn3[0]) {
if (xm==0.0)
return *tz;
else
return densm_tmp;
}
/* troposhere / stratosphere temperature */
z = alt;
mn = mn3;
z1=zn3[0];
z2=zn3[mn-1];
t1=tn3[0];
t2=tn3[mn-1];
zg=zeta(z,z1);
zgdif=zeta(z2,z1);
/* set up spline nodes */
for (k=0;k<mn;k++) {
xs[k] = zeta(zn3[k],z1) / zgdif;
ys[k] = 1.0 / tn3[k];
}
yd1=-tgn3[0] / (t1*t1) * zgdif;
yd2=-tgn3[1] / (t2*t2) * zgdif * (pow(((re+z2)/(re+z1)),2.0));
/* calculate spline coefficients */
spline(xs, ys, mn, yd1, yd2, y2out);
x = zg/zgdif;
splint(xs, ys, y2out, mn, x, &y);
/* temperature at altitude */
*tz = 1.0 / y;
if (xm!=0.0) {
/* calaculate tropospheric / stratosphere density */
glb = gsurf / (pow((1.0 + z1/re),2.0));
gamm = xm * glb * zgdif / rgas;
/* Integrate temperature profile */
splini(xs, ys, y2out, mn, x, &yi);
expl=gamm*yi;
if (expl>50.0)
expl=50.0;
/* Density at altitude */
densm_tmp = densm_tmp * (t1 / *tz) * exp(-expl);
}
if (xm==0.0)
return *tz;
else
return densm_tmp;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- DENSU ----------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::densu(double alt, double dlb, double tinf, double tlb, double xm, double alpha, double *tz, double zlb, double s2, int mn1, double *zn1, double *tn1, double *tgn1) {
/* Calculate Temperature and Density Profiles for MSIS models
* New lower thermo polynomial
*/
double yd2, yd1, x, y;
double rgas=831.4;
double densu_temp=1.0;
double za, z, zg2, tt, ta;
double dta, z1, z2, t1, t2, zg, zgdif;
int mn;
int k;
double glb;
double expl;
double yi;
double densa;
double gamma, gamm;
double xs[5], ys[5], y2out[5];
/* joining altitudes of Bates and spline */
za=zn1[0];
if (alt>za)
z=alt;
else
z=za;
/* geopotential altitude difference from ZLB */
zg2 = zeta(z, zlb);
// zg2 = ((z-zlb)*(re+zlb)/(re+z));
/* Bates temperature */
tt = tinf - (tinf - tlb) * exp(-s2*zg2);
ta = tt;
*tz = tt;
densu_temp = *tz;
if (alt<za) {
/* calculate temperature below ZA
* temperature gradient at ZA from Bates profile */
dta = (tinf - ta) * s2 * pow(((re+zlb)/(re+za)),2.0);
tgn1[0]=dta;
tn1[0]=ta;
if (alt>zn1[mn1-1])
z=alt;
else
z=zn1[mn1-1];
mn=mn1;
z1=zn1[0];
z2=zn1[mn-1];
t1=tn1[0];
t2=tn1[mn-1];
/* geopotental difference from z1 */
// zg = ((z-z1)*(re+z1)/(re+z));
zg = zeta (z, z1);
// zgdif = ((z2-z1)*(re+z1)/(re+z2));
zgdif = zeta(z2, z1);
/* set up spline nodes */
for (k=0;k<mn;k++) {
// xs[k] = ((zn1[k]-z1)*(re+z1)/(re+zn1[k]));
xs[k] = zeta(zn1[k], z1) / zgdif;
ys[k] = 1.0 / tn1[k];
}
/* end node derivatives */
yd1 = -tgn1[0] / (t1*t1) * zgdif;
yd2 = -tgn1[1] / (t2*t2) * zgdif * pow(((re+z2)/(re+z1)),2.0);
/* calculate spline coefficients */
spline(xs, ys, mn, yd1, yd2, y2out);
x = zg / zgdif;
splint(xs, ys, y2out, mn, x, &y);
/* temperature at altitude */
*tz = 1.0 / y;
densu_temp = *tz;
}
if (xm==0)
return densu_temp;
/* calculate density above za */
glb = gsurf / pow((1.0 + zlb/re),2.0);
gamma = xm * glb / (s2 * rgas * tinf);
expl = exp(-s2 * gamma * zg2);
if (expl>50.0)
expl=50.0;
if (tt<=0)
expl=50.0;
/* density at altitude */
densa = dlb * pow((tlb/tt),((1.0+alpha+gamma))) * expl;
densu_temp=densa;
if (alt>=za)
return densu_temp;
/* calculate density below za */
glb = gsurf / pow((1.0 + z1/re),2.0);
gamm = xm * glb * zgdif / rgas;
/* integrate spline temperatures */
splini (xs, ys, y2out, mn, x, &yi);
expl = gamm * yi;
if (expl>50.0)
expl=50.0;
if (*tz<=0)
expl=50.0;
/* density at altitude */
densu_temp = densu_temp * pow ((t1 / *tz),(1.0 + alpha)) * exp(-expl);
return densu_temp;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- GLOBE7 ---------------------------- */
/* ------------------------------------------------------------------- */
/* 3hr Magnetic activity functions */
/* Eq. A24d */
double MSISEtool::g0(double a, double *p) {
return (a - 4.0 + (p[25] - 1.0) * (a - 4.0 + (exp(-sqrt(p[24]*p[24]) * (a - 4.0)) - 1.0) / sqrt(p[24]*p[24])));
}
/* Eq. A24c */
double MSISEtool::sumex(double ex) {
return (1.0 + (1.0 - pow(ex,19.0)) / (1.0 - ex) * pow(ex,0.5));
}
/* Eq. A24a */
double MSISEtool::sg0(double ex, double *p, double *ap) {
return (g0(ap[1],p) + (g0(ap[2],p)*ex + g0(ap[3],p)*ex*ex +
g0(ap[4],p)*pow(ex,3.0) + (g0(ap[5],p)*pow(ex,4.0) +
g0(ap[6],p)*pow(ex,12.0))*(1.0-pow(ex,8.0))/(1.0-ex)))/sumex(ex);
}
double MSISEtool::globe7(double *p, struct nrlmsise_input *input, struct nrlmsise_flags *flags) {
/* CALCULATE G(L) FUNCTION
* Upper Thermosphere Parameters */
double t[15];
int i,j;
int sw9=1;
double apd;
double xlong;
double tloc;
double c, s, c2, c4, s2;
double sr = 7.2722E-5;
double dgtr = 1.74533E-2;
double dr = 1.72142E-2;
double hr = 0.2618;
double cd32, cd18, cd14, cd39;
double p32, p18, p14, p39;
double df, dfa;
double f1, f2;
double tinf;
struct ap_array *ap;
tloc=input->lst;
for (j=0;j<14;j++)
t[j]=0;
if (flags->sw[9]>0)
sw9=1;
else if (flags->sw[9]<0)
sw9=-1;
xlong = input->g_long;
/* calculate legendre polynomials */
c = sin(input->g_lat * dgtr);
s = cos(input->g_lat * dgtr);
c2 = c*c;
c4 = c2*c2;
s2 = s*s;
plg[0][1] = c;
plg[0][2] = 0.5*(3.0*c2 -1.0);
plg[0][3] = 0.5*(5.0*c*c2-3.0*c);
plg[0][4] = (35.0*c4 - 30.0*c2 + 3.0)/8.0;
plg[0][5] = (63.0*c2*c2*c - 70.0*c2*c + 15.0*c)/8.0;
plg[0][6] = (11.0*c*plg[0][5] - 5.0*plg[0][4])/6.0;
/* plg[0][7] = (13.0*c*plg[0][6] - 6.0*plg[0][5])/7.0; */
plg[1][1] = s;
plg[1][2] = 3.0*c*s;
plg[1][3] = 1.5*(5.0*c2-1.0)*s;
plg[1][4] = 2.5*(7.0*c2*c-3.0*c)*s;
plg[1][5] = 1.875*(21.0*c4 - 14.0*c2 +1.0)*s;
plg[1][6] = (11.0*c*plg[1][5]-6.0*plg[1][4])/5.0;
/* plg[1][7] = (13.0*c*plg[1][6]-7.0*plg[1][5])/6.0; */
/* plg[1][8] = (15.0*c*plg[1][7]-8.0*plg[1][6])/7.0; */
plg[2][2] = 3.0*s2;
plg[2][3] = 15.0*s2*c;
plg[2][4] = 7.5*(7.0*c2 -1.0)*s2;
plg[2][5] = 3.0*c*plg[2][4]-2.0*plg[2][3];
plg[2][6] =(11.0*c*plg[2][5]-7.0*plg[2][4])/4.0;
plg[2][7] =(13.0*c*plg[2][6]-8.0*plg[2][5])/5.0;
plg[3][3] = 15.0*s2*s;
plg[3][4] = 105.0*s2*s*c;
plg[3][5] =(9.0*c*plg[3][4]-7.*plg[3][3])/2.0;
plg[3][6] =(11.0*c*plg[3][5]-8.*plg[3][4])/3.0;
if (!(((flags->sw[7]==0)&&(flags->sw[8]==0))&&(flags->sw[14]==0))) {
stloc = sin(hr*tloc);
ctloc = cos(hr*tloc);
s2tloc = sin(2.0*hr*tloc);
c2tloc = cos(2.0*hr*tloc);
s3tloc = sin(3.0*hr*tloc);
c3tloc = cos(3.0*hr*tloc);
}
cd32 = cos(dr*(input->doy-p[31]));
cd18 = cos(2.0*dr*(input->doy-p[17]));
cd14 = cos(dr*(input->doy-p[13]));
cd39 = cos(2.0*dr*(input->doy-p[38]));
p32=p[31];
p18=p[17];
p14=p[13];
p39=p[38];
/* F10.7 EFFECT */
df = input->f107 - input->f107A;
dfa = input->f107A - 150.0;
t[0] = p[19]*df*(1.0+p[59]*dfa) + p[20]*df*df + p[21]*dfa + p[29]*pow(dfa,2.0);
f1 = 1.0 + (p[47]*dfa +p[19]*df+p[20]*df*df)*flags->swc[1];
f2 = 1.0 + (p[49]*dfa+p[19]*df+p[20]*df*df)*flags->swc[1];
/* TIME INDEPENDENT */
t[1] = (p[1]*plg[0][2]+ p[2]*plg[0][4]+p[22]*plg[0][6]) +
(p[14]*plg[0][2])*dfa*flags->swc[1] +p[26]*plg[0][1];
/* SYMMETRICAL ANNUAL */
t[2] = p[18]*cd32;
/* SYMMETRICAL SEMIANNUAL */
t[3] = (p[15]+p[16]*plg[0][2])*cd18;
/* ASYMMETRICAL ANNUAL */
t[4] = f1*(p[9]*plg[0][1]+p[10]*plg[0][3])*cd14;
/* ASYMMETRICAL SEMIANNUAL */
t[5] = p[37]*plg[0][1]*cd39;
/* DIURNAL */
if (flags->sw[7]) {
double t71, t72;
t71 = (p[11]*plg[1][2])*cd14*flags->swc[5];
t72 = (p[12]*plg[1][2])*cd14*flags->swc[5];
t[6] = f2*((p[3]*plg[1][1] + p[4]*plg[1][3] + p[27]*plg[1][5] + t71) *
ctloc + (p[6]*plg[1][1] + p[7]*plg[1][3] + p[28]*plg[1][5]
+ t72)*stloc);
}
/* SEMIDIURNAL */
if (flags->sw[8]) {
double t81, t82;
t81 = (p[23]*plg[2][3]+p[35]*plg[2][5])*cd14*flags->swc[5];
t82 = (p[33]*plg[2][3]+p[36]*plg[2][5])*cd14*flags->swc[5];
t[7] = f2*((p[5]*plg[2][2]+ p[41]*plg[2][4] + t81)*c2tloc +(p[8]*plg[2][2] + p[42]*plg[2][4] + t82)*s2tloc);
}
/* TERDIURNAL */
if (flags->sw[14]) {
t[13] = f2 * ((p[39]*plg[3][3]+(p[93]*plg[3][4]+p[46]*plg[3][6])*cd14*flags->swc[5])* s3tloc +(p[40]*plg[3][3]+(p[94]*plg[3][4]+p[48]*plg[3][6])*cd14*flags->swc[5])* c3tloc);
}
/* magnetic activity based on daily ap */
if (flags->sw[9]==-1) {
ap = input->ap_a;
if (p[51]!=0) {
double exp1;
exp1 = exp(-10800.0*sqrt(p[51]*p[51])/(1.0+p[138]*(45.0-sqrt(input->g_lat*input->g_lat))));
if (exp1>0.99999)
exp1=0.99999;
if (p[24]<1.0E-4)
p[24]=1.0E-4;
apt[0]=sg0(exp1,p,ap->a);
/* apt[1]=sg2(exp1,p,ap->a);
apt[2]=sg0(exp2,p,ap->a);
apt[3]=sg2(exp2,p,ap->a);
*/
if (flags->sw[9]) {
t[8] = apt[0]*(p[50]+p[96]*plg[0][2]+p[54]*plg[0][4]+
(p[125]*plg[0][1]+p[126]*plg[0][3]+p[127]*plg[0][5])*cd14*flags->swc[5]+
(p[128]*plg[1][1]+p[129]*plg[1][3]+p[130]*plg[1][5])*flags->swc[7]*
cos(hr*(tloc-p[131])));
}
}
} else {
double p44, p45;
apd=input->ap-4.0;
p44=p[43];
p45=p[44];
if (p44<0)
p44 = 1.0E-5;
apdf = apd + (p45-1.0)*(apd + (exp(-p44 * apd) - 1.0)/p44);
if (flags->sw[9]) {
t[8]=apdf*(p[32]+p[45]*plg[0][2]+p[34]*plg[0][4]+
(p[100]*plg[0][1]+p[101]*plg[0][3]+p[102]*plg[0][5])*cd14*flags->swc[5]+
(p[121]*plg[1][1]+p[122]*plg[1][3]+p[123]*plg[1][5])*flags->swc[7]*
cos(hr*(tloc-p[124])));
}
}
if ((flags->sw[10])&&(input->g_long>-1000.0)) {
/* longitudinal */
if (flags->sw[11]) {
t[10] = (1.0 + p[80]*dfa*flags->swc[1])*
((p[64]*plg[1][2]+p[65]*plg[1][4]+p[66]*plg[1][6]
+p[103]*plg[1][1]+p[104]*plg[1][3]+p[105]*plg[1][5]
+flags->swc[5]*(p[109]*plg[1][1]+p[110]*plg[1][3]+p[111]*plg[1][5])*cd14)*
cos(dgtr*input->g_long)
+(p[90]*plg[1][2]+p[91]*plg[1][4]+p[92]*plg[1][6]
+p[106]*plg[1][1]+p[107]*plg[1][3]+p[108]*plg[1][5]
+flags->swc[5]*(p[112]*plg[1][1]+p[113]*plg[1][3]+p[114]*plg[1][5])*cd14)*
sin(dgtr*input->g_long));
}
/* ut and mixed ut, longitude */
if (flags->sw[12]){
t[11]=(1.0+p[95]*plg[0][1])*(1.0+p[81]*dfa*flags->swc[1])*
(1.0+p[119]*plg[0][1]*flags->swc[5]*cd14)*
((p[68]*plg[0][1]+p[69]*plg[0][3]+p[70]*plg[0][5])*
cos(sr*(input->sec-p[71])));
t[11]+=flags->swc[11]*
(p[76]*plg[2][3]+p[77]*plg[2][5]+p[78]*plg[2][7])*
cos(sr*(input->sec-p[79])+2.0*dgtr*input->g_long)*(1.0+p[137]*dfa*flags->swc[1]);
}
/* ut, longitude magnetic activity */
if (flags->sw[13]) {
if (flags->sw[9]==-1) {
if (p[51]) {
t[12]=apt[0]*flags->swc[11]*(1.+p[132]*plg[0][1])*
((p[52]*plg[1][2]+p[98]*plg[1][4]+p[67]*plg[1][6])*
cos(dgtr*(input->g_long-p[97])))
+apt[0]*flags->swc[11]*flags->swc[5]*
(p[133]*plg[1][1]+p[134]*plg[1][3]+p[135]*plg[1][5])*
cd14*cos(dgtr*(input->g_long-p[136]))
+apt[0]*flags->swc[12]*
(p[55]*plg[0][1]+p[56]*plg[0][3]+p[57]*plg[0][5])*
cos(sr*(input->sec-p[58]));
}
} else {
t[12] = apdf*flags->swc[11]*(1.0+p[120]*plg[0][1])*
((p[60]*plg[1][2]+p[61]*plg[1][4]+p[62]*plg[1][6])*
cos(dgtr*(input->g_long-p[63])))
+apdf*flags->swc[11]*flags->swc[5]*
(p[115]*plg[1][1]+p[116]*plg[1][3]+p[117]*plg[1][5])*
cd14*cos(dgtr*(input->g_long-p[118]))
+ apdf*flags->swc[12]*
(p[83]*plg[0][1]+p[84]*plg[0][3]+p[85]*plg[0][5])*
cos(sr*(input->sec-p[75]));
}
}
}
/* parms not used: 82, 89, 99, 139-149 */
tinf = p[30];
for (i=0;i<14;i++)
tinf = tinf + fabs(flags->sw[i+1])*t[i]; /*//MSISEMODIF fabs*/
return tinf;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- GLOB7S ---------------------------- */
/* ------------------------------------------------------------------- */
double MSISEtool::glob7s(double *p, struct nrlmsise_input *input, struct nrlmsise_flags *flags) {
/* VERSION OF GLOBE FOR LOWER ATMOSPHERE 10/26/99
*/
double pset=2.0;
double t[14];
double tt;
double cd32, cd18, cd14, cd39;
double p32, p18, p14, p39;
int i,j;
double dr=1.72142E-2;
double dgtr=1.74533E-2;
/* confirm parameter set */
if (p[99]==0)
p[99]=pset;
if (p[99]!=pset) {
printf("Wrong parameter set for glob7sn");
return -1;
}
for (j=0;j<14;j++)
t[j]=0.0;
cd32 = cos(dr*(input->doy-p[31]));
cd18 = cos(2.0*dr*(input->doy-p[17]));
cd14 = cos(dr*(input->doy-p[13]));
cd39 = cos(2.0*dr*(input->doy-p[38]));
p32=p[31];
p18=p[17];
p14=p[13];
p39=p[38];
/* F10.7 */
t[0] = p[21]*dfa;
/* time independent */
t[1]=p[1]*plg[0][2] + p[2]*plg[0][4] + p[22]*plg[0][6] + p[26]*plg[0][1] + p[14]*plg[0][3] + p[59]*plg[0][5];
/* SYMMETRICAL ANNUAL */
t[2]=(p[18]+p[47]*plg[0][2]+p[29]*plg[0][4])*cd32;
/* SYMMETRICAL SEMIANNUAL */
t[3]=(p[15]+p[16]*plg[0][2]+p[30]*plg[0][4])*cd18;
/* ASYMMETRICAL ANNUAL */
t[4]=(p[9]*plg[0][1]+p[10]*plg[0][3]+p[20]*plg[0][5])*cd14;
/* ASYMMETRICAL SEMIANNUAL */
t[5]=(p[37]*plg[0][1])*cd39;
/* DIURNAL */
if (flags->sw[7]) {
double t71, t72;
t71 = p[11]*plg[1][2]*cd14*flags->swc[5];
t72 = p[12]*plg[1][2]*cd14*flags->swc[5];
t[6] = ((p[3]*plg[1][1] + p[4]*plg[1][3] + t71) * ctloc + (p[6]*plg[1][1] + p[7]*plg[1][3] + t72) * stloc) ;
}
/* SEMIDIURNAL */
if (flags->sw[8]) {
double t81, t82;
t81 = (p[23]*plg[2][3]+p[35]*plg[2][5])*cd14*flags->swc[5];
t82 = (p[33]*plg[2][3]+p[36]*plg[2][5])*cd14*flags->swc[5];
t[7] = ((p[5]*plg[2][2] + p[41]*plg[2][4] + t81) * c2tloc + (p[8]*plg[2][2] + p[42]*plg[2][4] + t82) * s2tloc);
}
/* TERDIURNAL */
if (flags->sw[14]) {
t[13] = p[39] * plg[3][3] * s3tloc + p[40] * plg[3][3] * c3tloc;
}
/* MAGNETIC ACTIVITY */
if (flags->sw[9]) {
if (flags->sw[9]==1)
t[8] = apdf * (p[32] + p[45] * plg[0][2] * flags->swc[2]);
if (flags->sw[9]==-1)
t[8]=(p[50]*apt[0] + p[96]*plg[0][2] * apt[0]*flags->swc[2]);
}
/* LONGITUDINAL */
if (!((flags->sw[10]==0) || (flags->sw[11]==0) || (input->g_long<=-1000.0))) {
t[10] = (1.0 + plg[0][1]*(p[80]*flags->swc[5]*cos(dr*(input->doy-p[81]))
+p[85]*flags->swc[6]*cos(2.0*dr*(input->doy-p[86])))
+p[83]*flags->swc[3]*cos(dr*(input->doy-p[84]))
+p[87]*flags->swc[4]*cos(2.0*dr*(input->doy-p[88])))
*((p[64]*plg[1][2]+p[65]*plg[1][4]+p[66]*plg[1][6]
+p[74]*plg[1][1]+p[75]*plg[1][3]+p[76]*plg[1][5]
)*cos(dgtr*input->g_long)
+(p[90]*plg[1][2]+p[91]*plg[1][4]+p[92]*plg[1][6]
+p[77]*plg[1][1]+p[78]*plg[1][3]+p[79]*plg[1][5]
)*sin(dgtr*input->g_long));
}
tt=0;
for (i=0;i<14;i++)
tt+=fabs(flags->sw[i+1])*t[i]; /*//MSISEMODIF fabs*/
return tt;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- GTD7 ------------------------------ */
/* ------------------------------------------------------------------- */
void MSISEtool::gtd7(struct nrlmsise_input *input, struct nrlmsise_flags *flags, struct nrlmsise_output *output) {
double xlat;
double xmm;
int mn3 = 5;
double zn3[5]={32.5,20.0,15.0,10.0,0.0};
int mn2 = 4;
double zn2[4]={72.5,55.0,45.0,32.5};
double altt;
double zmix=62.5;
double tmp;
double dm28m;
double tz;
double dmc;
double dmr;
double dz28;
struct nrlmsise_output soutput;
int i;
tselec(flags);
/* Latitude variation of gravity (none for sw[2]=0) */
xlat=input->g_lat;
if (flags->sw[2]==0)
xlat=45.0;
glatf(xlat, &gsurf, &re);
xmm = pdm[2][4];
/* THERMOSPHERE / MESOSPHERE (above zn2[0]) */
if (input->alt>zn2[0])
altt=input->alt;
else
altt=zn2[0];
tmp=input->alt;
input->alt=altt;
gts7(input, flags, &soutput);
altt=input->alt;
input->alt=tmp;
if (flags->sw[0]) // metric adjustment
dm28m=dm28*1.0E6;
else
dm28m=dm28;
output->t[0]=soutput.t[0];
output->t[1]=soutput.t[1];
if (input->alt>=zn2[0]) {
for (i=0;i<9;i++)
output->d[i]=soutput.d[i];
return;
}
/* LOWER MESOSPHERE/UPPER STRATOSPHERE (between zn3[0] and zn2[0])
* Temperature at nodes and gradients at end nodes
* Inverse temperature a linear function of spherical harmonics
*/
meso_tgn2[0]=meso_tgn1[1];
meso_tn2[0]=meso_tn1[4];
meso_tn2[1]=pma[0][0]*pavgm[0]/(1.0-flags->sw[20]*glob7s(pma[0], input, flags));
meso_tn2[2]=pma[1][0]*pavgm[1]/(1.0-flags->sw[20]*glob7s(pma[1], input, flags));
meso_tn2[3]=pma[2][0]*pavgm[2]/(1.0-flags->sw[20]*flags->sw[22]*glob7s(pma[2], input, flags));
meso_tgn2[1]=pavgm[8]*pma[9][0]*(1.0+flags->sw[20]*flags->sw[22]*glob7s(pma[9], input, flags))*meso_tn2[3]*meso_tn2[3]/(pow((pma[2][0]*pavgm[2]),2.0));
meso_tn3[0]=meso_tn2[3];
if (input->alt<zn3[0]) {
/* LOWER STRATOSPHERE AND TROPOSPHERE (below zn3[0])
* Temperature at nodes and gradients at end nodes
* Inverse temperature a linear function of spherical harmonics
*/
meso_tgn3[0]=meso_tgn2[1];
meso_tn3[1]=pma[3][0]*pavgm[3]/(1.0-flags->sw[22]*glob7s(pma[3], input, flags));
meso_tn3[2]=pma[4][0]*pavgm[4]/(1.0-flags->sw[22]*glob7s(pma[4], input, flags));
meso_tn3[3]=pma[5][0]*pavgm[5]/(1.0-flags->sw[22]*glob7s(pma[5], input, flags));
meso_tn3[4]=pma[6][0]*pavgm[6]/(1.0-flags->sw[22]*glob7s(pma[6], input, flags));
meso_tgn3[1]=pma[7][0]*pavgm[7]*(1.0+flags->sw[22]*glob7s(pma[7], input, flags)) *meso_tn3[4]*meso_tn3[4]/(pow((pma[6][0]*pavgm[6]),2.0));
}
/* LINEAR TRANSITION TO FULL MIXING BELOW zn2[0] */
dmc=0;
if (input->alt>zmix)
dmc = 1.0 - (zn2[0]-input->alt)/(zn2[0] - zmix);
dz28=soutput.d[2];
/**** N2 density ****/
dmr=soutput.d[2] / dm28m - 1.0;
output->d[2]=densm(input->alt,dm28m,xmm, &tz, mn3, zn3, meso_tn3, meso_tgn3, mn2, zn2, meso_tn2, meso_tgn2);
output->d[2]=output->d[2] * (1.0 + dmr*dmc);
/**** HE density ****/
dmr = soutput.d[0] / (dz28 * pdm[0][1]) - 1.0;
output->d[0] = output->d[2] * pdm[0][1] * (1.0 + dmr*dmc);
/**** O density ****/
output->d[1] = 0;
output->d[8] = 0;
/**** O2 density ****/
dmr = soutput.d[3] / (dz28 * pdm[3][1]) - 1.0;
output->d[3] = output->d[2] * pdm[3][1] * (1.0 + dmr*dmc);
/**** AR density ***/
dmr = soutput.d[4] / (dz28 * pdm[4][1]) - 1.0;
output->d[4] = output->d[2] * pdm[4][1] * (1.0 + dmr*dmc);
/**** Hydrogen density ****/
output->d[6] = 0;
/**** Atomic nitrogen density ****/
output->d[7] = 0;
/**** Total mass density */
output->d[5] = 1.66E-24 * (4.0 * output->d[0] + 16.0 * output->d[1] + 28.0 * output->d[2] + 32.0 * output->d[3] + 40.0 * output->d[4] + output->d[6] + 14.0 * output->d[7]);
if (flags->sw[0])
output->d[5]=output->d[5]/1000;
/**** temperature at altitude ****/
dd = densm(input->alt, 1.0, 0, &tz, mn3, zn3, meso_tn3, meso_tgn3, mn2, zn2, meso_tn2, meso_tgn2);
output->t[1]=tz;
}
/* ------------------------------------------------------------------- */
/* ------------------------------- GTD7D ----------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::gtd7d(struct nrlmsise_input *input, struct nrlmsise_flags *flags, struct nrlmsise_output *output) {
gtd7(input, flags, output);
output->d[5] = 1.66E-24 * (4.0 * output->d[0] + 16.0 * output->d[1] + 28.0 * output->d[2] + 32.0 * output->d[3] + 40.0 * output->d[4] + output->d[6] + 14.0 * output->d[7] + 16.0 * output->d[8]);
}
/* ------------------------------------------------------------------- */
/* -------------------------------- GHP7 ----------------------------- */
/* ------------------------------------------------------------------- */
void MSISEtool::ghp7(struct nrlmsise_input *input, struct nrlmsise_flags *flags, struct nrlmsise_output *output, double press) {
double bm = 1.3806E-19;
double rgas = 831.4;
double test = 0.00043;
double ltest = 12;
double pl, p;
double zi;
double z;
double cl, cl2;
double ca, cd;
double xn, xm, diff;
double g, sh;
int l;
pl = log10(press);
if (pl >= -5.0) {
if (pl>2.5)
zi = 18.06 * (3.00 - pl);
else if ((pl>0.075) && (pl<=2.5))
zi = 14.98 * (3.08 - pl);
else if ((pl>-1) && (pl<=0.075))
zi = 17.80 * (2.72 - pl);
else if ((pl>-2) && (pl<=-1))
zi = 14.28 * (3.64 - pl);
else if ((pl>-4) && (pl<=-2))
zi = 12.72 * (4.32 -pl);
else if (pl<=-4)
zi = 25.3 * (0.11 - pl);
cl = input->g_lat/90.0;
cl2 = cl*cl;
if (input->doy<182)
cd = (1.0 - (double) input->doy) / 91.25;
else
cd = ((double) input->doy) / 91.25 - 3.0;
ca = 0;
if ((pl > -1.11) && (pl<=-0.23))
ca = 1.0;
if (pl > -0.23)
ca = (2.79 - pl) / (2.79 + 0.23);
if ((pl <= -1.11) && (pl>-3))
ca = (-2.93 - pl)/(-2.93 + 1.11);
z = zi - 4.87 * cl * cd * ca - 1.64 * cl2 * ca + 0.31 * ca * cl;
} else
z = 22.0 * pow((pl + 4.0),2.0) + 110.0;
/* iteration loop */
l = 0;
do {
l++;
input->alt = z;
gtd7(input, flags, output);
z = input->alt;
xn = output->d[0] + output->d[1] + output->d[2] + output->d[3] + output->d[4] + output->d[6] + output->d[7];
p = bm * xn * output->t[1];
if (flags->sw[0])
p = p*1.0E-6;
diff = pl - log10(p);
if (sqrt(diff*diff)<test)
return;
if (l==ltest) {
printf("ERROR: ghp7 not converging for press %e, diff %e",press,diff);
return;
}
xm = output->d[5] / xn / 1.66E-24;
if (flags->sw[0])
xm = xm * 1.0E3;
g = gsurf / (pow((1.0 + z/re),2.0));
sh = rgas * output->t[1] / (xm * g);
/* new altitude estimate using scale height */
if (l < 6)
z = z - sh * diff * 2.302;
else
z = z - sh * diff;
} while (1==1);
}
/* ------------------------------------------------------------------- */
/* ------------------------------- GTS7 ------------------------------ */
/* ------------------------------------------------------------------- */
void MSISEtool::gts7(struct nrlmsise_input *input, struct nrlmsise_flags *flags, struct nrlmsise_output *output) {
/* Thermospheric portion of NRLMSISE-00
* See GTD7 for more extensive comments
* alt > 72.5 km!
*/
double za;
int i, j;
double ddum, z;
double zn1[5] = {120.0, 110.0, 100.0, 90.0, 72.5};
double tinf;
int mn1 = 5;
double g0;
double tlb;
double s, z0, t0, tr12;
double db01, db04, db14, db16, db28, db32, db40, db48;
double zh28, zh04, zh16, zh32, zh40, zh01, zh14;
double zhm28, zhm04, zhm16, zhm32, zhm40, zhm01, zhm14;
double xmd;
double b28, b04, b16, b32, b40, b01, b14;
double tz;
double g28, g4, g16, g32, g40, g1, g14;
double zhf, xmm;
double zc04, zc16, zc32, zc40, zc01, zc14;
double hc04, hc16, hc32, hc40, hc01, hc14;
double hcc16, hcc32, hcc01, hcc14;
double zcc16, zcc32, zcc01, zcc14;
double rc16, rc32, rc01, rc14;
double rl;
double g16h, db16h, tho, zsht, zmho, zsho;
double dgtr=1.74533E-2;
double dr=1.72142E-2;
double alpha[9]={-0.38, 0.0, 0.0, 0.0, 0.17, 0.0, -0.38, 0.0, 0.0};
double altl[8]={200.0, 300.0, 160.0, 250.0, 240.0, 450.0, 320.0, 450.0};
double dd;
double hc216, hcc232;
za = pdl[1][15];
zn1[0] = za;
for (j=0;j<9;j++)
output->d[j]=0;
/* TINF VARIATIONS NOT IMPORTANT BELOW ZA OR ZN1(1) */
if (input->alt>zn1[0])
tinf = ptm[0]*pt[0] *
(1.0+flags->sw[16]*globe7(pt,input,flags));
else
tinf = ptm[0]*pt[0];
output->t[0]=tinf;
/* GRADIENT VARIATIONS NOT IMPORTANT BELOW ZN1(5) */
if (input->alt>zn1[4])
g0 = ptm[3]*ps[0] *
(1.0+flags->sw[19]*globe7(ps,input,flags));
else
g0 = ptm[3]*ps[0];
tlb = ptm[1] * (1.0 + flags->sw[17]*globe7(pd[3],input,flags))*pd[3][0];
s = g0 / (tinf - tlb);
/* Lower thermosphere temp variations not significant for
* density above 300 km */
if (input->alt<300.0) {
meso_tn1[1]=ptm[6]*ptl[0][0]/(1.0-flags->sw[18]*glob7s(ptl[0], input, flags));
meso_tn1[2]=ptm[2]*ptl[1][0]/(1.0-flags->sw[18]*glob7s(ptl[1], input, flags));
meso_tn1[3]=ptm[7]*ptl[2][0]/(1.0-flags->sw[18]*glob7s(ptl[2], input, flags));
meso_tn1[4]=ptm[4]*ptl[3][0]/(1.0-flags->sw[18]*flags->sw[20]*glob7s(ptl[3], input, flags));
meso_tgn1[1]=ptm[8]*pma[8][0]*(1.0+flags->sw[18]*flags->sw[20]*glob7s(pma[8], input, flags))*meso_tn1[4]*meso_tn1[4]/(pow((ptm[4]*ptl[3][0]),2.0));
} else {
meso_tn1[1]=ptm[6]*ptl[0][0];
meso_tn1[2]=ptm[2]*ptl[1][0];
meso_tn1[3]=ptm[7]*ptl[2][0];
meso_tn1[4]=ptm[4]*ptl[3][0];
meso_tgn1[1]=ptm[8]*pma[8][0]*meso_tn1[4]*meso_tn1[4]/(pow((ptm[4]*ptl[3][0]),2.0));
}
z0 = zn1[3];
t0 = meso_tn1[3];
tr12 = 1.0;
/* N2 variation factor at Zlb */
g28=flags->sw[21]*globe7(pd[2], input, flags);
/* VARIATION OF TURBOPAUSE HEIGHT */
zhf=pdl[1][24]*(1.0+flags->sw[5]*pdl[0][24]*sin(dgtr*input->g_lat)*cos(dr*(input->doy-pt[13])));
output->t[0]=tinf;
xmm = pdm[2][4];
z = input->alt;
/**** N2 DENSITY ****/
/* Diffusive density at Zlb */
db28 = pdm[2][0]*exp(g28)*pd[2][0];
/* Diffusive density at Alt */
output->d[2]=densu(z,db28,tinf,tlb,28.0,alpha[2],&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
dd=output->d[2];
/* Turbopause */
zh28=pdm[2][2]*zhf;
zhm28=pdm[2][3]*pdl[1][5];
xmd=28.0-xmm;
/* Mixed density at Zlb */
b28=densu(zh28,db28,tinf,tlb,xmd,(alpha[2]-1.0),&tz,ptm[5],s,mn1, zn1,meso_tn1,meso_tgn1);
if ((flags->sw[15])&&(z<=altl[2])) {
/* Mixed density at Alt */
dm28=densu(z,b28,tinf,tlb,xmm,alpha[2],&tz,ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Net density at Alt */
output->d[2]=dnet(output->d[2],dm28,zhm28,xmm,28.0);
}
/**** HE DENSITY ****/
/* Density variation factor at Zlb */
g4 = flags->sw[21]*globe7(pd[0], input, flags);
/* Diffusive density at Zlb */
db04 = pdm[0][0]*exp(g4)*pd[0][0];
/* Diffusive density at Alt */
output->d[0]=densu(z,db04,tinf,tlb, 4.,alpha[0],&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
dd=output->d[0];
if ((flags->sw[15]) && (z<altl[0])) {
/* Turbopause */
zh04=pdm[0][2];
/* Mixed density at Zlb */
b04=densu(zh04,db04,tinf,tlb,4.-xmm,alpha[0]-1.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm04=densu(z,b04,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm04=zhm28;
/* Net density at Alt */
output->d[0]=dnet(output->d[0],dm04,zhm04,xmm,4.);
/* Correction to specified mixing ratio at ground */
rl=log(b28*pdm[0][1]/b04);
zc04=pdm[0][4]*pdl[1][0];
hc04=pdm[0][5]*pdl[1][1];
/* Net density corrected at Alt */
output->d[0]=output->d[0]*ccor(z,rl,hc04,zc04);
}
/**** O DENSITY ****/
/* Density variation factor at Zlb */
g16= flags->sw[21]*globe7(pd[1],input,flags);
/* Diffusive density at Zlb */
db16 = pdm[1][0]*exp(g16)*pd[1][0];
/* Diffusive density at Alt */
output->d[1]=densu(z,db16,tinf,tlb, 16.,alpha[1],&output->t[1],ptm[5],s,mn1, zn1,meso_tn1,meso_tgn1);
dd=output->d[1];
if ((flags->sw[15]) && (z<=altl[1])) {
/* Turbopause */
zh16=pdm[1][2];
/* Mixed density at Zlb */
b16=densu(zh16,db16,tinf,tlb,16.0-xmm,(alpha[1]-1.0), &output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm16=densu(z,b16,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm16=zhm28;
/* Net density at Alt */
output->d[1]=dnet(output->d[1],dm16,zhm16,xmm,16.);
rl=pdm[1][1]*pdl[1][16]*(1.0+flags->sw[1]*pdl[0][23]*(input->f107A-150.0));
hc16=pdm[1][5]*pdl[1][3];
zc16=pdm[1][4]*pdl[1][2];
hc216=pdm[1][5]*pdl[1][4];
output->d[1]=output->d[1]*ccor2(z,rl,hc16,zc16,hc216);
/* Chemistry correction */
hcc16=pdm[1][7]*pdl[1][13];
zcc16=pdm[1][6]*pdl[1][12];
rc16=pdm[1][3]*pdl[1][14];
/* Net density corrected at Alt */
output->d[1]=output->d[1]*ccor(z,rc16,hcc16,zcc16);
}
/**** O2 DENSITY ****/
/* Density variation factor at Zlb */
g32= flags->sw[21]*globe7(pd[4], input, flags);
/* Diffusive density at Zlb */
db32 = pdm[3][0]*exp(g32)*pd[4][0];
/* Diffusive density at Alt */
output->d[3]=densu(z,db32,tinf,tlb, 32.,alpha[3],&output->t[1],ptm[5],s,mn1, zn1,meso_tn1,meso_tgn1);
dd=output->d[3];
if (flags->sw[15]) {
if (z<=altl[3]) {
/* Turbopause */
zh32=pdm[3][2];
/* Mixed density at Zlb */
b32=densu(zh32,db32,tinf,tlb,32.-xmm,alpha[3]-1., &output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm32=densu(z,b32,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm32=zhm28;
/* Net density at Alt */
output->d[3]=dnet(output->d[3],dm32,zhm32,xmm,32.);
/* Correction to specified mixing ratio at ground */
rl=log(b28*pdm[3][1]/b32);
hc32=pdm[3][5]*pdl[1][7];
zc32=pdm[3][4]*pdl[1][6];
output->d[3]=output->d[3]*ccor(z,rl,hc32,zc32);
}
/* Correction for general departure from diffusive equilibrium above Zlb */
hcc32=pdm[3][7]*pdl[1][22];
hcc232=pdm[3][7]*pdl[0][22];
zcc32=pdm[3][6]*pdl[1][21];
rc32=pdm[3][3]*pdl[1][23]*(1.+flags->sw[1]*pdl[0][23]*(input->f107A-150.));
/* Net density corrected at Alt */
output->d[3]=output->d[3]*ccor2(z,rc32,hcc32,zcc32,hcc232);
}
/**** AR DENSITY ****/
/* Density variation factor at Zlb */
g40= flags->sw[20]*globe7(pd[5],input,flags);
/* Diffusive density at Zlb */
db40 = pdm[4][0]*exp(g40)*pd[5][0];
/* Diffusive density at Alt */
output->d[4]=densu(z,db40,tinf,tlb, 40.,alpha[4],&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
dd=output->d[4];
if ((flags->sw[15]) && (z<=altl[4])) {
/* Turbopause */
zh40=pdm[4][2];
/* Mixed density at Zlb */
b40=densu(zh40,db40,tinf,tlb,40.-xmm,alpha[4]-1.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm40=densu(z,b40,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm40=zhm28;
/* Net density at Alt */
output->d[4]=dnet(output->d[4],dm40,zhm40,xmm,40.);
/* Correction to specified mixing ratio at ground */
rl=log(b28*pdm[4][1]/b40);
hc40=pdm[4][5]*pdl[1][9];
zc40=pdm[4][4]*pdl[1][8];
/* Net density corrected at Alt */
output->d[4]=output->d[4]*ccor(z,rl,hc40,zc40);
}
/**** HYDROGEN DENSITY ****/
/* Density variation factor at Zlb */
g1 = flags->sw[21]*globe7(pd[6], input, flags);
/* Diffusive density at Zlb */
db01 = pdm[5][0]*exp(g1)*pd[6][0];
/* Diffusive density at Alt */
output->d[6]=densu(z,db01,tinf,tlb,1.,alpha[6],&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
dd=output->d[6];
if ((flags->sw[15]) && (z<=altl[6])) {
/* Turbopause */
zh01=pdm[5][2];
/* Mixed density at Zlb */
b01=densu(zh01,db01,tinf,tlb,1.-xmm,alpha[6]-1., &output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm01=densu(z,b01,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm01=zhm28;
/* Net density at Alt */
output->d[6]=dnet(output->d[6],dm01,zhm01,xmm,1.);
/* Correction to specified mixing ratio at ground */
rl=log(b28*pdm[5][1]*sqrt(pdl[1][17]*pdl[1][17])/b01);
hc01=pdm[5][5]*pdl[1][11];
zc01=pdm[5][4]*pdl[1][10];
output->d[6]=output->d[6]*ccor(z,rl,hc01,zc01);
/* Chemistry correction */
hcc01=pdm[5][7]*pdl[1][19];
zcc01=pdm[5][6]*pdl[1][18];
rc01=pdm[5][3]*pdl[1][20];
/* Net density corrected at Alt */
output->d[6]=output->d[6]*ccor(z,rc01,hcc01,zcc01);
}
/**** ATOMIC NITROGEN DENSITY ****/
/* Density variation factor at Zlb */
g14 = flags->sw[21]*globe7(pd[7],input,flags);
/* Diffusive density at Zlb */
db14 = pdm[6][0]*exp(g14)*pd[7][0];
/* Diffusive density at Alt */
output->d[7]=densu(z,db14,tinf,tlb,14.,alpha[7],&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
dd=output->d[7];
if ((flags->sw[15]) && (z<=altl[7])) {
/* Turbopause */
zh14=pdm[6][2];
/* Mixed density at Zlb */
b14=densu(zh14,db14,tinf,tlb,14.-xmm,alpha[7]-1., &output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
/* Mixed density at Alt */
dm14=densu(z,b14,tinf,tlb,xmm,0.,&output->t[1],ptm[5],s,mn1,zn1,meso_tn1,meso_tgn1);
zhm14=zhm28;
/* Net density at Alt */
output->d[7]=dnet(output->d[7],dm14,zhm14,xmm,14.);
/* Correction to specified mixing ratio at ground */
rl=log(b28*pdm[6][1]*sqrt(pdl[0][2]*pdl[0][2])/b14);
hc14=pdm[6][5]*pdl[0][1];
zc14=pdm[6][4]*pdl[0][0];
output->d[7]=output->d[7]*ccor(z,rl,hc14,zc14);
/* Chemistry correction */
hcc14=pdm[6][7]*pdl[0][4];
zcc14=pdm[6][6]*pdl[0][3];
rc14=pdm[6][3]*pdl[0][5];
/* Net density corrected at Alt */
output->d[7]=output->d[7]*ccor(z,rc14,hcc14,zcc14);
}
/**** Anomalous OXYGEN DENSITY ****/
g16h = flags->sw[21]*globe7(pd[8],input,flags);
db16h = pdm[7][0]*exp(g16h)*pd[8][0];
tho = pdm[7][9]*pdl[0][6];
dd=densu(z,db16h,tho,tho,16.,alpha[8],&output->t[1],ptm[5],s,mn1, zn1,meso_tn1,meso_tgn1);
zsht=pdm[7][5];
zmho=pdm[7][4];
zsho=scalh(zmho,16.0,tho);
output->d[8]=dd*exp(-zsht/zsho*(exp(-(z-zmho)/zsht)-1.));
/* total mass density */
output->d[5] = 1.66E-24*(4.0*output->d[0]+16.0*output->d[1]+28.0*output->d[2]+32.0*output->d[3]+40.0*output->d[4]+ output->d[6]+14.0*output->d[7]);
db48=1.66E-24*(4.0*db04+16.0*db16+28.0*db28+32.0*db32+40.0*db40+db01+14.0*db14);
/* temperature */
z = sqrt(input->alt*input->alt);
ddum = densu(z,1.0, tinf, tlb, 0.0, 0.0, &output->t[1], ptm[5], s, mn1, zn1, meso_tn1, meso_tgn1);
if (flags->sw[0]) {
for(i=0;i<9;i++)
output->d[i]=output->d[i]*1.0E6;
output->d[5]=output->d[5]/1000;
}
}
// Usefull to test msise
void MSISEtool::test_gtd7() {
struct nrlmsise_output output[17];
struct nrlmsise_input input[17];
struct nrlmsise_flags flags;
struct ap_array aph;
int i;
int j;
/* input values */
for (i=0;i<7;i++)
aph.a[i]=100;
flags.switches[0]=0;
for (i=1;i<24;i++)
flags.switches[i]=1;
for (i=0;i<17;i++) {
input[i].doy=172;
input[i].year=0; /* without effect */
input[i].sec=29000;
input[i].alt=400;
input[i].g_lat=60;
input[i].g_long=-70;
input[i].lst=16;
input[i].f107A=150;
input[i].f107=150;
input[i].ap=4;
}
input[1].doy=81;
input[2].sec=75000;
input[2].alt=1000;
input[3].alt=100;
input[10].alt=0;
input[11].alt=10;
input[12].alt=30;
input[13].alt=50;
input[14].alt=70;
input[16].alt=100;
input[4].g_lat=0;
input[5].g_long=0;
input[6].lst=4;
input[7].f107A=70;
input[8].f107=180;
input[9].ap=40;
input[15].ap_a=&aph;
input[16].ap_a=&aph;
/* evaluate 0 to 14 */
for (i=0;i<15;i++)
gtd7(&input[i], &flags, &output[i]);
/* evaluate 15 and 16 */
flags.switches[9]=-1;
for (i=15;i<17;i++)
gtd7(&input[i], &flags, &output[i]);
/* output type 1 */
for (i=0;i<17;i++) {
printf("n");
for (j=0;j<9;j++)
printf("%E ",output[i].d[j]);
printf("%E ",output[i].t[0]);
printf("%E n",output[i].t[1]);
/* DL omitted */
}
/* output type 2 */
for (i=0;i<3;i++) {
printf("n");
printf("nDAY ");
for (j=0;j<5;j++)
printf(" %3i",input[i*5+j].doy);
printf("nUT ");
for (j=0;j<5;j++)
printf(" %5.0f",input[i*5+j].sec);
printf("nALT ");
for (j=0;j<5;j++)
printf(" %4.0f",input[i*5+j].alt);
printf("nLAT ");
for (j=0;j<5;j++)
printf(" %3.0f",input[i*5+j].g_lat);
printf("nLONG ");
for (j=0;j<5;j++)
printf(" %3.0f",input[i*5+j].g_long);
printf("nLST ");
for (j=0;j<5;j++)
printf(" %5.0f",input[i*5+j].lst);
printf("nF107A ");
for (j=0;j<5;j++)
printf(" %3.0f",input[i*5+j].f107A);
printf("nF107 ");
for (j=0;j<5;j++)
printf(" %3.0f",input[i*5+j].f107);
printf("n\n");
printf("nTINF ");
for (j=0;j<5;j++)
printf(" %7.2f",output[i*5+j].t[0]);
printf("nTG ");
for (j=0;j<5;j++)
printf(" %7.2f",output[i*5+j].t[1]);
printf("nHE ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[0]);
printf("nO ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[1]);
printf("nN2 ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[2]);
printf("nO2 ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[3]);
printf("nAR ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[4]);
printf("nH ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[6]);
printf("nN ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[7]);
printf("nANM 0 ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[8]);
printf("nRHO ");
for (j=0;j<5;j++)
printf(" %1.3e",output[i*5+j].d[5]);
printf("n");
}
printf("n");
}