45 USE modd_data_cover_par
, ONLY : ntilesfc
56 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFRAC_TILE
59 TYPE(
diag_t),
INTENT(INOUT) :: D
61 TYPE(
diag_t),
INTENT(INOUT) :: DC
66 REAL,
DIMENSION(SIZE(PFRAC_TILE,1)) :: ZLAND, ZSEA, ZFRL
68 REAL(KIND=JPRB) :: ZHOOK_HANDLE
76 IF (dgo%LSURF_BUDGET)
THEN 82 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XRN,d%XRN,jt)
90 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XLE,d%XLE,jt)
94 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XLEI,d%XLEI,jt)
98 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XEVAP,d%XEVAP,jt)
102 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XSUBL,d%XSUBL,jt)
106 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XGFLUX,d%XGFLUX,jt)
110 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XSWD,d%XSWD,jt)
114 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XSWU,d%XSWU,jt)
118 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XLWD,d%XLWD,jt)
122 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XLWU,d%XLWU,jt)
126 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XFMU,d%XFMU,jt)
130 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XFMV,d%XFMV,jt)
144 IF (dgo%LSURF_BUDGETC)
THEN 150 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XRN,dc%XRN,jt)
154 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XH,dc%XH,jt)
158 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XLE,dc%XLE,jt)
162 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XLEI,dc%XLEI,jt)
166 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XGFLUX,dc%XGFLUX,jt)
170 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XEVAP,dc%XEVAP,jt)
174 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XSUBL,dc%XSUBL,jt)
178 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XSWD,dc%XSWD,jt)
182 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XSWU,dc%XSWU,jt)
186 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XLWD,dc%XLWD,jt)
190 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XLWU,dc%XLWU,jt)
194 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XFMU,dc%XFMU,jt)
198 CALL make_average(pfrac_tile(:,jt),ndc%AL(jt)%XFMV,dc%XFMV,jt)
213 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XRI,d%XRI,jt)
225 IF (dgo%N2M>=1.OR.dgo%LSURF_BUDGET.OR.dgo%LSURF_BUDGETC)
THEN 231 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XTS,d%XTS,jt)
254 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XT2M,d%XT2M,jt)
255 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XT2M_MIN,d%XT2M_MIN,jt
256 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XT2M_MAX,d%XT2M_MAX,jt
263 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XHU2M,d%XHU2M,jt)
264 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XHU2M_MIN,d%XHU2M_MIN,jt)
265 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XHU2M_MAX,d%XHU2M_MAX,jt)
269 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XQ2M,d%XQ2M,jt)
273 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XZON10M,d%XZON10M,jt)
275 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XMER10M,d%XMER10M,jt)
277 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XWIND10M,d%XWIND10M,jt)
278 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XWIND10M_MAX,d%XWIND10M_MAX
292 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XCD,d%XCD,jt)
294 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XCH,d%XCH,jt)
296 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XCE,d%XCE,jt)
306 IF (dgo%LSURF_VARS)
THEN 309 CALL make_average(pfrac_tile(:,jt),nd%AL(jt)%XQS,d%XQS,jt)
318 SUBROUTINE make_average(PFRAC,PFIELD_IN,PFIELD_OUT,KTILE)
324 REAL,
DIMENSION(:),
INTENT(IN) :: PFRAC
325 REAL,
DIMENSION(:),
INTENT(IN) :: PFIELD_IN
326 REAL,
DIMENSION(:),
INTENT(OUT) :: PFIELD_OUT
327 INTEGER,
INTENT(IN) :: KTILE
328 REAL(KIND=JPRB) :: ZHOOK_HANDLE
331 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE',0,zhook_handle)
333 IF (ktile==1) pfield_out(:) = 0.
335 WHERE (pfield_in(:)==
xundef .AND. pfrac(:)/=0.) pfield_out(:) =
xundef 337 WHERE (pfield_out(:)/=
xundef)
338 pfield_out(:) = pfield_out(:) + pfrac(:) * pfield_in(:)
341 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE',1,zhook_handle)
351 REAL,
DIMENSION(:),
INTENT(IN) :: PFRAC
352 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFIELD_IN
353 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PFIELD_OUT
354 INTEGER,
INTENT(IN) :: KTILE
355 REAL(KIND=JPRB) :: ZHOOK_HANDLE
358 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_2D',0,zhook_handle)
360 IF (ktile==1) pfield_out(:,:) = 0.
362 DO jl=1,
SIZE(pfield_in,2)
363 WHERE (pfield_in(:,jl)==
xundef .AND. pfrac(:)/=0.) pfield_out(:,jl) =
xundef 364 WHERE(pfield_out(:,jl)/=
xundef)
365 pfield_out(:,jl) = pfield_out(:,jl) + pfrac(:) * pfield_in(:,jl)
369 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_2D',1,zhook_handle)
379 REAL,
DIMENSION(:),
INTENT(IN) :: PFRAC
380 REAL,
DIMENSION(:),
INTENT(IN) :: PFIELD_IN
381 REAL,
DIMENSION(:),
INTENT(IN) :: PREF
382 REAL,
DIMENSION(:),
INTENT(OUT) :: PFIELD_OUT
383 INTEGER,
INTENT(IN) :: KTILE
384 REAL(KIND=JPRB) :: ZHOOK_HANDLE
386 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_Z0',0,zhook_handle)
388 IF (ktile==1) pfield_out(:) = 0.
390 WHERE (pfield_in(:)==
xundef .AND. pfrac(:)/=0.) pfield_out(:) =
xundef 392 WHERE (pfield_out(:)/=
xundef)
393 pfield_out(:) = pfield_out(:) + pfrac(:) * 1./(log(pref(:)/pfield_in(:
396 IF (ktile==ntilesfc)
THEN 397 WHERE (pfield_out(:) == 0.)
399 ELSEWHERE (pfield_out(:)/=
xundef)
400 pfield_out(:) = pref(:) * exp( - sqrt(1./pfield_out(:)) )
404 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_Z0',1,zhook_handle)
408 SUBROUTINE make_average_mw(PFRAC,PFIELD_IN,PFIELD_OUT,KTILE,PLAND,PSEA,PFRL)
414 REAL,
DIMENSION(:),
INTENT(IN) :: PFRAC
415 REAL,
DIMENSION(:),
INTENT(IN) :: PFIELD_IN
416 REAL,
DIMENSION(:),
INTENT(OUT) :: PFIELD_OUT
417 INTEGER,
INTENT(IN) :: KTILE
418 REAL,
DIMENSION(:),
INTENT(INOUT) :: PLAND
419 REAL,
DIMENSION(:),
INTENT(INOUT) :: PSEA
420 REAL,
DIMENSION(:),
INTENT(INOUT) :: PFRL
421 REAL(KIND=JPRB) :: ZHOOK_HANDLE
423 REAL,
DIMENSION(SIZE(PFIELD_IN)) :: ZALFA
425 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_MW',0,zhook_handle)
434 WHERE (pfield_in(:)==
xundef .AND. pfrac(:)/=0.) pfield_out(:) =
xundef 436 IF (ktile==1.OR.ktile==2)
THEN 437 psea(:) = psea(:) + pfrac(:) * pfield_in(:)
440 IF (ktile==3.OR.ktile==4)
THEN 441 pland(:) = pland(:) + pfrac(:) * pfield_in(:)
442 pfrl(:) = pfrl(:) + pfrac(:)
447 zland(:) = zland(:)/zfrl(:)
450 zsea(:) = zsea(:)/(1.-zfrl(:))
453 zalfa(:) = 1. - exp(-10.*zfrl(:))
455 WHERE (pfield_out(:)/=
xundef)
456 pfield_out(:) = zalfa(:) * zland(:) + (1. - zalfa(:)) * zsea(:)
461 IF (
lhook)
CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_MW',1,zhook_handle)
subroutine average_diag(PFRAC_TILE, DGO, D, ND, DC, NDC)
subroutine make_average(PFRAC, PFIELD_IN, PFIELD_OUT, KTILE)
subroutine make_average_2d(PFRAC, PFIELD_IN, PFIELD_OUT, KTILE)
subroutine make_average_mw(PFRAC, PFIELD_IN, PFIELD_OUT, KTILE, PLAND, PSEA, P
subroutine make_average_z0(PFRAC, PREF, PFIELD_IN, PFIELD_OUT, KTILE)