54 profile_isa => atmos_profile_isa
56 hydrometeor_lhv => atmos_hydrometeor_lhv
58 hydrostatic_buildrho => atmos_hydrostatic_buildrho, &
59 hydrostatic_buildrho_atmos => atmos_hydrostatic_buildrho_atmos, &
60 hydrostatic_buildrho_bytemp => atmos_hydrostatic_buildrho_bytemp
62 saturation_psat_all => atmos_saturation_psat_all, &
63 saturation_pres2qsat_all => atmos_saturation_pres2qsat_all, &
64 saturation_pres2qsat_liq => atmos_saturation_pres2qsat_liq
107 integer,
public,
parameter ::
i_rico = 15
122 integer,
public,
parameter ::
i_real = 25
136 private :: bubble_setup
137 private :: sbmaero_setup
138 private :: aerosol_setup
140 private :: mkinit_planestate
141 private :: mkinit_tracerbubble
142 private :: mkinit_coldbubble
143 private :: mkinit_lambwave
144 private :: mkinit_gravitywave
145 private :: mkinit_khwave
146 private :: mkinit_turbulence
147 private :: mkinit_cavityflow
148 private :: mkinit_mountainwave
149 private :: mkinit_barocwave
151 private :: mkinit_warmbubble
152 private :: mkinit_supercell
153 private :: mkinit_squallline
154 private :: mkinit_wk1982
155 private :: mkinit_dycoms2_rf01
156 private :: mkinit_dycoms2_rf02
157 private :: mkinit_rico
158 private :: mkinit_bomex
160 private :: mkinit_landcouple
161 private :: mkinit_oceancouple
162 private :: mkinit_urbancouple
163 private :: mkinit_seabreeze
164 private :: mkinit_heatisland
166 private :: mkinit_dycoms2_rf02_dns
168 private :: mkinit_real
170 private :: mkinit_grayzone
172 private :: mkinit_boxaero
173 private :: mkinit_warmbubbleaero
179 real(
rp),
private,
parameter :: thetastd = 300.0_rp
181 real(
rp),
private,
allocatable :: pres (:,:,:)
182 real(
rp),
private,
allocatable :: temp (:,:,:)
183 real(
rp),
private,
allocatable :: pott (:,:,:)
184 real(
rp),
private,
allocatable :: qdry (:,:,:)
185 real(
rp),
private,
allocatable :: qsat (:,:,:)
186 real(
rp),
private,
allocatable :: qv (:,:,:)
187 real(
rp),
private,
allocatable :: qc (:,:,:)
188 real(
rp),
private,
allocatable :: nc (:,:,:)
189 real(
rp),
private,
allocatable :: velx (:,:,:)
190 real(
rp),
private,
allocatable :: vely (:,:,:)
191 real(
rp),
private,
allocatable :: ptrc (:,:,:)
193 real(
rp),
private,
allocatable :: pres_sfc(:,:)
194 real(
rp),
private,
allocatable :: temp_sfc(:,:)
195 real(
rp),
private,
allocatable :: pott_sfc(:,:)
196 real(
rp),
private,
allocatable :: psat_sfc(:,:)
197 real(
rp),
private,
allocatable :: qsat_sfc(:,:)
198 real(
rp),
private,
allocatable :: qv_sfc (:,:)
199 real(
rp),
private,
allocatable :: qc_sfc (:,:)
201 real(
rp),
private,
allocatable :: rndm (:,:,:)
202 real(
rp),
private,
allocatable,
target :: bubble (:,:,:)
203 real(
rp),
private,
allocatable,
target :: rect (:,:,:)
204 real(
rp),
private,
allocatable :: gan (:)
213 character(len=H_SHORT) :: mkinit_initname =
'NONE'
215 namelist / param_mkinit / &
222 log_info(
"MKINIT_setup",*)
'Setup'
228 log_info(
"MKINIT_setup",*)
'Not found namelist. Default used.'
229 elseif( ierr > 0 )
then
230 log_error(
"MKINIT_setup",*)
'Not appropriate names in namelist PARAM_MKINIT. Check!'
233 log_nml(param_mkinit)
235 allocate( pres(
ka,
ia,
ja) )
236 allocate( temp(
ka,
ia,
ja) )
237 allocate( pott(
ka,
ia,
ja) )
238 allocate( qdry(
ka,
ia,
ja) )
239 allocate( qsat(
ka,
ia,
ja) )
243 allocate( velx(
ka,
ia,
ja) )
244 allocate( vely(
ka,
ia,
ja) )
245 allocate( ptrc(
ka,
ia,
ja) )
247 allocate( pres_sfc(
ia,
ja) )
248 allocate( temp_sfc(
ia,
ja) )
249 allocate( pott_sfc(
ia,
ja) )
250 allocate( psat_sfc(
ia,
ja) )
251 allocate( qsat_sfc(
ia,
ja) )
252 allocate( qv_sfc(
ia,
ja) )
253 allocate( qc_sfc(
ia,
ja) )
255 allocate( rndm(
ka,
ia,
ja) )
256 allocate( bubble(
ka,
ia,
ja) )
257 allocate( rect(
ka,
ia,
ja) )
260 select case(trim(mkinit_initname))
302 case(
'INTERPORATION')
319 case(
'DYCOMS2_RF02_DNS')
327 case(
'WARMBUBBLEAERO')
335 log_error(
"MKINIT_setup",*)
'Unsupported TYPE:', trim(mkinit_initname)
344 subroutine mkinit( output )
359 logical,
intent(out) :: output
364 logical :: convert_qtrc
370 log_progress(*)
'skip making initial data'
374 log_progress(*)
'start making initial data'
401 qtrc(:,:,:,:) = 0.0_rp
403 qhyd(:,:,:,:) = 0.0_rp
405 qnum(:,:,:,:) = 0.0_rp
409 convert_qtrc = .true.
413 call mkinit_planestate
415 call mkinit_tracerbubble
417 call mkinit_coldbubble
421 call mkinit_gravitywave
425 call mkinit_turbulence
427 call mkinit_mountainwave
429 call mkinit_warmbubble
431 call mkinit_supercell
433 call mkinit_squallline
437 call mkinit_dycoms2_rf01
439 call mkinit_dycoms2_rf02
445 call mkinit_planestate
446 call mkinit_oceancouple
448 call mkinit_planestate
449 call mkinit_landcouple
451 call mkinit_planestate
452 call mkinit_urbancouple
454 call mkinit_planestate
455 call mkinit_oceancouple
456 call mkinit_landcouple
457 call mkinit_urbancouple
459 call mkinit_planestate
460 call mkinit_warmbubble
461 call mkinit_oceancouple
462 call mkinit_landcouple
463 call mkinit_urbancouple
465 call mkinit_planestate
466 call mkinit_seabreeze
468 call mkinit_planestate
469 call mkinit_heatisland
471 call mkinit_dycoms2_rf02_dns
474 convert_qtrc = .false.
480 call mkinit_warmbubbleaero
482 call mkinit_cavityflow
484 call mkinit_barocwave
486 log_error(
"MKINIT",*)
'Unsupported TYPE:',
mkinit_type
494 call sbmaero_setup( convert_qtrc )
499 qhyd(:,:,:,
i_hc) = qc(:,:,:)
501 qnum(:,:,:,
i_hc) = nc(:,:,:)
503 qv(:,:,:), qhyd(:,:,:,:), &
510 if ( iq > 0 )
qtrc(:,:,:,iq) = ptrc(:,:,:)
514 log_progress(*)
'end making initial data'
525 subroutine bubble_setup
531 logical :: bbl_eachnode = .false.
532 real(
rp) :: bbl_cz = 2.e3_rp
533 real(
rp) :: bbl_cx = 2.e3_rp
534 real(
rp) :: bbl_cy = 2.e3_rp
535 real(
rp) :: bbl_rz = 0.0_rp
536 real(
rp) :: bbl_rx = 0.0_rp
537 real(
rp) :: bbl_ry = 0.0_rp
538 character(len=H_SHORT) :: bbl_functype =
'COSBELL'
540 namelist / param_bubble / &
550 real(
rp) :: cz_offset
551 real(
rp) :: cx_offset
552 real(
rp) :: cy_offset
553 real(
rp) :: distx, disty, distz
555 real(
rp) :: domain_rx, domain_ry
562 log_info(
"BUBBLE_setup",*)
'Setup'
568 log_info(
"BUBBLE_setup",*)
'Not found namelist. Default used.'
569 elseif( ierr > 0 )
then
570 log_error(
"BUBBLE_setup",*)
'Not appropriate names in namelist PARAM_BUBBLE. Check!'
573 log_nml(param_bubble)
575 if ( abs(bbl_rz*bbl_rx*bbl_ry) <= 0.0_rp )
then
576 log_info(
"BUBBLE_setup",*)
'no bubble'
577 bubble(:,:,:) = 0.0_rp
582 if ( bbl_eachnode )
then
586 domain_rx = fx(
ie) - fx(
is-1)
587 domain_ry = fy(
je) - fy(
js-1)
601 distz = ( (cz(
k)-cz_offset-bbl_cz)/bbl_rz )**2
603 distx = min( ( (cx(i)-cx_offset-bbl_cx )/bbl_rx )**2, &
604 ( (cx(i)-cx_offset-bbl_cx-domain_rx)/bbl_rx )**2, &
605 ( (cx(i)-cx_offset-bbl_cx+domain_rx)/bbl_rx )**2 )
607 disty = min( ( (cy(j)-cy_offset-bbl_cy )/bbl_ry )**2, &
608 ( (cy(j)-cy_offset-bbl_cy-domain_ry)/bbl_ry )**2, &
609 ( (cy(j)-cy_offset-bbl_cy+domain_ry)/bbl_ry )**2 )
611 select case(bbl_functype)
613 bubble(
k,i,j) = cos( 0.5_rp*pi*sqrt( min(distz+distx+disty,1.0_rp) ) )**2
615 bubble(
k,i,j) = exp( -(distz+distx+disty) )
617 log_error(
"BUBBLE_setup",*)
'Not appropriate BBL_functype. Check!', trim(bbl_functype)
626 end subroutine bubble_setup
636 logical :: RCT_eachnode = .false.
637 real(RP) :: RCT_CZ = 2.e3_rp
638 real(RP) :: RCT_CX = 2.e3_rp
639 real(RP) :: RCT_CY = 2.e3_rp
640 real(RP) :: RCT_RZ = 2.e3_rp
641 real(RP) :: RCT_RX = 2.e3_rp
642 real(RP) :: RCT_RY = 2.e3_rp
644 namelist / param_rect / &
653 real(RP) :: CZ_offset
654 real(RP) :: CX_offset
655 real(RP) :: CY_offset
663 log_info(
"RECT_setup",*)
'Setup'
669 log_error(
"RECT_setup",*)
'Not found namelist. Check!'
671 elseif( ierr > 0 )
then
672 log_error(
"RECT_setup",*)
'Not appropriate names in namelist PARAM_RECT. Check!'
679 if ( rct_eachnode )
then
694 dist = 2.0_rp * max( &
695 abs(cz(k) - cz_offset - rct_cz)/rct_rz, &
696 abs(cx(i) - cx_offset - rct_cx)/rct_rx, &
697 abs(cy(j) - cy_offset - rct_cy)/rct_ry &
699 if ( dist <= 1.0_rp )
then
713 subroutine aerosol_setup
726 real(RP),
parameter :: d_min_def = 1.e-9_rp
727 real(RP),
parameter :: d_max_def = 1.e-5_rp
728 integer,
parameter :: n_kap_def = 1
729 real(RP),
parameter :: k_min_def = 0.e0_rp
730 real(RP),
parameter :: k_max_def = 1.e0_rp
732 real(RP) :: ccn_init = 50.e+6_rp
734 real(RP) :: m0_init = 0.0_rp
735 real(RP) :: dg_init = 80.e-9_rp
736 real(RP) :: sg_init = 1.6_rp
738 real(RP) :: d_min_inp(3) = d_min_def
739 real(RP) :: d_max_inp(3) = d_max_def
740 real(RP) :: k_min_inp(3) = k_min_def
741 real(RP) :: k_max_inp(3) = k_max_def
742 integer :: n_kap_inp(3) = n_kap_def
744 namelist / param_aero / &
761 log_info(
"AEROSOL_setup",*)
'Setup'
767 log_info(
"AEROSOL_setup",*)
'Not found namelist. Default used!'
768 elseif( ierr > 0 )
then
769 log_error(
"AEROSOL_setup",*)
'Not appropriate names in namelist PARAM_AERO. Check!'
776 qdry(:,:,:) = 1.0_rp - qv(:,:,:) - qc(:,:,:)
799 ccn(:,:,:) = ccn_init
805 end subroutine aerosol_setup
809 subroutine sbmaero_setup( convert_qtrc )
820 logical,
intent(inout) :: convert_qtrc
822 real(RP),
allocatable :: xabnd(:), xactr(:)
824 integer :: iq, i, j, k
833 qtrc(k,i,j,
i_qv) = qv(k,i,j) + qc(k,i,j)
839 if (
nccn /= 0 )
then
854 convert_qtrc = .false.
857 end subroutine sbmaero_setup
860 function faero( f0,r0,x,alpha,rhoa )
865 real(
rp),
intent(in) :: x, f0, r0, alpha, rhoa
870 rad = ( exp(x) * 3.0_rp / 4.0_rp / pi / rhoa )**(1.0_rp/3.0_rp)
872 faero = f0 * (rad/r0)**(-alpha)
891 real(RP) :: FLX_rain = 0.0_rp
892 real(RP) :: FLX_snow = 0.0_rp
893 real(RP) :: FLX_IR_dn = 0.0_rp
894 real(RP) :: FLX_NIR_dn = 0.0_rp
895 real(RP) :: FLX_VIS_dn = 0.0_rp
897 namelist / param_mkinit_flux / &
910 read(
io_fid_conf,nml=param_mkinit_flux,iostat=ierr)
912 log_info(
"flux_setup",*)
'Not found namelist. Default used.'
913 elseif( ierr > 0 )
then
914 log_error(
"flux_setup",*)
'Not appropriate names in namelist PARAM_MKINIT_FLUX. Check!'
917 log_nml(param_mkinit_flux)
921 sflx_rain(i,j) = flx_rain
922 sflx_snow(i,j) = flx_snow
924 sflx_lw_up(i,j) = 0.0_rp
925 sflx_lw_dn(i,j) = flx_ir_dn
926 sflx_sw_up(i,j) = 0.0_rp
927 sflx_sw_dn(i,j) = flx_nir_dn + flx_vis_dn
952 real(RP) :: LND_WATER = 0.15_rp
953 real(RP) :: LND_ICE = 0.00_rp
955 real(RP) :: SFC_albedo_LW = 0.01_rp
956 real(RP) :: SFC_albedo_SW = 0.20_rp
958 namelist / param_mkinit_land / &
974 read(
io_fid_conf,nml=param_mkinit_land,iostat=ierr)
976 log_info(
"land_setup",*)
'Not found namelist. Default used.'
977 elseif( ierr > 0 )
then
978 log_error(
"land_setup",*)
'Not appropriate names in namelist PARAM_MKINIT_LAND. Check!'
981 log_nml(param_mkinit_land)
1023 real(RP) :: OCN_TEMP
1024 real(RP) :: OCN_SALT = 0.0_rp
1025 real(RP) :: OCN_UVEL = 0.0_rp
1026 real(RP) :: OCN_VVEL = 0.0_rp
1027 real(RP) :: ICE_TEMP
1028 real(RP) :: ICE_MASS = 0.0_rp
1029 real(RP) :: SFC_TEMP
1030 real(RP) :: SFC_albedo_LW = 0.04_rp
1031 real(RP) :: SFC_albedo_SW = 0.05_rp
1032 real(RP) :: SFC_Z0M = 1.e-4_rp
1033 real(RP) :: SFC_Z0H = 1.e-4_rp
1034 real(RP) :: SFC_Z0E = 1.e-4_rp
1036 namelist / param_mkinit_ocean / &
1054 ice_temp = 271.35_rp
1059 read(
io_fid_conf,nml=param_mkinit_ocean,iostat=ierr)
1061 log_info(
"ocean_setup",*)
'Not found namelist. Default used.'
1062 elseif( ierr > 0 )
then
1063 log_error(
"ocean_setup",*)
'Not appropriate names in namelist PARAM_MKINIT_OCEAN. Check!'
1066 log_nml(param_mkinit_ocean)
1110 real(RP) :: URB_ROOF_TEMP
1111 real(RP) :: URB_BLDG_TEMP
1112 real(RP) :: URB_GRND_TEMP
1113 real(RP) :: URB_CNPY_TEMP
1114 real(RP) :: URB_CNPY_HMDT = 0.0_rp
1115 real(RP) :: URB_CNPY_WIND = 0.0_rp
1116 real(RP) :: URB_ROOF_LAYER_TEMP
1117 real(RP) :: URB_BLDG_LAYER_TEMP
1118 real(RP) :: URB_GRND_LAYER_TEMP
1119 real(RP) :: URB_ROOF_RAIN = 0.0_rp
1120 real(RP) :: URB_BLDG_RAIN = 0.0_rp
1121 real(RP) :: URB_GRND_RAIN = 0.0_rp
1122 real(RP) :: URB_SFC_TEMP
1123 real(RP) :: URB_ALB_LW = 0.10_rp
1124 real(RP) :: URB_ALB_SW = 0.20_rp
1126 namelist / param_mkinit_urban / &
1133 urb_roof_layer_temp, &
1134 urb_bldg_layer_temp, &
1135 urb_grnd_layer_temp, &
1146 urb_roof_temp = thetastd
1147 urb_bldg_temp = thetastd
1148 urb_grnd_temp = thetastd
1149 urb_cnpy_temp = thetastd
1150 urb_roof_layer_temp = thetastd
1151 urb_bldg_layer_temp = thetastd
1152 urb_grnd_layer_temp = thetastd
1153 urb_sfc_temp = thetastd
1157 read(
io_fid_conf,nml=param_mkinit_urban,iostat=ierr)
1159 log_info(
"urban_setup",*)
'Not found namelist. Default used.'
1160 elseif( ierr > 0 )
then
1161 log_error(
"urban_setup",*)
'Not appropriate names in namelist PARAM_MKINIT_URBAN. Check!'
1164 log_nml(param_mkinit_urban)
1200 real(RP) :: TKE_CONST
1201 real(RP) :: Zi_CONST
1203 namelist / param_mkinit_tke / &
1216 read(
io_fid_conf,nml=param_mkinit_tke,iostat=ierr)
1218 log_info(
"tke_setup",*)
'Not found namelist. Default used.'
1219 elseif( ierr > 0 )
then
1220 log_error(
"tke_setup",*)
'Not appropriate names in namelist PARAM_MKINIT_TKE. Check!'
1223 log_nml(param_mkinit_tke)
1225 if (
i_tke > 0 )
then
1234 if ( qs_bl > 0 )
then
1238 qtrc(k,i,j,qs_bl) = tke_const
1239 qtrc(k,i,j,qs_bl+1:qe_bl) = 0.0_rp
1257 DENS, VELX, VELY, POTT, QV )
1262 real(RP),
intent(out) :: DENS(KA)
1263 real(RP),
intent(out) :: VELX(KA)
1264 real(RP),
intent(out) :: VELY(KA)
1265 real(RP),
intent(out) :: POTT(KA)
1266 real(RP),
intent(out) :: QV (KA)
1268 real(RP) :: TEMP(KA)
1269 real(RP) :: PRES(KA)
1272 character(len=H_LONG) :: ENV_IN_SOUNDING_file =
''
1274 integer,
parameter :: EXP_klim = 100
1277 real(RP) :: SFC_THETA
1278 real(RP) :: SFC_PRES
1281 real(RP) :: EXP_z (EXP_klim+1)
1282 real(RP) :: EXP_pott(EXP_klim+1)
1283 real(RP) :: EXP_qv (EXP_klim+1)
1284 real(RP) :: EXP_u (EXP_klim+1)
1285 real(RP) :: EXP_v (EXP_klim+1)
1287 real(RP) :: fact1, fact2
1292 namelist / param_mkinit_sounding / &
1293 env_in_sounding_file
1297 read(
io_fid_conf,nml=param_mkinit_sounding,iostat=ierr)
1300 log_info(
"read_sounding",*)
'Not found namelist. Default used.'
1301 elseif( ierr > 0 )
then
1302 log_error(
"read_sounding",*)
'Not appropriate names in namelist PARAM_MKINIT_SOUNDING. Check!'
1305 log_nml(param_mkinit_sounding)
1308 log_info(
"read_sounding",*)
'Input sounding file:', trim(env_in_sounding_file)
1311 file = trim(env_in_sounding_file), &
1312 form =
'formatted', &
1316 if ( ierr /= 0 )
then
1317 log_error(
"read_sounding",*)
'[mod_mkinit/read_sounding] Input file not found!'
1321 read(fid,*) sfc_pres, sfc_theta, sfc_qv
1323 log_info(
"read_sounding",*)
'+ Surface pressure [hPa]', sfc_pres
1324 log_info(
"read_sounding",*)
'+ Surface pot. temp [K]', sfc_theta
1325 log_info(
"read_sounding",*)
'+ Surface water vapor [g/kg]', sfc_qv
1328 read(fid,*,iostat=ierr) exp_z(k), exp_pott(k), exp_qv(k), exp_u(k), exp_v(k)
1329 if ( ierr /= 0 )
exit
1337 exp_pott(1) = sfc_theta
1341 exp_z(exp_kmax+1) = 100.e3_rp
1342 exp_pott(exp_kmax+1) = exp_pott(exp_kmax)
1343 exp_qv(exp_kmax+1) = exp_qv(exp_kmax)
1344 exp_u(exp_kmax+1) = exp_u(exp_kmax)
1345 exp_v(exp_kmax+1) = exp_v(exp_kmax)
1347 do k = 1, exp_kmax+1
1348 exp_qv(k) = exp_qv(k) * 1.e-3_rp
1352 pres_sfc(:,:) = sfc_pres * 1.e2_rp
1353 pott_sfc(:,:) = sfc_theta
1355 qv_sfc(:,:) = sfc_qv * 1.e-3_rp
1360 do kref = 2, exp_kmax+1
1361 if ( cz(k) > exp_z(kref-1) &
1362 .AND. cz(k) <= exp_z(kref ) )
then
1364 fact1 = ( exp_z(kref) - cz(k) ) / ( exp_z(kref)-exp_z(kref-1) )
1365 fact2 = ( cz(k) - exp_z(kref-1) ) / ( exp_z(kref)-exp_z(kref-1) )
1367 pott(k) = exp_pott(kref-1) * fact1 &
1368 + exp_pott(kref ) * fact2
1369 qv(k) = exp_qv(kref-1) * fact1 &
1370 + exp_qv(kref ) * fact2
1371 velx(k) = exp_u(kref-1) * fact1 &
1372 + exp_u(kref ) * fact2
1373 vely(k) = exp_v(kref-1) * fact1 &
1374 + exp_v(kref ) * fact2
1383 call hydrostatic_buildrho( ka,
ks,
ke, &
1384 pott(:), qv(:), qc(:), &
1385 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
1387 dens(:), temp(:), pres(:), temp_sfc(1,1) )
1394 subroutine mkinit_planestate
1400 real(RP) :: SFC_THETA
1401 real(RP) :: SFC_PRES
1402 real(RP) :: SFC_RH = 0.0_rp
1404 real(RP) :: ENV_THETA
1405 real(RP) :: ENV_TLAPS = 0.0_rp
1406 real(RP) :: ENV_U = 0.0_rp
1407 real(RP) :: ENV_V = 0.0_rp
1408 real(RP) :: ENV_RH = 0.0_rp
1410 real(RP) :: RANDOM_THETA = 0.0_rp
1411 real(RP) :: RANDOM_U = 0.0_rp
1412 real(RP) :: RANDOM_V = 0.0_rp
1413 real(RP) :: RANDOM_RH = 0.0_rp
1415 namelist / param_mkinit_planestate / &
1434 log_info(
"MKINIT_planestate",*)
'Setup initial state'
1436 sfc_theta = thetastd
1438 env_theta = thetastd
1442 read(
io_fid_conf,nml=param_mkinit_planestate,iostat=ierr)
1445 log_info(
"MKINIT_planestate",*)
'Not found namelist. Default used.'
1446 elseif( ierr > 0 )
then
1447 log_error_cont(*)
'Not appropriate names in namelist PARAM_MKINIT_PLANESTATE. Check!'
1450 log_nml(param_mkinit_planestate)
1455 pott_sfc(i,j) = sfc_theta
1456 pres_sfc(i,j) = sfc_pres
1460 if ( env_theta < 0.0_rp )
then
1462 call profile_isa(
ka,
ks,
ke, &
1475 pott(k,i,j) = env_theta + env_tlaps * real_cz(k,i,j)
1484 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
1485 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
1486 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
1487 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
1498 qdry(:,:,:) = 1.0_rp - qv(:,:,:) - qc(:,:,:)
1500 temp(:,:,:), pres(:,:,:), qdry(:,:,:), &
1503 call random_uniform(rndm)
1506 qsat_sfc(i,j) = epsvap * psat_sfc(i,j) / ( pres_sfc(i,j) - ( 1.0_rp-epsvap ) * psat_sfc(i,j) )
1507 qv_sfc(i,j) = max( 0.0_rp, sfc_rh + ( rndm(
ks-1,i,j) * 2.0_rp - 1.0_rp ) * random_rh ) * 1.e-2_rp * qsat_sfc(i,j)
1510 qv(k,i,j) = max( 0.0_rp, env_rh + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_rh ) * 1.e-2_rp * qsat(k,i,j)
1516 call random_uniform(rndm)
1519 pott_sfc(i,j) = pott_sfc(i,j) + ( rndm(
ks-1,i,j) * 2.0_rp - 1.0_rp ) * random_theta
1522 pott(k,i,j) = pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_theta
1529 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
1530 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
1531 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
1532 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
1534 call comm_vars8(
dens(:,:,:), 1 )
1535 call comm_wait (
dens(:,:,:), 1 )
1537 call random_uniform(rndm)
1541 momx(k,i,j) = ( env_u + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_u ) &
1542 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
1547 call random_uniform(rndm)
1551 momy(k,i,j) = ( env_v + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_v ) &
1552 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
1560 momz(k,i,j) = 0.0_rp
1561 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
1569 end subroutine mkinit_planestate
1573 subroutine mkinit_tracerbubble
1578 real(RP) :: SFC_THETA
1579 real(RP) :: SFC_PRES
1581 real(RP) :: ENV_THETA
1582 real(RP) :: ENV_U = 0.0_rp
1583 real(RP) :: ENV_V = 0.0_rp
1585 character(len=H_SHORT) :: SHAPE_PTracer =
'BUBBLE'
1586 real(RP) :: BBL_PTracer = 1.0_rp
1588 namelist / param_mkinit_tracerbubble / &
1597 real(RP),
pointer :: shapeFac(:,:,:) => null()
1604 log_info(
"MKINIT_tracerbubble",*)
'Setup initial state'
1606 sfc_theta = thetastd
1608 env_theta = thetastd
1612 read(
io_fid_conf,nml=param_mkinit_tracerbubble,iostat=ierr)
1615 log_info(
"MKINIT_tracerbubble",*)
'Not found namelist. Default used.'
1616 elseif( ierr > 0 )
then
1617 log_error(
"MKINIT_tracerbubble",*)
'Not appropriate names in namelist PARAM_MKINIT_TRACERBUBBLE. Check!'
1620 log_nml(param_mkinit_tracerbubble)
1623 pres_sfc(1,1) = sfc_pres
1624 pott_sfc(1,1) = sfc_theta
1627 pott(k,1,1) = env_theta
1631 call hydrostatic_buildrho(
ka,
ks,
ke, &
1632 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
1633 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
1635 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
1641 momz(k,i,j) = 0.0_rp
1644 rhot(k,i,j) = pott(k,1,1) *
dens(k,1,1)
1650 select case(shape_ptracer)
1658 log_error(
"MKINIT_tracerbubble",*)
'SHAPE_PTracer=', trim(shape_ptracer),
' cannot be used on advect. Check!'
1665 ptrc(k,i,j) = bbl_ptracer * shapefac(k,i,j)
1673 end subroutine mkinit_tracerbubble
1685 subroutine mkinit_coldbubble
1689 real(RP) :: SFC_THETA
1690 real(RP) :: SFC_PRES
1692 real(RP) :: ENV_THETA
1694 real(RP) :: BBL_TEMP = -15.0_rp
1696 namelist / param_mkinit_coldbubble / &
1709 log_info(
"MKINIT_coldbubble",*)
'Setup initial state'
1711 sfc_theta = thetastd
1713 env_theta = thetastd
1717 read(
io_fid_conf,nml=param_mkinit_coldbubble,iostat=ierr)
1720 log_info(
"MKINIT_coldbubble",*)
'Not found namelist. Default used.'
1721 elseif( ierr > 0 )
then
1722 log_error(
"MKINIT_coldbubble",*)
'Not appropriate names in namelist PARAM_MKINIT_COLDBUBBLE. Check!'
1725 log_nml(param_mkinit_coldbubble)
1727 rovcp = rdry / cpdry
1730 pres_sfc(1,1) = sfc_pres
1731 pott_sfc(1,1) = sfc_theta
1734 pott(k,1,1) = env_theta
1738 call hydrostatic_buildrho(
ka,
ks,
ke, &
1739 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
1740 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
1742 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
1748 momz(k,i,j) = 0.0_rp
1749 momx(k,i,j) = 0.0_rp
1750 momy(k,i,j) = 0.0_rp
1753 rhot(k,i,j) =
dens(k,1,1) * ( pott(k,1,1) &
1754 + bbl_temp * ( p00/pres(k,1,1) )**rovcp * bubble(k,i,j) )
1760 end subroutine mkinit_coldbubble
1764 subroutine mkinit_lambwave
1768 real(RP) :: SFC_PRES
1770 real(RP) :: ENV_U = 0.0_rp
1771 real(RP) :: ENV_V = 0.0_rp
1772 real(RP) :: ENV_TEMP = 300.0_rp
1774 real(RP) :: BBL_PRES = 100._rp
1776 namelist / param_mkinit_lambwave / &
1790 log_info(
"MKINIT_lambwave",*)
'Setup initial state'
1796 read(
io_fid_conf,nml=param_mkinit_lambwave,iostat=ierr)
1799 log_info(
"MKINIT_lambwave",*)
'Not found namelist. Default used.'
1800 elseif( ierr > 0 )
then
1801 log_error(
"MKINIT_lambwave",*)
'Not appropriate names in namelist PARAM_MKINIT_LAMBWAVE. Check!'
1804 log_nml(param_mkinit_lambwave)
1806 rovcp = rdry / cpdry
1811 dens(k,i,j) = sfc_pres/(rdry*env_temp) * exp( - grav/(rdry*env_temp) * cz(k) )
1812 momz(k,i,j) = 0.0_rp
1817 pres(k,i,j) =
dens(k,i,j) * env_temp * rdry + bbl_pres * bubble(k,i,j)
1819 rhot(k,i,j) =
dens(k,i,j) * env_temp * ( p00/pres(k,i,j) )**rovcp
1825 end subroutine mkinit_lambwave
1830 subroutine mkinit_gravitywave
1834 real(RP) :: SFC_THETA
1835 real(RP) :: SFC_PRES
1837 real(RP) :: ENV_U = 20.0_rp
1838 real(RP) :: ENV_V = 0.0_rp
1839 real(RP) :: ENV_BVF = 0.01_rp
1841 real(RP) :: BBL_THETA = 0.01_rp
1843 namelist / param_mkinit_gravitywave / &
1856 log_info(
"MKINIT_gravitywave",*)
'Setup initial state'
1858 sfc_theta = thetastd
1863 read(
io_fid_conf,nml=param_mkinit_gravitywave,iostat=ierr)
1866 log_info(
"MKINIT_gravitywave",*)
'Not found namelist. Default used.'
1867 elseif( ierr > 0 )
then
1868 log_error(
"MKINIT_gravitywave",*)
'Not appropriate names in namelist PARAM_MKINIT_GRAVITYWAVE. Check!'
1871 log_nml(param_mkinit_gravitywave)
1874 pres_sfc(1,1) = sfc_pres
1875 pott_sfc(1,1) = sfc_theta
1878 pott(k,1,1) = sfc_theta * exp( env_bvf*env_bvf / grav * cz(k) )
1882 call hydrostatic_buildrho(
ka,
ks,
ke, &
1883 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
1884 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
1886 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
1892 momz(k,i,j) = 0.0_rp
1897 rhot(k,i,j) =
dens(k,1,1) * ( pott(k,1,1) + bbl_theta * bubble(k,i,j) )
1904 end subroutine mkinit_gravitywave
1908 subroutine mkinit_khwave
1912 real(RP) :: SFC_THETA
1913 real(RP) :: SFC_PRES
1915 real(RP) :: ENV_L1_ZTOP = 1900.0_rp
1916 real(RP) :: ENV_L3_ZBOTTOM = 2100.0_rp
1917 real(RP) :: ENV_L1_THETA = 300.0_rp
1918 real(RP) :: ENV_L3_THETA = 301.0_rp
1919 real(RP) :: ENV_L1_U = 0.0_rp
1920 real(RP) :: ENV_L3_U = 20.0_rp
1922 real(RP) :: RANDOM_U = 0.0_rp
1924 namelist / param_mkinit_khwave / &
1942 log_info(
"MKINIT_khwave",*)
'Setup initial state'
1944 sfc_theta = thetastd
1949 read(
io_fid_conf,nml=param_mkinit_khwave,iostat=ierr)
1952 log_info(
"MKINIT_khwave",*)
'Not found namelist. Default used.'
1953 elseif( ierr > 0 )
then
1954 log_error(
"MKINIT_khwave",*)
'Not appropriate names in namelist PARAM_MKINIT_KHWAVE. Check!'
1957 log_nml(param_mkinit_khwave)
1960 pres_sfc(1,1) = sfc_pres
1961 pott_sfc(1,1) = sfc_theta
1964 fact = ( cz(k)-env_l1_ztop ) / ( env_l3_zbottom-env_l1_ztop )
1965 fact = max( min( fact, 1.0_rp ), 0.0_rp )
1967 pott(k,1,1) = env_l1_theta * ( 1.0_rp - fact ) &
1968 + env_l3_theta * ( fact )
1972 call hydrostatic_buildrho(
ka,
ks,
ke, &
1973 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
1974 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
1976 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
1982 momz(k,i,j) = 0.0_rp
1983 momy(k,i,j) = 0.0_rp
1984 rhot(k,i,j) =
dens(k,1,1) * pott(k,1,1)
1989 call random_uniform(rndm)
1993 fact = ( cz(k)-env_l1_ztop ) / ( env_l3_zbottom-env_l1_ztop )
1994 fact = max( min( fact, 1.0_rp ), 0.0_rp )
1996 momx(k,i,j) = ( env_l1_u * ( 1.0_rp - fact ) &
1997 + env_l3_u * ( fact ) &
1998 + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_u &
2005 end subroutine mkinit_khwave
2009 subroutine mkinit_turbulence
2015 real(RP) :: SFC_THETA
2016 real(RP) :: SFC_PRES
2017 real(RP) :: SFC_RH = 0.0_rp
2019 real(RP) :: ENV_THETA
2020 real(RP) :: ENV_TLAPS = 4.e-3_rp
2021 real(RP) :: ENV_U = 5.0_rp
2022 real(RP) :: ENV_V = 0.0_rp
2023 real(RP) :: ENV_RH = 0.0_rp
2025 real(RP) :: RANDOM_THETA = 1.0_rp
2026 real(RP) :: RANDOM_U = 0.0_rp
2027 real(RP) :: RANDOM_V = 0.0_rp
2028 real(RP) :: RANDOM_RH = 0.0_rp
2030 namelist / param_mkinit_turbulence / &
2049 log_info(
"MKINIT_turbulence",*)
'Setup initial state'
2051 sfc_theta = thetastd
2053 env_theta = thetastd
2057 read(
io_fid_conf,nml=param_mkinit_turbulence,iostat=ierr)
2060 log_info(
"MKINIT_turbulence",*)
'Not found namelist. Default used.'
2061 elseif( ierr > 0 )
then
2062 log_error(
"MKINIT_turbulence",*)
'Not appropriate names in namelist PARAM_MKINIT_TURBULENCE. Check!'
2065 log_nml(param_mkinit_turbulence)
2068 pres_sfc(1,1) = sfc_pres
2069 pott_sfc(1,1) = sfc_theta
2072 pott(k,1,1) = env_theta + env_tlaps * cz(k)
2076 call hydrostatic_buildrho(
ka,
ks,
ke, &
2077 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
2078 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
2080 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
2084 call saturation_psat_all( temp_sfc(1,1), &
2086 qdry(:,1,1) = 1.0_rp - qv(:,1,1) - qc(:,1,1)
2087 call saturation_pres2qsat_all(
ka,
ks,
ke, &
2088 temp(:,1,1), pres(:,1,1), qdry(:,1,1), &
2091 call random_uniform(rndm)
2094 qsat_sfc(1,1) = epsvap * psat_sfc(i,j) / ( pres_sfc(i,j) - ( 1.0_rp-epsvap ) * psat_sfc(i,j) )
2095 qv_sfc(i,j) = min( 0.0_rp, sfc_rh + ( rndm(
ks-1,i,j) * 2.0_rp - 1.0_rp ) * random_rh ) * 1.e-2_rp * qsat_sfc(1,1)
2098 qv(k,i,j) = min( 0.0_rp, env_rh + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_rh ) * 1.e-2_rp * qsat(k,1,1)
2104 call random_uniform(rndm)
2107 pres_sfc(i,j) = sfc_pres
2108 pott_sfc(i,j) = sfc_theta + ( rndm(
ks-1,i,j) * 2.0_rp - 1.0_rp ) * random_theta
2111 pott(k,i,j) = env_theta + env_tlaps * cz(k) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_theta
2118 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
2119 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
2120 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
2121 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
2123 call comm_vars8(
dens(:,:,:), 1 )
2124 call comm_wait (
dens(:,:,:), 1 )
2126 call random_uniform(rndm)
2130 momx(k,i,j) = ( env_u + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_u ) &
2131 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
2136 call random_uniform(rndm)
2140 momy(k,i,j) = ( env_v + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_v ) &
2141 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
2149 momz(k,i,j) = 0.0_rp
2150 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
2156 end subroutine mkinit_turbulence
2160 subroutine mkinit_cavityflow
2164 real(RP) :: REYNOLDS_NUM = 1.d03
2165 real(RP) :: MACH_NUM = 3.d-2
2166 real(RP) :: Ulid = 1.d01
2167 real(RP) :: PRES0 = 1.d05
2169 namelist / param_mkinit_cavityflow / &
2185 log_info(
"MKINIT_cavityflow",*)
'Setup initial state'
2189 read(
io_fid_conf,nml=param_mkinit_cavityflow,iostat=ierr)
2192 log_info(
"MKINIT_cavityflow",*)
'Not found namelist. Default used.'
2193 elseif( ierr > 0 )
then
2194 log_error(
"MKINIT_cavityflow",*)
'Not appropriate names in namelist PARAM_MKINIT_CAVITYFLOW. Check!'
2197 log_nml(param_mkinit_cavityflow)
2199 gam = cpdry / ( cpdry - rdry )
2200 cs2 = ( ulid / mach_num )**2
2201 temp = cs2 / ( gam * rdry )
2202 dens0 = pres0 / ( rdry * temp )
2204 log_info(
"MKINIT_cavityflow",*)
"DENS = ", dens0
2205 log_info(
"MKINIT_cavityflow",*)
"PRES = ", pres0
2206 log_info(
"MKINIT_cavityflow",*)
"TEMP = ",
rhot(10,10,4)/dens0, temp
2207 log_info(
"MKINIT_cavityflow",*)
"Ulid = ", ulid
2208 log_info(
"MKINIT_cavityflow",*)
"Cs = ", sqrt(cs2)
2214 momz(k,i,j) = 0.0_rp
2215 momx(k,i,j) = 0.0_rp
2216 momy(k,i,j) = 0.0_rp
2218 rhot(k,i,j) = p00/rdry * (p00/pres0)**((rdry - cpdry)/cpdry)
2226 end subroutine mkinit_cavityflow
2230 subroutine mkinit_mountainwave
2234 real(RP) :: SFC_THETA
2235 real(RP) :: SFC_PRES
2237 real(RP) :: ENV_U = 0.0_rp
2238 real(RP) :: ENV_V = 0.0_rp
2240 real(RP) :: SCORER = 2.e-3_rp
2241 real(RP) :: BBL_PTracer = 0.0_rp
2243 namelist / param_mkinit_mountainwave / &
2251 real(RP) :: Ustar2, N2
2258 log_info(
"MKINIT_mountainwave",*)
'Setup initial state'
2260 sfc_theta = thetastd
2265 read(
io_fid_conf,nml=param_mkinit_mountainwave,iostat=ierr)
2268 log_info(
"MKINIT_mountainwave",*)
'Not found namelist. Default used.'
2269 elseif( ierr > 0 )
then
2270 log_error(
"MKINIT_mountainwave",*)
'Not appropriate names in namelist PARAM_MKINIT_MOUNTAINWAVE. Check!'
2273 log_nml(param_mkinit_mountainwave)
2278 pres_sfc(i,j) = sfc_pres
2279 pott_sfc(i,j) = sfc_theta
2286 ustar2 = env_u * env_u + env_v * env_v
2287 n2 = ustar2 * (scorer*scorer)
2289 pott(k,i,j) = sfc_theta * exp( n2 / grav * real_cz(k,i,j) )
2296 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
2297 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
2298 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
2299 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
2305 momz(k,i,j) = 0.0_rp
2308 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
2314 if ( bbl_ptracer > 0.0_rp )
then
2318 ptrc(k,i,j) = bbl_ptracer * bubble(k,i,j)
2325 end subroutine mkinit_mountainwave
2332 subroutine mkinit_barocwave
2350 real(RP) :: REF_TEMP = 288.e0_rp
2351 real(RP) :: REF_PRES = 1.e5_rp
2352 real(RP) :: LAPSE_RATE = 5.e-3_rp
2355 real(RP) :: Phi0Deg = 45.e0_rp
2358 real(RP) :: U0 = 35.e0_rp
2359 real(RP) :: b = 2.e0_rp
2363 real(RP) :: Up = 1.e0_rp
2364 real(RP) :: Lp = 600.e3_rp
2365 real(RP) :: Xc = 2000.e3_rp
2366 real(RP) :: Yc = 2500.e3_rp
2368 namelist / param_mkinit_barocwave / &
2369 ref_temp, ref_pres, lapse_rate, &
2374 real(RP) :: f0, beta0
2376 real(RP) :: geopot(KA,IA,JA)
2377 real(RP) :: eta(KA,IA,JA)
2378 real(RP) :: temp(KA,IA,JA)
2384 real(RP) :: temp_vfunc
2385 real(RP) :: geopot_hvari
2392 integer,
parameter :: ITRMAX = 1000
2393 real(RP),
parameter :: CONV_EPS = 1e-15_rp
2397 log_info(
"MKINIT_barocwave",*)
'Setup initial state'
2401 read(
io_fid_conf,nml=param_mkinit_barocwave,iostat=ierr)
2404 log_info(
"MKINIT_barocwave",*)
'Not found namelist. Default used.'
2405 elseif( ierr > 0 )
then
2406 log_error(
"MKINIT_barocwave",*)
'Not appropriate names in namelist PARAM_MKINIT_BAROCWAVE. Check!'
2409 log_nml(param_mkinit_barocwave)
2414 f0 = 2.0_rp*ohm*sin(phi0deg*pi/180.0_rp)
2415 beta0 = (2.0_rp*ohm/rplanet)*cos(phi0deg*pi/180.0_rp)
2420 eta(:,:,:) = 1.0e-8_rp
2426 yphase = 2.0_rp*pi*y/ly
2429 geopot_hvari = 0.5_rp*u0*( &
2430 (f0 - beta0*y0)*(y - 0.5_rp*ly*(1.0_rp + sin(yphase)/pi)) &
2431 + 0.5_rp*beta0*( y**2 - ly*y/pi*sin(yphase) - 0.5_rp*(ly/pi)**2*(cos(yphase) + 1.0_rp) &
2436 pres_sfc(i,j) = ref_pres
2437 pott_sfc(i,j) = ref_temp - geopot_hvari/rdry
2444 do while( abs(del_eta) > conv_eps )
2445 ln_eta = log(eta(k,i,j))
2447 temp_vfunc = eta(k,i,j)**(rdry*lapse_rate/grav)
2449 ref_temp*temp_vfunc &
2450 + geopot_hvari/rdry*(2.0_rp*(ln_eta/b)**2 - 1.0_rp)*exp(-(ln_eta/b)**2)
2452 ref_temp*grav/lapse_rate*(1.0_rp - temp_vfunc) &
2453 + geopot_hvari*ln_eta*exp(-(ln_eta/b)**2)
2455 del_eta = - ( - grav*cz(k) + geopot(k,i,j) ) &
2456 & *( - eta(k,i,j)/(rdry*temp(k,i,j)) )
2458 eta(k,i,j) = eta(k,i,j) + del_eta
2461 if ( itr > itrmax )
then
2462 log_error(
"MKINIT_barocwave",*)
"Fail the convergence of iteration. Check!"
2463 log_error_cont(*)
"* (X,Y,Z)=", cx(i), cy(j), cz(k)
2464 log_error_cont(*)
"itr=", itr,
"del_eta=", del_eta,
"eta=", eta(k,i,j),
"temp=", temp(k,i,j)
2469 pres(k,i,j) = eta(k,i,j)*ref_pres
2470 dens(k,i,j) = pres(k,i,j)/(rdry*temp(k,i,j))
2471 pott(k,i,j) = temp(k,i,j)*eta(k,i,j)**(-rdry/cpdry)
2477 call hydrostatic_buildrho( ka,
ks,
ke, &
2478 pott(:,i,j), qv(:,i,j), qc(:,i,j), &
2479 pres_sfc(i,j), pott_sfc(i,j), qv_sfc(i,j), qc_sfc(i,j), &
2480 real_cz(:,i,j), real_fz(:,i,j), &
2481 dens(:,i,j), temp(:,i,j), pres(:,i,j), temp_sfc(i,j) )
2490 eta(k,
is,j) = pres(k,
is,j)/ref_pres
2491 ln_eta = log(eta(k,
is,j))
2492 yphase = 2.0_rp*pi*cy(j)/ly
2496 pres(k,
is:
ie,j) = pres(k,
is,j)
2497 momx(k,
is-1:
ie,j) =
dens(k,
is,j)*(-u0*sin(0.5_rp*yphase)**2*ln_eta*exp(-(ln_eta/b)**2))
2501 momy(:,:,:) = 0.0_rp
2502 momz(:,:,:) = 0.0_rp
2510 +
dens(
ks:
ke,i,j)* up*exp( - ((fx(i) - xc)**2 + (cy(j) - yc)**2)/lp**2 )
2515 end subroutine mkinit_barocwave
2519 subroutine mkinit_warmbubble
2525 real(RP) :: SFC_THETA
2526 real(RP) :: SFC_PRES
2527 real(RP) :: SFC_RH = 80.0_rp
2529 real(RP) :: ENV_U = 0.0_rp
2530 real(RP) :: ENV_V = 0.0_rp
2531 real(RP) :: ENV_RH = 80.0_rp
2532 real(RP) :: ENV_L1_ZTOP = 1.e3_rp
2533 real(RP) :: ENV_L2_ZTOP = 14.e3_rp
2534 real(RP) :: ENV_L2_TLAPS = 4.e-3_rp
2535 real(RP) :: ENV_L3_TLAPS = 3.e-2_rp
2537 real(RP) :: BBL_THETA = 1.0_rp
2539 namelist / param_mkinit_warmbubble / &
2556 log_info(
"MKINIT_warmbubble",*)
'Setup initial state'
2559 log_error(
"MKINIT_warmbubble",*)
'QV is not registered'
2563 sfc_theta = thetastd
2568 read(
io_fid_conf,nml=param_mkinit_warmbubble,iostat=ierr)
2571 log_info(
"MKINIT_warmbubble",*)
'Not found namelist. Default used.'
2572 elseif( ierr > 0 )
then
2573 log_error(
"MKINIT_warmbubble",*)
'Not appropriate names in namelist PARAM_MKINIT_WARMBUBBLE. Check!'
2576 log_nml(param_mkinit_warmbubble)
2579 pres_sfc(1,1) = sfc_pres
2580 pott_sfc(1,1) = sfc_theta
2583 if ( cz(k) <= env_l1_ztop )
then
2584 pott(k,1,1) = sfc_theta
2585 elseif( cz(k) < env_l2_ztop )
then
2586 pott(k,1,1) = pott(k-1,1,1) + env_l2_tlaps * ( cz(k)-cz(k-1) )
2588 pott(k,1,1) = pott(k-1,1,1) + env_l3_tlaps * ( cz(k)-cz(k-1) )
2593 call hydrostatic_buildrho(
ka,
ks,
ke, &
2594 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
2595 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
2597 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
2600 call saturation_psat_all( temp_sfc(1,1), &
2602 qsat_sfc(1,1) = epsvap * psat_sfc(1,1) / ( pres_sfc(1,1) - ( 1.0_rp-epsvap ) * psat_sfc(1,1) )
2603 qv_sfc(1,1) = sfc_rh * 1.e-2_rp * qsat_sfc(1,1)
2604 qdry(:,1,1) = 1.0_rp - qv(:,1,1) - qc(:,1,1)
2605 call saturation_pres2qsat_all(
ka,
ks,
ke, &
2606 temp(:,1,1), pres(:,1,1), qdry(:,1,1), &
2609 if ( cz(k) <= env_l1_ztop )
then
2610 qv(k,1,1) = env_rh * 1.e-2_rp * qsat(k,1,1)
2611 elseif( cz(k) <= env_l2_ztop )
then
2612 qv(k,1,1) = env_rh * 1.e-2_rp * qsat(k,1,1)
2619 call hydrostatic_buildrho(
ka,
ks,
ke, &
2620 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
2621 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
2623 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
2629 momz(k,i,j) = 0.0_rp
2634 rhot(k,i,j) =
dens(k,1,1) * ( pott(k,1,1) + bbl_theta * bubble(k,i,j) )
2636 qv(k,i,j) = qv(k,1,1)
2644 end subroutine mkinit_warmbubble
2648 subroutine mkinit_supercell
2654 real(RP) :: VELX(KA)
2655 real(RP) :: VELY(KA)
2656 real(RP) :: POTT(KA)
2657 real(RP) :: QV1D(KA)
2660 real(RP) :: BBL_THETA = 3.d0
2662 namelist / param_mkinit_supercell / &
2670 log_info(
"MKINIT_supercell",*)
'Setup initial state'
2673 log_error(
"MKINIT_supercell",*)
'QV is not registered'
2679 read(
io_fid_conf,nml=param_mkinit_supercell,iostat=ierr)
2682 log_info(
"MKINIT_supercell",*)
'Not found namelist. Default used.'
2683 elseif( ierr > 0 )
then
2684 log_error(
"MKINIT_supercell",*)
'Not appropriate names in namelist PARAM_MKINIT_SUPERCELL. Check!'
2687 log_nml(param_mkinit_supercell)
2694 dens(k,i,j) = rho(k)
2695 momz(k,i,j) = 0.0_rp
2696 momx(k,i,j) = rho(k) * velx(k)
2697 momy(k,i,j) = rho(k) * vely(k)
2700 rhot(k,i,j) = rho(k) * ( pott(k) + bbl_theta * bubble(k,i,j) )
2710 end subroutine mkinit_supercell
2714 subroutine mkinit_squallline
2720 real(RP) :: VELX(KA)
2721 real(RP) :: VELY(KA)
2722 real(RP) :: POTT(KA)
2723 real(RP) :: QV1D(KA)
2725 real(RP) :: RANDOM_THETA = 0.01_rp
2726 real(RP) :: OFFSET_velx = 12.0_rp
2727 real(RP) :: OFFSET_vely = -2.0_rp
2729 namelist / param_mkinit_squallline / &
2739 log_info(
"MKINIT_squallline",*)
'Setup initial state'
2742 log_error(
"MKINIT_squallline",*)
'QV is not registered'
2748 read(
io_fid_conf,nml=param_mkinit_squallline,iostat=ierr)
2751 log_info(
"MKINIT_squallline",*)
'Not found namelist. Default used.'
2752 elseif( ierr > 0 )
then
2753 log_error(
"MKINIT_squallline",*)
'Not appropriate names in namelist PARAM_MKINIT_SQUALLLINE. Check!'
2756 log_nml(param_mkinit_squallline)
2760 call random_uniform(rndm)
2764 dens(k,i,j) = rho(k)
2765 momz(k,i,j) = 0.0_rp
2766 momx(k,i,j) = ( velx(k) - offset_velx ) * rho(k)
2767 momy(k,i,j) = ( vely(k) - offset_vely ) * rho(k)
2768 rhot(k,i,j) = rho(k) * ( pott(k) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * random_theta )
2777 end subroutine mkinit_squallline
2781 subroutine mkinit_wk1982
2787 real(RP) :: SFC_THETA = 300.0_rp
2788 real(RP) :: SFC_PRES
2790 real(RP) :: TR_Z = 12000.0_rp
2791 real(RP) :: TR_THETA = 343.0_rp
2792 real(RP) :: TR_TEMP = 213.0_rp
2793 real(RP) :: SHEAR_Z = 3000.0_rp
2794 real(RP) :: SHEAR_U = 15.0_rp
2795 real(RP) :: QV0 = 14.0_rp
2797 real(RP) :: BBL_THETA = 3.d0
2799 namelist / param_mkinit_wk1982 / &
2810 real(RP) :: rh (KA,IA,JA)
2811 real(RP) :: rh_sfc( IA,JA)
2818 log_info(
"MKINIT_wk1982",*)
'Setup initial state'
2821 log_error(
"MKINIT_wk1982",*)
'QV is not registered'
2828 read(
io_fid_conf,nml=param_mkinit_wk1982,iostat=ierr)
2830 log_info(
"MKINIT_wk1982",*)
'Not found namelist. Default used.'
2831 elseif( ierr > 0 )
then
2832 log_error(
"MKINIT_wk1982",*)
'Not appropriate names in namelist PARAM_MKINIT_WK1982. Check!'
2835 log_nml(param_mkinit_wk1982)
2840 pres_sfc(i,j) = sfc_pres
2841 pott_sfc(i,j) = sfc_theta
2844 if ( real_cz(k,i,j) <= tr_z )
then
2845 pott(k,i,j) = pott_sfc(i,j) &
2846 + ( tr_theta - pott_sfc(i,j) ) * ( real_cz(k,i,j) / tr_z )**1.25_rp
2848 pott(k,i,j) = tr_theta * exp( grav * ( real_cz(k,i,j) - tr_z ) / cpdry / tr_temp )
2856 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
2857 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
2858 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
2859 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
2864 rh_sfc(i,j) = 1.0_rp - 0.75_rp * ( real_fz(
ks-1,i,j) / tr_z )**1.25_rp
2867 if ( real_cz(k,i,j) <= tr_z )
then
2868 rh(k,i,j) = 1.0_rp - 0.75_rp * ( real_cz(k,i,j) / tr_z )**1.25_rp
2876 call saturation_psat_all( ia,
isb,
ieb, ja,
jsb,
jeb, &
2879 qdry(:,:,:) = 1.0_rp - qv(:,:,:) - qc(:,:,:)
2881 temp(:,:,:), pres(:,:,:), qdry(:,:,:), &
2885 qv0 = qv0 / ( 1.0_rp + qv0 )
2889 qsat_sfc(i,j) = epsvap * psat_sfc(i,j) / ( pres_sfc(i,j) - ( 1.0_rp-epsvap ) * psat_sfc(i,j) )
2890 qv_sfc(i,j) = min( rh_sfc(i,j) * qsat_sfc(i,j), qv0 )
2892 qv(k,i,j) = min( rh(k,i,j) * qsat(k,i,j), qv0 )
2899 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
2900 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
2901 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
2902 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
2905 log_info(
"MKINIT_wk1982",*) k, real_cz(k,
is,
js), pres(k,
is,
js), pott(k,
is,
js), rh(k,
is,
js), qv(k,
is,
js)*1000
2908 call comm_vars8(
dens(:,:,:), 1 )
2909 call comm_wait (
dens(:,:,:), 1 )
2914 momx(k,i,j) = shear_u * tanh( real_cz(k,i,j) / shear_z ) &
2915 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
2923 momy(k,i,j) = 0.0_rp
2924 momz(k,i,j) = 0.0_rp
2925 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
2928 rhot(k,i,j) =
dens(k,i,j) * ( pott(k,i,j) + bbl_theta * bubble(k,i,j) )
2936 end subroutine mkinit_wk1982
2940 subroutine mkinit_dycoms2_rf01
2952 real(RP) :: PERTURB_AMP = 0.0_rp
2953 integer :: RANDOM_LIMIT = 5
2954 integer :: RANDOM_FLAG = 0
2957 logical :: USE_LWSET = .false.
2959 namelist / param_mkinit_rf01 / &
2965 real(RP) :: potl(KA,IA,JA)
2966 real(RP) :: LHV (KA,IA,JA)
2974 real(RP) :: qdry, Rtot, CPtot
2980 pi2 = atan(1.0_rp) * 2.0_rp
2983 log_info(
"MKINIT_DYCOMS2_RF01",*)
'Setup initial state'
2988 log_error(
"MKINIT_DYCOMS2_RF01",*)
'QV is not registered'
2992 read(
io_fid_conf,nml=param_mkinit_rf01,iostat=ierr)
2994 log_info(
"MKINIT_DYCOMS2_RF01",*)
'Not found namelist. Default used.'
2995 elseif( ierr > 0 )
then
2996 log_error(
"MKINIT_DYCOMS2_RF01",*)
'Not appropriate names in namelist PARAM_MKINIT_RF01. Check!'
2999 log_nml(param_mkinit_rf01)
3001 if ( use_lwset )
then
3011 pres_sfc(i,j) = 1017.8e2_rp
3012 pott_sfc(i,j) = 289.0_rp
3015 velx(k,i,j) = 7.0_rp
3016 vely(k,i,j) = -5.5_rp
3017 if ( cz(k) < 820.0_rp )
then
3018 potl(k,i,j) = 289.0_rp - grav / cpdry * cz(k) * geop_sw
3019 elseif( cz(k) <= 860.0_rp )
then
3020 sint = sin( pi2 * ( cz(k)-840.0_rp ) / 20.0_rp ) * 0.5_rp
3021 potl(k,i,j) = ( 289.0_rp - grav / cpdry * cz(k) * geop_sw ) * (0.5_rp-sint) &
3022 + ( 297.5_rp+sign(abs(cz(k)-840.0_rp)**(1.0_rp/3.0_rp),cz(k)-840.0_rp) &
3023 - grav / cpdry * cz(k) * geop_sw ) * (0.5_rp+sint)
3025 potl(k,i,j) = 297.5_rp + ( cz(k)-840.0_rp )**(1.0_rp/3.0_rp) &
3026 - grav / cpdry * cz(k) * geop_sw
3035 potl(:,:,:), qv(:,:,:), qc(:,:,:), &
3036 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3037 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3038 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3043 qv_sfc(i,j) = 9.0e-3_rp
3046 if ( cz(k) < 820.0_rp )
then
3048 elseif( cz(k) <= 860.0_rp )
then
3049 sint = sin( pi2 * ( cz(k)-840.0_rp ) / 20.0_rp ) * 0.5_rp
3050 qall = 9.0e-3_rp * (0.5_rp-sint) &
3051 + 1.5e-3_rp * (0.5_rp+sint)
3052 elseif( cz(k) <= 5000.0_rp )
then
3058 if ( cz(k) <= 600.0_rp )
then
3060 elseif( cz(k) < 820.0_rp )
then
3061 fact = ( cz(k)-600.0_rp ) / ( 840.0_rp-600.0_rp )
3062 qc(k,i,j) = 0.45e-3_rp * fact
3063 elseif( cz(k) <= 860.0_rp )
then
3064 sint = sin( pi2 * ( cz(k)-840.0_rp ) / 20.0_rp ) * 0.5_rp
3065 fact = ( cz(k)-600.0_rp ) / ( 840.0_rp-600.0_rp )
3066 qc(k,i,j) = 0.45e-3_rp * fact * (0.5_rp-sint)
3071 qv(k,i,j) = qall - qc(k,i,j)
3078 temp(:,:,:), lhv(:,:,:) )
3083 temp(k,i,j) = temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j)
3084 qdry = 1.0_rp - qv(k,i,j) - qc(k,i,j)
3085 rtot = rdry * qdry + rvap * qv(k,i,j)
3086 cptot = cpdry * qdry + cpvap * qv(k,i,j) + cl * qc(k,i,j)
3087 pott(k,i,j) = ( temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j) ) * ( p00 / pres(k,i,j) )**(rtot/cptot)
3094 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
3095 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3096 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3097 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3106 call comm_vars8(
dens(:,:,:), 1 )
3107 call comm_wait (
dens(:,:,:), 1 )
3109 call random_uniform(rndm)
3113 if ( random_flag == 2 .and. k <= random_limit )
then
3114 momz(k,i,j) = ( ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3115 * 0.5_rp * (
dens(k+1,i,j) +
dens(k,i,j) )
3117 momz(k,i,j) = 0.0_rp
3123 call random_uniform(rndm)
3127 if ( random_flag == 2 .AND. k <= random_limit )
then
3128 momx(k,i,j) = ( velx(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3129 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3131 momx(k,i,j) = velx(k,i,j) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3137 call random_uniform(rndm)
3141 if ( random_flag == 2 .AND. k <= random_limit )
then
3142 momy(k,i,j) = ( vely(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3143 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3145 momy(k,i,j) = vely(k,i,j) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3151 call random_uniform(rndm)
3155 if ( random_flag == 1 .and. k <= random_limit )
then
3156 rhot(k,i,j) = ( pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3159 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
3168 if ( qc(k,i,j) > 0.0_rp )
then
3169 nc(k,i,j) = 120.e6_rp /
dens(k,i,j)
3177 end subroutine mkinit_dycoms2_rf01
3181 subroutine mkinit_dycoms2_rf02
3193 real(RP) :: PERTURB_AMP = 0.0_rp
3194 integer :: RANDOM_LIMIT = 5
3195 integer :: RANDOM_FLAG = 0
3199 namelist / param_mkinit_rf02 / &
3204 real(RP) :: potl(KA,IA,JA)
3205 real(RP) :: LHV (KA,IA,JA)
3211 real(RP) :: qdry, Rtot, CPtot
3217 pi2 = atan(1.0_rp) * 2.0_rp
3219 log_info(
"MKINIT_DYCOMS2_RF02",*)
'Setup initial state'
3222 log_error(
"MKINIT_DYCOMS2_RF02",*)
'QV is not registered'
3227 read(
io_fid_conf,nml=param_mkinit_rf02,iostat=ierr)
3229 log_info(
"MKINIT_DYCOMS2_RF02",*)
'Not found namelist. Default used.'
3230 elseif( ierr > 0 )
then
3231 log_error(
"MKINIT_DYCOMS2_RF02",*)
'Not appropriate names in namelist PARAM_MKINIT_RF02. Check!'
3234 log_nml(param_mkinit_rf02)
3237 call random_uniform(rndm)
3241 pres_sfc(i,j) = 1017.8e2_rp
3242 pott_sfc(i,j) = 288.3_rp
3245 velx(k,i,j) = 3.0_rp + 4.3 * cz(k)*1.e-3_rp
3246 vely(k,i,j) = -9.0_rp + 5.6 * cz(k)*1.e-3_rp
3248 if ( cz(k) < 775.0_rp )
then
3249 potl(k,i,j) = 288.3_rp
3250 else if ( cz(k) <= 815.0_rp )
then
3251 sint = sin( pi2 * (cz(k) - 795.0_rp)/20.0_rp )
3252 potl(k,i,j) = 288.3_rp * (1.0_rp-sint)*0.5_rp &
3253 + ( 295.0_rp+sign(abs(cz(k)-795.0_rp)**(1.0_rp/3.0_rp),cz(k)-795.0_rp) ) &
3254 * (1.0_rp+sint)*0.5_rp
3256 potl(k,i,j) = 295.0_rp + ( cz(k)-795.0_rp )**(1.0_rp/3.0_rp)
3264 potl(:,:,:), qv(:,:,:), qc(:,:,:), &
3265 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3266 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3267 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3272 qv_sfc(i,j) = 9.45e-3_rp
3275 if ( cz(k) < 775.0_rp )
then
3277 else if ( cz(k) <= 815.0_rp )
then
3278 sint = sin( pi2 * (cz(k) - 795.0_rp)/20.0_rp )
3279 qall = 9.45e-3_rp * (1.0_rp-sint)*0.5_rp + &
3280 ( 5.e-3_rp - 3.e-3_rp * ( 1.0_rp - exp( (795.0_rp-cz(k))/500.0_rp ) ) ) * (1.0_rp+sint)*0.5_rp
3282 qall = 5.e-3_rp - 3.e-3_rp * ( 1.0_rp - exp( (795.0_rp-cz(k))/500.0_rp ) )
3285 if( cz(k) < 400.0_rp )
then
3287 elseif( cz(k) < 775.0_rp )
then
3288 fact = ( cz(k)-400.0_rp ) / ( 795.0_rp-400.0_rp )
3289 qc(k,i,j) = 0.65e-3_rp * fact
3290 elseif( cz(k) <= 815.0_rp )
then
3291 sint = sin( pi2 * ( cz(k)-795.0_rp )/20.0_rp )
3292 fact = ( cz(k)-400.0_rp ) / ( 795.0_rp-400.0_rp )
3293 qc(k,i,j) = 0.65e-3_rp * fact * (1.0_rp-sint) * 0.5_rp
3297 qv(k,i,j) = qall - qc(k,i,j)
3304 temp(:,:,:), lhv(:,:,:) )
3309 temp(k,i,j) = temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j)
3310 qdry = 1.0_rp - qv(k,i,j) - qc(k,i,j)
3311 rtot = rdry * qdry + rvap * qv(k,i,j)
3312 cptot = cpdry * qdry + cpvap * qv(k,i,j) + cl * qc(k,i,j)
3313 pott(k,i,j) = ( temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j) ) * ( p00 / pres(k,i,j) )**(rtot/cptot)
3320 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
3321 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3322 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3323 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3332 call comm_vars8(
dens(:,:,:), 1 )
3333 call comm_wait (
dens(:,:,:), 1 )
3335 call random_uniform(rndm)
3339 if( random_flag == 2 .and. k <= random_limit )
then
3340 momz(k,i,j) = ( 0.0_rp + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3341 * 0.5_rp * (
dens(k+1,i,j) +
dens(k,i,j) )
3343 momz(k,i,j) = 0.0_rp
3349 call random_uniform(rndm)
3353 if( random_flag == 2 .and. k <= random_limit )
then
3354 momx(k,i,j) = ( velx(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3355 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3357 momx(k,i,j) = ( velx(k,i,j) ) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3363 call random_uniform(rndm)
3367 if( random_flag == 2 .and. k <= random_limit )
then
3368 momy(k,i,j) = ( vely(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3369 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3371 momy(k,i,j) = vely(k,i,j) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3377 call random_uniform(rndm)
3381 if( random_flag == 1 .and. k <= random_limit )
then
3382 rhot(k,i,j) = ( pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3385 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
3394 if ( qc(k,i,j) > 0.0_rp )
then
3395 nc(k,i,j) = 55.0e6_rp /
dens(k,i,j)
3403 end subroutine mkinit_dycoms2_rf02
3407 subroutine mkinit_dycoms2_rf02_dns
3419 real(RP) :: ZB = 750.0_rp
3421 real(RP) :: CONST_U = 0.0_rp
3422 real(RP) :: CONST_V = 0.0_rp
3423 real(RP) :: PRES_ZB = 93060.0_rp
3424 real(RP) :: PERTURB_AMP = 0.0_rp
3425 integer :: RANDOM_LIMIT = 5
3426 integer :: RANDOM_FLAG = 0
3430 namelist / param_mkinit_rf02_dns / &
3431 zb, const_u, const_v,pres_zb,&
3436 real(RP) :: potl(KA,IA,JA)
3437 real(RP) :: LHV (KA,IA,JA)
3443 real(RP) :: qdry, Rtot, CPtot
3449 pi2 = atan(1.0_rp) * 2.0_rp
3452 log_info(
"MKINIT_DYCOMS2_RF02_DNS",*)
'Setup initial state'
3455 log_error(
"MKINIT_DYCOMS2_RF02_DNS",*)
'QV is not registered'
3460 read(
io_fid_conf,nml=param_mkinit_rf02_dns,iostat=ierr)
3462 log_info(
"MKINIT_DYCOMS2_RF02_DNS",*)
'Not found namelist. Default used.'
3463 elseif( ierr > 0 )
then
3464 log_error(
"MKINIT_DYCOMS2_RF02_DNS",*)
'Not appropriate names in namelist PARAM_MKINIT_RF02_DNS. Check!'
3467 log_nml(param_mkinit_rf02_dns)
3470 call random_uniform(rndm)
3474 pres_sfc(i,j) = pres_zb
3480 velx(k,i,j) = const_u
3481 vely(k,i,j) = const_v
3484 if ( zb+cz(k) <= 795.0_rp )
then
3485 potl(k,i,j) = 288.3_rp
3495 potl(k,i,j) = 295.0_rp + ( zb+cz(k)-795.0_rp )**(1.0_rp/3.0_rp)
3496 qall = 5.e-3_rp - 3.e-3_rp * ( 1.0_rp - exp( (795.0_rp-(zb+cz(k)))/500.0_rp ) )
3499 if( zb+cz(k) < 400.0_rp )
then
3501 elseif( zb+cz(k) <= 795.0_rp )
then
3502 fact = ( (zb+cz(k))-400.0_rp ) / ( 795.0_rp-400.0_rp )
3503 qc(k,i,j) = 0.8e-3_rp * fact
3507 qv(k,i,j) = qall - qc(k,i,j)
3516 pott_sfc(:,:) = potl(
ks,:,:)-0.5*(potl(
ks+1,:,:)-potl(
ks,:,:))
3517 qv_sfc(:,:) = qv(
ks,:,:)-0.5*(qv(
ks+1,:,:)-qv(
ks,:,:))
3518 qc_sfc(:,:) = qc(
ks,:,:)-0.5*(qc(
ks+1,:,:)-qc(
ks,:,:))
3522 potl(:,:,:), qv(:,:,:), qc(:,:,:), &
3523 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3524 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3525 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3528 temp(:,:,:), lhv(:,:,:) )
3533 temp(k,i,j) = temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j)
3534 qdry = 1.0_rp - qv(k,i,j) - qc(k,i,j)
3535 rtot = rdry * qdry + rvap * qv(k,i,j)
3536 cptot = cpdry * qdry + cpvap * qv(k,i,j) + cl * qc(k,i,j)
3537 pott(k,i,j) = ( temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j) ) * ( p00 / pres(k,i,j) )**(rtot/cptot)
3544 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
3545 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3546 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3547 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3556 call comm_vars8(
dens(:,:,:), 1 )
3557 call comm_wait (
dens(:,:,:), 1 )
3559 call random_uniform(rndm)
3563 if( random_flag == 2 .and. k <= random_limit )
then
3564 momz(k,i,j) = ( 0.0_rp + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3565 * 0.5_rp * (
dens(k+1,i,j) +
dens(k,i,j) )
3567 momz(k,i,j) = 0.0_rp
3574 call random_uniform(rndm)
3578 if( random_flag == 2 .and. k <= random_limit )
then
3579 momx(k,i,j) = ( velx(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3580 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3582 momx(k,i,j) = ( velx(k,i,j) ) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3589 call random_uniform(rndm)
3593 if( random_flag == 2 .and. k <= random_limit )
then
3594 momy(k,i,j) = ( vely(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3595 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3597 momy(k,i,j) = vely(k,i,j) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3603 call random_uniform(rndm)
3607 if( random_flag == 1 .and. k <= random_limit )
then
3608 rhot(k,i,j) = ( pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
3611 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
3620 if ( qc(k,i,j) > 0.0_rp )
then
3621 nc(k,i,j) = 55.0e6_rp /
dens(k,i,j)
3629 end subroutine mkinit_dycoms2_rf02_dns
3633 subroutine mkinit_rico
3645 real(RP):: PERTURB_AMP_PT = 0.1_rp
3646 real(RP):: PERTURB_AMP_QV = 2.5e-5_rp
3648 namelist / param_mkinit_rico / &
3652 real(RP) :: LHV (KA,IA,JA)
3653 real(RP) :: potl(KA,IA,JA)
3657 real(RP) :: qdry, Rtot, CPtot
3664 log_info(
"MKINIT_RICO",*)
'Setup initial state'
3667 log_error(
"MKINIT_RICO",*)
'QV is not registered'
3672 read(
io_fid_conf,nml=param_mkinit_rico,iostat=ierr)
3674 log_info(
"MKINIT_RICO",*)
'Not found namelist. Default used.'
3675 elseif( ierr > 0 )
then
3676 log_error(
"MKINIT_RICO",*)
'Not appropriate names in namelist PARAM_MKINIT_RICO. Check!'
3679 log_nml(param_mkinit_rico)
3685 pres_sfc(i,j) = 1015.4e2_rp
3686 pott_sfc(i,j) = 297.9_rp
3690 if ( cz(k) < 740.0_rp )
then
3691 potl(k,i,j) = 297.9_rp
3693 fact = ( cz(k)-740.0_rp ) * ( 317.0_rp-297.9_rp ) / ( 4000.0_rp-740.0_rp )
3694 potl(k,i,j) = 297.9_rp + fact
3698 if ( cz(k) <= 4000.0_rp )
then
3699 fact = ( cz(k)-0.0_rp ) * ( -1.9_rp+9.9_rp ) / ( 4000.0_rp-0.0_rp )
3700 velx(k,i,j) = -9.9_rp + fact
3701 vely(k,i,j) = -3.8_rp
3703 velx(k,i,j) = -1.9_rp
3704 vely(k,i,j) = -3.8_rp
3713 potl(:,:,:), qv(:,:,:), qc(:,:,:), &
3714 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3715 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3716 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3721 qv_sfc(i,j) = 16.0e-3_rp
3725 if ( cz(k) <= 740.0_rp )
then
3726 fact = ( cz(k)-0.0_rp ) * ( 13.8e-3_rp-16.0e-3_rp ) / ( 740.0_rp-0.0_rp )
3727 qall = 16.0e-3_rp + fact
3728 elseif ( cz(k) <= 3260.0_rp )
then
3729 fact = ( cz(k)-740.0_rp ) * ( 2.4e-3_rp-13.8e-3_rp ) / ( 3260.0_rp-740.0_rp )
3730 qall = 13.8e-3_rp + fact
3731 elseif( cz(k) <= 4000.0_rp )
then
3732 fact = ( cz(k)-3260.0_rp ) * ( 1.8e-3_rp-2.4e-3_rp ) / ( 4000.0_rp-3260.0_rp )
3733 qall = 2.4e-3_rp + fact
3738 qv(k,i,j) = qall - qc(k,i,j)
3745 temp(:,:,:), lhv(:,:,:) )
3750 temp(k,i,j) = temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j)
3751 qdry = 1.0_rp - qv(k,i,j) - qc(k,i,j)
3752 rtot = rdry * qdry + rvap * qv(k,i,j)
3753 cptot = cpdry * qdry + cpvap * qv(k,i,j) + cl * qc(k,i,j)
3754 pott(k,i,j) = ( temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j) ) * ( p00 / pres(k,i,j) )**(rtot/cptot)
3761 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
3762 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3763 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3764 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3774 call comm_vars8(
dens(:,:,:), 1 )
3775 call comm_wait (
dens(:,:,:), 1 )
3780 momz(k,i,j) = 0.0_rp
3788 momx(k,i,j) = velx(k,i,j) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
3796 momy(k,i,j) = vely(k,i,j) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
3801 call random_uniform(rndm)
3805 rhot(k,i,j) = ( pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp )*perturb_amp_pt ) *
dens(k,i,j)
3810 call random_uniform(rndm)
3814 qv(k,i,j) = qv(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp_qv
3822 if ( qc(k,i,j) > 0.0_rp )
then
3823 nc(k,i,j) = 70.e6_rp /
dens(k,i,j)
3831 end subroutine mkinit_rico
3835 subroutine mkinit_bomex
3847 real(RP):: PERTURB_AMP_PT = 0.1_rp
3848 real(RP):: PERTURB_AMP_QV = 2.5e-5_rp
3850 namelist / param_mkinit_bomex / &
3854 real(RP) :: LHV (KA,IA,JA)
3855 real(RP) :: potl(KA,IA,JA)
3859 real(RP) :: qdry, Rtot, CPtot
3866 log_info(
"MKINIT_BOMEX",*)
'Setup initial state'
3869 log_error(
"MKINIT_BOMEX",*)
'QV is not registered'
3874 read(
io_fid_conf,nml=param_mkinit_bomex,iostat=ierr)
3876 log_info(
"MKINIT_BOMEX",*)
'Not found namelist. Default used.'
3877 elseif( ierr > 0 )
then
3878 log_error(
"MKINIT_BOMEX",*)
'Not appropriate names in namelist PARAM_MKINIT_BOMEX. Check!'
3881 log_nml(param_mkinit_bomex)
3887 pres_sfc(i,j) = 1015.e2_rp
3888 pott_sfc(i,j) = 299.1_rp
3892 if ( cz(k) < 520.0_rp )
then
3893 potl(k,i,j) = 298.7_rp
3894 elseif( cz(k) < 1480.0_rp )
then
3895 fact = ( cz(k)-520.0_rp ) * ( 302.4_rp-298.7_rp ) / ( 1480.0_rp-520.0_rp )
3896 potl(k,i,j) = 298.7_rp + fact
3897 elseif( cz(k) < 2000.0_rp )
then
3898 fact = ( cz(k)-1480.0_rp ) * ( 308.2_rp-302.4_rp ) / ( 2000.0_rp-1480.0_rp )
3899 potl(k,i,j) = 302.4_rp + fact
3901 fact = ( cz(k)-2000.0_rp ) * 3.65e-3_rp
3902 potl(k,i,j) = 308.2_rp + fact
3906 if ( cz(k) <= 700.0_rp )
then
3907 velx(k,i,j) = -8.75_rp
3908 vely(k,i,j) = 0.0_rp
3910 fact = 1.8e-3_rp * ( cz(k)-700.0_rp )
3911 velx(k,i,j) = -8.75_rp + fact
3912 vely(k,i,j) = 0.0_rp
3921 potl(:,:,:), qv(:,:,:), qc(:,:,:), &
3922 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3923 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3924 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3929 qv_sfc(i,j) = 22.45e-3_rp
3933 if ( cz(k) <= 520.0_rp )
then
3934 fact = ( cz(k)-0.0_rp ) * ( 16.3e-3_rp-17.0e-3_rp ) / ( 520.0_rp-0.0_rp )
3935 qall = 17.0e-3_rp + fact
3936 elseif ( cz(k) <= 1480.0_rp )
then
3937 fact = ( cz(k)-520.0_rp ) * ( 10.7e-3_rp-16.3e-3_rp ) / ( 1480.0_rp-520.0_rp )
3938 qall = 16.3e-3_rp + fact
3939 elseif( cz(k) <= 2000.0_rp )
then
3940 fact = ( cz(k)-1480.0_rp ) * ( 4.2e-3_rp-10.7e-3_rp ) / ( 2000.0_rp-1480.0_rp )
3941 qall = 10.7e-3_rp + fact
3943 fact = ( cz(k)-2000.0_rp ) * ( -1.2e-6_rp )
3944 qall = 4.2e-3_rp + fact
3947 qv(k,i,j) = qall - qc(k,i,j)
3954 temp(:,:,:), lhv(:,:,:) )
3959 qdry = 1.0_rp - qv(k,i,j) - qc(k,i,j)
3960 rtot = rdry * qdry + rvap * qv(k,i,j)
3961 cptot = cpdry * qdry + cpvap * qv(k,i,j) + cl * qc(k,i,j)
3962 pott(k,i,j) = ( temp(k,i,j) + lhv(k,i,j) / cpdry * qc(k,i,j) ) * ( p00 / pres(k,i,j) )**(rtot/cptot)
3969 pott(:,:,:), qv(:,:,:), qc(:,:,:), &
3970 pres_sfc(:,:), pott_sfc(:,:), qv_sfc(:,:), qc_sfc(:,:), &
3971 real_cz(:,:,:), real_fz(:,:,:), area(:,:), &
3972 dens(:,:,:), temp(:,:,:), pres(:,:,:), temp_sfc(:,:) )
3982 call comm_vars8(
dens(:,:,:), 1 )
3983 call comm_wait (
dens(:,:,:), 1 )
3988 momz(k,i,j) = 0.0_rp
3996 momx(k,i,j) = velx(k,i,j) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
4004 momy(k,i,j) = vely(k,i,j) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
4009 call random_uniform(rndm)
4013 if( cz(k) <= 1600.0_rp )
then
4014 rhot(k,i,j) = ( pott(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp_pt ) *
dens(k,i,j)
4016 rhot(k,i,j) = pott(k,i,j) *
dens(k,i,j)
4022 call random_uniform(rndm)
4026 if( cz(k) <= 1600.0_rp )
then
4027 qv(k,i,j) = qv(k,i,j) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp_qv
4036 if ( qc(k,i,j) > 0.0_rp )
then
4037 nc(k,i,j) = 70.e6_rp /
dens(k,i,j)
4045 end subroutine mkinit_bomex
4049 subroutine mkinit_oceancouple
4053 log_info(
"MKINIT_oceancouple",*)
'Setup initial state'
4060 end subroutine mkinit_oceancouple
4064 subroutine mkinit_landcouple
4068 log_info(
"MKINIT_landcouple",*)
'Setup initial state'
4075 end subroutine mkinit_landcouple
4079 subroutine mkinit_urbancouple
4083 log_info(
"MKINIT_urbancouple",*)
'Setup initial state'
4090 end subroutine mkinit_urbancouple
4094 subroutine mkinit_seabreeze
4109 real(RP) :: LAND_SIZE
4111 namelist / param_mkinit_seabreeze / &
4119 log_info(
"MKINIT_seabreeze",*)
'Setup initial state'
4125 read(
io_fid_conf,nml=param_mkinit_seabreeze,iostat=ierr)
4128 log_info(
"MKINIT_seabreeze",*)
'Not found namelist. Default used.'
4129 elseif( ierr > 0 )
then
4130 log_error(
"MKINIT_seabreeze",*)
'Not appropriate names in namelist PARAM_MKINIT_SEABREEZE. Check!'
4133 log_nml(param_mkinit_seabreeze)
4144 if ( abs( cx(i) - domain_center_x ) < land_size )
then
4160 end subroutine mkinit_seabreeze
4164 subroutine mkinit_heatisland
4180 log_info(
"MKINIT_heatisland",*)
'Setup initial state'
4194 if ( cx(i) >= dist * 4.0_rp &
4195 .AND. cx(i) < dist * 5.0_rp )
then
4210 end subroutine mkinit_heatisland
4214 subroutine mkinit_grayzone
4220 real(RP) :: VELX(KA)
4221 real(RP) :: VELY(KA)
4222 real(RP) :: POTT(KA)
4223 real(RP) :: QV1D(KA)
4225 real(RP) :: PERTURB_AMP = 0.0_rp
4226 integer :: RANDOM_LIMIT = 0
4227 integer :: RANDOM_FLAG = 0
4231 namelist / param_mkinit_grayzone / &
4241 log_info(
"MKINIT_grayzone",*)
'Setup initial state'
4244 log_error(
"MKINIT_grayzone",*)
'QV is not registered'
4250 read(
io_fid_conf,nml=param_mkinit_grayzone,iostat=ierr)
4253 log_info(
"MKINIT_grayzone",*)
'Not found namelist. Default used.'
4254 elseif( ierr > 0 )
then
4255 log_error(
"MKINIT_grayzone",*)
'Not appropriate names in namelist PARAM_MKINIT_GRAYZONE. Check!'
4258 log_nml(param_mkinit_grayzone)
4267 dens(k,i,j) = rho(k)
4285 call random_uniform(rndm)
4289 if ( random_flag == 2 .and. k <= random_limit )
then
4290 momz(k,i,j) = ( ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
4291 * 0.5_rp * (
dens(k+1,i,j) +
dens(k,i,j) )
4293 momz(k,i,j) = 0.0_rp
4299 call random_uniform(rndm)
4303 if ( random_flag == 2 .AND. k <= random_limit )
then
4304 momx(k,i,j) = ( velx(k) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
4305 * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
4307 momx(k,i,j) = velx(k) * 0.5_rp * (
dens(k,i+1,j) +
dens(k,i,j) )
4313 call random_uniform(rndm)
4317 if ( random_flag == 2 .AND. k <= random_limit )
then
4318 momy(k,i,j) = ( vely(k) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
4319 * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
4321 momy(k,i,j) = vely(k) * 0.5_rp * (
dens(k,i,j+1) +
dens(k,i,j) )
4327 call random_uniform(rndm)
4331 if ( random_flag == 1 .and. k <= random_limit )
then
4332 rhot(k,i,j) = ( pott(k) + ( rndm(k,i,j) * 2.0_rp - 1.0_rp ) * perturb_amp ) &
4335 rhot(k,i,j) = pott(k) *
dens(k,i,j)
4342 end subroutine mkinit_grayzone
4346 subroutine mkinit_boxaero
4357 atmos_thermodyn_rhot2temp_pres
4362 real(RP) :: init_dens = 1.12_rp
4363 real(RP) :: init_temp = 298.18_rp
4364 real(RP) :: init_pres = 1.e+5_rp
4365 real(RP) :: init_ssliq = 0.01_rp
4367 namelist / param_mkinit_boxaero / &
4373 real(RP) :: rtot (KA,IA,JA)
4374 real(RP) :: cvtot(KA,IA,JA)
4375 real(RP) :: cptot(KA,IA,JA)
4377 real(RP) :: psat, qsat
4378 integer :: i, j, k, ierr
4382 log_info(
"MKINIT_boxaero",*)
'For [Box model of aerosol],'
4383 log_info(
"MKINIT_boxaero",*)
'ATMOS_PHY_AE_TYPE should be KAJINO13. Stop! ', trim(
atmos_phy_ae_type)
4388 log_error(
"MKINIT_boxaero",*)
'QV is not registered'
4393 log_info(
"MKINIT_boxaero",*)
'Setup initial state'
4397 read(
io_fid_conf,nml=param_mkinit_boxaero,iostat=ierr)
4399 log_info(
"MKINIT_boxaero",*)
'Not found namelist. Default used.'
4400 elseif( ierr > 0 )
then
4401 log_error(
"MKINIT_boxaero",*)
'Not appropriate names in namelist PARAM_MKINIT_BOXAERO. Check!'
4404 log_nml(param_mkinit_boxaero)
4406 call saturation_psat_all( init_temp, psat )
4407 qsat = epsvap * psat / ( init_pres - ( 1.0_rp-epsvap ) * psat )
4412 dens(k,i,j) = init_dens
4413 momx(k,i,j) = 0.0_rp
4414 momy(k,i,j) = 0.0_rp
4415 momz(k,i,j) = 0.0_rp
4416 pott(k,i,j) = init_temp * ( p00/init_pres )**(rdry/cpdry)
4417 rhot(k,i,j) = init_dens * pott(k,i,j)
4419 qv(k,i,j) = ( init_ssliq + 1.0_rp ) * qsat
4421 qdry = 1.0 - qv(k,i,j)
4422 rtot(k,i,j) = rdry * qdry + rvap * qv(i,i,j)
4423 cvtot(k,i,j) = cvdry * qdry + cvvap * qv(i,i,j)
4424 cptot(k,i,j) = cpdry * qdry + cpvap * qv(i,i,j)
4429 call atmos_thermodyn_rhot2temp_pres( ka, 1, ka, ia, 1, ia, ja, 1, ja, &
4431 rtot(:,:,:), cvtot(:,:,:), cptot(:,:,:), &
4432 temp(:,:,:), pres(:,:,:) )
4435 end subroutine mkinit_boxaero
4439 subroutine mkinit_warmbubbleaero
4445 real(RP) :: SFC_THETA
4446 real(RP) :: SFC_PRES
4447 real(RP) :: SFC_RH = 80.0_rp
4449 real(RP) :: ENV_U = 0.0_rp
4450 real(RP) :: ENV_V = 0.0_rp
4451 real(RP) :: ENV_RH = 80.0_rp
4452 real(RP) :: ENV_L1_ZTOP = 1.e3_rp
4453 real(RP) :: ENV_L2_ZTOP = 14.e3_rp
4454 real(RP) :: ENV_L2_TLAPS = 4.e-3_rp
4455 real(RP) :: ENV_L3_TLAPS = 3.e-2_rp
4457 real(RP) :: BBL_THETA = 1.0_rp
4459 namelist / param_mkinit_warmbubble / &
4476 log_info(
"MKINIT_warmbubbleaero",*)
'Setup initial state'
4479 log_error(
"MKINIT_warmbubbleaero",*)
'QV is not registerd'
4484 sfc_theta = thetastd
4489 read(
io_fid_conf,nml=param_mkinit_warmbubble,iostat=ierr)
4492 log_info(
"MKINIT_warmbubbleaero",*)
'Not found namelist. Default used.'
4493 elseif( ierr > 0 )
then
4494 log_error(
"MKINIT_warmbubbleaero",*)
'Not appropriate names in namelist PARAM_MKINIT_WARMBUBBLE. Check!'
4497 log_nml(param_mkinit_warmbubble)
4500 pres_sfc(1,1) = sfc_pres
4501 pott_sfc(1,1) = sfc_theta
4504 if ( cz(k) <= env_l1_ztop )
then
4505 pott(k,1,1) = sfc_theta
4506 elseif( cz(k) < env_l2_ztop )
then
4507 pott(k,1,1) = pott(k-1,1,1) + env_l2_tlaps * ( cz(k)-cz(k-1) )
4509 pott(k,1,1) = pott(k-1,1,1) + env_l3_tlaps * ( cz(k)-cz(k-1) )
4514 call hydrostatic_buildrho(
ka,
ks,
ke, &
4515 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
4516 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
4518 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
4521 call saturation_psat_all( temp_sfc(1,1), psat_sfc(1,1) )
4522 qsat_sfc(1,1) = epsvap * psat_sfc(1,1) / ( pres_sfc(1,1) - ( 1.0_rp-epsvap ) * psat_sfc(1,1) )
4524 qdry(:,1,1) = 1.0_rp - qv(:,1,1) - qc(:,1,1)
4525 call saturation_pres2qsat_all(
ka,
ks,
ke, &
4526 temp(:,1,1), pres(:,1,1), qdry(:,1,1), &
4528 qv_sfc(1,1) = sfc_rh * 1.e-2_rp * qsat_sfc(1,1)
4530 if ( cz(k) <= env_l1_ztop )
then
4531 qv(k,1,1) = env_rh * 1.e-2_rp * qsat(k,1,1)
4532 elseif( cz(k) <= env_l2_ztop )
then
4533 qv(k,1,1) = env_rh * 1.e-2_rp * qsat(k,1,1)
4540 call hydrostatic_buildrho(
ka,
ks,
ke, &
4541 pott(:,1,1), qv(:,1,1), qc(:,1,1), &
4542 pres_sfc(1,1), pott_sfc(1,1), qv_sfc(1,1), qc_sfc(1,1), &
4544 dens(:,1,1), temp(:,1,1), pres(:,1,1), temp_sfc(1,1) )
4550 momz(k,i,j) = 0.0_rp
4555 rhot(k,i,j) =
dens(k,1,1) * ( pott(k,1,1) + bbl_theta * bubble(k,i,j) )
4557 qv(k,i,j) = qv(k,1,1)
4565 end subroutine mkinit_warmbubbleaero
4569 subroutine mkinit_real
4589 end subroutine mkinit_real