40 private :: canopy_wind
44 private :: multi_layer
45 private :: urban_param_setup
54 real(RP),
private :: dts_max = 0.1_rp
56 real(RP),
private :: zr = 10.0_rp
57 real(RP),
private :: roof_width = 9.0_rp
58 real(RP),
private :: road_width = 11.0_rp
59 real(RP),
private :: sigma_zed = 1.0_rp
60 real(RP),
private :: ah = 17.5_rp
61 real(RP),
private :: alh = 0.0_rp
62 real(RP),
private :: betr = 0.0_rp
63 real(RP),
private :: betb = 0.0_rp
64 real(RP),
private :: betg = 0.0_rp
65 real(RP),
private :: strgr = 0.0_rp
66 real(RP),
private :: strgb = 0.0_rp
67 real(RP),
private :: strgg = 0.0_rp
68 real(RP),
private :: capr = 1.2e6_rp
69 real(RP),
private :: capb = 1.2e6_rp
70 real(RP),
private :: capg = 1.2e6_rp
71 real(RP),
private :: aksr = 2.28_rp
72 real(RP),
private :: aksb = 2.28_rp
73 real(RP),
private :: aksg = 2.28_rp
74 real(RP),
private :: albr = 0.2_rp
75 real(RP),
private :: albb = 0.2_rp
76 real(RP),
private :: albg = 0.2_rp
77 real(RP),
private :: epsr = 0.90_rp
78 real(RP),
private :: epsb = 0.90_rp
79 real(RP),
private :: epsg = 0.90_rp
80 real(RP),
private :: z0r = 0.01_rp
81 real(RP),
private :: z0b = 0.0001_rp
82 real(RP),
private :: z0g = 0.01_rp
83 real(RP),
private :: trlend = 293.00_rp
84 real(RP),
private :: tblend = 293.00_rp
85 real(RP),
private :: tglend = 293.00_rp
86 integer ,
private :: bound = 1
88 real(RP),
private :: ahdiurnal(1:24)
91 real(RP),
private :: r
92 real(RP),
private :: rw
93 real(RP),
private :: hgt
94 real(RP),
private :: z0hr
95 real(RP),
private :: z0hb
96 real(RP),
private :: z0hg
97 real(RP),
private :: z0c
98 real(RP),
private :: z0hc
99 real(RP),
private :: zdc
100 real(RP),
private :: svf
102 real(RP),
private :: xxxr = 0.0_rp
103 real(RP),
private :: xxxc = 0.0_rp
106 integer,
private :: i_shr, i_shb, i_shg
107 integer,
private :: i_lhr, i_lhb, i_lhg
108 integer,
private :: i_ghr, i_ghb, i_ghg
109 integer,
private :: i_rnr, i_rnb, i_rng, i_rngrd
116 UIA, UIS, UIE, UJA, UJS, UJE, &
124 integer,
intent(in) :: UIA, UIS, UIE
125 integer,
intent(in) :: UJA, UJS, UJE
126 real(RP),
intent(out) :: Z0M(uia,uja)
127 real(RP),
intent(out) :: Z0H(uia,uja)
128 real(RP),
intent(out) :: Z0E(uia,uja)
130 namelist / param_urban_dyn_kusaka01 / &
169 log_info(
"URBAN_DYN_kusaka01_setup",*)
'Setup' 173 read(
io_fid_conf,nml=param_urban_dyn_kusaka01,iostat=ierr)
175 log_info(
"URBAN_DYN_kusaka01_setup",*)
'Not found namelist. Default used.' 176 elseif( ierr > 0 )
then 177 log_error(
"URBAN_DYN_kusaka01_setup",*)
'Not appropriate names in namelist PARAM_URBAN_DYN_KUSAKA01. Check!' 180 log_nml(param_urban_dyn_kusaka01)
182 ahdiurnal(:) = (/ 0.356, 0.274, 0.232, 0.251, 0.375, 0.647, 0.919, 1.135, 1.249, 1.328, &
183 1.365, 1.363, 1.375, 1.404, 1.457, 1.526, 1.557, 1.521, 1.372, 1.206, &
184 1.017, 0.876, 0.684, 0.512 /)
187 call urban_param_setup
198 call file_history_reg(
'URBAN_SHR',
'urban sensible heat flux on roof',
'W/m2', i_shr , ndims=2 )
199 call file_history_reg(
'URBAN_SHB',
'urban sensible heat flux on wall',
'W/m2', i_shb , ndims=2 )
200 call file_history_reg(
'URBAN_SHG',
'urban sensible heat flux on road',
'W/m2', i_shg , ndims=2 )
201 call file_history_reg(
'URBAN_LHR',
'urban latent heat flux on roof',
'W/m2', i_lhr , ndims=2 )
202 call file_history_reg(
'URBAN_LHB',
'urban latent heat flux on wall',
'W/m2', i_lhb , ndims=2 )
203 call file_history_reg(
'URBAN_LHG',
'urban latent heat flux on road',
'W/m2', i_lhg , ndims=2 )
204 call file_history_reg(
'URBAN_GHR',
'urban ground heat flux on roof',
'W/m2', i_ghr , ndims=2 )
205 call file_history_reg(
'URBAN_GHB',
'urban ground heat flux on wall',
'W/m2', i_ghb , ndims=2 )
206 call file_history_reg(
'URBAN_GHG',
'urban ground heat flux on road',
'W/m2', i_ghg , ndims=2 )
207 call file_history_reg(
'URBAN_RNR',
'urban net radiation on roof',
'W/m2', i_rnr , ndims=2 )
208 call file_history_reg(
'URBAN_RNB',
'urban net radiation on wall',
'W/m2', i_rnb , ndims=2 )
209 call file_history_reg(
'URBAN_RNG',
'urban net radiation on road',
'W/m2', i_rng , ndims=2 )
210 call file_history_reg(
'URBAN_RNgrd',
'urban grid average of net radiation',
'W/m2', i_rngrd, ndims=2 )
219 UKA, UKS, UKE, UIA, UIS, UIE, UJA, UJS, UJE, &
230 TRL_URB, TBL_URB, TGL_URB, &
231 TR_URB, TB_URB, TG_URB, &
232 TC_URB, QC_URB, UC_URB, &
233 RAINR_URB, RAINB_URB, RAING_URB, &
237 MWFLX, MUFLX, MVFLX, &
238 SHFLX, LHFLX, GHFLX, &
245 qsat => atmos_saturation_pres2qsat_all
249 integer,
intent(in) :: UKA, UKS, UKE
250 integer,
intent(in) :: UIA, UIS, UIE
251 integer,
intent(in) :: UJA, UJS, UJE
253 real(RP),
intent(in) :: TMPA(uia,uja)
254 real(RP),
intent(in) :: PRSA(uia,uja)
255 real(RP),
intent(in) :: W1 (uia,uja)
256 real(RP),
intent(in) :: U1 (uia,uja)
257 real(RP),
intent(in) :: V1 (uia,uja)
258 real(RP),
intent(in) :: DENS(uia,uja)
259 real(RP),
intent(in) :: QA (uia,uja)
260 real(RP),
intent(in) :: LHV (uia,uja)
261 real(RP),
intent(in) :: Z1 (uia,uja)
262 real(RP),
intent(in) :: PBL (uia,uja)
263 real(RP),
intent(in) :: RHOS(uia,uja)
264 real(RP),
intent(in) :: PRSS(uia,uja)
265 real(RP),
intent(in) :: LWD (uia,uja,2)
266 real(RP),
intent(in) :: SWD (uia,uja,2)
267 real(RP),
intent(in) :: RAIN(uia,uja)
268 real(RP),
intent(in) :: SNOW(uia,uja)
269 real(RP),
intent(in) :: CDZ(uka)
270 real(RP),
intent(in) :: fact_urban(uia,uja)
271 integer,
intent(in) :: tloc
272 real(RP),
intent(in) :: dsec
273 real(DP),
intent(in) :: dt
275 real(RP),
intent(inout) :: TR_URB (uia,uja)
276 real(RP),
intent(inout) :: TB_URB (uia,uja)
277 real(RP),
intent(inout) :: TG_URB (uia,uja)
278 real(RP),
intent(inout) :: TC_URB (uia,uja)
279 real(RP),
intent(inout) :: QC_URB (uia,uja)
280 real(RP),
intent(inout) :: UC_URB (uia,uja)
281 real(RP),
intent(inout) :: TRL_URB (uks:uke,uia,uja)
282 real(RP),
intent(inout) :: TBL_URB (uks:uke,uia,uja)
283 real(RP),
intent(inout) :: TGL_URB (uks:uke,uia,uja)
284 real(RP),
intent(inout) :: RAINR_URB(uia,uja)
285 real(RP),
intent(inout) :: RAINB_URB(uia,uja)
286 real(RP),
intent(inout) :: RAING_URB(uia,uja)
287 real(RP),
intent(inout) :: ROFF_URB (uia,uja)
289 real(RP),
intent(out) :: SFC_TEMP(uia,uja)
291 real(RP),
intent(out) :: MWFLX (uia,uja)
292 real(RP),
intent(out) :: MUFLX (uia,uja)
293 real(RP),
intent(out) :: MVFLX (uia,uja)
294 real(RP),
intent(out) :: SHFLX (uia,uja)
295 real(RP),
intent(out) :: LHFLX (uia,uja)
296 real(RP),
intent(out) :: GHFLX (uia,uja)
297 real(RP),
intent(out) :: Z0M (uia,uja)
298 real(RP),
intent(out) :: Z0H (uia,uja)
299 real(RP),
intent(out) :: Z0E (uia,uja)
300 real(RP),
intent(out) :: U10 (uia,uja)
301 real(RP),
intent(out) :: V10 (uia,uja)
302 real(RP),
intent(out) :: T2 (uia,uja)
303 real(RP),
intent(out) :: Q2 (uia,uja)
307 logical,
parameter :: LSOLAR = .false.
309 real(RP),
parameter :: Uabs_min = 0.1_rp
318 real(RP) :: TRL(uks:uke)
319 real(RP) :: TBL(uks:uke)
320 real(RP) :: TGL(uks:uke)
328 real(RP) :: SHR (uia,uja)
329 real(RP) :: SHB (uia,uja)
330 real(RP) :: SHG (uia,uja)
331 real(RP) :: LHR (uia,uja)
332 real(RP) :: LHB (uia,uja)
333 real(RP) :: LHG (uia,uja)
334 real(RP) :: GHR (uia,uja)
335 real(RP) :: GHB (uia,uja)
336 real(RP) :: GHG (uia,uja)
337 real(RP) :: RNR (uia,uja)
338 real(RP) :: RNB (uia,uja)
339 real(RP) :: RNG (uia,uja)
340 real(RP) :: RNgrd(uia,uja)
364 log_progress(*)
'urban / dynamics / Kusaka01' 373 if( fact_urban(i,j) > 0.0_rp )
then 375 qdry = 1.0_rp - qa(i,j)
376 rtot = qdry * rdry + qa(i,j) * rvap
378 uabs = max( sqrt( u1(i,j)**2 + v1(i,j)**2 + w1(i,j)**2 ), uabs_min )
389 trl(k) = trl_urb(k,i,j)
390 tbl(k) = tbl_urb(k,i,j)
391 tgl(k) = tgl_urb(k,i,j)
394 rainr = rainr_urb(i,j)
395 rainb = rainb_urb(i,j)
396 raing = raing_urb(i,j)
399 call slc_main( uka, uks, uke, uia, uis, uie, uja, ujs, uje, &
451 dzr(:), dzg(:), dzb(:), &
464 trl_urb(k,i,j) = trl(k)
465 tbl_urb(k,i,j) = tbl(k)
466 tgl_urb(k,i,j) = tgl(k)
468 rainr_urb(i,j) = rainr
469 rainb_urb(i,j) = rainb
470 raing_urb(i,j) = raing
481 call qsat( sfc_temp(i,j), prss(i,j), qdry, &
506 mwflx(i,j) = -rhos(i,j) * ustar**2 / uabs * w1(i,j)
507 muflx(i,j) = -rhos(i,j) * ustar**2 / uabs * u1(i,j)
508 mvflx(i,j) = -rhos(i,j) * ustar**2 / uabs * v1(i,j)
515 sfc_temp(i,j) = 300.0_rp
516 albedo(i,j,:,:) = 0.0_rp
548 call put_history( uia, uja, &
549 shr(:,:), shb(:,:), shg(:,:), &
550 lhr(:,:), lhb(:,:), lhg(:,:), &
551 ghr(:,:), ghb(:,:), ghg(:,:), &
552 rnr(:,:), rnb(:,:), rng(:,:), &
559 subroutine slc_main( &
560 UKA, UKS, UKE, UIA, UIS, UIE, UJA, UJS, UJE, &
621 karman => const_karman, &
622 cpdry => const_cpdry, &
623 grav => const_grav, &
624 rdry => const_rdry, &
625 rvap => const_rvap, &
627 tem00 => const_tem00, &
630 hydrometeor_lhv => atmos_hydrometeor_lhv
632 qsat => atmos_saturation_pres2qsat_all
635 integer,
intent(in) :: UKA, UKS, UKE
636 integer,
intent(in) :: UIA, UIS, UIE
637 integer,
intent(in) :: UJA, UJS, UJE
640 logical ,
intent(in) :: LSOLAR
643 real(RP),
intent(in) :: PRSA
644 real(RP),
intent(in) :: PRSS
645 real(RP),
intent(in) :: TA
646 real(RP),
intent(in) :: QA
647 real(RP),
intent(in) :: UA
648 real(RP),
intent(in) :: U1
649 real(RP),
intent(in) :: V1
650 real(RP),
intent(in) :: LHV
651 real(RP),
intent(in) :: ZA
652 real(RP),
intent(in) :: SSG(2)
653 real(RP),
intent(in) :: LLG(2)
654 real(RP),
intent(in) :: RAIN
655 real(RP),
intent(in) :: SNOW
656 real(RP),
intent(in) :: RHOO
657 real(RP),
intent(in) :: DZR(uka)
658 real(RP),
intent(in) :: DZB(uka)
659 real(RP),
intent(in) :: DZG(uka)
660 integer,
intent(in) :: tloc
661 real(RP),
intent(in) :: dsec
662 real(DP),
intent(in) :: dt
665 real(RP),
intent(inout) :: TRL(uks:uke)
666 real(RP),
intent(inout) :: TBL(uks:uke)
667 real(RP),
intent(inout) :: TGL(uks:uke)
668 real(RP),
intent(inout) :: TR
669 real(RP),
intent(inout) :: TB
670 real(RP),
intent(inout) :: TG
671 real(RP),
intent(inout) :: TC
672 real(RP),
intent(inout) :: QC
673 real(RP),
intent(inout) :: UC
674 real(RP),
intent(inout) :: RAINR
675 real(RP),
intent(inout) :: RAINB
676 real(RP),
intent(inout) :: RAING
677 real(RP),
intent(inout) :: ROFF
680 real(RP),
intent(out) :: ALBD_SW_grid
681 real(RP),
intent(out) :: ALBD_LW_grid
682 real(RP),
intent(out) :: RTS
683 real(RP),
intent(out) :: SH
684 real(RP),
intent(out) :: LH
685 real(RP),
intent(out) :: GHFLX
686 real(RP),
intent(out) :: RN
687 real(RP),
intent(out) :: U10
688 real(RP),
intent(out) :: V10
689 real(RP),
intent(out) :: T2
690 real(RP),
intent(out) :: Q2
691 real(RP),
intent(out) :: RNR, RNB, RNG
692 real(RP),
intent(out) :: SHR, SHB, SHG
693 real(RP),
intent(out) :: LHR, LHB, LHG
694 real(RP),
intent(out) :: GHR, GHB, GHG
695 integer ,
intent(in) :: i, j
701 real(RP),
parameter :: redf_min = 1.0e-2_rp
702 real(RP),
parameter :: redf_max = 1.0_rp
717 real(RP) :: W, VFGS, VFGW, VFWG, VFWS, VFWW
725 real(RP) :: TRLP(uks:uke)
726 real(RP) :: TBLP(uks:uke)
727 real(RP) :: TGLP(uks:uke)
736 real(RP) :: ROFFR, ROFFB, ROFFG
738 real(RP) :: LUP, LDN, RUP
741 real(RP) :: LNET, SNET, FLXUV
744 real(RP) :: psim,psim2,psim10
745 real(RP) :: psih,psih2,psih10
754 real(RP) :: SR, SB, SG, RR, RB, RG
755 real(RP) :: SR1, SB1, SB2, SG1, SG2
756 real(RP) :: RB1, RB2, RG1, RG2
757 real(RP) :: HR, ELER, G0R
758 real(RP) :: HB, ELEB, G0B
759 real(RP) :: HG, ELEG, G0G
762 real(RP) :: QS0R, QS0B, QS0G
764 real(RP) :: RIBR, BHR, CDR
765 real(RP) :: RIBC, BHC, CDC
766 real(RP) :: ALPHAB, ALPHAG, ALPHAC
767 real(RP) :: CHR, CHB, CHG, CHC
768 real(RP) :: TC1, TC2, QC1, QC2
771 real(RP) :: DTS_MAX_onestep = 0.0_rp
772 real(RP) :: resi1,resi2
773 real(RP) :: resi1p,resi2p
774 real(RP) :: G0RP,G0BP,G0GP
776 real(RP) :: XXX, XXX2, XXX10
777 real(RP) :: THA,THC,THS,THS1,THS2
782 real(RP) :: tahdiurnal
791 tha = ta * ( pre00 / prsa )**rovcp
810 if ( tloc == 24 )
then 811 tahdiurnal = ( 1.0_rp-dsec ) * ahdiurnal(tloc ) &
812 + ( dsec ) * ahdiurnal(1 )
814 tahdiurnal = ( 1.0_rp-dsec ) * ahdiurnal(tloc ) &
815 + ( dsec ) * ahdiurnal(tloc+1)
818 ah_t = ah * tahdiurnal
819 alh_t = alh * tahdiurnal
822 dts_max_onestep = dts_max * dt
824 if ( zdc + z0c + 2.0_rp >= za )
then 825 log_error(
"URBAN_DYN_kusaka01_SLC_main",*)
'ZDC + Z0C + 2m must be less than the 1st level! STOP.' 831 w = 2.0_rp * 1.0_rp * hgt
834 vfwg = ( 1.0_rp - svf ) * ( 1.0_rp - r ) / w
836 vfww = 1.0_rp - 2.0_rp * vfwg
846 call canopy_wind(za, ua, uc)
853 raint = 1.0_rp * ( ( rain + snow ) * dt )
854 call cal_beta(betr, raint, rainr, strgr, roffr)
856 raint = 0.1_rp * ( ( rain + snow ) * dt )
857 call cal_beta(betb, raint, rainb, strgb, roffb)
859 raint = 0.9_rp * ( ( rain + snow ) * dt )
860 call cal_beta(betg, raint, raing, strgg, roffg)
862 roff = roff + r * roffr + rw * ( roffb + roffg )
868 if( sx > 0.0_rp )
then 873 sr1 = sx * ( 1.0_rp - albr )
874 sg1 = sx * vfgs * ( 1.0_rp - albg )
875 sb1 = sx * vfws * ( 1.0_rp - albb )
876 sg2 = sb1 * albb / ( 1.0_rp - albb ) * vfgw * ( 1.0_rp - albg )
877 sb2 = sg1 * albg / ( 1.0_rp - albg ) * vfwg * ( 1.0_rp - albb )
882 snet = r * sr + w * sb + rw * sg
894 exn = ( prss / pre00 )**rovcp
911 do iteration = 1, 100
916 bhr = log(z0r/z0hr) / 0.4_rp
917 ribr = ( grav * 2.0_rp / (tha+ths) ) * (tha-ths) * (z+z0r) / (ua*ua)
918 call mos(xxxr,chr,cdr,bhr,ribr,z,z0r,ua,tha,ths,rhoo)
920 call qsat( tr, prss, qdry, &
923 rr = epsr * ( rx - stb * (tr**4) )
925 hr = rhoo * cpdry * chr * ua * (ths-tha) * exn
926 eler = min( rhoo * chr * ua * betr * (qs0r-qa),
real(RAINR/dt,RP) ) * lhv
927 g0r = sr + rr - hr - eler
941 call multi_layer(uke,bound,g0r,capr,aksr,trl,dzr,dt,trlend)
946 if( abs(resi1) < sqrt(eps) )
then 948 tr = max( trp - dts_max_onestep, min( trp + dts_max_onestep, tr ) )
952 if ( resi1*resi1p < 0.0_rp )
then 953 tr = (tr + trl(1)) * 0.5_rp
957 tr = max( trp - dts_max_onestep, min( trp + dts_max_onestep, tr ) )
970 if ( iteration > 100 )
then 971 log_warn(
"URBAN_DYN_kusaka01_SLC_main",*)
'iteration for TR was not converged',
prc_myrank,i,j
972 log_info_cont(*)
'---------------------------------------------------------------------------------' 973 log_info_cont(*)
'DEBUG Message --- Residual [K] :', resi1
975 log_info_cont(*)
'DEBUG Message --- TRP : Initial TR [K] :', trp
976 log_info_cont(*)
'DEBUG Message --- TRLP: Initial TRL [K] :', trlp
978 log_info_cont(*)
'DEBUG Message --- SX : Shortwave radiation [W/m2] :', sx
979 log_info_cont(*)
'DEBUG Message --- RX : Longwave radiation [W/m2] :', rx
980 log_info_cont(*)
'DEBUG Message --- PRSS: Surface pressure [Pa] :', prss
981 log_info_cont(*)
'DEBUG Message --- PRSA: Pressure at 1st atmos layer [m] :', prsa
982 log_info_cont(*)
'DEBUG Message --- RHOO: Air density [kg/m3] :', rhoo
983 log_info_cont(*)
'DEBUG Message --- ZA : Height at 1st atmos layer [m] :', za
984 log_info_cont(*)
'DEBUG Message --- TA : Temperature at 1st atmos layer [K] :', ta
985 log_info_cont(*)
'DEBUG Message --- UA : Wind speed at 1st atmos layer [m/s] :', ua
986 log_info_cont(*)
'DEBUG Message --- QA : Specific humidity at 1st atmos layer [kg/kg] :', qa
987 log_info_cont(*)
'DEBUG Message --- DZR : Depth of surface layer [m] :', dzr
989 log_info_cont(*)
'DEBUG Message --- R, W, RW : Normalized height and road width [-] :', r, w,rw
990 log_info_cont(*)
'DEBUG Message --- SVF : Sky View Factors [-] :', svf
991 log_info_cont(*)
'DEBUG Message --- BETR: Evaporation efficiency [-] :', betr
992 log_info_cont(*)
'DEBUG Message --- EPSR: Surface emissivity of roof [-] :', epsr
993 log_info_cont(*)
'DEBUG Message --- CAPR: Heat capacity of roof [J m-3 K] :', capr
994 log_info_cont(*)
'DEBUG Message --- AKSR: Thermal conductivity of roof [W m-1 K] :', aksr
995 log_info_cont(*)
'DEBUG Message --- QS0R: Surface specific humidity [kg/kg] :', qs0r
996 log_info_cont(*)
'DEBUG Message --- ZDC : Desplacement height of canopy [m] :', zdc
997 log_info_cont(*)
'DEBUG Message --- Z0R : Momentum roughness length of roof [m] :', z0r
998 log_info_cont(*)
'DEBUG Message --- Z0HR: Thermal roughness length of roof [m] :', z0hr
999 log_info_cont(*)
'---------------------------------------------------------------------------------' 1004 ribr = ( grav * 2.0_rp / (tha+ths) ) * (tha-ths) * (z+z0r) / (ua*ua)
1005 call mos(xxxr,chr,cdr,bhr,ribr,z,z0r,ua,tha,ths,rhoo)
1007 call qsat( tr, prss, qdry, &
1010 rr = epsr * ( rx - stb * (tr**4) )
1011 hr = rhoo * cpdry * chr * ua * (ths-tha) * exn
1012 eler = min( rhoo * chr * ua * betr * (qs0r-qa),
real(RAINR/dt,RP) ) * lhv
1013 g0r = sr + rr - hr - eler
1016 call multi_layer(uke,bound,g0r,capr,aksr,trl,dzr,dt,trlend)
1020 if ( abs(resi1) > dts_max_onestep )
then 1021 if ( abs(resi1) > dts_max_onestep*10.0_rp )
then 1022 log_error(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TR exceeded a limit! STOP.' 1023 log_error_cont(*)
'previous TR and updated TR(TRL(1)) is ',tr-resi1, tr
1026 log_warn(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TR exceeded a limit' 1027 log_info_cont(*)
'previous TR and updated TR(TRL(1)) is ', tr-resi1, tr
1037 alphab = 6.15_rp + 4.18_rp * uc
1038 if( uc > 5.0_rp ) alphab = 7.51_rp * (uc**0.78_rp )
1039 alphag = 6.15_rp + 4.18_rp * uc
1040 if( uc > 5.0_rp ) alphag = 7.51_rp * (uc**0.78_rp )
1041 chb = alphab / rhoo / cpdry / uc
1042 chg = alphag / rhoo / cpdry / uc
1050 do iteration = 1, 200
1057 bhc = log(z0c/z0hc) / 0.4_rp
1058 ribc = ( grav * 2.0_rp / (tha+thc) ) * (tha-thc) * (z+z0c) / (ua*ua)
1059 call mos(xxxc,chc,cdc,bhc,ribc,z,z0c,ua,tha,thc,rhoo)
1060 alphac = chc * rhoo * cpdry * ua
1062 call qsat( tb, prss, qdry, qs0b )
1063 call qsat( tg, prss, qdry, qs0g )
1065 tc1 = rw*alphac + rw*alphag + w*alphab
1067 tc2 = rw*alphac*tha + w*alphab*ths1 + rw*alphag*ths2
1069 qc1 = rw*(chc*ua) + rw*(chg*betg*uc) + w*(chb*betb*uc)
1070 qc2 = rw*(chc*ua)*qa + rw*(chg*betg*uc)*qs0g + w*(chb*betb*uc)*qs0b
1073 rg1 = epsg * ( rx * vfgs &
1074 + epsb * vfgw * stb * tb**4 &
1077 rb1 = epsb * ( rx * vfws &
1078 + epsg * vfwg * stb * tg**4 &
1079 + epsb * vfww * stb * tb**4 &
1082 rg2 = epsg * ( (1.0_rp-epsb) * vfgw * vfws * rx &
1083 + (1.0_rp-epsb) * vfgw * vfwg * epsg * stb * tg**4 &
1084 + epsb * (1.0_rp-epsb) * vfgw * vfww * stb * tb**4 )
1086 rb2 = epsb * ( (1.0_rp-epsg) * vfwg * vfgs * rx &
1087 + (1.0_rp-epsg) * epsb * vfgw * vfwg * stb * tb**4 &
1088 + (1.0_rp-epsb) * vfws * vfww * rx &
1089 + (1.0_rp-epsb) * vfwg * vfww * stb * epsg * tg**4 &
1090 + epsb * (1.0_rp-epsb) * vfww * (1.0_rp-2.0_rp*vfws) * stb * tb**4 )
1095 hb = rhoo * cpdry * chb * uc * (ths1-thc) * exn
1096 eleb = min( rhoo * chb * uc * betb * (qs0b-qc),
real(RAINB/dt,RP) ) * lhv
1097 g0b = sb + rb - hb - eleb
1099 hg = rhoo * cpdry * chg * uc * (ths2-thc) * exn
1100 eleg = min( rhoo * chg * uc * betg * (qs0g-qc),
real(RAING/dt,RP) ) * lhv
1101 g0g = sg + rg - hg - eleg
1104 call multi_layer(uke,bound,g0b,capb,aksb,tbl,dzb,dt,tblend)
1108 call multi_layer(uke,bound,g0g,capg,aksg,tgl,dzg,dt,tglend)
1126 if ( abs(resi1) < sqrt(eps) .AND. abs(resi2) < sqrt(eps) )
then 1129 tb = max( tbp - dts_max_onestep, min( tbp + dts_max_onestep, tb ) )
1130 tg = max( tgp - dts_max_onestep, min( tgp + dts_max_onestep, tg ) )
1134 if ( resi1*resi1p < 0.0_rp )
then 1135 tb = (tb + tbl(1)) * 0.5_rp
1139 if ( resi2*resi2p < 0.0_rp )
then 1140 tg = (tg + tgl(1)) * 0.5_rp
1144 tb = max( tbp - dts_max_onestep, min( tbp + dts_max_onestep, tb ) )
1145 tg = max( tgp - dts_max_onestep, min( tgp + dts_max_onestep, tg ) )
1151 call qsat( tb, prss, qdry, qs0b )
1152 call qsat( tg, prss, qdry, qs0g )
1157 tc1 = rw*alphac + rw*alphag + w*alphab
1159 tc2 = rw*alphac*tha + w*alphab*ths1 + rw*alphag*ths2
1163 qc1 = rw*(chc*ua) + rw*(chg*betg*uc) + w*(chb*betb*uc)
1164 qc2 = rw*(chc*ua)*qa + rw*(chg*betg*uc)*qs0g + w*(chb*betb*uc)*qs0b
1185 if ( iteration > 200 )
then 1186 log_warn(
"URBAN_DYN_Kusaka01_main",*)
'iteration for TB/TG was not converged',
prc_myrank,i,j
1187 log_info_cont(*)
'---------------------------------------------------------------------------------' 1188 log_info_cont(*)
'DEBUG Message --- Residual [K] :', resi1,resi2
1190 log_info_cont(*)
'DEBUG Message --- TBP : Initial TB [K] :', tbp
1191 log_info_cont(*)
'DEBUG Message --- TBLP: Initial TBL [K] :', tblp
1192 log_info_cont(*)
'DEBUG Message --- TGP : Initial TG [K] :', tgp
1193 log_info_cont(*)
'DEBUG Message --- TGLP: Initial TGL [K] :', tglp
1194 log_info_cont(*)
'DEBUG Message --- TCP : Initial TC [K] :', tcp
1195 log_info_cont(*)
'DEBUG Message --- QCP : Initial QC [K] :', qcp
1197 log_info_cont(*)
'DEBUG Message --- UC : Canopy wind [m/s] :', uc
1198 log_info_cont(*)
'DEBUG Message --- SX : Shortwave radiation [W/m2] :', sx
1199 log_info_cont(*)
'DEBUG Message --- RX : Longwave radiation [W/m2] :', rx
1200 log_info_cont(*)
'DEBUG Message --- PRSS: Surface pressure [Pa] :', prss
1201 log_info_cont(*)
'DEBUG Message --- PRSA: Pressure at 1st atmos layer [m] :', prsa
1202 log_info_cont(*)
'DEBUG Message --- RHOO: Air density [kg/m3] :', rhoo
1203 log_info_cont(*)
'DEBUG Message --- ZA : Height at 1st atmos layer [m] :', za
1204 log_info_cont(*)
'DEBUG Message --- TA : Temperature at 1st atmos layer [K] :', ta
1205 log_info_cont(*)
'DEBUG Message --- UA : Wind speed at 1st atmos layer [m/s] :', ua
1206 log_info_cont(*)
'DEBUG Message --- QA : Specific humidity at 1st atmos layer [kg/kg] :', qa
1207 log_info_cont(*)
'DEBUG Message --- DZB : Depth of surface layer [m] :', dzb
1208 log_info_cont(*)
'DEBUG Message --- DZG : Depth of surface layer [m] :', dzg
1210 log_info_cont(*)
'DEBUG Message --- R, W, RW : Normalized height and road width [-] :', r, w,rw
1211 log_info_cont(*)
'DEBUG Message --- SVF : Sky View Factors [-] :', svf
1212 log_info_cont(*)
'DEBUG Message --- BETB,BETG : Evaporation efficiency [-] :', betb,betg
1213 log_info_cont(*)
'DEBUG Message --- EPSB,EPSG : Surface emissivity [-] :', epsb,epsg
1214 log_info_cont(*)
'DEBUG Message --- CAPB,CAPG : Heat capacity [J m-3 K] :', capb,capg
1215 log_info_cont(*)
'DEBUG Message --- AKSB,AKSG : Thermal conductivity [W m-1 K] :', aksb,aksb
1216 log_info_cont(*)
'DEBUG Message --- QS0B,QS0G : Surface specific humidity [kg/kg] :', qs0b,qs0g
1217 log_info_cont(*)
'DEBUG Message --- ZDC : Desplacement height of canopy [m] :', zdc
1218 log_info_cont(*)
'DEBUG Message --- Z0C : Momentum roughness length of canopy [m] :', z0c
1219 log_info_cont(*)
'DEBUG Message --- Z0HC : Thermal roughness length of canopy [m] :', z0hc
1220 log_info_cont(*)
'---------------------------------------------------------------------------------' 1225 rg1 = epsg * ( rx * vfgs &
1226 + epsb * vfgw * stb * tb**4 &
1228 rb1 = epsb * ( rx * vfws &
1229 + epsg * vfwg * stb * tg**4 &
1230 + epsb * vfww * stb * tb**4 &
1233 rg2 = epsg * ( (1.0_rp-epsb) * vfgw * vfws * rx &
1234 + (1.0_rp-epsb) * vfgw * vfwg * epsg * stb * tg**4 &
1235 + epsb * (1.0_rp-epsb) * vfgw * vfww * stb * tb**4 )
1236 rb2 = epsb * ( (1.0_rp-epsg) * vfwg * vfgs * rx &
1237 + (1.0_rp-epsg) * epsb * vfgw * vfwg * stb * tb**4 &
1238 + (1.0_rp-epsb) * vfws * vfww * rx &
1239 + (1.0_rp-epsb) * vfwg * vfww * stb * epsg * tg**4 &
1240 + epsb * (1.0_rp-epsb) * vfww * (1.0_rp-2.0_rp*vfws) * stb * tb**4 )
1249 hb = rhoo * cpdry * chb * uc * (ths1-thc) * exn
1250 eleb = min( rhoo * chb * uc * betb * (qs0b-qc),
real(RAINB/dt,RP) ) * lhv
1251 g0b = sb + rb - hb - eleb
1253 hg = rhoo * cpdry * chg * uc * (ths2-thc) * exn
1254 eleg = min( rhoo * chg * uc * betg * (qs0g-qc),
real(RAING/dt,RP) ) * lhv
1255 g0g = sg + rg - hg - eleg
1258 call multi_layer(uke,bound,g0b,capb,aksb,tbl,dzb,dt,tblend)
1263 call multi_layer(uke,bound,g0g,capg,aksg,tgl,dzg,dt,tglend)
1267 if ( abs(resi1) > dts_max_onestep )
then 1268 if ( abs(resi1) > dts_max_onestep*10.0_rp )
then 1269 log_error(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TB exceeded a limit! STOP.' 1270 log_error_cont(*)
'previous TB and updated TB(TBL(1)) is ', tb-resi1,tb
1273 log_warn(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TB exceeded a limit' 1274 log_info_cont(*)
'previous TB and updated TB(TBL(1)) is ', tb-resi1, tb
1277 if ( abs(resi2) > dts_max_onestep )
then 1278 if ( abs(resi2) > dts_max_onestep*10.0_rp )
then 1279 log_error(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TG exceeded a limit! STOP.' 1280 log_error_cont(*)
'previous TG and updated TG(TGL(1)) is ', tg-resi2, tg, resi2
1283 log_warn(
"URBAN_DYN_Kusaka01_main",*)
'tendency of TG exceeded a limit' 1284 log_info_cont(*)
'previous TG and updated TG(TGL(1)) is ', tg-resi2, tg
1291 flxuv = ( r*cdr + rw*cdc ) * ua * ua
1292 sh = ( r*hr + w*hb + rw*hg )
1293 lh = ( r*eler + w*eleb + rw*eleg )
1294 ghflx = r*g0r + w*g0b + rw*g0g
1295 lnet = r*rr + w*rb + rw*rg
1306 sdn = r + w * (vfws + vfgs * albg * vfwg) + rw * (vfgs + vfws * albb * vfgw)
1308 + w * ( vfws * albb + vfgs * albg * vfwg *albb ) &
1309 + rw * ( vfgs * albg + vfws * albb * vfgw *albg )
1311 albd_sw_grid = sup / sdn
1314 ldn = r + w*vfws + rw*vfgs
1315 lup = r * (1.0_rp-epsr) &
1316 + w*( (1.0_rp-epsb*vfww)*(1.0_rp-epsb)*vfws - epsb*vfwg*(1.0_rp-epsg)*vfgs ) &
1317 + rw*( (1.0_rp-epsg)*vfgs - epsg*(1.0_rp-vfgs)*(1.0_rp-epsb)*vfws )
1319 rup = (ldn - lup) * rx - lnet
1320 albd_lw_grid = lup / ldn
1346 rainr = max(0.0_rp, rainr-(lhr/lhv)*
real(dt,kind=
rp))
1347 rainb = max(0.0_rp, rainb-(lhb/lhv)*
real(dt,kind=
rp))
1348 raing = max(0.0_rp, raing-(lhg/lhv)*
real(dt,kind=
rp))
1354 rts = ( rup / stb / ( 1.0_rp-albd_lw_grid) )**0.25
1367 call cal_psi(xxx,psim,psih)
1369 xxx2 = (2.0_rp/z) * xxx
1370 call cal_psi(xxx2,psim2,psih2)
1372 xxx10 = (10.0_rp/z) * xxx
1373 call cal_psi(xxx10,psim10,psih10)
1377 u10 = u1 * log(10.0_rp/z0c) / log(z/z0c)
1378 v10 = v1 * log(10.0_rp/z0c) / log(z/z0c)
1380 t2 = rts + (ta-rts)*((log(2.0_rp/z0hc)-psih2)/(log(z/z0hc)-psih))
1391 end subroutine slc_main
1394 subroutine canopy_wind(ZA, UA, UC)
1397 real(RP),
intent(in) :: za
1398 real(RP),
intent(in) :: UA
1399 real(RP),
intent(out) :: UC
1401 real(RP) :: UR,ZC,XLB,BB
1403 if( zr + 2.0_rp < za )
then 1404 ur = ua * log((zr-zdc)/z0c) / log((za-zdc)/z0c)
1406 xlb = 0.4_rp * (zr-zdc)
1408 bb = 0.4_rp * zr / ( xlb * log((zr-zdc)/z0c) )
1409 uc = ur * exp( -bb * (1.0_rp-zc/zr) )
1416 uc = max(uc,0.01_rp)
1419 end subroutine canopy_wind
1422 subroutine cal_beta(BET, RAIN, WATER, STRG, ROFF)
1425 real(RP),
intent(out) :: BET
1426 real(RP),
intent(in) :: RAIN
1427 real(RP),
intent(inout) :: WATER
1428 real(RP),
intent(inout) :: STRG
1429 real(RP),
intent(inout) :: ROFF
1431 if ( strg == 0.0_rp )
then 1435 water = water + rain
1436 roff = max(0.0_rp, water-strg)
1437 water = water - max(0.0_rp, water-strg)
1438 bet = min( water / strg, 1.0_rp)
1442 end subroutine cal_beta
1445 subroutine cal_psi(zeta,psim,psih)
1450 real(RP),
intent(inout) :: zeta
1451 real(RP),
intent(out) :: psim
1452 real(RP),
intent(out) :: psih
1455 if( zeta >= 1.0_rp ) zeta = 1.0_rp
1456 if( zeta <= -5.0_rp ) zeta = -5.0_rp
1458 if( zeta > 0.0_rp )
then 1459 psim = -5.0_rp * zeta
1460 psih = -5.0_rp * zeta
1462 x = ( 1.0_rp - 16.0_rp * zeta )**0.25_rp
1463 psim = 2.0_rp * log((1.0_rp+x)/2.0_rp) + log((1.0_rp+x*x)/2.0_rp) - 2.0_rp*atan(x) + pi/2.0_rp
1464 psih = 2.0_rp * log((1.0_rp+x*x)/2.0_rp)
1468 end subroutine cal_psi
1475 subroutine mos(XXX,CH,CD,B1,RIB,Z,Z0,UA,TA,TSF,RHO)
1480 real(RP),
intent(in) :: B1, Z, Z0, UA, TA, TSF, RHO
1481 real(RP),
intent(out) :: CD, CH
1482 real(RP),
intent(inout) :: XXX, RIB
1483 real(RP) :: XXX0, X, X0, FAIH, DPSIM, DPSIH
1484 real(RP) :: F, DF, XXXP, US, TS, AL, XKB, DD, PSIM, PSIH
1486 integer,
parameter :: NEWT_END = 10
1490 lnz = log( (z+z0)/z0 )
1492 if( rib <= -15.0_rp ) rib = -15.0_rp
1494 if( rib < 0.0_rp )
then 1496 do newt = 1, newt_end
1498 if( xxx >= 0.0_rp ) xxx = -1.0e-3_rp
1500 xxx0 = xxx * z0/(z+z0)
1502 x = (1.0_rp-16.0_rp*xxx)**0.25
1503 x0 = (1.0_rp-16.0_rp*xxx0)**0.25
1506 - log( (x+1.0_rp)**2 * (x**2+1.0_rp) ) &
1507 + 2.0_rp * atan(x) &
1508 + log( (x+1.0_rp)**2 * (x0**2+1.0_rp) ) &
1510 faih = 1.0_rp / sqrt( 1.0_rp - 16.0_rp*xxx )
1511 psih = lnz + 0.4_rp*b1 &
1512 - 2.0_rp * log( sqrt( 1.0_rp - 16.0_rp*xxx ) + 1.0_rp ) &
1513 + 2.0_rp * log( sqrt( 1.0_rp - 16.0_rp*xxx0 ) + 1.0_rp )
1515 dpsim = ( 1.0_rp - 16.0_rp*xxx )**(-0.25) / xxx &
1516 - ( 1.0_rp - 16.0_rp*xxx0 )**(-0.25) / xxx
1517 dpsih = 1.0_rp / sqrt( 1.0_rp - 16.0_rp*xxx ) / xxx &
1518 - 1.0_rp / sqrt( 1.0_rp - 16.0_rp*xxx0 ) / xxx
1520 f = rib * psim**2 / psih - xxx
1522 df = rib * ( 2.0_rp*dpsim*psim*psih - dpsih*psim**2 ) &
1528 if( xxx <= -10.0_rp ) xxx = -10.0_rp
1532 else if( rib >= 0.142857_rp )
then 1535 psim = lnz + 7.0_rp * xxx
1536 psih = psim + 0.4_rp * b1
1542 dd = -4.0_rp * rib * 7.0_rp * xkb * al + (al+xkb)**2
1543 if( dd <= 0.0_rp ) dd = 0.0_rp
1545 xxx = ( al + xkb - 2.0_rp*rib*7.0_rp*al - sqrt(dd) ) / ( 2.0_rp * ( rib*7.0_rp**2 - 7.0_rp ) )
1546 psim = lnz + 7.0_rp * min( xxx, 0.714_rp )
1547 psih = psim + 0.4_rp * b1
1551 us = 0.4_rp * ua / psim
1552 if( us <= 0.01_rp ) us = 0.01_rp
1553 ts = 0.4_rp * (ta-tsf) / psih
1555 cd = us * us / ua**2
1556 ch = 0.4_rp * us / psih / ua
1563 subroutine multi_layer(KM,BOUND,G0,CAP,AKS,TSL,DZ,DELT,TSLEND)
1572 real(RP),
intent(in) :: G0
1573 real(RP),
intent(in) :: CAP
1574 real(RP),
intent(in) :: AKS
1575 real(DP),
intent(in) :: DELT
1576 real(RP),
intent(in) :: TSLEND
1577 integer,
intent(in) :: KM
1578 integer,
intent(in) :: BOUND
1579 real(RP),
intent(in) :: DZ(km)
1580 real(RP),
intent(inout) :: TSL(km)
1581 real(RP) :: A(km), B(km), C(km), D(km), P(km), Q(km)
1589 b(1) = cap * dz(1) / delt &
1590 + 2.0_rp * aks / (dz(1)+dz(2))
1591 c(1) = -2.0_rp * aks / (dz(1)+dz(2))
1592 d(1) = cap * dz(1) / delt * tsl(1) + g0
1595 a(k) = -2.0_rp * aks / (dz(k-1)+dz(k))
1596 b(k) = cap * dz(k) / delt + 2.0_rp * aks / (dz(k-1)+dz(k)) + 2.0_rp * aks / (dz(k)+dz(k+1))
1597 c(k) = -2.0_rp * aks / (dz(k)+dz(k+1))
1598 d(k) = cap * dz(k) / delt * tsl(k)
1601 if( bound == 1 )
then 1602 a(km) = -2.0_rp * aks / (dz(km-1)+dz(km))
1603 b(km) = cap * dz(km) / delt + 2.0_rp * aks / (dz(km-1)+dz(km))
1605 d(km) = cap * dz(km) / delt * tsl(km)
1607 a(km) = -2.0_rp * aks / (dz(km-1)+dz(km))
1608 b(km) = cap * dz(km) / delt + 2.0_rp * aks / (dz(km-1)+dz(km)) + 2.0_rp * aks / (dz(km)+dzend)
1610 d(km) = cap * dz(km) / delt * tsl(km) + 2.0_rp * aks * tslend / (dz(km)+dzend)
1617 p(k) = -c(k) / ( a(k) * p(k-1) + b(k) )
1618 q(k) = ( -a(k) * q(k-1) + d(k) ) / ( a(k) * p(k-1) + b(k) )
1624 tsl(k) = p(k) * tsl(k+1) + q(k)
1628 end subroutine multi_layer
1631 subroutine multi_layer2(KM,BOUND,G0,CAP,AKS,TSL,DZ,DELT,TSLEND,CAP1,AKS1)
1640 real(RP),
intent(in) :: G0
1641 real(RP),
intent(in) :: CAP
1642 real(RP),
intent(in) :: AKS
1643 real(RP),
intent(in) :: CAP1
1644 real(RP),
intent(in) :: AKS1
1645 real(DP),
intent(in) :: DELT
1646 real(RP),
intent(in) :: TSLEND
1647 integer,
intent(in) :: KM
1648 integer,
intent(in) :: BOUND
1649 real(RP),
intent(in) :: DZ(km)
1650 real(RP),
intent(inout) :: TSL(km)
1651 real(RP) :: A(km), B(km), C(km), D(km), X(km), P(km), Q(km)
1659 b(1) = cap1 * dz(1) / delt &
1660 + 2.0_rp * aks1 / (dz(1)+dz(2))
1661 c(1) = -2.0_rp * aks1 / (dz(1)+dz(2))
1662 d(1) = cap1 * dz(1) / delt * tsl(1) + g0
1665 a(k) = -2.0_rp * aks / (dz(k-1)+dz(k))
1666 b(k) = cap * dz(k) / delt + 2.0_rp * aks / (dz(k-1)+dz(k)) + 2.0_rp * aks / (dz(k)+dz(k+1))
1667 c(k) = -2.0_rp * aks / (dz(k)+dz(k+1))
1668 d(k) = cap * dz(k) / delt * tsl(k)
1671 if( bound == 1 )
then 1672 a(km) = -2.0_rp * aks / (dz(km-1)+dz(km))
1673 b(km) = cap * dz(km) / delt + 2.0_rp * aks / (dz(km-1)+dz(km))
1675 d(km) = cap * dz(km) / delt * tsl(km)
1677 a(km) = -2.0_rp * aks / (dz(km-1)+dz(km))
1678 b(km) = cap * dz(km) / delt + 2.0_rp * aks / (dz(km-1)+dz(km)) + 2.0_rp * aks / (dz(km)+dzend)
1680 d(km) = cap * dz(km) / delt * tsl(km) + 2.0_rp * aks * tslend / (dz(km)+dzend)
1687 p(k) = -c(k) / ( a(k) * p(k-1) + b(k) )
1688 q(k) = ( -a(k) * q(k-1) + d(k) ) / ( a(k) * p(k-1) + b(k) )
1694 x(k) = p(k) * x(k+1) + q(k)
1702 end subroutine multi_layer2
1705 subroutine urban_param_setup
1708 real(RP) :: DHGT,THGT,VFWS,VFGS
1732 hgt = zr / ( road_width + roof_width )
1735 r = roof_width / ( road_width + roof_width )
1739 dhgt = hgt / 100.0_rp
1742 thgt = hgt - dhgt / 2.0_rp
1745 vfws = vfws + 0.25_rp * ( 1.0_rp - thgt / sqrt( thgt**2 + rw**2 ) )
1748 vfws = vfws / 99.0_rp
1749 vfws = vfws * 2.0_rp
1750 vfgs = 1.0_rp - 2.0_rp * vfws * hgt / rw
1754 end subroutine urban_param_setup
1756 subroutine put_history( &
1765 integer,
intent(in) :: UIA, UJA
1766 real(RP),
intent(in) :: SHR(uia,uja), SHB(uia,uja), SHG(uia,uja)
1767 real(RP),
intent(in) :: LHR(uia,uja), LHB(uia,uja), LHG(uia,uja)
1768 real(RP),
intent(in) :: GHR(uia,uja), GHB(uia,uja), GHG(uia,uja)
1769 real(RP),
intent(in) :: RNR(uia,uja), RNB(uia,uja), RNG(uia,uja)
1770 real(RP),
intent(in) :: RNgrd(uia,uja)
1772 call file_history_put( i_shr, shr(:,:) )
1773 call file_history_put( i_shb, shb(:,:) )
1774 call file_history_put( i_shg, shg(:,:) )
1775 call file_history_put( i_lhr, lhr(:,:) )
1776 call file_history_put( i_lhb, lhb(:,:) )
1777 call file_history_put( i_lhg, lhg(:,:) )
1778 call file_history_put( i_ghr, ghr(:,:) )
1779 call file_history_put( i_ghb, ghb(:,:) )
1780 call file_history_put( i_ghg, ghg(:,:) )
1781 call file_history_put( i_rnr, rnr(:,:) )
1782 call file_history_put( i_rnb, rnb(:,:) )
1783 call file_history_put( i_rng, rng(:,:) )
1784 call file_history_put( i_rngrd, rngrd(:,:) )
1787 end subroutine put_history
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
module atmosphere / saturation
module coupler / surface-atmospehre
integer, parameter, public i_r_vis
integer, public io_fid_conf
Config file ID.
subroutine, public file_history_reg(name, desc, unit, itemid, standard_name, ndims, dim_type, cell_measures, fill_halo)
Register/Append variable to history file.
integer, parameter, public n_rad_dir
integer, parameter, public n_rad_rgn
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
module atmosphere / hydrometeor
procedure(bc), pointer, public bulkflux
integer, public prc_myrank
process num in local communicator
real(rp), parameter, public const_rvap
specific gas constant (water vapor) [J/kg/K]
subroutine, public prc_abort
Abort Process.
integer, parameter, public i_r_direct
module urban / dynamics / Kusaka01
subroutine, public urban_dyn_kusaka01(UKA, UKS, UKE, UIA, UIS, UIE, UJA, UJS, UJE, TMPA, PRSA, W1, U1, V1, DENS, QA, LHV, Z1, PBL, RHOS, PRSS, LWD, SWD, RAIN, SNOW, CDZ, fact_urban, tloc, dsec, dt, TRL_URB, TBL_URB, TGL_URB, TR_URB, TB_URB, TG_URB, TC_URB, QC_URB, UC_URB, RAINR_URB, RAINB_URB, RAING_URB, ROFF_URB, SFC_TEMP, ALBEDO, MWFLX, MUFLX, MVFLX, SHFLX, LHFLX, GHFLX, Z0M, Z0H, Z0E, U10, V10, T2, Q2)
Main routine for land submodel.
real(rp), public const_eps
small number
integer, parameter, public i_r_nir
subroutine, public urban_dyn_kusaka01_setup(UIA, UIS, UIE, UJA, UJS, UJE, Z0M, Z0H, Z0E)
Setup.
real(rp), public const_pi
pi
integer, parameter, public i_r_ir
integer, parameter, public i_r_diffuse
integer, parameter, public rp