minor fixes
This commit is contained in:
		
							parent
							
								
									55972aeef1
								
							
						
					
					
						commit
						8552ff7ff1
					
				| @ -49,13 +49,13 @@ nrlmsise00 | ||||
| ''' | ||||
| 
 | ||||
| import numpy as np | ||||
| from astropy.time import Time | ||||
| from scipy.interpolate import CubicSpline | ||||
| from astropy.time import Time | ||||
| from pyshtools.legendre import PLegendreA,PlmIndex | ||||
| import pkg_resources | ||||
| 
 | ||||
| from .spaceweather import get_sw | ||||
| from ..utils.utils import wraplon,hms2s,hms2h | ||||
| from ..utils.utils import wraplon,hms_conver | ||||
| 
 | ||||
| # ======================== read data block ========================== # | ||||
| 
 | ||||
| @ -728,7 +728,7 @@ def gtd7d(inputp, flags): | ||||
|     output['d']['RHO'] = 1.66E-24 * (4 * output['d']['He'] + 16 * output['d']['O'] + 28 * output['d']['N2']\ | ||||
|                                      + 32 * output['d']['O2'] + 40 * output['d']['AR'] + output['d']['H'] + 14 * output['d']['N'] + 16 * output['d']['ANM O']) | ||||
| 
 | ||||
|     output['d']['RHO'] = output['d']['RHO']/1000 | ||||
|     output['d']['RHO'] = output['d']['RHO']/1e3 | ||||
|     return output | ||||
| 
 | ||||
| # =============================== gts7 ------------------------------ # | ||||
| @ -1022,14 +1022,58 @@ def gts7(inputp,flags,gsurf,re): | ||||
| 
 | ||||
| # ============================ nrlmsise00 =========================== # | ||||
| 
 | ||||
| def nrlmsise00(t,lat,lon,alt,SW_OBS_PRE,omode='NoOxygen',aphmode='NoAph'): | ||||
| def nrlmsise00(t,location,SW_OBS_PRE,anmomode=True,aphmode=True): | ||||
|     """ | ||||
|     NRLMSISE-00 is an empirical, global reference atmospheric model of the Earth from ground to space up to 1000km. | ||||
|     It models the density and temperature at a specific location(geodetic coordinates) and time. | ||||
|     A primary use of this model is to aid predictions of satellite orbital decay due to atmospheric drag.  | ||||
| 
 | ||||
|     Units:  | ||||
|         number density of atmosphere's components: [1/m^3] | ||||
|         density: [kg/m^3] | ||||
|         temperature: [K] | ||||
| 
 | ||||
|     Example: | ||||
|     >>> t = '2019-08-20 23:10:59'  | ||||
|     >>> lat,lon,alt = 3,5,900  | ||||
|     >>> params,rho,T,nd = nrlmsise00(t,(lat,lon,alt),swdata) | ||||
|     >>> print(params) | ||||
|     >>> print(rho)  | ||||
|     >>> print(T)  | ||||
|     >>> print(nd)    | ||||
| 
 | ||||
|     Usage: | ||||
|     params,rho,T,nd = nrlmsise00(t,(lat,lon,alt),swdata,omode='Oxygen',aphmode = 'Aph')     | ||||
| 
 | ||||
|     Inputs: | ||||
|     t -> [str] time(UTC) | ||||
|     location -> [tuple/list] geodetic latitude, longitude in [degree], and altitude in [km] | ||||
| 
 | ||||
|     Parameters: | ||||
|     anmomode -> [bool] whether to add anomalous oxygen component to the density; defalut = True | ||||
|     aphmode -> [bool] whether to use the 3h geomagnetic index, default = False | ||||
| 
 | ||||
|     Output: | ||||
|     params -> [dict] parameters involved in computations, including Year, DayOfYear(DOY), SecondOfDay(SOD),  | ||||
|               Latitude[deg], Longitude[deg], Altitude[km], LocalSolarTime(LST), f107Average(f107A) [10^-22 W/m^2/Hz] | ||||
|               f107Daily(f107D) [10^-22 W/m^2/Hz], ApDaily(ApD), Ap3Hourly(Ap3H) | ||||
|     rho -> [float] total mass density, [kg/m^3] | ||||
|     T -> [tuple] exospheric and local temperature, [K] | ||||
|     nd -> [dict] number density of components, [1/m^3]; mainly include Helium(He), Oxygen(O), Oxygen(O2), Nitrogen(N), | ||||
|           Nitrogen(N2), Argon(Ar), Hydrogen(H), Anomalous Oxygen(ANM O) | ||||
|     """ | ||||
| 
 | ||||
|     lat,lon,h = location | ||||
| 
 | ||||
|     # calculate the altitude above sea level from height | ||||
|     alt = h | ||||
|          | ||||
|     t = Time(t) | ||||
|     lon_wrap = wraplon(lon) | ||||
|     t_yday = t.yday.split(':') | ||||
|     t_ymd = t.iso.split()[0].split('-') | ||||
|     year,doy = int(t_yday[0]),int(t_yday[1]) | ||||
|     sec = hms2s(int(t_yday[2]),int(t_yday[3]),float(t_yday[4])) | ||||
|     hour = hms2h(int(t_yday[2]),int(t_yday[3]),float(t_yday[4])) | ||||
|     hour,sec = hms_conver(int(t_yday[2]),int(t_yday[3]),float(t_yday[4])) | ||||
|     lst = hour + wraplon(lon)/15 | ||||
|     if alt > 80: | ||||
|         f107A,f107,ap,aph = get_sw(SW_OBS_PRE,t_ymd,hour) | ||||
| @ -1039,18 +1083,17 @@ def nrlmsise00(t,lat,lon,alt,SW_OBS_PRE,omode='NoOxygen',aphmode='NoAph'): | ||||
|               'f107A':f107A,'f107':f107,'ap':ap,'ap_a':aph} | ||||
|      | ||||
|     switches = np.ones(23) | ||||
|     if aphmode == 'Aph': | ||||
|         switches[8] = -1 # -1 indicates the use of 3h geomagnetic index | ||||
|     if aphmode: switches[8] = -1 # -1 indicates the use of 3h geomagnetic index | ||||
|          | ||||
|     if omode == 'Oxygen': | ||||
|     if anmomode: | ||||
|         output = gtd7d(inputp,switches) | ||||
|     elif omode == 'NoOxygen': | ||||
|         output = gtd7(inputp,switches) | ||||
|     else: | ||||
|         raise Exception("'{}' should be either 'Oxygen' or 'NoOxygen'".format(o)) | ||||
|         output = gtd7(inputp,switches) | ||||
| 
 | ||||
|     inputp['g_lon'] = lon    | ||||
|     inputp_format = {'Year':inputp['year'],'DayOfYear':inputp['doy'],'SecondOfDay':inputp['sec'],'Latitude[deg]':inputp['g_lat'],'Longitude[deg]':inputp['g_lon'],'Altitude[km]':inputp['alt'],'LocalSolarTime[hours]':inputp['lst'],\ | ||||
|               'f107Average[10^-22 W/m^2/Hz]':inputp['f107A'],'f107Daily[10^-22 W/m^2/Hz]':inputp['f107'],'ApDaily':inputp['ap'],'Ap3Hourly':inputp['ap_a']} | ||||
|     output_format = {'Density':{'He[1/m^3]':output['d']['He'],'O[1/m^3]':output['d']['O'],'N2[1/m^3]':output['d']['N2'],'O2[1/m^3]':output['d']['O2'],'AR[1/m^3]':output['d']['AR'],'H[1/m^3]':output['d']['H'],'N[1/m^3]':output['d']['N'],'ANM O[1/m^3]':output['d']['ANM O'],'RHO[kg/m^3]':output['d']['RHO']},\ | ||||
|               'Temperature':{'TINF[K]':output['t']['TINF'],'TG[K]':output['t']['TG']}}  | ||||
|     return inputp_format,output_format     | ||||
|     params = {'Year':inputp['year'],'DOY':inputp['doy'],'SOD':inputp['sec'],'Lat':inputp['g_lat'],'Lon':inputp['g_lon'],'Alt':inputp['alt'],'LST':inputp['lst'],\ | ||||
|               'f107A':inputp['f107A'],'f107D':inputp['f107'],'ApD':inputp['ap'],'Ap3H':inputp['ap_a']} | ||||
|     rho = output['d']['RHO']           | ||||
|     T = (output['t']['TINF'],output['t']['TG']) | ||||
|     nd = {'He':output['d']['He'],'O':output['d']['O'],'N2':output['d']['N2'],'O2':output['d']['O2'],'Ar':output['d']['AR'],'H':output['d']['H'],'N':output['d']['N'],'ANM O':output['d']['ANM O']} | ||||
|     return params,rho,T,nd   | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user