37 USE modd_prep, ONLY : xzs_ls, xt_clim_grad
41 USE modi_prep_ver_snow
44 USE yomhook
,ONLY : lhook, dr_hook
45 USE parkind1
,ONLY : jprb
55 TYPE(bem_t),
INTENT(INOUT) :: b
56 TYPE(teb_t),
INTENT(INOUT) :: t
60 REAL,
DIMENSION(:),
ALLOCATABLE :: zt0
61 REAL,
DIMENSION(:),
ALLOCATABLE :: zp_ls
62 REAL,
DIMENSION(:),
ALLOCATABLE :: zt_ls
63 REAL,
DIMENSION(:),
ALLOCATABLE :: zp
64 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zgrid
65 REAL,
DIMENSION(:),
ALLOCATABLE :: zd
66 REAL(KIND=JPRB) :: zhook_handle
80 IF (lhook) CALL dr_hook(
'PREP_VER_TEB',0,zhook_handle)
81 t%CUR%XTI_ROAD = t%CUR%XTI_ROAD + xt_clim_grad * (top%XZS - xzs_ls)
85 DO jl=1,
SIZE(t%CUR%XT_ROAD,2)
86 t%CUR%XT_ROAD(:,jl) = t%CUR%XT_ROAD(:,jl) + xt_clim_grad * (top%XZS - xzs_ls)
92 ALLOCATE(zd(
SIZE(t%CUR%XD_WALL,1)))
93 ALLOCATE(zgrid(
SIZE(t%CUR%XD_WALL,1),
SIZE(t%CUR%XD_WALL,2)))
97 DO jl=1,
SIZE(t%CUR%XD_WALL,2)
98 zgrid(:,jl) = zd(:) + t%CUR%XD_WALL(:,jl)/2.
99 zd(:) = zd(:) + t%CUR%XD_WALL(:,jl)
105 DO jl=1,
SIZE(t%CUR%XT_WALL_A,2)
106 t%CUR%XT_WALL_A(:,jl) = t%CUR%XT_WALL_A(:,jl) + xt_clim_grad * (top%XZS - xzs_ls) &
107 * max(1.-2.*zgrid(:,jl)/zd(:),0.)
108 t%CUR%XT_WALL_B(:,jl) = t%CUR%XT_WALL_B(:,jl) + xt_clim_grad * (top%XZS - xzs_ls) &
109 * max(1.-2.*zgrid(:,jl)/zd(:),0.)
118 ALLOCATE(zd(
SIZE(t%CUR%XD_ROOF,1)))
119 ALLOCATE(zgrid(
SIZE(t%CUR%XD_ROOF,1),
SIZE(t%CUR%XD_ROOF,2)))
123 DO jl=1,
SIZE(t%CUR%XD_ROOF,2)
124 zgrid(:,jl) = zd(:) + t%CUR%XD_ROOF(:,jl)/2.
125 zd(:) = zd(:) + t%CUR%XD_ROOF(:,jl)
131 DO jl=1,
SIZE(t%CUR%XT_ROOF,2)
132 t%CUR%XT_ROOF(:,jl) = t%CUR%XT_ROOF(:,jl) + xt_clim_grad * (top%XZS - xzs_ls) &
133 * max(1.-2.*zgrid(:,jl)/zd(:),0.)
140 IF (top%CBEM==
'BEM')
THEN
145 ALLOCATE(zd(
SIZE(b%CUR%XD_FLOOR,1)))
146 ALLOCATE(zgrid(
SIZE(b%CUR%XD_FLOOR,1),
SIZE(b%CUR%XD_FLOOR,2)))
150 DO jl=1,
SIZE(b%CUR%XD_FLOOR,2)
151 zgrid(:,jl) = zd(:) + b%CUR%XD_FLOOR(:,jl)/2.
152 zd(:) = zd(:) + b%CUR%XD_FLOOR(:,jl)
158 DO jl=1,
SIZE(b%CUR%XT_FLOOR,2)
159 b%CUR%XT_FLOOR(:,jl) = b%CUR%XT_FLOOR(:,jl) + xt_clim_grad * (top%XZS - xzs_ls) &
160 * max(2.*zgrid(:,jl)/zd(:)-1.,0.)
169 ALLOCATE(zd(
SIZE(b%CUR%XD_FLOOR,1)))
170 ALLOCATE(zgrid(
SIZE(b%CUR%XD_FLOOR,1),
SIZE(b%CUR%XD_FLOOR,2)))
174 DO jl=1,
SIZE(b%CUR%XD_FLOOR,2)
175 zgrid(:,jl) = zd(:) + b%CUR%XD_FLOOR(:,jl)/2.
176 zd(:) = zd(:) + b%CUR%XD_FLOOR(:,jl)
182 DO jl=1,
SIZE(b%CUR%XT_MASS,2)
183 b%CUR%XT_MASS(:,jl) = b%CUR%XT_MASS(:,jl) + xt_clim_grad * (top%XZS - xzs_ls) &
184 * max(2.*zgrid(:,jl)/zd(:)-1.,0.)
202 ALLOCATE(zt0(
SIZE(t%CUR%XQ_CANYON)))
203 zt0 = t%CUR%XT_CANYON - xt_clim_grad * xzs_ls
207 ALLOCATE(zt_ls(
SIZE(t%CUR%XQ_CANYON)))
208 zt_ls = t%CUR%XT_CANYON
210 t%CUR%XT_CANYON = t%CUR%XT_CANYON + xt_clim_grad * (top%XZS - xzs_ls)
218 ALLOCATE(zp_ls(
SIZE(t%CUR%XQ_CANYON)))
219 zp_ls = xp00 * exp(-(xg/xrd/zt0)*xzs_ls +(xg*xt_clim_grad/(2.*xrd*zt0**2))*xzs_ls**2)
223 ALLOCATE(zp(
SIZE(t%CUR%XQ_CANYON)))
224 zp = xp00 * exp(-(xg/xrd/zt0)*top%XZS +(xg*xt_clim_grad/(2.*xrd*zt0**2))*top%XZS **2)
228 t%CUR%XQ_CANYON = t%CUR%XQ_CANYON *
qsat(t%CUR%XT_CANYON,zp) /
qsat(zt_ls,zp_ls)
234 IF (lhook) CALL dr_hook(
'PREP_VER_TEB',1,zhook_handle)
subroutine prep_ver_snow(TPSNOW, PZS_LS, PZS, PTG_LS, PTG, KDEEP_SOIL)
subroutine prep_ver_teb(B, T, TOP)