diff --git a/src/FDM/JSBSim/CMakeLists.txt b/src/FDM/JSBSim/CMakeLists.txt index 8844f7f7e..f7136691e 100644 --- a/src/FDM/JSBSim/CMakeLists.txt +++ b/src/FDM/JSBSim/CMakeLists.txt @@ -61,9 +61,7 @@ set(HEADERS models/FGOutput.h models/FGPropagate.h models/FGPropulsion.h - models/atmosphere/FGMSIS.h models/atmosphere/FGStandardAtmosphere.h - models/atmosphere/FGMars.h models/atmosphere/FGWinds.h models/flight_control/FGAccelerometer.h models/flight_control/FGActuator.h @@ -154,10 +152,7 @@ set(SOURCES models/FGOutput.cpp models/FGPropagate.cpp models/FGPropulsion.cpp - models/atmosphere/FGMSIS.cpp - models/atmosphere/FGMSISData.cpp models/atmosphere/FGStandardAtmosphere.cpp - models/atmosphere/FGMars.cpp models/atmosphere/FGWinds.cpp models/flight_control/FGAccelerometer.cpp models/flight_control/FGActuator.cpp diff --git a/src/FDM/JSBSim/models/atmosphere/FGMSIS.cpp b/src/FDM/JSBSim/models/atmosphere/FGMSIS.cpp deleted file mode 100644 index 41be26913..000000000 --- a/src/FDM/JSBSim/models/atmosphere/FGMSIS.cpp +++ /dev/null @@ -1,1634 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Module: FGMSIS.cpp - Author: David Culp - (incorporated into C++ JSBSim class hierarchy, see model authors below) - Date started: 12/14/03 - Purpose: Models the MSIS-00 atmosphere - - ------------- Copyright (C) 2003 David P. Culp (davidculp2@comcast.net) ------ - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -FUNCTIONAL DESCRIPTION --------------------------------------------------------------------------------- -Models the MSIS-00 atmosphere. Provides temperature and density to FGAtmosphere, -given day-of-year, time-of-day, altitude, latitude, longitude and local time. - -HISTORY --------------------------------------------------------------------------------- -12/14/03 DPC Created -01/11/04 DPC Derived from FGAtmosphere - - -------------------------------------------------------------------- - --------- 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. -*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include "FGMSIS.h" -#include "models/FGAuxiliary.h" -#include /* maths functions */ -#include // for cout, endl - -using namespace std; - -namespace JSBSim { - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -EXTERNAL GLOBAL DATA -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - - /* POWER7 */ - extern double pt[150]; - extern double pd[9][150]; - extern double ps[150]; - extern double pdl[2][25]; - extern double ptl[4][100]; - extern double pma[10][100]; - extern double sam[100]; - - /* LOWER7 */ - extern double ptm[10]; - extern double pdm[8][10]; - extern double pavgm[10]; - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS IMPLEMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - - -MSIS::MSIS(FGFDMExec* fdmex) : FGAtmosphere(fdmex) -{ - Name = "MSIS"; - - for (int i=0; i<9; i++) output.d[i] = 0.0; - for (int i=0; i<2; i++) output.t[i] = 0.0; - - dm04 = dm16 = dm28 = dm32 = dm40 = dm01 = dm14 = dfa = 0.0; - - for (int i=0; i<5; i++) meso_tn1[i] = 0.0; - for (int i=0; i<4; i++) meso_tn2[i] = 0.0; - for (int i=0; i<5; i++) meso_tn3[i] = 0.0; - for (int i=0; i<2; i++) meso_tgn1[i] = 0.0; - for (int i=0; i<2; i++) meso_tgn2[i] = 0.0; - for (int i=0; i<2; i++) meso_tgn3[i] = 0.0; - - Debug(0); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -MSIS::~MSIS() -{ - Debug(1); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -bool MSIS::InitModel(void) -{ - unsigned int i; - - flags.switches[0] = 0; - flags.sw[0] = 0; - flags.swc[0] = 0; - for (i=1;i<24;i++) { - flags.switches[i] = 1; - flags.sw[i] = 1; - flags.swc[i] = 1; - } - - for (i=0;i<7;i++) aph.a[i] = 100.0; - - // set some common magnetic flux values - input.f107A = 150.0; - input.f107 = 150.0; - input.ap = 4.0; - -// UseInternal(); - -// SLtemperature = intTemperature = 518.0; -// SLpressure = intPressure = 2116.7; -// SLdensity = intDensity = 0.002378; -// SLsoundspeed = sqrt(2403.0832 * SLtemperature); - - return true; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -bool MSIS::Run(bool Holding) -{ - if (FGModel::Run(Holding)) return true; - if (Holding) return false; - - double h = FDMExec->GetPropagate()->GetAltitudeASL(); - - //do temp, pressure, and density first - //if (!useExternal) { - // get sea-level values - Calculate(FDMExec->GetAuxiliary()->GetDayOfYear(), - FDMExec->GetAuxiliary()->GetSecondsInDay(), - 0.0, - FDMExec->GetPropagate()->GetLocation().GetLatitudeDeg(), - FDMExec->GetPropagate()->GetLocation().GetLongitudeDeg()); - SLtemperature = output.t[1] * 1.8; - SLdensity = output.d[5] * 1.940321; - SLpressure = 1716.488 * SLdensity * SLtemperature; - SLsoundspeed = sqrt(2403.0832 * SLtemperature); - - // get at-altitude values - Calculate(FDMExec->GetAuxiliary()->GetDayOfYear(), - FDMExec->GetAuxiliary()->GetSecondsInDay(), - h, - FDMExec->GetPropagate()->GetLocation().GetLatitudeDeg(), - FDMExec->GetPropagate()->GetLocation().GetLongitudeDeg()); - //intTemperature = output.t[1] * 1.8; - //intDensity = output.d[5] * 1.940321; - //intPressure = 1716.488 * intDensity * intTemperature; - //cout << "T=" << intTemperature << " D=" << intDensity << " P="; - //cout << intPressure << " a=" << soundspeed << endl; - //} - - Debug(2); - - return false; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::Calculate(int day, double sec, double alt, double lat, double lon) -{ - input.year = 2000; - input.doy = day; - input.sec = sec; - input.alt = alt / 3281; //feet to kilometers - input.g_lat = lat; - input.g_long = lon; - - input.lst = (sec/3600) + (lon/15); - if (input.lst > 24.0) input.lst -= 24.0; - if (input.lst < 0.0) input.lst = 24 - input.lst; - - gtd7d(&input, &flags, &output); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -void MSIS::UseExternal(void){ - // do nothing, external control not allowed -} - - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -void MSIS::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]; - } - } -} - - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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.0); - if (e<-70) - return exp(r); - ex = exp(e); - e = r / (1.0 + ex); - return exp(e); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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.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); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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))) { - cerr << "dnet log error " << dm << ' ' << dd << ' ' << xm << ' ' << endl; - 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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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=0.0, h=0.0, a=0.0, b=0.0, a2=0.0, b2=0.0; - while ((x>xa[klo]) && (khi1) { - k=(khi+klo)/2; - if (xa[k]>x) - khi=k; - else - klo=k; - } - h = xa[khi] - xa[klo]; - if (h==0.0) - cerr << "bad XA input to splint" << endl; - 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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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=new double[n]; - if (u==NULL) { - cerr << "Out Of Memory in spline - ERROR" << endl; - 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]; - - delete[] u; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::zeta(double zz, double zl) -{ - return ((zz-zl)*(re+zl)/(re+zz)); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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] = {0,0,0,0,0,0,0,0,0,0}; - double ys[10] = {0,0,0,0,0,0,0,0,0,0}; - double y2out[10] = {0,0,0,0,0,0,0,0,0,0}; - double rgas = 831.4; - double z=0, z1=0, z2=0, t1=0, t2=0, zg=0, zgdif=0; - double yd1=0, yd2=0; - double x=0, y=0, yi=0; - double expl=0, gamm=0, glb=0; - double densm_tmp=0; - int mn=0; - int k=0; - 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;k50.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;k50.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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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=0.0, yd1=0.0, x=0.0, y=0.0; - double rgas=831.4; - double densu_temp=1.0; - double za=0.0, z=0.0, zg2=0.0, tt=0.0, ta=0.0; - double dta=0.0, z1=0.0, z2=0.0, t1=0.0, t2=0.0, zg=0.0, zgdif=0.0; - int mn=0; - int k=0; - double glb=0.0; - double expl=0.0; - double yi=0.0; - double densa=0.0; - double gamma=0.0, gamm=0.0; - double xs[5]={0.0,0.0,0.0,0.0,0.0}, ys[5]={0.0,0.0,0.0,0.0,0.0}, y2out[5]={0.0,0.0,0.0,0.0,0.0}; - /* 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); - - /* Bates temperature */ - tt = tinf - (tinf - tlb) * exp(-s2*zg2); - ta = tt; - *tz = tt; - densu_temp = *tz; - - if (altzn1[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 = zeta (z, z1); - zgdif = zeta(z2, z1); - /* set up spline nodes */ - for (k=0;k50.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; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -/* 3hr Magnetic activity functions */ -/* Eq. A24d */ -double MSIS::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 MSIS::sumex(double ex) -{ - return (1.0 + (1.0 - pow(ex,19.0)) / (1.0 - ex) * pow(ex,0.5)); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -/* Eq. A24a */ -double MSIS::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 MSIS::globe7(double *p, struct nrlmsise_input *input, - struct nrlmsise_flags *flags) -{ -/* CALCULATE G(L) FUNCTION - * Upper Thermosphere Parameters */ - double t[15]; - int i,j; - double apd; - 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 df; - double f1, f2; - double tinf; - struct ap_array *ap; - - tloc=input->lst; - for (j=0;j<14;j++) - t[j]=0; - - /* 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])); - - /* 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]; - return tinf; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -double MSIS::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] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,}; - double tt=0.0; - double cd32=0.0, cd18=0.0, cd14=0.0, cd39=0.0; - int i=0,j=0; - double dr=1.72142E-2; - double dgtr=1.74533E-2; - /* confirm parameter set */ - if (p[99]==0) - p[99]=pset; - if (p[99]!=pset) { - cerr << "Wrong parameter set for glob7s" << endl; - 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])); - - /* 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]; - return tt; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::gtd7(struct nrlmsise_input *input, struct nrlmsise_flags *flags, - struct nrlmsise_output *output) -{ - double xlat=0.0; - double xmm=0.0; - 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=0.0; - double zmix=62.5; - double tmp=0.0; - double dm28m=0.0; - double tz=0.0; - double dmc=0.0; - double dmr=0.0; - double dz28=0.0; - struct nrlmsise_output soutput; - int i; - - for (int i=0; i<9; i++) soutput.d[i] = 0.0; - for (int i=0; i<2; i++) soutput.t[i] = 0.0; - - 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->altsw[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; - -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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]); - if (flags->sw[0]) - output->d[5]=output->d[5]/1000; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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 = 0.0; - 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)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); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void MSIS::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=0.0; - int i, j; - double z=0.0; - double zn1[5] = {120.0, 110.0, 100.0, 90.0, 72.5}; - double tinf=0.0; - int mn1 = 5; - double g0=0.0; - double tlb=0.0; - double s=0.0; - double db01=0.0, db04=0.0, db14=0.0, db16=0.0, db28=0.0, db32=0.0, db40=0.0; - double zh28=0.0, zh04=0.0, zh16=0.0, zh32=0.0, zh40=0.0, zh01=0.0, zh14=0.0; - double zhm28=0.0, zhm04=0.0, zhm16=0.0, zhm32=0.0, zhm40=0.0, zhm01=0.0, zhm14=0.0; - double xmd=0.0; - double b28=0.0, b04=0.0, b16=0.0, b32=0.0, b40=0.0, b01=0.0, b14=0.0; - double tz=0.0; - double g28=0.0, g4=0.0, g16=0.0, g32=0.0, g40=0.0, g1=0.0, g14=0.0; - double zhf=0.0, xmm=0.0; - double zc04=0.0, zc16=0.0, zc32=0.0, zc40=0.0, zc01=0.0, zc14=0.0; - double hc04=0.0, hc16=0.0, hc32=0.0, hc40=0.0, hc01=0.0, hc14=0.0; - double hcc16=0.0, hcc32=0.0, hcc01=0.0, hcc14=0.0; - double zcc16=0.0, zcc32=0.0, zcc01=0.0, zcc14=0.0; - double rc16=0.0, rc32=0.0, rc01=0.0, rc14=0.0; - double rl=0.0; - double g16h=0.0, db16h=0.0, tho=0.0, zsht=0.0, zmho=0.0, zsho=0.0; - 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=0.0; - double hc216=0.0, hcc232=0.0; - 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)); - } - - /* 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]) && (zt[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[21]*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]); - - - - /* temperature */ - z = sqrt(input->alt*input->alt); - 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; - } -} - - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// The bitmasked value choices are as follows: -// unset: In this case (the default) JSBSim would only print -// out the normally expected messages, essentially echoing -// the config files as they are read. If the environment -// variable is not set, debug_lvl is set to 1 internally -// 0: This requests JSBSim not to output any messages -// whatsoever. -// 1: This value explicity requests the normal JSBSim -// startup messages -// 2: This value asks for a message to be printed out when -// a class is instantiated -// 4: When this value is set, a message is displayed when a -// FGModel object executes its Run() method -// 8: When this value is set, various runtime state variables -// are printed out periodically -// 16: When set various parameters are sanity checked and -// a message is printed out when they go out of bounds - -void MSIS::Debug(int from) -{ - if (debug_lvl <= 0) return; - - if (debug_lvl & 1) { // Standard console startup message output - if (from == 0) { // Constructor - } - } - if (debug_lvl & 2 ) { // Instantiation/Destruction notification - if (from == 0) cout << "Instantiated: MSIS" << endl; - if (from == 1) cout << "Destroyed: MSIS" << endl; - } - if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects - } - if (debug_lvl & 8 ) { // Runtime state variables - } - if (debug_lvl & 16) { // Sanity checking - } - if (debug_lvl & 32) { // Turbulence - } - if (debug_lvl & 64) { - if (from == 0) { // Constructor - } - } -} - - - -} // namespace JSBSim - diff --git a/src/FDM/JSBSim/models/atmosphere/FGMSIS.h b/src/FDM/JSBSim/models/atmosphere/FGMSIS.h deleted file mode 100644 index 17be784f8..000000000 --- a/src/FDM/JSBSim/models/atmosphere/FGMSIS.h +++ /dev/null @@ -1,334 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Header: FGMSIS.h - Description: MSIS-00 Atmosphere - Author: David Culp - Date started: 12/14/03 - - ------------- Copyright (C) 2003 David P. Culp (davidculp2@comcast.net) ------ - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -HISTORY --------------------------------------------------------------------------------- -12/14/03 DPC Created -01/11/04 DPC Derive from FGAtmosphere - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -SENTRY -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#ifndef FGMSIS_H -#define FGMSIS_H - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include "models/FGAtmosphere.h" -#include "FGFDMExec.h" - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FORWARD DECLARATIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -namespace JSBSim { - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DOCUMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/** Models the MSIS-00 atmosphere. - This is a wrapper for the NRL-MSIS-00 model 2001: - - This C++ format model wraps 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. - @author David Culp -*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -STRUCT DECLARATIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -struct nrlmsise_flags { - int switches[24]; - double sw[24]; - double swc[24]; -}; -/* - * Switches: to turn on and off particular variations use these switches. - * 0 is off, 1 is on, and 2 is main effects off but cross terms on. - * - * Standard values are 0 for switch 0 and 1 for switches 1 to 23. The - * array "switches" needs to be set accordingly by the calling program. - * The arrays sw and swc are set internally. - * - * switches[i]: - * i - explanation - * ----------------- - * 0 - output in centimeters instead of meters - * 1 - F10.7 effect on mean - * 2 - time independent - * 3 - symmetrical annual - * 4 - symmetrical semiannual - * 5 - asymmetrical annual - * 6 - asymmetrical semiannual - * 7 - diurnal - * 8 - semidiurnal - * 9 - daily ap [when this is set to -1 (!) the pointer - * ap_a in struct nrlmsise_input must - * point to a struct ap_array] - * 10 - all UT/long effects - * 11 - longitudinal - * 12 - UT and mixed UT/long - * 13 - mixed AP/UT/LONG - * 14 - terdiurnal - * 15 - departures from diffusive equilibrium - * 16 - all TINF var - * 17 - all TLB var - * 18 - all TN1 var - * 19 - all S var - * 20 - all TN2 var - * 21 - all NLB var - * 22 - all TN3 var - * 23 - turbo scale height var - */ - -struct ap_array { - double a[7]; -}; -/* Array containing the following magnetic values: - * 0 : daily AP - * 1 : 3 hr AP index for current time - * 2 : 3 hr AP index for 3 hrs before current time - * 3 : 3 hr AP index for 6 hrs before current time - * 4 : 3 hr AP index for 9 hrs before current time - * 5 : Average of eight 3 hr AP indicies from 12 to 33 hrs - * prior to current time - * 6 : Average of eight 3 hr AP indicies from 36 to 57 hrs - * prior to current time - */ - - -struct nrlmsise_input { - int year; /* year, currently ignored */ - int doy; /* day of year */ - double sec; /* seconds in day (UT) */ - double alt; /* altitude in kilometers */ - double g_lat; /* geodetic latitude */ - double g_long; /* geodetic longitude */ - double lst; /* local apparent solar time (hours), see note below */ - double f107A; /* 81 day average of F10.7 flux (centered on DOY) */ - double f107; /* daily F10.7 flux for previous day */ - double ap; /* magnetic index(daily) */ - struct ap_array *ap_a; /* see above */ -}; -/* - * NOTES ON INPUT VARIABLES: - * UT, Local Time, and Longitude are used independently in the - * model and are not of equal importance for every situation. - * For the most physically realistic calculation these three - * variables should be consistent (lst=sec/3600 + g_long/15). - * The Equation of Time departures from the above formula - * for apparent local time can be included if available but - * are of minor importance. - * - * f107 and f107A values used to generate the model correspond - * to the 10.7 cm radio flux at the actual distance of the Earth - * from the Sun rather than the radio flux at 1 AU. The following - * site provides both classes of values: - * ftp://ftp.ngdc.noaa.gov/STP/SOLAR_DATA/SOLAR_RADIO/FLUX/ - * - * f107, f107A, and ap effects are neither large nor well - * established below 80 km and these parameters should be set to - * 150., 150., and 4. respectively. - */ - - - -/* ------------------------------------------------------------------- */ -/* ------------------------------ OUTPUT ----------------------------- */ -/* ------------------------------------------------------------------- */ - -struct nrlmsise_output { - double d[9]; /* densities */ - double t[2]; /* temperatures */ -}; -/* - * OUTPUT VARIABLES: - * d[0] - HE NUMBER DENSITY(CM-3) - * d[1] - O NUMBER DENSITY(CM-3) - * d[2] - N2 NUMBER DENSITY(CM-3) - * d[3] - O2 NUMBER DENSITY(CM-3) - * d[4] - AR NUMBER DENSITY(CM-3) - * d[5] - TOTAL MASS DENSITY(GM/CM3) [includes d[8] in td7d] - * d[6] - H NUMBER DENSITY(CM-3) - * d[7] - N NUMBER DENSITY(CM-3) - * d[8] - Anomalous oxygen NUMBER DENSITY(CM-3) - * t[0] - EXOSPHERIC TEMPERATURE - * t[1] - TEMPERATURE AT ALT - * - * - * O, H, and N are set to zero below 72.5 km - * - * t[0], Exospheric temperature, is set to global average for - * altitudes below 120 km. The 120 km gradient is left at global - * average value for altitudes below 72 km. - * - * d[5], TOTAL MASS DENSITY, is NOT the same for subroutines GTD7 - * and GTD7D - * - * SUBROUTINE GTD7 -- d[5] is the sum of the mass densities of the - * species labeled by indices 0-4 and 6-7 in output variable d. - * This includes He, O, N2, O2, Ar, H, and N but does NOT include - * anomalous oxygen (species index 8). - * - * SUBROUTINE GTD7D -- d[5] is the "effective total mass density - * for drag" and is the sum of the mass densities of all species - * in this model, INCLUDING anomalous oxygen. - */ - - - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DECLARATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -class MSIS : public FGAtmosphere -{ -public: - - /// Constructor - MSIS(FGFDMExec*); - /// Destructor - ~MSIS(); - /** Runs the MSIS-00 atmosphere model; called by the Executive - Can pass in a value indicating if the executive is directing the simulation to Hold. - @param Holding if true, the executive has been directed to hold the sim from - advancing time. Some models may ignore this flag, such as the Input - model, which may need to be active to listen on a socket for the - "Resume" command to be given. - @return false if no error */ - bool Run(bool Holding); - - bool InitModel(void); - - /// Does nothing. External control is not allowed. - void UseExternal(void); - -private: - - void Calculate(int day, // day of year (1 to 366) - double sec, // seconds in day (0.0 to 86400.0) - double alt, // altitude, feet - double lat, // geodetic latitude, degrees - double lon // geodetic longitude, degrees - ); - - void Debug(int from); - - nrlmsise_flags flags; - nrlmsise_input input; - nrlmsise_output output; - ap_array aph; - - /* PARMB */ - double gsurf; - double re; - - /* GTS3C */ - double dd; - - /* DMIX */ - double dm04, dm16, dm28, dm32, dm40, dm01, dm14; - - /* MESO7 */ - double meso_tn1[5]; - double meso_tn2[4]; - double meso_tn3[5]; - double meso_tgn1[2]; - double meso_tgn2[2]; - double meso_tgn3[2]; - - /* LPOLY */ - double dfa; - double plg[4][9]; - double ctloc, stloc; - double c2tloc, s2tloc; - double s3tloc, c3tloc; - double apdf, apt[4]; - - void tselec(struct nrlmsise_flags *flags); - void glatf(double lat, double *gv, double *reff); - double ccor(double alt, double r, double h1, double zh); - double ccor2(double alt, double r, double h1, double zh, double h2); - double scalh(double alt, double xm, double temp); - double dnet(double dd, double dm, double zhm, double xmm, double xm); - void splini(double *xa, double *ya, double *y2a, int n, double x, double *y); - void splint(double *xa, double *ya, double *y2a, int n, double x, double *y); - void spline(double *x, double *y, int n, double yp1, double ypn, double *y2); - double zeta(double zz, double zl); - double 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); - double 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); - double g0(double a, double *p); - double sumex(double ex); - double sg0(double ex, double *p, double *ap); - double globe7(double *p, nrlmsise_input *input, nrlmsise_flags *flags); - double glob7s(double *p, nrlmsise_input *input, nrlmsise_flags *flags); - -// GTD7 -// Neutral Atmosphere Empirical Model from the surface to lower exosphere. - void gtd7(nrlmsise_input *input, nrlmsise_flags *flags, nrlmsise_output *output); - -// GTD7D -// This subroutine provides Effective Total Mass Density for output -// d[5] which includes contributions from "anomalous oxygen" which can -// affect satellite drag above 500 km. See the section "output" for -// additional details. - void gtd7d(nrlmsise_input *input, nrlmsise_flags *flags, nrlmsise_output *output); - -// GHP7 -// To specify outputs at a pressure level (press) rather than at -// an altitude. - void ghp7(nrlmsise_input *input, nrlmsise_flags *flags, nrlmsise_output *output, double press); - -// GTS7 -// Thermospheric portion of NRLMSISE-00 - void gts7(nrlmsise_input *input, nrlmsise_flags *flags, nrlmsise_output *output); - -}; - -} // namespace JSBSim - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#endif - diff --git a/src/FDM/JSBSim/models/atmosphere/FGMSISData.cpp b/src/FDM/JSBSim/models/atmosphere/FGMSISData.cpp deleted file mode 100644 index d77e1c51f..000000000 --- a/src/FDM/JSBSim/models/atmosphere/FGMSISData.cpp +++ /dev/null @@ -1,747 +0,0 @@ -// MSIS-00 Data -// Adapted for use in JSBSim -// David Culp, davidculp2@comcast.net - -/* -------------------------------------------------------------------- */ -/* --------- 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. - */ - - - -/* ------------------------------------------------------------------- */ -/* ------------------------ BLOCK DATA GTD7BK ------------------------ */ -/* ------------------------------------------------------------------- */ - -namespace JSBSim { - -/* TEMPERATURE */ -double 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 -}; - -double 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 -}}; -/* S PARAM */ -double 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 -}; - -/* TURBO */ -double 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 } -}; -/* LOWER BOUNDARY */ -double ptm[50] = { - 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 -}; -double 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 }}; - - -double 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 -} }; - -double 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 -} }; - -/* SEMIANNUAL MULT SAM */ -double 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 -}; - - -/* MIDDLE ATMOSPHERE AVERAGES */ -double 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 }; - -} // namespace diff --git a/src/FDM/JSBSim/models/atmosphere/FGMars.cpp b/src/FDM/JSBSim/models/atmosphere/FGMars.cpp deleted file mode 100644 index 6362f70ce..000000000 --- a/src/FDM/JSBSim/models/atmosphere/FGMars.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Module: FGMars.cpp - Author: Jon Berndt - Date started: 1/4/04 - Purpose: Models the Martian atmosphere very simply - Called by: FGFDMExec - - ------------- Copyright (C) 2004 Jon S. Berndt (jon@jsbsim.org) ------------- - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -FUNCTIONAL DESCRIPTION --------------------------------------------------------------------------------- -Models the Martian atmosphere. - -HISTORY --------------------------------------------------------------------------------- -1/04/2004 JSB Created - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -COMMENTS, REFERENCES, and NOTES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include "FGMars.h" -#include - -using namespace std; - -namespace JSBSim { - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS IMPLEMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - - -FGMars::FGMars(FGFDMExec* fdmex) : FGAtmosphere(fdmex) -{ - Name = "FGMars"; - Reng = 53.5 * 44.01; - - bind(); - Debug(0); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void FGMars::Calculate(double altitude) -{ - //Calculate reftemp, refpress, and density - - // LIMIT the temperatures so they do not descend below absolute zero. - - if (altitude < 22960.0) { - Temperature = -25.68 - 0.000548*altitude; // Deg Fahrenheit - } else { - Temperature = -10.34 - 0.001217*altitude; // Deg Fahrenheit - } - Pressure = 14.62*exp(-0.00003*altitude); // psf - 14.62 psf =~ 7 millibars - Density = Pressure/(Reng*Temperature); // slugs/ft^3 (needs deg R. as input - - //cout << "Atmosphere: h=" << altitude << " rho= " << intDensity << endl; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// The bitmasked value choices are as follows: -// unset: In this case (the default) JSBSim would only print -// out the normally expected messages, essentially echoing -// the config files as they are read. If the environment -// variable is not set, debug_lvl is set to 1 internally -// 0: This requests JSBSim not to output any messages -// whatsoever. -// 1: This value explicity requests the normal JSBSim -// startup messages -// 2: This value asks for a message to be printed out when -// a class is instantiated -// 4: When this value is set, a message is displayed when a -// FGModel object executes its Run() method -// 8: When this value is set, various runtime state variables -// are printed out periodically -// 16: When set various parameters are sanity checked and -// a message is printed out when they go out of bounds - -void FGMars::Debug(int from) -{ - if (debug_lvl <= 0) return; - - if (debug_lvl & 1) { // Standard console startup message output - if (from == 0) { // Constructor - } - } - if (debug_lvl & 2 ) { // Instantiation/Destruction notification - if (from == 0) cout << "Instantiated: FGMars" << endl; - if (from == 1) cout << "Destroyed: FGMars" << endl; - } - if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects - } - if (debug_lvl & 8 ) { // Runtime state variables - } - if (debug_lvl & 16) { // Sanity checking - } - if (debug_lvl & 32) { // Turbulence - } - if (debug_lvl & 64) { - if (from == 0) { // Constructor - } - } -} - -} // namespace JSBSim diff --git a/src/FDM/JSBSim/models/atmosphere/FGMars.h b/src/FDM/JSBSim/models/atmosphere/FGMars.h deleted file mode 100644 index a16825571..000000000 --- a/src/FDM/JSBSim/models/atmosphere/FGMars.h +++ /dev/null @@ -1,76 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Header: FGMars.h - Author: Jon Berndt - Date started: 01/05/2004 - - ------------- Copyright (C) 2004 Jon S. Berndt (jon@jsbsim.org) ------------- - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -HISTORY --------------------------------------------------------------------------------- -01/05/2004 JSB Created - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -SENTRY -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#ifndef FGMars_H -#define FGMars_H - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include "models/FGAtmosphere.h" - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FORWARD DECLARATIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -namespace JSBSim { - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DOCUMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/** Models the Martian atmosphere. - @author Jon Berndt -*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DECLARATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -class FGMars : public FGAtmosphere { -public: - /// Constructor - FGMars(FGFDMExec*); - -private: - void Calculate(double altitude); - - void Debug(int from); -}; - -} // namespace JSBSim - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#endif -