60 USE modi_comput_cold_layers_thick
62 USE yomhook
,ONLY : lhook, dr_hook
63 USE parkind1
,ONLY : jprb
69 TYPE(isba_t
),
INTENT(INOUT) :: i
74 REAL,
DIMENSION(SIZE(I%XPATCH,1)) :: zsumpatch
75 REAL,
DIMENSION(SIZE(I%XPATCH,1)) :: zsumdg, zsnow, zsumfrd2, zsumfrd3, zpondf2
76 REAL,
DIMENSION(SIZE(I%XPATCH,1),SIZE(I%XPATCH,2)) :: zlai
78 INTEGER :: ini,inp,idepth,iwork
80 REAL,
DIMENSION(SIZE(I%XDG,1),SIZE(I%XDG,2)) :: zpond, ztg, zdg
82 REAL(KIND=JPRB) :: zhook_handle
89 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG_MISC_ISBA_N',0,zhook_handle)
91 IF (.NOT.dgmi%LSURF_MISC_BUDGET)
THEN
92 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG_MISC_ISBA_N',1,zhook_handle)
102 zsumpatch(jj) = zsumpatch(jj) + i%XPATCH(jj,jpatch)
112 WHERE(i%XLAI(:,:)/=xundef)
113 zlai(:,:)=i%XLAI(:,:)
123 dgmi%XAVG_HV (:) = 0.
124 dgmi%XAVG_PSNG(:) = 0.
125 dgmi%XAVG_PSNV(:) = 0.
126 dgmi%XAVG_PSN (:) = 0.
127 dgmi%XAVG_ALBT(:) = 0.
128 dgmi%XAVG_SWI (:,:) = 0.
129 dgmi%XAVG_TSWI(:,:) = 0.
130 dgmi%XAVG_FSAT(:) = 0.
131 dgmi%XAVG_FFG (:) = 0.
132 dgmi%XAVG_FFV (:) = 0.
133 dgmi%XAVG_FF (:) = 0.
134 dgmi%XAVG_TWSNOW(:) = 0.
135 dgmi%XAVG_TDSNOW(:) = 0.
136 dgmi%XAVG_TTSNOW(:) = 0.
137 dgmi%XAVG_LAI (:) = 0.
139 dgmi%XSOIL_SWI (:) = 0.
140 dgmi%XSOIL_TSWI (:) = 0.
141 dgmi%XSOIL_TWG (:) = 0.
142 dgmi%XSOIL_TWGI (:) = 0.
143 dgmi%XSOIL_WG (:) = 0.
144 dgmi%XSOIL_WGI (:) = 0.
146 IF(i%CISBA==
'DIF')
THEN
148 dgmi%XAVG_ALT (:) = 0.
149 dgmi%XAVG_FLT (:) = 0.
153 IF(i%CISBA==
'DIF'.AND.dgmi%LSURF_MISC_DIF)
THEN
155 dgmi%XFRD2_TSWI (:) = 0.
156 dgmi%XFRD2_TWG (:) = 0.
157 dgmi%XFRD2_TWGI (:) = 0.
159 dgmi%XFRD3_TSWI (:) = 0.
160 dgmi%XFRD3_TWG (:) = 0.
161 dgmi%XFRD3_TWGI (:) = 0.
170 IF (zsumpatch(jj) > 0.)
THEN
173 dgmi%XAVG_HV(jj) = dgmi%XAVG_HV(jj) + i%XPATCH(jj,jpatch) * dgmi%XHV(jj,jpatch)
176 dgmi%XAVG_PSNG(jj) = dgmi%XAVG_PSNG(jj) + i%XPATCH(jj,jpatch) * dgmi%XDPSNG(jj,jpatch)
177 dgmi%XAVG_PSNV(jj) = dgmi%XAVG_PSNV(jj) + i%XPATCH(jj,jpatch) * dgmi%XDPSNV(jj,jpatch)
178 dgmi%XAVG_PSN (jj) = dgmi%XAVG_PSN (jj) + i%XPATCH(jj,jpatch) * dgmi%XDPSN (jj,jpatch)
181 dgmi%XAVG_FSAT (jj) = dgmi%XAVG_FSAT (jj) + i%XPATCH(jj,jpatch) * dgmi%XDFSAT (jj,jpatch)
184 dgmi%XAVG_FFG(jj) = dgmi%XAVG_FFG(jj) + i%XPATCH(jj,jpatch) * dgmi%XDFFG(jj,jpatch)
185 dgmi%XAVG_FFV(jj) = dgmi%XAVG_FFV(jj) + i%XPATCH(jj,jpatch) * dgmi%XDFFV(jj,jpatch)
186 dgmi%XAVG_FF (jj) = dgmi%XAVG_FF (jj) + i%XPATCH(jj,jpatch) * dgmi%XDFF (jj,jpatch)
189 dgmi%XAVG_ALBT(jj) = dgmi%XAVG_ALBT(jj) + i%XPATCH(jj,jpatch) * dgmi%XALBT (jj,jpatch)
192 dgmi%XAVG_LAI (jj) = dgmi%XAVG_LAI(jj) + i%XPATCH(jj,jpatch) * zlai(jj,jpatch)
195 dgmi%XAVG_TWSNOW(jj) = dgmi%XAVG_TWSNOW(jj) + i%XPATCH(jj,jpatch) * dgmi%XTWSNOW(jj,jpatch)
196 dgmi%XAVG_TDSNOW(jj) = dgmi%XAVG_TDSNOW(jj) + i%XPATCH(jj,jpatch) * dgmi%XTDSNOW(jj,jpatch)
198 IF (dgmi%XTWSNOW(jj,jpatch)>0.0)
THEN
199 dgmi%XAVG_TTSNOW(jj) = dgmi%XAVG_TTSNOW(jj) + i%XPATCH(jj,jpatch) * dgmi%XTTSNOW(jj,jpatch)
200 zsnow(jj) = zsnow(jj) + i%XPATCH(jj,jpatch)
218 IF(i%CISBA==
'DIF')
THEN
225 DO jlayer=1,i%NGROUND_LAYER
227 ztg(jj,jlayer) = ztg(jj,jlayer) + i%XPATCH(jj,jpatch) * i%XTG(jj,jlayer,jpatch)
228 zdg(jj,jlayer) = zdg(jj,jlayer) + i%XPATCH(jj,jpatch) * i%XDG(jj,jlayer,jpatch)
236 IF(i%NSIZE_NATURE_P(jpatch) > 0 )
THEN
237 DO jlayer = 1,i%NGROUND_LAYER
240 idepth=i%NWG_LAYER(jj,jpatch)
241 IF(jlayer<=idepth.AND.idepth/=nundef)
THEN
242 zwork=i%XDZG(jj,jlayer,jpatch)
244 dgmi%XAVG_SWI (jj,jlayer) = dgmi%XAVG_SWI (jj,jlayer)+zwork*i%XPATCH(jj,jpatch)*dgmi%XSWI (jj,jlayer,jpatch)
245 dgmi%XAVG_TSWI(jj,jlayer) = dgmi%XAVG_TSWI(jj,jlayer)+zwork*i%XPATCH(jj,jpatch)*dgmi%XTSWI(jj,jlayer,jpatch)
246 zpond(jj,jlayer) = zpond(jj,jlayer)+zwork*i%XPATCH(jj,jpatch)
248 dgmi%XSOIL_SWI (jj) = dgmi%XSOIL_SWI (jj) + zwork * i%XPATCH(jj,jpatch) * dgmi%XSWI (jj,jlayer,jpatch)
249 dgmi%XSOIL_TSWI(jj) = dgmi%XSOIL_TSWI(jj) + zwork * i%XPATCH(jj,jpatch) * dgmi%XTSWI(jj,jlayer,jpatch)
250 zsumdg(jj) = zsumdg(jj) + zwork * i%XPATCH(jj,jpatch)
251 dgmi%XSOIL_TWG (jj) = dgmi%XSOIL_TWG (jj) + zwork * i%XPATCH(jj,jpatch) * (i%XWG(jj,jlayer,jpatch) &
252 + i%XWGI(jj,jlayer,jpatch))
253 dgmi%XSOIL_TWGI(jj) = dgmi%XSOIL_TWGI(jj) + zwork * i%XPATCH(jj,jpatch) * i%XWGI(jj,jlayer,jpatch)
260 WHERE(zpond(:,:)> 0.)
261 dgmi%XAVG_SWI (:,:) = dgmi%XAVG_SWI (:,:) / zpond(:,:)
262 dgmi%XAVG_TSWI(:,:) = dgmi%XAVG_TSWI(:,:) / zpond(:,:)
264 dgmi%XAVG_SWI (:,:) = xundef
265 dgmi%XAVG_TSWI(:,:) = xundef
269 IF(dgmi%LSURF_MISC_DIF)
THEN
274 IF (i%NSIZE_NATURE_P(jpatch) == 0 ) cycle
276 DO jlayer = 1,i%NGROUND_LAYER
279 idepth=i%NWG_LAYER(jj,jpatch)
280 IF(jlayer<=idepth.AND.idepth/=nundef)
THEN
283 zwork=min(i%XDZG(jj,jlayer,jpatch),max(0.0,i%XDG2(jj,jpatch)-i%XDG(jj,jlayer,jpatch)+i%XDZG(jj,jlayer,jpatch)))
284 dgmi%XFRD2_TSWI (jj) = dgmi%XFRD2_TSWI (jj) + zwork * i%XPATCH(jj,jpatch) * dgmi%XTSWI(jj,jlayer,jpatch)
285 dgmi%XFRD2_TWG (jj) = dgmi%XFRD2_TWG (jj) + zwork * i%XPATCH(jj,jpatch) * i%XWG (jj,jlayer,jpatch)
286 dgmi%XFRD2_TWGI (jj) = dgmi%XFRD2_TWGI (jj) + zwork * i%XPATCH(jj,jpatch) * i%XWGI (jj,jlayer,jpatch)
287 zsumfrd2(jj) = zsumfrd2(jj) + zwork * i%XPATCH(jj,jpatch)
290 zwork=min(i%XDZG(jj,jlayer,jpatch),max(0.0,i%XDG(jj,jlayer,jpatch)-i%XDG2(jj,jpatch)))
291 dgmi%XFRD3_TSWI (jj) = dgmi%XFRD3_TSWI (jj) + zwork * i%XPATCH(jj,jpatch) * dgmi%XTSWI(jj,jlayer,jpatch)
292 dgmi%XFRD3_TWG (jj) = dgmi%XFRD3_TWG (jj) + zwork * i%XPATCH(jj,jpatch) * i%XWG (jj,jlayer,jpatch)
293 dgmi%XFRD3_TWGI (jj) = dgmi%XFRD3_TWGI (jj) + zwork * i%XPATCH(jj,jpatch) * i%XWGI (jj,jlayer,jpatch)
294 zsumfrd3(jj) = zsumfrd3(jj) + zwork * i%XPATCH(jj,jpatch)
302 WHERE(zsumfrd2(:)>0.0)
303 dgmi%XFRD2_TSWI (:) = dgmi%XFRD2_TSWI (:) / zsumfrd2(:)
304 dgmi%XFRD2_TWG (:) = dgmi%XFRD2_TWG (:) / zsumfrd2(:)
305 dgmi%XFRD2_TWGI (:) = dgmi%XFRD2_TWGI (:) / zsumfrd2(:)
307 dgmi%XFRD2_TSWI (:) = xundef
310 WHERE(zsumfrd3(:)>0.0)
311 dgmi%XFRD3_TSWI (:) = dgmi%XFRD3_TSWI (:) / zsumfrd3(:)
312 dgmi%XFRD3_TWG (:) = dgmi%XFRD3_TWG (:) / zsumfrd3(:)
313 dgmi%XFRD3_TWGI (:) = dgmi%XFRD3_TWGI (:) / zsumfrd3(:)
315 dgmi%XFRD3_TSWI (:) = xundef
323 ELSE ! force-restore
case
328 IF(zsumpatch(jj) > 0.)
THEN
330 dgmi%XAVG_SWI (jj,1) = dgmi%XAVG_SWI (jj,1) + i%XPATCH(jj,jpatch) * dgmi%XSWI (jj,1,jpatch)
331 dgmi%XAVG_SWI (jj,2) = dgmi%XAVG_SWI (jj,2) + i%XPATCH(jj,jpatch) * dgmi%XSWI (jj,2,jpatch)
332 dgmi%XAVG_TSWI(jj,1) = dgmi%XAVG_TSWI(jj,1) + i%XPATCH(jj,jpatch) * dgmi%XTSWI(jj,1,jpatch)
333 dgmi%XAVG_TSWI(jj,2) = dgmi%XAVG_TSWI(jj,2) + i%XPATCH(jj,jpatch) * dgmi%XTSWI(jj,2,jpatch)
335 dgmi%XSOIL_SWI (jj) = dgmi%XSOIL_SWI (jj) + i%XPATCH(jj,jpatch) * i%XDG (jj,2,jpatch) * dgmi%XSWI (jj,2,jpatch)
336 dgmi%XSOIL_TSWI(jj) = dgmi%XSOIL_TSWI(jj) + i%XPATCH(jj,jpatch) * i%XDG (jj,2,jpatch) * dgmi%XTSWI(jj,2,jpatch)
337 dgmi%XSOIL_TWG (jj) = dgmi%XSOIL_TWG (jj) + i%XPATCH(jj,jpatch) * i%XDG (jj,2,jpatch) * (i%XWG(jj,2,jpatch) &
338 + i%XWGI(jj,2,jpatch))
339 dgmi%XSOIL_TWGI(jj) = dgmi%XSOIL_TWGI(jj) + i%XPATCH(jj,jpatch) * i%XDG (jj,2,jpatch) * i%XWGI(jj,2,jpatch)
341 zsumdg(jj) = zsumdg(jj) + i%XPATCH(jj,jpatch) * i%XDG(jj,i%NGROUND_LAYER,jpatch)
347 IF(i%CISBA==
'3-L')
THEN
351 DO jj=1,
SIZE(i%XPATCH,1)
352 IF(zsumpatch(jj) > 0.)
THEN
354 zwork=max(0.0,i%XDG(jj,3,jpatch)-i%XDG(jj,2,jpatch))
357 zpond(jj,3) = zpond(jj,3) + i%XPATCH(jj,jpatch) * zwork
358 dgmi%XAVG_SWI (jj,3) = dgmi%XAVG_SWI (jj,3) + i%XPATCH(jj,jpatch) * zwork * dgmi%XSWI (jj,3,jpatch)
359 dgmi%XSOIL_SWI (jj ) = dgmi%XSOIL_SWI (jj ) + i%XPATCH(jj,jpatch) * zwork * dgmi%XSWI (jj,3,jpatch)
360 dgmi%XAVG_TSWI (jj,3) = dgmi%XAVG_TSWI (jj,3) + i%XPATCH(jj,jpatch) * zwork * dgmi%XTSWI(jj,3,jpatch)
361 dgmi%XSOIL_TSWI(jj ) = dgmi%XSOIL_TSWI(jj ) + i%XPATCH(jj,jpatch) * zwork * dgmi%XTSWI(jj,3,jpatch)
362 dgmi%XSOIL_TWG (jj ) = dgmi%XSOIL_TWG (jj ) + i%XPATCH(jj,jpatch) * zwork * i%XWG (jj,3,jpatch)
368 WHERE(zpond(:,3)>0.0)
369 dgmi%XAVG_SWI (:,3) = dgmi%XAVG_SWI (:,3) / zpond(:,3)
370 dgmi%XAVG_TSWI(:,3) = dgmi%XAVG_TSWI(:,3) / zpond(:,3)
372 dgmi%XAVG_SWI (:,3) = xundef
373 dgmi%XAVG_TSWI(:,3) = xundef
388 dgmi%XSOIL_SWI (:) = dgmi%XSOIL_SWI (:)/zsumdg(:)
389 dgmi%XSOIL_TSWI(:) = dgmi%XSOIL_TSWI(:)/zsumdg(:)
390 dgmi%XSOIL_WG (:) = dgmi%XSOIL_TWG (:)/zsumdg(:)
391 dgmi%XSOIL_WGI (:) = dgmi%XSOIL_TWGI(:)/zsumdg(:)
395 dgmi%XSOIL_TWG (:)= dgmi%XSOIL_TWG (:) * xrholw
396 dgmi%XSOIL_TWGI(:)= dgmi%XSOIL_TWGI(:) * xrholw
400 dgmi%XAVG_TTSNOW(:) = dgmi%XAVG_TTSNOW(:)/zsnow(:)
402 dgmi%XAVG_TTSNOW(:) = xundef
407 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG_MISC_ISBA_N',1,zhook_handle)
subroutine average_diag_misc_isba_n(DGMI, I)
subroutine comput_cold_layers_thick(PDG, PTG, PALT, PFLT)