42 REAL*8 :: cos_theta , sin_theta
80 INTEGER :: n_atm_profile
82 REAL*8,
ALLOCATABLE :: atm_profile(:,:)
84 CHARACTER*10 :: read_atm_profile
86 REAL*8 :: u_r , z_r , exp_wind
88 REAL*8,
ALLOCATABLE :: rho_atm_month_lat(:) , pres_atm_month_lat(:) , &
89 temp_atm_month_lat(:) , temp_atm_month(:,:)
91 REAL*8,
ALLOCATABLE :: h_levels(:)
93 REAL*8 :: wind_mult_coeff
139 REAL*8 :: const, const1, t1, p1, p2
143 REAL*8 :: we_wind , ns_wind
148 IF ( read_atm_profile .EQ.
'card' )
THEN
165 u_atm = dsqrt( we_wind**2 + ns_wind**2 )
167 cos_theta = we_wind / u_atm
168 sin_theta = ns_wind / u_atm
170 ELSEIF ( read_atm_profile .EQ.
'table' )
THEN
181 IF ( z .LE. z_r )
THEN
183 u_atm = u_r * ( ( z - vent_height ) / z_r )**exp_wind
195 ELSEIF ( read_atm_profile .EQ.
'standard' )
THEN
201 IF ( z .LE. z_r )
THEN
203 u_atm = u_r * ( z / z_r )**exp_wind
218 const = - gi / ( rair * gt )
220 p1 = p0 * (t1/t0)**const
221 const1 = gi / ( rair * t1 )
222 p2 = p1 * dexp( -const1 * ( h2-h1 ) )
223 const2 = - gi / ( rair * gs )
230 pa = p0 * ( ta / t0 )**const
231 rho_atm = pa / ( rair*ta )
233 ELSE IF (z > h1 .AND. z <= h2)
THEN
238 pa = p1 * dexp( -const1 * ( z - h1 ) )
239 rho_atm = pa / ( rair * ta )
245 ta = t0 + gt*h1 + gs*(z-h2)
246 pa = p2 * (ta/t1)**const2
247 rho_atm = pa / (rair*ta)
255 visc_atm = visc_atm0 * ( 288.15d0 + cs ) / ( ta + cs ) * ( ta / 288.15d0 )**1.5d0
257 IF ( verbose_level .GE. 1 )
THEN
259 WRITE(*,*) z,rho_atm,pa,ta,u_atm,cos_theta,sin_theta
260 WRITE(*,*)
'visc_atm',visc_atm
284 REAL*8,
INTENT(IN),
DIMENSION(:) :: x1, f1
285 REAL*8,
INTENT(IN) :: x2
286 REAL*8,
INTENT(OUT) :: f2
300 IF (x1(n) <= x2) t = n
304 IF (t==1 .OR. t==n1x)
THEN
310 grad = (f1(t+1)-f1(t))/(x1(t+1)-x1(t))
311 f2 = f1(t) + (x2-x1(t)) * grad
subroutine zmet
Meteo parameters.
subroutine initialize_meteo
Meteo parameters initialization.
subroutine interp_1d_scalar(x1, f1, x2, f2)
Scalar interpolation.