60 USE yomhook
,ONLY : lhook, dr_hook
61 USE parkind1
,ONLY : jprb
71 TYPE(isba_t
),
INTENT(INOUT) :: i
73 REAL,
DIMENSION(:),
INTENT(IN) :: phw
74 REAL,
DIMENSION(:),
INTENT(IN) :: pht
75 REAL,
DIMENSION(:),
INTENT(IN) :: psfco2
76 REAL,
DIMENSION(:),
INTENT(IN) :: ptrad
82 REAL,
DIMENSION(SIZE(I%XPATCH,1)) :: zsumpatch
83 REAL(KIND=JPRB) :: zhook_handle
90 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG_ISBA_N',0,zhook_handle)
92 DO jpatch=1,
SIZE(i%XPATCH,2)
93 zsumpatch(:) = zsumpatch(:) + i%XPATCH(:,jpatch)
99 IF (dgi%LSURF_BUDGET)
THEN
104 dgi%XAVG_GFLUX(:) = 0.
111 dgi%XAVG_SWBD(:,:) = 0.
112 dgi%XAVG_SWBU(:,:) = 0.
114 DO jpatch=1,
SIZE(i%XPATCH,2)
115 WHERE (zsumpatch(:) > 0.)
119 dgi%XAVG_RN(:) = dgi%XAVG_RN(:) +i%XPATCH(:,jpatch) * dgi%XRN(:,jpatch)
123 dgi%XAVG_H (:) = dgi%XAVG_H (:) +i%XPATCH(:,jpatch) * dgi%XH (:,jpatch)
127 dgi%XAVG_LE(:) = dgi%XAVG_LE(:) +i%XPATCH(:,jpatch) * i%XLE(:,jpatch)
131 dgi%XAVG_LEI(:) = dgi%XAVG_LEI(:) +i%XPATCH(:,jpatch) * dgi%XLEI(:,jpatch)
135 dgi%XAVG_GFLUX(:) = dgi%XAVG_GFLUX(:) +i%XPATCH(:,jpatch) * dgi%XGFLUX(:,jpatch)
139 dgi%XAVG_SWD(:) = dgi%XAVG_SWD(:) +i%XPATCH(:,jpatch) * dgi%XSWD(:,jpatch)
143 dgi%XAVG_SWU(:) = dgi%XAVG_SWU(:) +i%XPATCH(:,jpatch) * dgi%XSWU(:,jpatch)
147 dgi%XAVG_LWD(:) = dgi%XAVG_LWD(:) +i%XPATCH(:,jpatch) * dgi%XLWD(:,jpatch)
151 dgi%XAVG_LWU(:) = dgi%XAVG_LWU(:) +i%XPATCH(:,jpatch) * dgi%XLWU(:,jpatch)
155 dgi%XAVG_FMU(:) = dgi%XAVG_FMU(:) +i%XPATCH(:,jpatch) * dgi%XFMU(:,jpatch)
159 dgi%XAVG_FMV(:) = dgi%XAVG_FMV(:) +i%XPATCH(:,jpatch) * dgi%XFMV(:,jpatch)
164 DO jpatch=1,
SIZE(i%XPATCH,2)
165 DO jswb=1,
SIZE(dgi%XSWBD,2)
166 WHERE (zsumpatch(:) > 0.)
170 dgi%XAVG_SWBD(:,jswb) = dgi%XAVG_SWBD(:,jswb) +i%XPATCH(:,jpatch) * dgi%XSWBD(:,jswb,jpatch)
174 dgi%XAVG_SWBU(:,jswb) = dgi%XAVG_SWBU(:,jswb) +i%XPATCH(:,jpatch) * dgi%XSWBU(:,jswb,jpatch)
181 IF (dgei%LSURF_BUDGETC)
THEN
182 dgi%XAVG_SWDC(:) = 0.
183 dgi%XAVG_SWUC(:) = 0.
184 dgi%XAVG_LWDC(:) = 0.
185 dgi%XAVG_LWUC(:) = 0.
186 dgi%XAVG_FMUC(:) = 0.
187 dgi%XAVG_FMVC(:) = 0.
188 DO jpatch=1,
SIZE(i%XPATCH,2)
189 WHERE (zsumpatch(:) > 0.)
193 dgi%XAVG_SWDC(:) = dgi%XAVG_SWDC(:) + i%XPATCH(:,jpatch) * dgi%XSWDC(:,jpatch)
197 dgi%XAVG_SWUC(:) = dgi%XAVG_SWUC(:) + i%XPATCH(:,jpatch) * dgi%XSWUC(:,jpatch)
201 dgi%XAVG_LWDC(:) = dgi%XAVG_LWDC(:) + i%XPATCH(:,jpatch) * dgi%XLWDC(:,jpatch)
205 dgi%XAVG_LWUC(:) = dgi%XAVG_LWUC(:) + i%XPATCH(:,jpatch) * dgi%XLWUC(:,jpatch)
209 dgi%XAVG_FMUC(:) = dgi%XAVG_FMUC(:) + i%XPATCH(:,jpatch) * dgi%XFMUC(:,jpatch)
213 dgi%XAVG_FMVC(:) = dgi%XAVG_FMVC(:) + i%XPATCH(:,jpatch) * dgi%XFMVC(:,jpatch)
224 DO jpatch=1,
SIZE(i%XPATCH,2)
225 WHERE (zsumpatch(:) > 0.)
226 dgi%XAVG_TS(:) = dgi%XAVG_TS(:) + i%XPATCH(:,jpatch) * dgi%XTS(:,jpatch)
230 IF (.NOT. i%LCANOPY .AND. dgi%N2M>=1)
THEN
234 dgi%XAVG_HU2M(:) = 0.
236 DO jpatch=1,
SIZE(i%XPATCH,2)
237 WHERE (zsumpatch(:) > 0.)
241 dgi%XAVG_T2M(:) = dgi%XAVG_T2M(:) + i%XPATCH(:,jpatch) * dgi%XT2M(:,jpatch)
245 dgi%XAVG_Q2M(:) = dgi%XAVG_Q2M(:) + i%XPATCH(:,jpatch) * dgi%XQ2M(:,jpatch)
249 dgi%XAVG_HU2M(:) = dgi%XAVG_HU2M(:) + i%XPATCH(:,jpatch) * dgi%XHU2M(:,jpatch)
256 dgi%XAVG_ZON10M (:) = 0.
257 dgi%XAVG_MER10M (:) = 0.
258 dgi%XAVG_WIND10M(:) = 0.
259 DO jpatch=1,
SIZE(i%XPATCH,2)
260 WHERE (zsumpatch(:) > 0.)
261 dgi%XAVG_ZON10M(:) = dgi%XAVG_ZON10M (:) + i%XPATCH(:,jpatch) * dgi%XZON10M (:,jpatch)
262 dgi%XAVG_MER10M(:) = dgi%XAVG_MER10M (:) + i%XPATCH(:,jpatch) * dgi%XMER10M (:,jpatch)
263 dgi%XAVG_WIND10M(:) = dgi%XAVG_WIND10M(:) + i%XPATCH(:,jpatch) * dgi%XWIND10M(:,jpatch)
267 dgi%XAVG_T2M_MIN(:) = min(dgi%XAVG_T2M_MIN(:),dgi%XAVG_T2M(:))
268 dgi%XAVG_T2M_MAX(:) = max(dgi%XAVG_T2M_MAX(:),dgi%XAVG_T2M(:))
270 dgi%XAVG_HU2M_MIN(:) = min(dgi%XAVG_HU2M_MIN(:),dgi%XAVG_HU2M(:))
271 dgi%XAVG_HU2M_MAX(:) = max(dgi%XAVG_HU2M_MAX(:),dgi%XAVG_HU2M(:))
273 dgi%XAVG_WIND10M_MAX(:) = max(dgi%XAVG_WIND10M_MAX(:),dgi%XAVG_WIND10M(:))
283 dgi%XAVG_SFCO2(:) = psfco2(:)
285 DO jpatch=1,
SIZE(i%XPATCH,2)
286 WHERE (zsumpatch(:) > 0.)
287 dgi%XAVG_RI(:) = dgi%XAVG_RI(:) + i%XPATCH(:,jpatch) * dgi%XRI(:,jpatch)
293 dgi%XT2M_MIN(:,:) = min(dgi%XT2M_MIN(:,:),dgi%XT2M(:,:))
294 dgi%XT2M_MAX(:,:) = max(dgi%XT2M_MAX(:,:),dgi%XT2M(:,:))
307 dgi%XAVG_Z0H (:) = 0.
308 dgi%XAVG_Z0EFF(:) = 0.
310 DO jpatch=1,
SIZE(i%XPATCH,2)
311 WHERE (zsumpatch(:) > 0.)
313 dgi%XAVG_CD(:) = dgi%XAVG_CD(:) + i%XPATCH(:,jpatch) * dgi%XCD(:,jpatch)
315 dgi%XAVG_CH(:) = dgi%XAVG_CH(:) + i%XPATCH(:,jpatch) * dgi%XCH(:,jpatch)
317 dgi%XAVG_CE(:) = dgi%XAVG_CE(:) + i%XPATCH(:,jpatch) * dgi%XCE(:,jpatch)
320 dgi%XAVG_Z0(:) = dgi%XAVG_Z0(:) + i%XPATCH(:,jpatch) * 1./(log(phw(:)/dgi%XZ0_WITH_SNOW (:,jpatch)))**2
322 dgi%XAVG_Z0H(:) = dgi%XAVG_Z0H(:) + i%XPATCH(:,jpatch) * 1./(log(pht(:)/dgi%XZ0H_WITH_SNOW(:,jpatch)))**2
324 dgi%XAVG_Z0EFF(:) = dgi%XAVG_Z0EFF(:) + i%XPATCH(:,jpatch) * 1./(log(phw(:)/dgi%XZ0EFF (:,jpatch)))**2
329 dgi%XAVG_Z0(:) = phw(:) * exp( - sqrt(1./dgi%XAVG_Z0(:)) )
331 dgi%XAVG_Z0H(:) = pht(:) * exp( - sqrt(1./dgi%XAVG_Z0H(:)) )
333 dgi%XAVG_Z0EFF(:) = phw(:) * exp( - sqrt(1./dgi%XAVG_Z0EFF(:)) )
337 IF (dgi%LSURF_VARS)
THEN
340 DO jpatch=1,
SIZE(i%XPATCH,2)
341 WHERE (zsumpatch(:) > 0.)
345 dgi%XAVG_QS(:) = dgi%XAVG_QS(:) + i%XPATCH(:,jpatch) * dgi%XQS(:,jpatch)
351 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG_ISBA_N',1,zhook_handle)
subroutine average_diag_isba_n(DGEI, DGI, I, PHW, PHT, PSFCO2, PTRAD)