6 SUBROUTINE average_diag(K2M, OT2MMW, OSURF_BUDGET, OSURF_BUDGETC, OCOEF, &
7 osurf_vars, pfrac_tile, &
8 prn_tile, ph_tile, ple_tile, plei_tile , &
9 pgflux_tile, pri_tile, pcd_tile, pch_tile, &
10 pce_tile, pt2m_tile, pts_tile, pq2m_tile, &
11 phu2m_tile, pzon10m_tile, pmer10m_tile, &
12 pqs_tile, pz0_tile, pz0h_tile, &
13 pswd_tile, pswu_tile, pswbd_tile, pswbu_tile, &
14 plwd_tile, plwu_tile, pfmu_tile, pfmv_tile, &
15 prnc_tile, phc_tile, plec_tile, pgfluxc_tile, &
16 pswdc_tile, pswuc_tile, plwdc_tile, plwuc_tile, &
17 pfmuc_tile, pfmvc_tile, pt2m_min_tile, &
18 pt2m_max_tile, pleic_tile, &
19 prn, ph, ple, plei, pgflux, pri, pcd, pch, pce, &
20 pt2m, pts, pq2m, phu2m, pzon10m, pmer10m, &
21 pqs, pz0, pz0h, puref, pzref, &
22 pswd, pswu, pswbd, pswbu,plwd, plwu, pfmu, pfmv, &
23 prnc, phc, plec, pgfluxc, pswdc, pswuc, plwdc, &
24 plwuc, pfmuc, pfmvc, pt2m_min, pt2m_max, pleic, &
25 phu2m_min_tile, phu2m_max_tile, phu2m_min, &
26 phu2m_max, pwind10m_tile, pwind10m_max_tile, &
27 pwind10m, pwind10m_max, &
28 pevap_tile, pevapc_tile, pevap, pevapc, &
29 psubl_tile, psublc_tile, psubl, psublc )
68 USE yomhook
,ONLY : lhook, dr_hook
69 USE parkind1
,ONLY : jprb
75 INTEGER,
INTENT(IN) :: k2m
76 LOGICAL,
INTENT(IN) :: ot2mmw
77 LOGICAL,
INTENT(IN) :: osurf_budget
78 LOGICAL,
INTENT(IN) :: osurf_budgetc
79 LOGICAL,
INTENT(IN) :: ocoef
80 LOGICAL,
INTENT(IN) :: osurf_vars
81 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfrac_tile
84 REAL,
DIMENSION(:,:),
INTENT(IN) :: prn_tile
85 REAL,
DIMENSION(:,:),
INTENT(IN) :: ph_tile
86 REAL,
DIMENSION(:,:),
INTENT(IN) :: ple_tile
87 REAL,
DIMENSION(:,:),
INTENT(IN) :: plei_tile
88 REAL,
DIMENSION(:,:),
INTENT(IN) :: pgflux_tile
89 REAL,
DIMENSION(:,:),
INTENT(IN) :: pevap_tile
90 REAL,
DIMENSION(:,:),
INTENT(IN) :: psubl_tile
91 REAL,
DIMENSION(:,:),
INTENT(IN) :: pri_tile
92 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcd_tile
93 REAL,
DIMENSION(:,:),
INTENT(IN) :: pch_tile
94 REAL,
DIMENSION(:,:),
INTENT(IN) :: pce_tile
95 REAL,
DIMENSION(:,:),
INTENT(IN) :: pt2m_tile
96 REAL,
DIMENSION(:,:),
INTENT(IN) :: pts_tile
97 REAL,
DIMENSION(:,:),
INTENT(IN) :: pt2m_min_tile
98 REAL,
DIMENSION(:,:),
INTENT(IN) :: pt2m_max_tile
99 REAL,
DIMENSION(:,:),
INTENT(IN) :: pq2m_tile
100 REAL,
DIMENSION(:,:),
INTENT(IN) :: phu2m_tile
101 REAL,
DIMENSION(:,:),
INTENT(IN) :: phu2m_max_tile
102 REAL,
DIMENSION(:,:),
INTENT(IN) :: phu2m_min_tile
103 REAL,
DIMENSION(:,:),
INTENT(IN) :: pzon10m_tile
104 REAL,
DIMENSION(:,:),
INTENT(IN) :: pmer10m_tile
105 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwind10m_tile
106 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwind10m_max_tile
107 REAL,
DIMENSION(:,:),
INTENT(IN) :: pqs_tile
108 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz0_tile
109 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz0h_tile
110 REAL,
DIMENSION(:,:),
INTENT(IN) :: pswd_tile
111 REAL,
DIMENSION(:,:),
INTENT(IN) :: pswu_tile
112 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pswbd_tile
113 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pswbu_tile
114 REAL,
DIMENSION(:,:),
INTENT(IN) :: plwd_tile
115 REAL,
DIMENSION(:,:),
INTENT(IN) :: plwu_tile
116 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfmu_tile
117 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfmv_tile
118 REAL,
DIMENSION(:,:),
INTENT(IN) :: prnc_tile
119 REAL,
DIMENSION(:,:),
INTENT(IN) :: phc_tile
120 REAL,
DIMENSION(:,:),
INTENT(IN) :: plec_tile
121 REAL,
DIMENSION(:,:),
INTENT(IN) :: pleic_tile
122 REAL,
DIMENSION(:,:),
INTENT(IN) :: pgfluxc_tile
123 REAL,
DIMENSION(:,:),
INTENT(IN) :: pevapc_tile
124 REAL,
DIMENSION(:,:),
INTENT(IN) :: psublc_tile
125 REAL,
DIMENSION(:,:),
INTENT(IN) :: pswdc_tile
126 REAL,
DIMENSION(:,:),
INTENT(IN) :: pswuc_tile
127 REAL,
DIMENSION(:,:),
INTENT(IN) :: plwdc_tile
128 REAL,
DIMENSION(:,:),
INTENT(IN) :: plwuc_tile
129 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfmuc_tile
130 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfmvc_tile
132 REAL,
DIMENSION(:),
INTENT(IN) :: puref
133 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
136 REAL,
DIMENSION(:),
INTENT(OUT) :: prn
137 REAL,
DIMENSION(:),
INTENT(OUT) :: ph
138 REAL,
DIMENSION(:),
INTENT(OUT) :: ple
139 REAL,
DIMENSION(:),
INTENT(OUT) :: plei
140 REAL,
DIMENSION(:),
INTENT(OUT) :: pgflux
141 REAL,
DIMENSION(:),
INTENT(OUT) :: pevap
142 REAL,
DIMENSION(:),
INTENT(OUT) :: psubl
143 REAL,
DIMENSION(:),
INTENT(OUT) :: pri
144 REAL,
DIMENSION(:),
INTENT(OUT) :: pcd
145 REAL,
DIMENSION(:),
INTENT(OUT) :: pch
146 REAL,
DIMENSION(:),
INTENT(OUT) :: pce
147 REAL,
DIMENSION(:),
INTENT(OUT) :: pt2m
148 REAL,
DIMENSION(:),
INTENT(OUT) :: pts
149 REAL,
DIMENSION(:),
INTENT(OUT) :: pq2m
150 REAL,
DIMENSION(:),
INTENT(OUT) :: phu2m
151 REAL,
DIMENSION(:),
INTENT(OUT) :: pzon10m
152 REAL,
DIMENSION(:),
INTENT(OUT) :: pmer10m
153 REAL,
DIMENSION(:),
INTENT(OUT) :: pqs
154 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0
155 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0h
156 REAL,
DIMENSION(:),
INTENT(OUT) :: pswd
157 REAL,
DIMENSION(:),
INTENT(OUT) :: pswu
158 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pswbd
159 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pswbu
160 REAL,
DIMENSION(:),
INTENT(OUT) :: plwd
161 REAL,
DIMENSION(:),
INTENT(OUT) :: plwu
162 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmu
163 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmv
164 REAL,
DIMENSION(:),
INTENT(OUT) :: prnc
165 REAL,
DIMENSION(:),
INTENT(OUT) :: phc
166 REAL,
DIMENSION(:),
INTENT(OUT) :: plec
167 REAL,
DIMENSION(:),
INTENT(OUT) :: pleic
168 REAL,
DIMENSION(:),
INTENT(OUT) :: pgfluxc
169 REAL,
DIMENSION(:),
INTENT(OUT) :: pevapc
170 REAL,
DIMENSION(:),
INTENT(OUT) :: psublc
171 REAL,
DIMENSION(:),
INTENT(OUT) :: pswdc
172 REAL,
DIMENSION(:),
INTENT(OUT) :: pswuc
173 REAL,
DIMENSION(:),
INTENT(OUT) :: plwdc
174 REAL,
DIMENSION(:),
INTENT(OUT) :: plwuc
175 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmuc
176 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmvc
178 REAL,
DIMENSION(:),
INTENT(OUT) :: phu2m_min
179 REAL,
DIMENSION(:),
INTENT(OUT) :: phu2m_max
180 REAL,
DIMENSION(:),
INTENT(OUT) :: pt2m_min
181 REAL,
DIMENSION(:),
INTENT(OUT) :: pt2m_max
182 REAL,
DIMENSION(:),
INTENT(OUT) :: pwind10m
183 REAL,
DIMENSION(:),
INTENT(OUT) :: pwind10m_max
187 REAL(KIND=JPRB) :: zhook_handle
193 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG',0,zhook_handle)
195 IF (osurf_budget)
THEN
259 IF (osurf_budgetc)
THEN
332 IF (k2m>=1.OR.osurf_budget.OR.osurf_budgetc)
THEN
372 CALL
make_average(pfrac_tile,pwind10m_max_tile,pwind10m_max)
400 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG',1,zhook_handle)
410 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfrac
411 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfield_in
412 REAL,
DIMENSION(:),
INTENT(OUT) :: pfield_out
413 LOGICAL,
DIMENSION(SIZE(PFIELD_IN,1)) :: gmask
414 REAL(KIND=JPRB) :: zhook_handle
417 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE',0,zhook_handle)
420 DO jt=1,
SIZE(pfield_in,2)
421 WHERE (pfield_in(:,jt)==xundef .AND. pfrac(:,jt)/=0.) gmask(:) = .false.
425 DO jt=1,
SIZE(pfield_in,2)
426 pfield_out(:) = pfield_out(:) + pfrac(:,jt) * pfield_in(:,jt)
428 WHERE(.NOT. gmask(:)) pfield_out(:) = xundef
430 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE',1,zhook_handle)
440 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfrac
441 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pfield_in
442 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield_out
443 LOGICAL,
DIMENSION(SIZE(PFIELD_IN,1)) :: gmask
444 REAL(KIND=JPRB) :: zhook_handle
447 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_2D',0,zhook_handle)
449 DO jl=1,
SIZE(pfield_in,3)
450 pfield_out(:,jl) = 0.
452 DO jt=1,
SIZE(pfield_in,2)
453 WHERE (pfield_in(:,jt,jl)==xundef .AND. pfrac(:,jt)/=0.) gmask(:) = .false.
454 pfield_out(:,jl) = pfield_out(:,jl) + pfrac(:,jt) * pfield_in(:,jt,jl)
456 WHERE(.NOT. gmask(:)) pfield_out(:,jl) = xundef
459 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_2D',1,zhook_handle)
469 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfrac
470 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfield_in
471 REAL,
DIMENSION(:),
INTENT(IN) :: pref
472 REAL,
DIMENSION(:),
INTENT(OUT) :: pfield_out
473 LOGICAL,
DIMENSION(SIZE(PFIELD_IN,1)) :: gmask
474 REAL(KIND=JPRB) :: zhook_handle
477 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_Z0',0,zhook_handle)
480 DO jt=1,
SIZE(pfield_in,2)
481 WHERE (pfield_in(:,jt)==xundef .AND. pfrac(:,jt)/=0.) gmask(:) = .false.
485 DO jt=1,
SIZE(pfield_in,2)
486 pfield_out(:) = pfield_out(:) + pfrac(:,jt) * 1./(log(pref(:)/pfield_in(:,jt)))**2
488 WHERE (pfield_out(:) == 0.)
489 pfield_out(:) = xundef
491 pfield_out(:) = pref(:) * exp( - sqrt(1./pfield_out(:)) )
493 WHERE(.NOT. gmask(:)) pfield_out(:) = xundef
495 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_Z0',1,zhook_handle)
505 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfrac
506 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfield_in
507 REAL,
DIMENSION(:),
INTENT(OUT) :: pfield_out
508 LOGICAL,
DIMENSION(SIZE(PFIELD_IN,1)) :: gmask
509 REAL(KIND=JPRB) :: zhook_handle
511 REAL,
DIMENSION(SIZE(PFIELD_IN,1)) :: zt2m_land, zt2m_sea, zfrl, zalfa
513 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_MW',0,zhook_handle)
516 DO jt=1,
SIZE(pfield_in,2)
517 WHERE (pfield_in(:,jt)==xundef .AND. pfrac(:,jt)/=0.) gmask(:) = .false.
524 zt2m_sea(:) = zt2m_sea(:) + pfrac(:,jt) * pfield_in(:,jt)
528 zt2m_land(:) = zt2m_land(:) + pfrac(:,jt) * pfield_in(:,jt)
529 zfrl(:) = zfrl(:) + pfrac(:,jt)
533 zt2m_land(:) = zt2m_land(:)/zfrl(:)
536 zt2m_sea(:) = zt2m_sea(:)/(1.-zfrl(:))
539 zalfa(:) = 1. - exp(-10.*zfrl(:))
540 pfield_out(:) = zalfa(:) * zt2m_land(:) + (1. - zalfa(:)) * zt2m_sea(:)
542 WHERE(.NOT. gmask(:)) pfield_out(:) = xundef
544 IF (lhook) CALL dr_hook(
'AVERAGE_DIAG:MAKE_AVERAGE_MW',1,zhook_handle)
subroutine make_average_z0(PFRAC, PREF, PFIELD_IN, PFIELD_OUT)
subroutine make_average_2d(PFRAC, PFIELD_IN, PFIELD_OUT)
subroutine average_diag(K2M, OT2MMW, OSURF_BUDGET, OSURF_BUDGETC, OCOEF, OSURF_VARS, PFRAC_TILE, PRN_TILE, PH_TILE, PLE_TILE, PLEI_TILE, PGFLUX_TILE, PRI_TILE, PCD_TILE, PCH_TILE, PCE_TILE, PT2M_TILE, PTS_TILE, PQ2M_TILE, PHU2M_TILE, PZON10M_TILE, PMER10M_TILE, PQS_TILE, PZ0_TILE, PZ0H_TILE, PSWD_TILE, PSWU_TILE, PSWBD_TILE, PSWBU_TILE, PLWD_TILE, PLWU_TILE, PFMU_TILE, PFMV_TILE, PRNC_TILE, PHC_TILE, PLEC_TILE, PGFLUXC_TILE, PSWDC_TILE, PSWUC_TILE, PLWDC_TILE, PLWUC_TILE, PFMUC_TILE, PFMVC_TILE, PT2M_MIN_TILE, PT2M_MAX_TILE, PLEIC_TILE, PRN, PH, PLE, PLEI, PGFLUX, PRI, PCD, PCH, PCE, PT2M, PTS, PQ2M, PHU2M, PZON10M, PMER10M, PQS, PZ0, PZ0H, PUREF, PZREF, PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, PFMU, PFMV, PRNC, PHC, PLEC, PGFLUXC, PSWDC, PSWUC, PLWDC, PLWUC, PFMUC, PFMVC, PT2M_MIN, PT2M_MAX, PLEIC, PHU2M_MIN_TILE, PHU2M_MAX_TILE, PHU2M_MIN, PHU2M_MAX, PWIND10M_TILE, PWIND10M_MAX_TILE, PWIND10M, PWIND10M_MAX, PEVAP_TILE, PEVAPC_TILE, PEVAP, PEVAPC, PSUBL_TILE, PSUBLC_TILE, PSUBL, PSUBLC)
subroutine make_average_mw(PFRAC, PFIELD_IN, PFIELD_OUT)
subroutine make_average(PFRAC, PFIELD_IN, PFIELD_OUT)