new script about ussa76
This commit is contained in:
		
							parent
							
								
									0963059303
								
							
						
					
					
						commit
						6468d6a7b9
					
				
							
								
								
									
										106
									
								
								pyatmos/standardatmos/ussa76.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								pyatmos/standardatmos/ussa76.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | |||||||
|  | """ | ||||||
|  | The U.S. Standard Atmosphere 1976(USSA76) is an idealized, steady-state model of | ||||||
|  | mean annual conditions of Earth's atmosphere from the surface to 86 km at | ||||||
|  | latitude 45N, as it is assumed to exist during a period with moderate solar | ||||||
|  | activity. | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | import numpy as np | ||||||
|  | 
 | ||||||
|  | from ..utils import Const | ||||||
|  |      | ||||||
|  | def lapse_tp(t_lower, p_lower, lr, h_lower, h_upper): | ||||||
|  |     ''' | ||||||
|  |     Calculate the temperature and pressure at a given geopotential altitude above base of a specific layer. | ||||||
|  |     The temperature is computed by the linear interpolation with the slope defined by lapse rates.  | ||||||
|  |     The pressure is computed from the hydrostatic equations and the perfect gas law.  | ||||||
|  |     See the detailed documentation in http://www.pdas.com/hydro.pdf | ||||||
|  | 
 | ||||||
|  |     Usage: | ||||||
|  |     [t_upper, p_upper] = lapse_tp(t_lower, p_lower, lr, h_lower, h_upper) | ||||||
|  | 
 | ||||||
|  |     Inputs: | ||||||
|  |     t_lower -> [float] temperature[K] at the lower boundary of the subset in the specific layer | ||||||
|  |     p_lower -> [float] pressure[Pa] at the lower boundary of the subset in the specific layer | ||||||
|  |     lr -> [float] lapse rate[K/m] for the specific layer | ||||||
|  |     h_lower -> [float] geopotential altitude[m] at the lower boundary of the subset in the specific layer | ||||||
|  |     h_upper -> [float] geopotential altitude[m] at the upper boundary of the subset in the specific layer | ||||||
|  |      | ||||||
|  |     Outputs: | ||||||
|  |     t1 -> [float] temperature[K] at the upper boundary of the subset in the specific layer | ||||||
|  |     p1 -> [float] pressure[Pa] at the upper boundary of the subset in the specific layer | ||||||
|  |      | ||||||
|  |     Reference: Public Domain Aeronautical Software(http://www.pdas.com/atmos.html)  | ||||||
|  |                https://gist.github.com/buzzerrookie/5b6438c603eabf13d07e | ||||||
|  |     ''' | ||||||
|  |     R_air,g0 = Const.R_air,Const.g0 | ||||||
|  | 
 | ||||||
|  |     if lr == 0: | ||||||
|  |         t_upper = t_lower | ||||||
|  |         p_upper = p_lower * np.exp(-g0 / R_air / t_lower * (h_upper - h_lower)*1e3) | ||||||
|  |     else: | ||||||
|  |         t_upper = t_lower + lr * (h_upper - h_lower) | ||||||
|  |         p_upper = p_lower * (t_upper / t_lower) ** (-g0 / (lr/1e3) / R_air) | ||||||
|  | 
 | ||||||
|  |     return t_upper,p_upper | ||||||
|  | 
 | ||||||
|  | def ussa76(h): | ||||||
|  |     ''' | ||||||
|  |     Implements the U.S. Standard Atmosphere 1976(USSA76) up to 86km.  | ||||||
|  |     The standard atmosphere is defined as a set of layers by specified geopotential altitudes and lapse rates. | ||||||
|  |     The temperature is computed by linear interpolation with the slope defined by the lapse rate.  | ||||||
|  |     The pressure is computed from the hydrostatic equations and the perfect gas law; the density follows from the perfect gas law.  | ||||||
|  | 
 | ||||||
|  |     Usage: | ||||||
|  |     [rho, T, P, C, eta, Kc] = ussa76(h) | ||||||
|  | 
 | ||||||
|  |     Inputs: | ||||||
|  |     h -> [float] geopotentail altitude, [km] | ||||||
|  | 
 | ||||||
|  |     Outputs: | ||||||
|  |     rho -> [float] density at a given altitude, [kg/m^3] | ||||||
|  |     T -> [float] temperature ..., [K] | ||||||
|  |     P -> [float] pressure ..., [Pa] | ||||||
|  |     C -> [float] speed of sound ..., [m/s] | ||||||
|  |     eta -> [float] dynamic viscosity ..., [kg/m/s] | ||||||
|  |     Kc -> [float] thermal conductivity ..., [J/(m*s*K)] | ||||||
|  |      | ||||||
|  |     Note: the geopotential altitude should be in [-0.610,84.852] km, otherwise the output will be extrapolated for those input altitudes. | ||||||
|  | 
 | ||||||
|  |     Reference:  | ||||||
|  |         U.S. Standard Atmosphere, 1976, U.S. Government Printing Office, Washington, D.C.  | ||||||
|  |         Public Domain Aeronautical Software(http://www.pdas.com/atmos.html)  | ||||||
|  |         https://gist.github.com/buzzerrookie/5b6438c603eabf13d07e | ||||||
|  |         https://ww2.mathworks.cn/help/aerotbx/ug/atmosisa. | ||||||
|  |         http://www.braeunig.us/space/atmmodel.htm#USSA1976 | ||||||
|  |     ''' | ||||||
|  |     t0,p0,h0 = Const.t0,Const.p0,Const.h0 | ||||||
|  |     R_air,M0,gamma = Const.R_air,Const.M0,Const.gamma | ||||||
|  | 
 | ||||||
|  |     # the lower atmosphere below 86km is separated into seven layers  | ||||||
|  |     geopotential_alt = [-np.inf, 11, 20, 32, 47, 51, 71, np.inf] # Geopotential altitudes above MSL, [km] | ||||||
|  | 
 | ||||||
|  |     lr = np.array([-6.5, 0, 1, 2.8, 0, -2.8, -2]) # Lapse rate, [K/km]    | ||||||
|  | 
 | ||||||
|  |     for i in range(len(lr)): | ||||||
|  |         if h <= geopotential_alt[i+1]: | ||||||
|  |             T, P = lapse_tp(t0, p0, lr[i], h0, h) | ||||||
|  |             break | ||||||
|  |         else: | ||||||
|  |             # if altitudes are greater than the first several layers, then it has to integeate these layers first. | ||||||
|  |             t0, p0 = lapse_tp(t0, p0, lr[i], h0, geopotential_alt[i+1]) | ||||||
|  |             h0 = geopotential_alt[i+1] | ||||||
|  | 
 | ||||||
|  |     # density | ||||||
|  |     rho = P / (R_air * T) | ||||||
|  | 
 | ||||||
|  |     # speed of sound | ||||||
|  |     C = np.sqrt(gamma * R_air * T) | ||||||
|  | 
 | ||||||
|  |     # dynamic viscosity by Sutherland's law | ||||||
|  |     eta = 1.458e-6*T**1.5/(T+110.4)  | ||||||
|  | 
 | ||||||
|  |     # thermal conductivity | ||||||
|  |     Kc = 2.64638e-3 * T ** 1.5 / (T + 245.4 * (10 ** (-12.0 / T)))  | ||||||
|  | 
 | ||||||
|  |     return rho,T,P,C,eta,Kc | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user