Coverage for /home/caleb/Documents/University/CHE2703/fluids/fluids/nrlmsise00/nrlmsise_00.py : 99%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# -*- coding: utf-8 -*- 12/19/2013 Author: Joshua Milas Python Version: 3.3.2
The NRLMSISE-00 model 2001 ported to python Based off of Dominik Brodowski 20100516 version available here http://www.brodo.de/english/pub/nrlmsise/
This is the main program that contains all the functions
The MIT License (MIT)
Copyright (c) 2016 Joshua Milas <Josh.Milas@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* -------------------------------------------------------------------- */ /* --------- 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 * 20041227 * * 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 mail@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. */ """
""" /* ------------------------------------------------------------------- */ /* ------------------------- SHARED VARIABLES ------------------------ */ /* ------------------------------------------------------------------- */ """
#/* PARMB */
#/* GTS3C */
#/* DMIX */
#/* MESO7 */
#/* POWER7 */ #/* LOWER7 */ #Dont to need to do anyt of the externs, they are all here
#/* LPOLY */
#since rgas is used eerywehre usignthe same variable, ill make it glboal #rgas = 831.44621 #rgas = 831.4 """ /* ------------------------------------------------------------------- */ /* ------------------------------ TSELEC ----------------------------- */ /* ------------------------------------------------------------------- */ """
else:
else: else:
""" /* ------------------------------------------------------------------- */ /* ------------------------------ GLATF ------------------------------ */ /* ------------------------------------------------------------------- */ """
#Need to return these since the c program wants pointers to these
""" /* ------------------------------------------------------------------- */ /* ------------------------------ CCOR ------------------------------- */ /* ------------------------------------------------------------------- */ """ """ /* CHEMISTRY/DISSOCIATION CORRECTION FOR MSIS MODELS * ALT - altitude * R - target ratio * H1 - transition scale length * ZH - altitude of 1/2 R */ """ return exp(0) # pragma: no cover return exp(r)
''' /* ------------------------------------------------------------------- */ /* ------------------------------ CCOR ------------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* 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 ? */ ''' if ((e1 > 70) or (e2 > 70)): # pragma: no cover return exp(0) if ((e1 < -70) and (e2 < -70)): # pragma: no cover return exp(r)
""" /* ------------------------------------------------------------------- */ /* ------------------------------- SCALH ----------------------------- */ /* ------------------------------------------------------------------- */ """ #rgas = 831.44621 #maybe make this a global constant?
''' /* ------------------------------------------------------------------- */ /* -------------------------------- DNET ----------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* 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 */ ''' if( not((dm>0) and (dd>0))): # pragma: no cover if((dd==0) and (dm==0)): dd=1 if(dm==0): return dd if(dd==0): return dm
if(ylog>10): # pragma: no cover return dm
''' /* ------------------------------------------------------------------- */ /* ------------------------------- SPLINI ---------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* 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 */ ''' else:
''' /* ------------------------------------------------------------------- */ /* ------------------------------- SPLINT ---------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* CALCULATE CUBIC SPLINE INTERP VALUE * ADAPTED FROM NUMERICAL RECIPES BY PRESS ET AL. * XA,YA: ARRAYS OF TABULATED FUNCTION IN ASCENDING ORDER BY X * Y2A: ARRAY OF SECOND DERIVATIVES * N: SIZE OF ARRAYS XA,YA,Y2A * X: ABSCISSA FOR INTERPOLATION * Y: OUTPUT VALUE */ '''
else:
''' /* ------------------------------------------------------------------- */ /* ------------------------------- SPLINE ---------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* 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 */ '''
#no need for the out of memory
if (yp1 > 0.99E30): # pragma: no cover y2[0] = 0 u[0] = 0 else:
if (ypn>0.99E30): # pragma: no cover qn = 0; un = 0 else:
#it uses a for loop here, but its not something python can do (I dont think) #This for loop might work #for k in range(n-2, -1, -1): # y2[k] = y2[k] * y2[k+1] + u[k] #no need to free u here
''' /* ------------------------------------------------------------------- */ /* ------------------------------- DENSM ----------------------------- */ /* ------------------------------------------------------------------- */ '''
''' /* Calculate Temperature and Density Profiles for lower atmos. */ ''' #rgas = 831.44621 #maybe make this a global constant? if (alt>zn2[0]): # pragma: no cover if(xm==0.0): return tz[0] else: return d0
#/* STRATOSPHERE/MESOSPHERE TEMPERATURE */ else:
#/* set up spline nodes */
#/* calculate spline coefficients */
#/* temperature at altitude */ #/* calaculate stratosphere / mesospehere density */
#/* Integrate temperature profile */ if (expl>50.0): # pragma: no cover expl=50.0
#/* Density at altitude */
else:
#/* troposhere / stratosphere temperature */
#/* set up spline nodes */
#/* calculate spline coefficients */
#/* temperature at altitude */ #/* calaculate tropospheric / stratosphere density */
#/* Integrate temperature profile */ if (expl>50.0): # pragma: no cover expl=50.0;
#/* Density at altitude */
else:
''' /* ------------------------------------------------------------------- */ /* ------------------------------- DENSU ----------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* Calculate Temperature and Density Profiles for MSIS models * New lower thermo polynomial */ tz, zn1, tn1, and tgn1 are simulated pointers ''' #rgas = 831.44621 #maybe make this a global constant?
#/* joining altitudes of Bates and spline */ else:
#/* geopotential altitude difference from ZLB */
#/* Bates temperature */
#/* calculate temperature below ZA # * temperature gradient at ZA from Bates profile */ else: #/* geopotental difference from z1 */ #/* set up spline nodes */
#/* end node derivatives */ #/* calculate spline coefficients */ #/* temperature at altitude */
#/* calculate density above za */ if (expl>50.0): # pragma: no cover expl=50.0; if (tt<=0): # pragma: no cover expl=50.0;
#/* density at altitude */
#/* calculate density below za */
#/* integrate spline temperatures */ if (expl>50.0): # pragma: no cover expl=50.0; if (tz[0]<=0): # pragma: no cover expl=50.0;
#/* density at altitude */
''' /* ------------------------------------------------------------------- */ /* ------------------------------- GLOBE7 ---------------------------- */ /* ------------------------------------------------------------------- */ '''
#/* 3hr Magnetic activity functions */ #/* Eq. A24d */
#/* Eq. A24c */
#/* Eq. A24a */ 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);
''' /* CALCULATE G(L) FUNCTION * Upper Thermosphere Parameters */ '''
#for j in range(14): # t[j] = 0 elif(flags.sw[9] < 0): # pragma: no cover sw9 = -1
#/* calculate legendre polynomials */
#/* plg[0][7] = (13.0*c*plg[0][6] - 6.0*plg[0][5])/7.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; */
global stloc global ctloc global s2tloc global c2tloc global s3tloc global c3tloc
#/* F10.7 EFFECT */ global dfa
#/* TIME INDEPENDENT */ (p[14]*plg[0][2])*dfa*flags.swc[1] +p[26]*plg[0][1];
#/* SYMMETRICAL ANNUAL */
#/* SYMMETRICAL SEMIANNUAL */
#/* ASYMMETRICAL ANNUAL */
#/* ASYMMETRICAL SEMIANNUAL */
#/* DIURNAL */ ctloc + (p[6]*plg[1][1] + p[7]*plg[1][3] + p[28]*plg[1][5] \ + t72)*stloc);
#/* SEMIDIURNAL */
#/* TERDIURNAL */
#/* magnetic activity based on daily ap */ if (exp1>0.99999): # pragma: no cover exp1=0.99999; if (p[24]<1.0E-4): # pragma: no cover p[24]=1.0E-4; #/* apt[1]=sg2(exp1,p,ap->a); # apt[2]=sg0(exp2,p,ap->a); # apt[3]=sg2(exp2,p,ap->a); #*/ (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: if (p44<0): # pragma: no cover p44 = 1.0E-5; global apdf (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])));
#/* longitudinal */ ((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 */ (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]))); (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 */ ((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: ((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 */
''' /* ------------------------------------------------------------------- */ /* ------------------------------- GLOB7S ---------------------------- */ /* ------------------------------------------------------------------- */ ''' ''' /* VERSION OF GLOBE FOR LOWER ATMOSPHERE 10/26/99 */ '''
#/* confirm parameter set */ if (p[99]==0): # pragma: no cover p[99]=pset;
#for j in range(14): #Already taken care of # t[j]=0.0;
#/* F10.7 */
#/* time independent */
#/* SYMMETRICAL ANNUAL */
#/* SYMMETRICAL SEMIANNUAL */
#/* ASYMMETRICAL ANNUAL */
#/* ASYMMETRICAL SEMIANNUAL */
#/* DIURNAL */
#/* SEMIDIURNAL */
#/* TERDIURNAL */
#/* MAGNETIC ACTIVITY */
#/* LONGITUDINAL */ +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));
''' /* ------------------------------------------------------------------- */ /* ------------------------------- GTD7 ------------------------------ */ /* ------------------------------------------------------------------- */ ''' '''The standard model subroutine (GTD7) always computes the ‘‘thermospheric’’ mass density by explicitly summing the masses of the species in equilibrium at the thermospheric temperature T(z). '''
#/* Latitude variation of gravity (none for sw[2]=0) */ if (flags.sw[2]==0): # pragma: no cover xlat=45.0;
#/* THERMOSPHERE / MESOSPHERE (above zn2[0]) */ else:
if (flags.sw[0]): # pragma: no cover #/* metric adjustment */ dm28m= dm28*1.0E6; else:
#/* 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 #*/
#/* LOWER STRATOSPHERE AND TROPOSPHERE (below zn3[0]) #* Temperature at nodes and gradients at end nodes #* Inverse temperature a linear function of spherical harmonics #*/
#/* LINEAR TRANSITION TO FULL MIXING BELOW zn2[0] */
#/**** N2 density ****/
#/**** HE density ****/
#/**** O density ****/
#/**** O2 density ****/
#/**** AR density ***/
#/**** Hydrogen density ****/
#/**** Atomic nitrogen density ****/
#/**** Total mass density */
if (flags.sw[0]): # pragma: no cover output.d[5]=output.d[5]/1000;
#/**** temperature at altitude ****/ global dd
''' /* ------------------------------------------------------------------- */ /* ------------------------------- GTD7D ----------------------------- */ /* ------------------------------------------------------------------- */ ''' def gtd7d(Input, flags, output): # pragma: no cover '''A separate subroutine (GTD7D) computes the ‘‘effec- tive’’ mass density by summing the thermospheric mass density and the mass density of the anomalous oxygen component. Below 500 km, the effective mass density is equivalent to the thermospheric mass density, and we drop the distinction. ''' 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; return
''' /* ------------------------------------------------------------------- */ /* -------------------------------- GHP7 ----------------------------- */ /* ------------------------------------------------------------------- */ ''' def ghp7(Input, flags, output, press): # pragma: no cover bm = 1.3806E-19; rgas = 831.4; #rgas = 831.44621 #maybe make this a global constant? test = 0.00043; ltest = 12;
pl = log10(press)
if (pl >= -5.0): if (pl>2.5): zi = 18.06 * (3.00 - pl); elif ((pl>0.075) and (pl<=2.5)): zi = 14.98 * (3.08 - pl); elif ((pl>-1) and (pl<=0.075)): zi = 17.80 * (2.72 - pl); elif ((pl>-2) and (pl<=-1)): zi = 14.28 * (3.64 - pl); elif ((pl>-4) and (pl<=-2)): zi = 12.72 * (4.32 -pl); elif (pl<=-4): zi = 25.3 * (0.11 - pl); cl = Input.g_lat/90.0; cl2 = cl*cl; if (Input.doy<182): cd = (1.0 - float(Input.doy)) / 91.25; else: cd = (float(Input.doy)) / 91.25 - 3.0; ca = 0; if ((pl > -1.11) and (pl<=-0.23)): ca = 1.0; if (pl > -0.23): ca = (2.79 - pl) / (2.79 + 0.23); if ((pl <= -1.11) and (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; while(True): l += 1; Input.alt = z; gtd7(Input, flags, output); z = Input.alt; xn = output.d[0] + output.d[1] + output.d[2] + output.d[3] + output.d[4] + output.d[6] + output.d[7]; p = bm * xn * output.t[1]; if (flags.sw[0]): p = p*1.0E-6; diff = pl - log10(p); if (sqrt(diff*diff)<test): return;
xm = output.d[5] / xn / 1.66E-24; if (flags.sw[0]): xm = xm * 1.0E3; g = gsurf[0] / (pow((1.0 + z/re[0]),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; return
''' /* ------------------------------------------------------------------- */ /* ------------------------------- GTS7 ------------------------------ */ /* ------------------------------------------------------------------- */ ''' ''' /* Thermospheric portion of NRLMSISE-00 * See GTD7 for more extensive comments * alt > 72.5 km! */ '''
#/* TINF VARIATIONS NOT IMPORTANT BELOW ZA OR ZN1(1) */ (1.0+flags.sw[16]*globe7(pt,Input,flags)); else:
#/* GRADIENT VARIATIONS NOT IMPORTANT BELOW ZN1(5) */ (1.0+flags.sw[19]*globe7(ps,Input,flags)); else:
#/* Lower thermosphere temp variations not significant for # * density above 300 km */ else:
#/* N2 variation factor at Zlb */
#/* VARIATION OF TURBOPAUSE HEIGHT */
#/**** N2 DENSITY ****/
#/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm28 #/* Net density at Alt */
#/**** HE DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm04 #/* Net density at Alt */ #/* Correction to specified mixing ratio at ground */ #/* Net density corrected at Alt */
#/**** O DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm16 #/* Net density at Alt */ #/* Chemistry correction */ #/* Net density corrected at Alt */
#/**** O2 DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm32 #/* Net density at Alt */ #/* Correction to specified mixing ratio at ground */
#/* Correction for general departure from diffusive equilibrium above Zlb */ #/* Net density corrected at Alt */
#/**** AR DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm40 #/* Net density at Alt */ #/* Correction to specified mixing ratio at ground */ #/* Net density corrected at Alt */
#/**** HYDROGEN DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm01 #/* Net density at Alt */ #/* Correction to specified mixing ratio at ground */ #/* Chemistry correction */ #/* Net density corrected at Alt */
#/**** ATOMIC NITROGEN DENSITY ****/
#/* Density variation factor at Zlb */ #/* Diffusive density at Zlb */ #/* Diffusive density at Alt */ #/* Turbopause */ #/* Mixed density at Zlb */ #/* Mixed density at Alt */ global dm14 #/* Net density at Alt */ #/* Correction to specified mixing ratio at ground */ #/* Chemistry correction */ #/* Net density corrected at Alt */
#/**** Anomalous OXYGEN DENSITY ****/
#/* total mass density */
#/* temperature */ if (flags.sw[0]): # pragma: no cover for i in range(9): output.d[i]=output.d[i]*1.0E6; output.d[5]=output.d[5]/1000; |