12 AerodynamicResistanceMethod, &
44 REAL(KIND(1D0)),
INTENT(in) :: ZZD
45 REAL(KIND(1D0)),
INTENT(in) :: z0m
46 REAL(KIND(1D0)),
INTENT(in) :: AVU1
47 REAL(KIND(1D0)),
INTENT(in) :: L_mod
48 REAL(KIND(1D0)),
INTENT(in) :: UStar
49 REAL(KIND(1D0)),
INTENT(in) :: VegFraction
51 INTEGER,
INTENT(in) :: AerodynamicResistanceMethod
52 INTEGER,
INTENT(in) :: StabilityMethod
53 INTEGER,
INTENT(in) :: RoughLenHeatMethod
55 REAL(KIND(1D0)),
INTENT(out) :: RA_h
56 REAL(KIND(1D0)),
INTENT(out) :: z0V
58 INTEGER,
PARAMETER :: notUsedI = -55
60 REAL(KIND(1D0)),
PARAMETER :: &
64 REAL(KIND(1D0)) :: psim
68 z0v =
cal_z0v(roughlenheatmethod, z0m, vegfraction, ustar)
71 IF (aerodynamicresistancemethod == 1)
THEN
72 ra_h = (log(zzd/z0m)**2)/(k2*avu1)
78 ELSEIF (aerodynamicresistancemethod == 2)
THEN
85 IF (zzd/l_mod == 0 .OR. ustar == 0)
THEN
86 ra_h = (log(zzd/z0m)*log(zzd/z0v))/(k2*avu1)
88 ra_h = ((log(zzd/z0m) - psim)*(log(zzd/z0v) -
psih))/(k2*avu1)
93 ELSEIF (aerodynamicresistancemethod == 3)
THEN
94 ra_h = (4.72*log(zzd/z0m)**2)/(1 + 0.54*avu1)
99 CALL errorhint(7,
'In AerodynamicResistance.f95, calculated RA > 200 s m-1; RA set to 200 s m-1', ra_h, notused, notusedi)
101 ELSEIF (ra_h < 10)
THEN
102 CALL errorhint(7,
'In AerodynamicResistance.f95, calculated RA < 10 s m-1; RA set to 10 s m-1', ra_h, notused, notusedi)
105 IF (avu1 < 0)
WRITE (*, *) avu1, ra_h
113 SMDMethod, SnowFrac, sfr_surf, avkdn, Temp_C, dq, xsmd, vsmd, MaxConductance, &
114 LAIMax, LAI_id, gsModel, Kmax, &
115 G_max, G_k, g_q_base, g_q_shape, G_t, G_sm, TH, TL, S1, S2, &
116 g_kdown, g_dq, g_ta, g_smd, g_lai, & ! output:
140 INTEGER,
PARAMETER :: ConifSurf = 3
141 INTEGER,
PARAMETER :: DecidSurf = 4
142 INTEGER,
PARAMETER :: GrassSurf = 5
147 INTEGER,
PARAMETER :: nsurf = 7
150 INTEGER,
PARAMETER :: WaterSurf = 7
152 INTEGER,
INTENT(in) :: id
153 INTEGER,
INTENT(in) :: it
154 INTEGER,
INTENT(in) :: gsModel
155 INTEGER,
INTENT(in) :: SMDMethod
162 REAL(KIND(1D0)),
INTENT(in) :: avkdn
163 REAL(KIND(1D0)),
INTENT(in) :: Temp_C
164 REAL(KIND(1D0)),
INTENT(in) :: Kmax
165 REAL(KIND(1D0)),
INTENT(in) :: G_max
166 REAL(KIND(1D0)),
INTENT(in) :: G_k
167 REAL(KIND(1D0)),
INTENT(in) :: g_q_base
168 REAL(KIND(1D0)),
INTENT(in) :: g_q_shape
169 REAL(KIND(1D0)),
INTENT(in) :: G_t
170 REAL(KIND(1D0)),
INTENT(in) :: G_sm
171 REAL(KIND(1D0)),
INTENT(in) :: S1
172 REAL(KIND(1D0)),
INTENT(in) :: S2
173 REAL(KIND(1D0)),
INTENT(in) :: TH
174 REAL(KIND(1D0)),
INTENT(in) :: TL
175 REAL(KIND(1D0)),
INTENT(in) :: dq
176 REAL(KIND(1D0)),
INTENT(in) :: xsmd
177 REAL(KIND(1D0)),
INTENT(in) :: vsmd
179 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(in) :: MaxConductance
180 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(in) :: LAIMax
181 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(in) :: LAI_id
182 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SnowFrac
183 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
185 REAL(KIND(1D0)),
INTENT(out) :: g_kdown
186 REAL(KIND(1D0)),
INTENT(out) :: g_dq
187 REAL(KIND(1D0)),
INTENT(out) :: g_ta
188 REAL(KIND(1D0)),
INTENT(out) :: g_smd
189 REAL(KIND(1D0)),
INTENT(out) :: g_lai
190 REAL(KIND(1D0)),
INTENT(out) :: gfunc
191 REAL(KIND(1D0)),
INTENT(out) :: gsc
192 REAL(KIND(1D0)),
INTENT(out) :: RS
206 REAL(KIND(1D0)) :: id_real
208 REAL(KIND(1D0)),
PARAMETER :: notUsed = -55
224 IF (gsmodel == 1 .OR. gsmodel == 3)
THEN
226 qnm = kmax/(kmax + g_k)
228 g_kdown = (avkdn/(g_k + avkdn))/qnm
230 IF (dq < g_q_shape)
THEN
231 g_dq = 1 - g_q_base*dq
233 g_dq = 1 - g_q_base*g_q_shape
236 tc = (th - g_t)/(g_t - tl)
237 tc2 = (g_t - tl)*(th - g_t)**tc
239 IF (temp_c <= tl)
THEN
240 g_ta = (tl + 0.1 - tl)*(th - (tl + 0.1))**tc/tc2
243 IF (minval(snowfrac(1:6)) /= 1)
THEN
244 CALL errorhint(29,
'subroutine SurfaceResistance.f95: T changed to fit limits TL=0.1,Temp_c,id,it', &
245 REAL(Temp_c, KIND(1D0)), id_real, it)
247 ELSEIF (temp_c >= th)
THEN
248 g_ta = ((th - 0.1) - tl)*(th - (th - 0.1))**tc/tc2
249 CALL errorhint(29,
'subroutine SurfaceResistance.f95: T changed to fit limits TH=39.9,Temp_c,id,it', &
250 REAL(Temp_c, KIND(1D0)), id_real, it)
252 g_ta = (temp_c - tl)*(th - temp_c)**tc/tc2
257 IF (smdmethod > 0)
THEN
258 g_smd = 1 - exp(g_sm*(xsmd - sdp))
260 g_smd = 1 - exp(g_sm*(vsmd - sdp))
261 IF (sfr_surf(conifsurf) + sfr_surf(decidsurf) + sfr_surf(grasssurf) == 0 .OR. sfr_surf(watersurf) == 1)
THEN
268 'subroutine SurfaceResistance.f95 (gsModel=1): g(smd) < 0 calculated, setting to 0.0001', &
284 g_lai = g_lai + (sfr_surf(iv + 2)*(1 - snowfrac(iv + 2)))*lai_id(iv)/laimax(iv)*maxconductance(iv)
291 gsc = (g_max*g_kdown*g_dq*g_ta*g_smd*g_lai)
295 CALL errorhint(65,
'subroutine SurfaceResistance.f95 (gsModel=1): gs <= 0, setting to 0.1 mm s-1', gsc, id_real, it)
299 ELSEIF (gsmodel == 2 .OR. gsmodel == 4)
THEN
302 qnm = kmax/(kmax + g_k)
303 g_kdown = (avkdn/(avkdn + g_k))/qnm
304 IF (avkdn >= kmax)
THEN
305 WRITE (*, *)
'Kmax exceeds Kdn setting to g(Kdn) to 1'
310 g_dq = g_q_base + (1 - g_q_base)*(g_q_shape**dq)
313 tc = (th - g_t)/(g_t - tl)
314 tc2 = (g_t - tl)*(th - g_t)**tc
316 IF (temp_c <= tl)
THEN
317 g_ta = (tl + 0.1 - tl)*(th - (tl + 0.1))**tc/tc2
319 IF (min(snowfrac(1), snowfrac(2), snowfrac(3), snowfrac(4), snowfrac(5), snowfrac(6)) /= 1)
THEN
320 CALL errorhint(29,
'subroutine SurfaceResistance.f95: T changed to fit limits TL+0.1,Temp_C,id,it', &
321 REAL(Temp_c, KIND(1D0)), id_real, it)
323 ELSEIF (temp_c >= th)
THEN
324 g_ta = ((th - 0.1) - tl)*(th - (th - 0.1))**tc/tc2
325 CALL errorhint(29,
'subroutine SurfaceResistance.f95: T changed to fit limits TH-0.1,Temp_C,id,it', &
326 REAL(Temp_c, KIND(1D0)), id_real, it)
328 g_ta = (temp_c - tl)*(th - temp_c)**tc/tc2
332 IF (smdmethod > 0)
THEN
333 g_smd = (1 - exp(g_sm*(xsmd - sdp)))/(1 - exp(g_sm*(-sdp)))
336 g_smd = (1 - exp(g_sm*(vsmd - sdp)))/(1 - exp(g_sm*(-sdp)))
337 IF (sfr_surf(conifsurf) + sfr_surf(decidsurf) + sfr_surf(grasssurf) == 0 .OR. sfr_surf(watersurf) == 1)
THEN
346 'subroutine SurfaceResistance.f95 (gsModel=2): gs < 0 calculated, setting to 0.0001', &
356 g_lai = g_lai + (sfr_surf(iv + 2)*(1 - snowfrac(iv + 2)))*lai_id(iv)/laimax(iv)*maxconductance(iv)
363 gsc = (g_max*g_kdown*g_dq*g_ta*g_smd*g_lai)
367 CALL errorhint(65,
'subroutine SurfaceResistance.f95 (gsModel=2): gsc <= 0, setting to 0.1 mm s-1', gsc, id_real, it)
371 ELSEIF (gsmodel < 1 .OR. gsmodel > 4)
THEN
372 CALL errorhint(71,
'Value of gsModel not recognised.', notused, notused, gsmodel)
376 gfunc = g_dq*g_ta*g_smd*g_kdown
410 RoughLenMomMethod, FAImethod, & ! input:
411 sfr_surf, & ! surface fractions
412 surfacearea, & ! surface area of whole grid cell
413 bldgH, EveTreeH, DecTreeH, &
414 porosity_dectr, FAIBldg, FAIEveTree, FAIDecTree, &
416 FAI, PAI, & ! output:
428 INTEGER,
PARAMETER :: nsurf = 7
429 INTEGER,
PARAMETER :: PavSurf = 1
430 INTEGER,
PARAMETER :: BldgSurf = 2
431 INTEGER,
PARAMETER :: ConifSurf = 3
432 INTEGER,
PARAMETER :: DecidSurf = 4
433 INTEGER,
PARAMETER :: GrassSurf = 5
434 INTEGER,
PARAMETER :: BSoilSurf = 6
435 INTEGER,
PARAMETER :: WaterSurf = 7
436 REAL(KIND(1D0)),
PARAMETER :: porosity_evetr = 0.32
438 INTEGER,
INTENT(in) :: RoughLenMomMethod
439 INTEGER,
INTENT(in) :: FAImethod
441 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: sfr_surf
443 REAL(KIND(1D0)),
INTENT(in) :: surfaceArea
444 REAL(KIND(1D0)),
INTENT(in) :: bldgH
445 REAL(KIND(1D0)),
INTENT(in) :: EveTreeH
446 REAL(KIND(1D0)),
INTENT(in) :: DecTreeH
447 REAL(KIND(1D0)),
INTENT(in) :: porosity_dectr
448 REAL(KIND(1D0)),
INTENT(in) :: FAIBldg
449 REAL(KIND(1D0)),
INTENT(in) :: FAIEveTree
450 REAL(KIND(1D0)),
INTENT(in) :: FAIDecTree
451 REAL(KIND(1D0)),
INTENT(in) :: z0m_in
452 REAL(KIND(1D0)),
INTENT(in) :: zdm_in
453 REAL(KIND(1D0)),
INTENT(in) :: Z
455 REAL(KIND(1D0)),
INTENT(out) :: FAI
456 REAL(KIND(1D0)),
INTENT(out) :: PAI
457 REAL(KIND(1D0)),
INTENT(out) :: Zh
458 REAL(KIND(1D0)),
INTENT(out) :: z0m
459 REAL(KIND(1D0)),
INTENT(out) :: zdm
460 REAL(KIND(1D0)),
INTENT(out) :: ZZD
462 INTEGER,
PARAMETER :: notUsedI = -55
463 REAL(KIND(1D0)),
PARAMETER :: notUsed = -55.5
464 REAL(KIND(1D0)) :: z0m4Paved, z0m4Grass, z0m4BSoil, z0m4Water
467 REAL(KIND(1D0)) :: FAIBldg_use
468 REAL(KIND(1D0)) :: FAIEveTree_use
469 REAL(KIND(1D0)) :: FAIDecTree_use
474 pai = dot_product(sfr_surf([bldgsurf, conifsurf, decidsurf]), [1d0, 1 - porosity_evetr, 1 - porosity_dectr])
486 [bldgh, evetreeh*(1 - porosity_evetr), dectreeh*(1 - porosity_dectr)], &
487 sfr_surf([bldgsurf, conifsurf, decidsurf]))/pai
488 IF (faimethod == 0)
THEN
490 faibldg_use = faibldg
491 faievetree_use = faievetree*(1 - porosity_evetr)
492 faidectree_use = faidectree*(1 - porosity_dectr)
494 ELSEIF (faimethod == 1)
THEN
498 faibldg_use = sqrt(sfr_surf(bldgsurf)/surfacearea)*bldgh
501 faievetree_use = 1.07*sfr_surf(conifsurf)
504 faidectree_use = 1.66*(1 - porosity_dectr)*sfr_surf(decidsurf)
507 fai = sum(merge([faibldg_use, faievetree_use, faidectree_use], &
509 sfr_surf([bldgsurf, conifsurf, decidsurf]) > 0))
520 IF (roughlenmommethod == 2)
THEN
523 ELSEIF (roughlenmommethod == 3)
THEN
525 zdm = (1 + 4.43**(-pai)*(pai - 1))*zh
526 z0m = ((1 - zdm/zh)*exp(-(0.5*1.0*1.2/0.4**2*(1 - zdm/zh)*fai)**(-0.5)))*zh
527 ELSEIF (roughlenmommethod == 4)
THEN
529 zdm = (-0.182 + 0.722*
sigmoid(-1.16 + 3.89*pai) + 0.493*
sigmoid(-5.17 + 32.7*pai))*zh
531 0.0165*min(pai, .7) + 2.52*min(pai, .7)**2 + &
532 3.21*min(pai, .7)**3 - 43.6*min(pai, .7)**4 + &
533 76.5*min(pai, .7)**5 - 40.*min(pai, .7)**6)*zh
535 ELSEIF (zh == 0)
THEN
536 IF (pai /= 0)
CALL errorhint(15,
'In SUEWS_RoughnessParameters.f95, zh = 0 m but areaZh > 0', zh, pai, notusedi)
539 z0m = (z0m4paved*sfr_surf(pavsurf) &
540 + z0m4grass*sfr_surf(grasssurf) &
541 + z0m4bsoil*sfr_surf(bsoilsurf) &
542 + z0m4water*sfr_surf(watersurf))/(1 - pai)
544 CALL errorhint(15,
'Setting z0m and zdm using default values', z0m, zdm, notusedi)
545 ELSEIF (pai == 1)
THEN
548 CALL errorhint(15,
'Assuming mean height = 10 m, Setting z0m and zdm to default value', z0m, zdm, notusedi)
552 IF (roughlenmommethod == 1)
THEN
560 IF (z0m < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, z0 < 0 m.', z0m, notused, notusedi)
561 IF (zdm < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, zd < 0 m.', zdm, notused, notusedi)
562 IF (zzd < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, (z-zd) < 0 m.', zzd, notused, notusedi)
566 RoughLenMomMethod, FAImethod, & ! input:
567 sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, & ! surface fractions
568 surfacearea, & ! surface area of whole grid cell
569 bldgH, EveTreeH, DecTreeH, &
570 porosity_dectr, FAIBldg, FAIEveTree, FAIDecTree, &
572 FAIBldg_use, FAIEveTree_use, FAIDecTree_use, & ! output:
573 FAI, PAI, & ! output:
585 INTEGER,
PARAMETER :: nsurf = 7
586 INTEGER,
PARAMETER :: PavSurf = 1
587 INTEGER,
PARAMETER :: BldgSurf = 2
588 INTEGER,
PARAMETER :: ConifSurf = 3
589 INTEGER,
PARAMETER :: DecidSurf = 4
590 INTEGER,
PARAMETER :: GrassSurf = 5
591 INTEGER,
PARAMETER :: BSoilSurf = 6
592 INTEGER,
PARAMETER :: WaterSurf = 7
593 REAL(KIND(1D0)),
PARAMETER :: porosity_evetr = 0.32
595 INTEGER,
INTENT(in) :: RoughLenMomMethod
596 INTEGER,
INTENT(in) :: FAImethod
598 REAL(KIND(1D0)),
INTENT(IN) :: sfr_paved
599 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bldg
600 REAL(KIND(1D0)),
INTENT(IN) :: sfr_evetr
601 REAL(KIND(1D0)),
INTENT(IN) :: sfr_dectr
602 REAL(KIND(1D0)),
INTENT(IN) :: sfr_grass
603 REAL(KIND(1D0)),
INTENT(IN) :: sfr_bsoil
604 REAL(KIND(1D0)),
INTENT(IN) :: sfr_water
605 REAL(KIND(1D0)),
DIMENSION(nsurf) :: sfr_surf
607 REAL(KIND(1D0)),
INTENT(in) :: surfaceArea
608 REAL(KIND(1D0)),
INTENT(in) :: bldgH
609 REAL(KIND(1D0)),
INTENT(in) :: EveTreeH
610 REAL(KIND(1D0)),
INTENT(in) :: DecTreeH
611 REAL(KIND(1D0)),
INTENT(in) :: porosity_dectr
612 REAL(KIND(1D0)),
INTENT(in) :: FAIBldg
613 REAL(KIND(1D0)),
INTENT(in) :: FAIEveTree
614 REAL(KIND(1D0)),
INTENT(in) :: FAIDecTree
615 REAL(KIND(1D0)),
INTENT(in) :: z0m_in
616 REAL(KIND(1D0)),
INTENT(in) :: zdm_in
617 REAL(KIND(1D0)),
INTENT(in) :: Z
619 REAL(KIND(1D0)),
INTENT(out) :: FAI
620 REAL(KIND(1D0)),
INTENT(out) :: PAI
621 REAL(KIND(1D0)),
INTENT(out) :: Zh
622 REAL(KIND(1D0)),
INTENT(out) :: z0m
623 REAL(KIND(1D0)),
INTENT(out) :: zdm
624 REAL(KIND(1D0)),
INTENT(out) :: ZZD
626 INTEGER,
PARAMETER :: notUsedI = -55
627 REAL(KIND(1D0)),
PARAMETER :: notUsed = -55.5
628 REAL(KIND(1D0)) :: z0m4Paved, z0m4Grass, z0m4BSoil, z0m4Water
631 REAL(KIND(1D0)),
INTENT(out) :: FAIBldg_use
632 REAL(KIND(1D0)),
INTENT(out) :: FAIEveTree_use
633 REAL(KIND(1D0)),
INTENT(out) :: FAIDecTree_use
635 sfr_surf = [sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water]
640 pai = dot_product(sfr_surf([bldgsurf, conifsurf, decidsurf]), [1d0, 1 - porosity_evetr, 1 - porosity_dectr])
652 [bldgh, evetreeh*(1 - porosity_evetr), dectreeh*(1 - porosity_dectr)], &
653 sfr_surf([bldgsurf, conifsurf, decidsurf]))/pai
654 IF (faimethod == 0)
THEN
656 faibldg_use = faibldg
657 faievetree_use = faievetree*(1 - porosity_evetr)
658 faidectree_use = faidectree*(1 - porosity_dectr)
660 ELSEIF (faimethod == 1)
THEN
664 faibldg_use = sqrt(sfr_surf(bldgsurf)/surfacearea)*bldgh
667 faievetree_use = 1.07*sfr_surf(conifsurf)
670 faidectree_use = 1.66*(1 - porosity_dectr)*sfr_surf(decidsurf)
673 fai = sum(merge([faibldg_use, faievetree_use, faidectree_use], &
675 sfr_surf([bldgsurf, conifsurf, decidsurf]) > 0))
687 IF (roughlenmommethod == 2)
THEN
690 ELSEIF (roughlenmommethod == 3)
THEN
691 zdm = (1 + 4.43**(-sfr_surf(bldgsurf))*(sfr_surf(bldgsurf) - 1))*zh
692 z0m = ((1 - zdm/zh)*exp(-(0.5*1.0*1.2/0.4**2*(1 - zdm/zh)*fai)**(-0.5)))*zh
693 ELSEIF (roughlenmommethod == 4)
THEN
695 zdm = (-0.182 + 0.722*
sigmoid(-1.16 + 3.89*pai) + 0.493*
sigmoid(-5.17 + 32.7*pai))*zh
697 0.0165*min(pai, .7) + 2.52*min(pai, .7)**2 + &
698 3.21*min(pai, .7)**3 - 43.6*min(pai, .7)**4 + &
699 76.5*min(pai, .7)**5 - 40.*min(pai, .7)**6)*zh
701 ELSEIF (zh == 0)
THEN
702 IF (pai /= 0)
CALL errorhint(15,
'In SUEWS_RoughnessParameters.f95, zh = 0 m but areaZh > 0', zh, pai, notusedi)
705 z0m = (z0m4paved*sfr_surf(pavsurf) &
706 + z0m4grass*sfr_surf(grasssurf) &
707 + z0m4bsoil*sfr_surf(bsoilsurf) &
708 + z0m4water*sfr_surf(watersurf))/(1 - pai)
710 CALL errorhint(15,
'Setting z0m and zdm using default values', z0m, zdm, notusedi)
711 ELSEIF (pai == 1)
THEN
714 CALL errorhint(15,
'Assuming mean height = 10 m, Setting z0m and zdm to default value', z0m, zdm, notusedi)
718 IF (roughlenmommethod == 1)
THEN
726 IF (z0m < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, z0 < 0 m.', z0m, notused, notusedi)
727 IF (zdm < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, zd < 0 m.', zdm, notused, notusedi)
728 IF (zzd < 0)
CALL errorhint(14,
'In SUEWS_cal_RoughnessParameters, (z-zd) < 0 m.', zzd, notused, notusedi)
731 FUNCTION cal_z0v(RoughLenHeatMethod, z0m, VegFraction, UStar)
RESULT(z0V)
735 INTEGER,
INTENT(in) :: roughlenheatmethod
736 REAL(kind(1d0)),
INTENT(in) :: z0m
737 REAL(kind(1d0)),
INTENT(in) :: vegfraction
738 REAL(kind(1d0)),
INTENT(in) :: ustar
740 REAL(kind(1d0)) :: z0v
742 REAL(kind(1d0)),
PARAMETER :: muu = 1.46e-5
747 IF (roughlenheatmethod == 1)
THEN
749 ELSEIF (roughlenheatmethod == 2)
THEN
752 z0v = z0m*exp(2 - (1.2 - 0.9*vegfraction**0.29)*(ustar*z0m/muu)**0.25)
753 ELSEIF (roughlenheatmethod == 3)
THEN
755 ELSEIF (roughlenheatmethod == 4)
THEN
756 z0v = z0m*exp(2 - 1.29*(ustar*z0m/muu)**0.25)
757 ELSEIF (roughlenheatmethod == 5)
THEN
759 IF (vegfraction > .999)
THEN
764 z0v = z0m*exp(2 - (1.2 - 0.9*vegfraction**0.29)*(ustar*z0m/muu)**0.25)
subroutine surfaceresistance(id, it, smdmethod, snowfrac, sfr_surf, avkdn, temp_c, dq, xsmd, vsmd, maxconductance, laimax, lai_id, gsmodel, kmax, g_max, g_k, g_q_base, g_q_shape, g_t, g_sm, th, tl, s1, s2, g_kdown, g_dq, g_ta, g_smd, g_lai, gfunc, gsc, rs)
subroutine suews_cal_roughnessparameters(roughlenmommethod, faimethod, sfr_surf, surfacearea, bldgh, evetreeh, dectreeh, porosity_dectr, faibldg, faievetree, faidectree, z0m_in, zdm_in, z, fai, pai, zh, z0m, zdm, zzd)
subroutine suews_cal_roughnessparameters_dts(roughlenmommethod, faimethod, sfr_paved, sfr_bldg, sfr_evetr, sfr_dectr, sfr_grass, sfr_bsoil, sfr_water, surfacearea, bldgh, evetreeh, dectreeh, porosity_dectr, faibldg, faievetree, faidectree, z0m_in, zdm_in, z, faibldg_use, faievetree_use, faidectree_use, fai, pai, zh, z0m, zdm, zzd)