MSIS90¶
A climatology that implements the MSIS-90 atmospheric model, (Hedin 1991). This is typically used in Sasktran applications as a quick and robust background atmospheric state. The MSIS-90 model was built by the ionospheric/thermospheric community using mass spectrometer and incohorent radar scatter data to provide background atmospheric state in ther thermosphere under varying geomagntic conditions. The model was coupled to CIRA-86 (Chandra 1990 and Fleming 1990) to provide atmospheric state for altitudes between the ground and ~120 km.
Most sasktran applications only require atmospheric state below 100 km and only utilize the CIRA-86 part of the MSIS model. Thus we have configured the default implementation of the MSIS-90 model to only provide the 3 basic atmospheric state parameters, pressure, temperature and number density and a fourth parameter, molecular oxygen number density, between 0 km and 120 km.
Users may configure the MSIS-90 climatology using the objects properties outlined below to fetch six other species over a larger height range with specific geomagnetic and solar flux conditions. Users are referered to Hedin’s 1991 publication for details on how to configure the parameters. The current sasktran MSIS model does not provide any method to access the TSELEC function describes in the fortran code.
Supported Species¶
The MSIS-90 object supports up to 10 species which are listed in the table below. Four of the species are always loaded while the remaining six are only loaded if explicitly requested by calling property AddSpecies. We recommend that extra parameters are requested shortly after construction as part of the initialization process. Once a species has been added to a specific MSIS instance it cannot be removed.
Sasktran Handle |
Description |
Units |
Availability |
---|---|---|---|
SKCLIMATOLOGY_AIRNUMBERDENSITY_CM3 |
Air Number density |
molecules/cm3 |
Always |
SKCLIMATOLOGY_PRESSURE_PA |
Pressure in |
Pascals |
Always |
SKCLIMATOLOGY_TEMPERATURE_K |
Temperature |
Kelvin |
Always |
SKCLIMATOLOGY_O2_CM3 |
Molecular oxygen number density |
molecules/cm3 |
Always |
SKCLIMATOLOGY_O2_O2_CM6 |
O2-O2 square density for CIA |
molecule^2/cm6 |
Always |
SKCLIMATOLOGY_O_CM3 |
Atomic oxygen number density |
molecules/cm3 |
AddSpecies |
SKCLIMATOLOGY_N2_CM3 |
Molecular nitrogen number density |
molecules/cm3 |
AddSpecies |
SKCLIMATOLOGY_N_CM3 |
Atomic nitrogen number density |
molecules/cm3 |
AddSpecies |
SKCLIMATOLOGY_He_CM3 |
Helium number density |
molecules/cm3 |
AddSpecies |
SKCLIMATOLOGY_Ar_CM3 |
Argon number density |
molecules/cm3 |
AddSpecies |
SKCLIMATOLOGY_H_CM3 |
Atomic hydrogen number density |
molecules/cm3 |
AddSpecies |
Cache Snapshot¶
The MSIS model caches a single vertical profile when ISKClimatology.UpdateCache()
is called. Consequently the MSIS
climatology object does not provide the horizontal variation of parameters within Sasktran calculations which only
extract values from the cached profile.
Python extension¶
The MSIS90 climatology is in the sasktran_core extension which is part of the default sasktran installation.
Configuration¶
The MSIS90 climatology needs no external preparation.
Properties¶
F10.7Avg¶
- F10.7Avg(double flux) [Default: flux=150.0]
Sets the 3 month average of the F10.7 flux. The default value is 150.0
F10.7¶
- F10.7(double flux) [Default: flux=150.0]
Sets the daily F10.7 flux for the previous day. The default value is 150.0
Ap¶
- Ap( array ap)[ Default: array[] = 4.0]
A 7 element array that defines the prevailing geomagnetic conditions used by the MSIS model. The default value is a 7 element array with each element equal to 4.0
Daily Ap.
3 hour Ap index for the current time.
3 hour Ap index for 3 hours before the current time.
3 hour Ap index for 6 hours before the current time.
3 hour Ap index for 9 hours before the current time.
Average of eight 3 hour Ap indicies from 12 to 33 hours prior to current time.
Average of eight 3 hour Ap indicies from 36 to 59 hours prior to current time.
MaxHeightKMS¶
- MaxHeightKMS(double h)[Default h = 120.0]
Sets the nominal maximum height that will calculated by the model. This option defaults to 120.0 which is a suitable value for most sasktran applications.
HeightSpacingKMS¶
- HeightSpacingKMS(double s)[Default s = 1.0]
Sets the spacing in kilometers between sample points internally stored by the model. THe default value is 1.0. There is probably very little benefit in changing this parameter from its default. It is provided for completeness. Once a species has been added to a specific MSIS instance it cannot be removed.
AddSpecies¶
- MSIS90.AddSpecies(str handle)¶
Requests that the MSIS climatology load the requested species. The variable handle must be one of the 10 supported variables and represented as a string, e.g. ‘SKCLIMATOLOGY_O_CM3’. Note that handles are case sensitive.
Examples¶
Using MSIS below 120 km¶
In this example we show how to fetch the pressure at an altitude of 25 km at 50N, -102E on mjd 53000.45:
import sasktranif as skif
climate = skif.ISKClimatology('MSIS90')
location = [50.0, -102.0, 25000.0, 53000.45]
ok, pressure = climate.GetParameter( 'SKCLIMATOLOGY_PRESSURE_PA', location );
Using MSIS within the thermosphere¶
In this example we demonstrate how to use the MSIS climatology object to get height profiles of various atmospheric components up to 300 km. The main
import sasktranif as skif
import numpy as np
import matplotlib.pyplot as plt
skmsis = skif.ISKClimatology('MSIS90')
maxheight= 300.0
f10p7 = 150.0
f10p7avg = 150.0
Ap = [ 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]
skmsis.SetProperty( 'F10.7Avg', f10p7)
skmsis.SetProperty( 'F10.7', f10p7avg)
skmsis.SetProperty( 'Ap', Ap)
skmsis.SetProperty( 'MaxHeightKMS', maxheight)
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_O_CM3') # Request that MSIS loads these species.
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_He_CM3')
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_N2_CM3')
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_Ar_CM3')
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_H_CM3')
skmsis.SetProperty( 'AddSpecies', 'SKCLIMATOLOGY_N_CM3')
location = [52.0, -102.0, 0.0, 57005.0]
h = np.arange( 300)
skmsis.UpdateCache( location )
ok,O = skmsis.GetHeightProfile('SKCLIMATOLOGY_O_CM3', location, h*1000.0 )
ok,O2 = skmsis.GetHeightProfile('SKCLIMATOLOGY_O2_CM3', location, h*1000.0 )
ok,He = skmsis.GetHeightProfile('SKCLIMATOLOGY_He_CM3', location, h*1000.0 )
ok,N2 = skmsis.GetHeightProfile('SKCLIMATOLOGY_N2_CM3', location, h*1000.0 )
ok,Ar = skmsis.GetHeightProfile('SKCLIMATOLOGY_Ar_CM3', location, h*1000.0 )
ok,N = skmsis.GetHeightProfile('SKCLIMATOLOGY_N_CM3', location, h*1000.0 )
ok,H = skmsis.GetHeightProfile('SKCLIMATOLOGY_H_CM3', location, h*1000.0 )
ok,ND = skmsis.GetHeightProfile('SKCLIMATOLOGY_AIRNUMBERDENSITY_CM3', location, h*1000.0 )
ok,P = skmsis.GetHeightProfile('SKCLIMATOLOGY_PRESSURE_PA', location, h*1000.0 )
ok,T = skmsis.GetHeightProfile('SKCLIMATOLOGY_TEMPERATURE_K', location, h*1000.0 )
plt.figure(1)
plt.plot( np.log10(O), h, 'k.-')
plt.plot( np.log10(O2), h, 'r.-')
plt.plot( np.log10(He), h, 'g.-')
plt.plot( np.log10(N2), h, 'b.-')
plt.plot( np.log10(Ar), h, 'c.-')
plt.plot( np.log10(N), h, 'm.-')
plt.plot( np.log10(H), h, 'y.-')
plt.plot( np.log10(ND), h, 'y.-')
plt.plot( np.log10(P), h, 'r.-')
plt.plot( np.log10(T), h, 'g.-')
plt.legend( ['O','O2','He','N2','Ar','N','H','Num Density','Pressure','Temperature'] )
plt.ylabel('Height Kms')
plt.xlabel('Log10(Number density)');
plt.title('MSIS Example height profiles')
plt.show()
References¶
Fleming, E.L., S. Chandra, J.J. Barnett and M. Corney (1990), Zonal mean temperature, pressure, zonal wind, and geopotential height as functions of latitude, COSPAR International Reference Atmosphere: 1986, Part II: Middle Atmosphere Models, Adv. Space Res., 10, 12, 11-59, doi:10.1016/0273-1177(90)90386-E.
Chandra, S., E.L. Fleming, M.R. Schoeberl, J.J. Barnett, (1990), Monthly mean global climatology of temperature, wind, geopotential height and pressure for 0–120 km, Advances in Space Research, 10, 6, 3-12, doi.org/10.1016/0273-1177(90)90230-W.
Hedin, A. E. (1991), Extension of the MSIS Thermosphere Model into the middle and lower atmosphere, J. Geophys. Res., 96 ( A2), 1159– 1172, doi:10.1029/90JA02125