7 pexns, pexna, pta, pqa, pzref, puref, pdircoszw, pvmod, &
8 pz0eff, pz0, pz0h, prr, psr, &
9 pemis, palb, ppsn, ppsng, ppsnv, &
10 prn, ph, ple, plei, pleg, plegi, plev, ples, pler, &
11 pletr, pevap, psubl, pgflux, plvtt, plstt, &
13 ples3l, plel3l, pevap3l, &
14 pswnet_v, pswnet_g, plwnet_v, plwnet_g, ph_v, ph_g, &
15 plev_v_c, pletr_v_c, ples_v_c, &
17 prnsnow, phsnow, phpsnow, &
18 pswnetsnow, pswnetsnows, plwnetsnow, &
19 pgfluxsnow, pgsfcsnow, pustarsnow, &
20 pzgrndflux, pflsn_cor, pgrndflux, plesl, &
22 psnowtemp, pts_rad, pts, pri, pqs, phu, &
23 pcd, pcdn, pch, psnowhmass, &
24 prn_isba, ph_isba, pleg_isba, plegi_isba, plev_isba, &
25 pletr_isba, pustar_isba, pler_isba, ple_isba, &
26 plei_isba, pgflux_isba, pmeltadv, ptg, &
27 pemist, palbt, ple_flood, plei_flood, &
28 pffg, pffv, pff, ppalphan, ptc, omeb_litter, plelitter, &
75 USE yomhook
,ONLY : lhook, dr_hook
76 USE parkind1
,ONLY : jprb
87 CHARACTER(LEN=*),
INTENT(IN) :: hsnow_isba
92 LOGICAL,
INTENT(IN) :: omeb
98 REAL,
DIMENSION(:),
INTENT(IN) :: pexns
99 REAL,
DIMENSION(:),
INTENT(IN) :: pexna
100 REAL,
DIMENSION(:),
INTENT(IN) :: pta
101 REAL,
DIMENSION(:),
INTENT(IN) :: pqa
102 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
103 REAL,
DIMENSION(:),
INTENT(IN) :: puref
104 REAL,
DIMENSION(:),
INTENT(IN) :: pdircoszw
105 REAL,
DIMENSION(:),
INTENT(IN) :: pvmod
106 REAL,
DIMENSION(:),
INTENT(IN) :: pz0eff
107 REAL,
DIMENSION(:),
INTENT(IN) :: pz0
108 REAL,
DIMENSION(:),
INTENT(IN) :: pz0h
109 REAL,
DIMENSION(:),
INTENT(IN) :: prr
110 REAL,
DIMENSION(:),
INTENT(IN) :: psr
115 REAL,
DIMENSION(:),
INTENT(IN) :: palb
116 REAL,
DIMENSION(:),
INTENT(IN) :: pemis
125 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn
127 REAL,
DIMENSION(:),
INTENT(IN) :: ppsng
129 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv
131 REAL,
DIMENSION(:),
INTENT(IN) :: ppalphan
140 REAL,
DIMENSION(:),
INTENT(IN) :: palb3l
141 REAL,
DIMENSION(:),
INTENT(IN) :: pqs3l
145 REAL,
DIMENSION(:),
INTENT(IN) :: pzgrndflux
146 REAL,
DIMENSION(:),
INTENT(IN) :: pflsn_cor
148 REAL,
DIMENSION(:),
INTENT(INOUT) :: pgrndflux
150 REAL,
DIMENSION(:),
INTENT(INOUT) :: phpsnow
151 REAL,
DIMENSION(:),
INTENT(INOUT) :: psnowhmass
152 REAL,
DIMENSION(:),
INTENT(INOUT) :: prnsnow
153 REAL,
DIMENSION(:),
INTENT(INOUT) :: pswnetsnow
154 REAL,
DIMENSION(:),
INTENT(INOUT) :: pswnetsnows
155 REAL,
DIMENSION(:),
INTENT(INOUT) :: plwnetsnow
156 REAL,
DIMENSION(:),
INTENT(INOUT) :: phsnow
157 REAL,
DIMENSION(:),
INTENT(INOUT) :: pgfluxsnow
158 REAL,
DIMENSION(:),
INTENT(INOUT) :: pgsfcsnow
159 REAL,
DIMENSION(:),
INTENT(INOUT) :: pswnet_v
160 REAL,
DIMENSION(:),
INTENT(INOUT) :: pswnet_g
161 REAL,
DIMENSION(:),
INTENT(INOUT) :: plwnet_v
162 REAL,
DIMENSION(:),
INTENT(INOUT) :: plwnet_g
163 REAL,
DIMENSION(:),
INTENT(IN) :: pustarsnow
164 REAL,
DIMENSION(:),
INTENT(OUT) :: plesl
165 REAL,
DIMENSION(:),
INTENT(IN) :: pemisnow
166 REAL,
DIMENSION(:),
INTENT(OUT) :: pts_rad
168 REAL,
DIMENSION(:),
INTENT(OUT) :: pts
169 REAL,
DIMENSION(:),
INTENT(IN) :: psnowtemp
170 REAL,
DIMENSION(:),
INTENT(IN) :: ples3l
171 REAL,
DIMENSION(:),
INTENT(IN) :: plel3l
172 REAL,
DIMENSION(:),
INTENT(INOUT) :: pevap3l
173 REAL,
DIMENSION(:),
INTENT(IN) :: plvtt, plstt
178 REAL,
DIMENSION(:),
INTENT(IN) :: ptg
179 REAL,
DIMENSION(:),
INTENT(IN) :: ptc
185 REAL,
DIMENSION(:),
INTENT(INOUT) :: pemist
186 REAL,
DIMENSION(:),
INTENT(INOUT) :: palbt
191 REAL,
DIMENSION(:),
INTENT(IN) :: plev_v_c
193 REAL,
DIMENSION(:),
INTENT(IN) :: ples_v_c
195 REAL,
DIMENSION(:),
INTENT(IN) :: pletr_v_c
197 REAL,
DIMENSION(:),
INTENT(INOUT) :: prn
198 REAL,
DIMENSION(:),
INTENT(INOUT) :: ph
199 REAL,
DIMENSION(:),
INTENT(INOUT) :: ph_v
200 REAL,
DIMENSION(:),
INTENT(INOUT) :: ph_g
201 REAL,
DIMENSION(:),
INTENT(INOUT) :: ple
202 REAL,
DIMENSION(:),
INTENT(OUT) :: plei
203 REAL,
DIMENSION(:),
INTENT(INOUT) :: plegi
204 REAL,
DIMENSION(:),
INTENT(INOUT) :: pleg
205 REAL,
DIMENSION(:),
INTENT(IN) :: plelitteri
206 REAL,
DIMENSION(:),
INTENT(IN) :: plelitter
207 LOGICAL,
INTENT(IN) :: omeb_litter
209 REAL,
DIMENSION(:),
INTENT(INOUT) :: plev
211 REAL,
DIMENSION(:),
INTENT(INOUT) :: ples
213 REAL,
DIMENSION(:),
INTENT(INOUT) :: pler
216 REAL,
DIMENSION(:),
INTENT(INOUT) :: pletr
218 REAL,
DIMENSION(:),
INTENT(INOUT) :: pevap
219 REAL,
DIMENSION(:),
INTENT(INOUT) :: psubl
220 REAL,
DIMENSION(:),
INTENT(INOUT) :: pgflux
221 REAL,
DIMENSION(:),
INTENT(INOUT) :: pustar
222 REAL,
DIMENSION(:),
INTENT(INOUT) :: pmeltadv
228 REAL,
DIMENSION(:),
INTENT(OUT) :: prn_isba
229 REAL,
DIMENSION(:),
INTENT(OUT) :: ph_isba
230 REAL,
DIMENSION(:),
INTENT(OUT) :: pleg_isba
231 REAL,
DIMENSION(:),
INTENT(OUT) :: plegi_isba
232 REAL,
DIMENSION(:),
INTENT(OUT) :: plev_isba
233 REAL,
DIMENSION(:),
INTENT(OUT) :: pletr_isba
234 REAL,
DIMENSION(:),
INTENT(OUT) :: pustar_isba
235 REAL,
DIMENSION(:),
INTENT(OUT) :: pler_isba
236 REAL,
DIMENSION(:),
INTENT(OUT) :: ple_isba
237 REAL,
DIMENSION(:),
INTENT(OUT) :: plei_isba
238 REAL,
DIMENSION(:),
INTENT(OUT) :: pgflux_isba
240 REAL,
DIMENSION(:),
INTENT(IN) :: pffg,pffv,pff
241 REAL,
DIMENSION(:),
INTENT(INOUT) :: ple_flood, plei_flood
243 REAL,
DIMENSION(:),
INTENT(INOUT) :: pri
244 REAL,
DIMENSION(:),
INTENT(INOUT) :: pqs
245 REAL,
DIMENSION(:),
INTENT(INOUT) :: phu
246 REAL,
DIMENSION(:),
INTENT(INOUT) :: pch
247 REAL,
DIMENSION(:),
INTENT(INOUT) :: pcd
248 REAL,
DIMENSION(:),
INTENT(INOUT) :: pcdn
253 REAL,
DIMENSION(SIZE(PTA)) :: zwork
255 REAL(KIND=JPRB) :: zhook_handle
259 IF (lhook) CALL dr_hook(
'ISBA_SNOW_AGR',0,zhook_handle)
269 prn_isba(:) = pswnet_v(:) + pswnet_g(:) + plwnet_v(:) + plwnet_g(:)
270 ph_isba(:) = ph_v(:) + ph_g(:)
271 IF (omeb_litter)
THEN
272 pleg_isba(:) = plelitter(:)
273 plegi_isba(:) = plelitteri(:)
274 pleg(:) = plelitter(:)
275 plegi(:) = plelitteri(:)
277 pleg_isba(:) = pleg(:)
278 plegi_isba(:) = plegi(:)
280 plei_isba(:) = plegi(:) + plei_flood(:) + ples(:) + ples_v_c(:)
281 plev_isba(:) = plev_v_c(:)
282 pletr_isba(:) = pletr_v_c(:)
283 pustar_isba(:) = pustar(:)
285 pler_isba(:) = plev_v_c(:) - pletr_v_c(:)
287 ple_isba(:) = pleg_isba(:) + plegi_isba(:) + plev_isba(:) + ple_flood(:) + ples_v_c(:) + plei_flood(:)
288 pgflux_isba(:) = prn_isba(:) - ph_isba(:) - ple_isba(:)
294 zwork(:) = ppalphan(:)*ppsn(:)
295 pts(:) = (1.0 - zwork(:))*ptc(:) + zwork(:)*psnowtemp(:)
299 pgflux(:) = prn(:) - ph(:) - ple(:) + phpsnow(:)
306 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO')
THEN
313 pleg_isba(:) = pleg(:)
314 plegi_isba(:) = plegi(:)
315 plev_isba(:) = plev(:)
316 pletr_isba(:) = pletr(:)
317 pustar_isba(:) = pustar(:)
318 pler_isba(:) = pler(:)
320 pgflux_isba(:) = pgflux(:)
322 plei_isba(:) = plegi(:)+plei_flood(:)+ples(:)
326 pts(:) = (1.-ppsn(:))*ptg(:)+ppsn(:)*psnowtemp(:)
330 palbt(:) = palb(:)*(1.-ppsn(:)) + ppsn(:)*palb3l(:)
331 pemist(:) = pemis(:)*(1.-ppsn(:)) + ppsn(:)*pemisnow(:)
333 pts_rad(:) = ( ((1.-ppsn(:))*pemis(:)*ptg(:)**4 + &
334 ppsn(:) *pemisnow(:)*psnowtemp(:)**4 &
335 )/pemist(:) )**(0.25)
343 prn(:) = (1.-ppsn(:)) * prn(:) + ppsn(:) * prnsnow(:)
344 ph(:) = (1.-ppsn(:)) * ph(:) + ppsn(:) * phsnow(:)
346 pleg(:) = (1.-ppsng(:)-pffg(:)) * pleg(:)
347 plegi(:) = (1.-ppsng(:)-pffg(:)) * plegi(:)
348 plev(:) = (1.-ppsnv(:)-pffv(:)) * plev(:)
349 pletr(:) = (1.-ppsnv(:)-pffv(:)) * pletr(:)
350 pler(:) = (1.-ppsnv(:)-pffv(:)) * pler(:)
354 pevap(:) = (plev(:) + pleg(:))/plvtt(:) + plegi(:)/plstt(:) + ple_flood(:)/plvtt(:) + &
355 plei_flood(:)/plstt(:) + ppsn(:) * pevap3l(:)
359 ples(:) = ppsn(:) * ples3l(:)
360 plesl(:) = ppsn(:) * plel3l(:)
361 prnsnow(:) = ppsn(:) * prnsnow(:)
362 phsnow(:) = ppsn(:) * phsnow(:)
363 pgfluxsnow(:) = ppsn(:) * pgfluxsnow(:)
364 psnowhmass(:) = ppsn(:) * psnowhmass(:)
365 phpsnow(:) = ppsn(:) * phpsnow(:)
366 pgsfcsnow(:) = ppsn(:) * pgsfcsnow(:)
367 pswnetsnow(:) = ppsn(:) * pswnetsnow(:)
368 pswnetsnows(:)= ppsn(:) * pswnetsnows(:)
369 pevap3l(:) = ppsn(:) * pevap3l(:)
373 pgrndflux(:) = ppsn(:) * (pzgrndflux(:)+pflsn_cor(:))
374 pmeltadv(:) = ppsn(:) * pmeltadv(:)
378 ple(:) = pleg(:) + plev(:) + ples(:) + plesl(:) + plegi(:) + ple_flood(:) + plei_flood(:)
382 plei(:) = ples(:) + plegi(:) + plei_flood(:)
386 psubl(:) = plei(:)/plstt(:)
390 pgflux(:) = prn(:) - ph(:) - ple(:) + phpsnow(:)
394 pqs(:) = (1.-ppsn(:)) * pqs(:) + ppsn(:) * pqs3l(:)
398 phu(:) = (1.-ppsn(:)) * phu(:) + ppsn(:)
402 pustar(:) = sqrt( (1.-ppsn(:)) * pustar(:)**2 + ppsn(:) * pustarsnow(:)**2 )
416 plei(:) = ples(:) + plegi(:) + plei_flood(:)
419 psubl(:) = plei(:)/plstt(:)
425 IF (lhook) CALL dr_hook(
'ISBA_SNOW_AGR',1,zhook_handle)
434 xrrscale, xrrgamma, xutilgust
437 USE modi_surface_aero_cond
439 USE modi_surface_cdch_1darp
440 USE modi_wind_threshold
444 REAL,
DIMENSION(SIZE(PTA)) :: zfp, zrrcor, zvmod, zac, zra
446 REAL(KIND=JPRB) :: zhook_handle
450 IF (lhook) CALL dr_hook(
'ISBA_SNOW_AGR:COMPUT_RI_DRAG',0,zhook_handle)
454 CALL
surface_ri(pts, pqs, pexns, pexna, pta, pqa, &
455 pzref, puref, pdircoszw, pvmod, pri)
463 IF (ldrag_coef_arp)
THEN
465 pqa, pqs, pcd, pcdn, pch )
468 CALL
surface_cd(pri, pzref, puref, pz0eff, pz0h, pcd, pcdn)
471 IF (lrrgust_arp)
THEN
472 zfp(:)=max(0.0,prr(:)+psr(:))
473 zrrcor(:)=sqrt(1.0+((((zfp(:)/(zfp(:)+xrrscale))**xrrgamma)*xutilgust)**2) &
474 /(pcd(:)*zvmod(:)**2))
480 IF (lhook) CALL dr_hook(
'ISBA_SNOW_AGR:COMPUT_RI_DRAG',1,zhook_handle)
real function, dimension(size(pwind)) wind_threshold(PWIND, PUREF)
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
subroutine comput_ri_drag
subroutine surface_aero_cond(PRI, PZREF, PUREF, PVMOD, PZ0, PZ0H, PAC, PRA, PCH)
subroutine isba_snow_agr(HSNOW_ISBA, OMEB, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PZ0EFF, PZ0, PZ0H, PRR, PSR, PEMIS, PALB, PPSN, PPSNG, PPSNV, PRN, PH, PLE, PLEI, PLEG, PLEGI, PLEV, PLES, PLER, PLETR, PEVAP, PSUBL, PGFLUX, PLVTT, PLSTT, PUSTAR, PLES3L, PLEL3L, PEVAP3L, PSWNET_V, PSWNET_G, PLWNET_V, PLWNET_G, PH_V, PH_G, PLEV_V_C, PLETR_V_C, PLES_V_C, PQS3L, PALB3L, PRNSNOW, PHSNOW, PHPSNOW, PSWNETSNOW, PSWNETSNOWS, PLWNETSNOW, PGFLUXSNOW, PGSFCSNOW, PUSTARSNOW, PZGRNDFLUX, PFLSN_COR, PGRNDFLUX, PLESL, PEMISNOW, PSNOWTEMP, PTS_RAD, PTS, PRI, PQS, PHU, PCD, PCDN, PCH, PSNOWHMASS, PRN_ISBA, PH_ISBA, PLEG_ISBA, PLEGI_ISBA, PLEV_ISBA, PLETR_ISBA, PUSTAR_ISBA, PLER_ISBA, PLE_ISBA, PLEI_ISBA, PGFLUX_ISBA, PMELTADV, PTG, PEMIST, PALBT, PLE_FLOOD, PLEI_FLOOD, PFFG, PFFV, PFF, PPALPHAN, PTC, OMEB_LITTER, PLELITTER, PLELITTERI)
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
subroutine surface_cdch_1darp(PZREF, PZ0EFF, PZ0H, PVMOD, PTA, PTG, PQA, PQS, PCD, PCDN, PCH)