10 hfilepgd,hfilepgdtype, &
11 kluout,ounif,kpatch, &
14 punif_wsnow, punif_rsnow, &
15 punif_tsnow, punif_lwcsnow, &
16 punif_asnow, osnow_ideal, &
17 punif_sg1snow, punif_sg2snow,&
18 punif_histsnow,punif_agesnow,&
19 pvegtype, pvegtype_patch, &
65 USE modi_allocate_gr_snow
66 USE modi_prep_hor_snow_field
68 USE modi_open_aux_io_surf
70 USE modi_close_aux_io_surf
72 USE yomhook
,ONLY : lhook, dr_hook
73 USE parkind1
,ONLY : jprb
83 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
86 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
87 CHARACTER(LEN=7),
INTENT(IN) :: hsurf
88 CHARACTER(LEN=28),
INTENT(IN) :: hfile
89 CHARACTER(LEN=6),
INTENT(IN) :: hfiletype
90 CHARACTER(LEN=28),
INTENT(IN) :: hfilepgd
91 CHARACTER(LEN=6),
INTENT(IN) :: hfilepgdtype
92 INTEGER,
INTENT(IN) :: kluout
93 LOGICAL,
INTENT(IN) :: ounif
94 INTEGER,
INTENT(IN) :: kpatch
95 INTEGER,
INTENT(IN) :: kteb_patch
96 INTEGER,
INTENT(IN) :: kl
99 REAL,
DIMENSION(:),
INTENT(IN) :: punif_wsnow
100 REAL,
DIMENSION(:),
INTENT(IN) :: punif_rsnow
101 REAL,
DIMENSION(:),
INTENT(IN) :: punif_tsnow
102 REAL,
DIMENSION(:),
INTENT(IN) :: punif_lwcsnow
103 REAL,
INTENT(IN) :: punif_asnow
104 LOGICAL,
INTENT(IN) :: osnow_ideal
105 REAL,
DIMENSION(:),
INTENT(IN) :: punif_sg1snow
106 REAL,
DIMENSION(:),
INTENT(IN) :: punif_sg2snow
107 REAL,
DIMENSION(:),
INTENT(IN) :: punif_histsnow
108 REAL,
DIMENSION(:),
INTENT(IN) :: punif_agesnow
110 REAL,
DIMENSION(:,:),
INTENT(IN ),
OPTIONAL :: pvegtype
111 REAL,
DIMENSION(:,:,:),
INTENT(IN ),
OPTIONAL :: pvegtype_patch
112 REAL,
DIMENSION(:,:),
INTENT(IN ),
OPTIONAL :: ppatch
113 LOGICAL,
INTENT(OUT),
OPTIONAL :: okey
118 CHARACTER(LEN=10) :: ysnsurf
119 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zw
120 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: zwrho
121 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zd
122 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zdepth
123 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: zdtot
124 REAL,
DIMENSION(KL,KPATCH) :: zpatch
125 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zvegtype
126 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zvegtype_patch
131 CHARACTER(LEN=16) :: yrecfm
135 REAL(KIND=JPRB) :: zhook_handle
138 IF (lhook) CALL dr_hook(
'PREP_HOR_SNOW_FIELDS',0,zhook_handle)
140 IF (present(ppatch))
THEN
145 IF (present(pvegtype))
THEN
146 ALLOCATE(zvegtype(kl,
SIZE(pvegtype,2)))
149 ALLOCATE(zvegtype(kl,nvegtype))
152 IF (present(pvegtype_patch))
THEN
153 ALLOCATE(zvegtype_patch(kl,
SIZE(pvegtype_patch,2),kpatch))
154 zvegtype_patch = pvegtype_patch
156 ALLOCATE(zvegtype_patch(kl,1,kpatch))
168 IF(present(okey))
THEN
170 IF ( (hfiletype==
'MESONH' .OR. hfiletype==
'ASCII ' .OR. hfiletype==
'LFI '.OR. hfiletype==
'FA ') &
171 .AND. (hsurf==
'SN_VEG ') )
THEN
174 hfile,hfiletype,
'FULL ')
177 hfiletype,yrecfm,iversion,iresp)
182 hfile,hfiletype,
'NATURE')
185 hfiletype,yrecfm,gglacier,iresp)
187 IF(gglacier)okey=.false.
192 IF(osnow_ideal)okey=.false.
200 ALLOCATE(zw(kl,tpsnow%NLAYER,kpatch))
205 hprogram, hfile, hfiletype, hfilepgd, hfilepgdtype, &
206 kluout, ounif, ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
207 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow,&
208 punif_asnow, osnow_ideal, punif_sg1snow, &
209 punif_sg2snow, punif_histsnow,punif_agesnow, &
210 pf=zw, pvegtype=zvegtype, &
211 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
217 ALLOCATE(zd(kl,tpsnow%NLAYER,kpatch))
222 hprogram, hfile, hfiletype, hfilepgd, hfilepgdtype, &
223 kluout, ounif, ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
224 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow,&
225 punif_asnow, osnow_ideal, punif_sg1snow, &
226 punif_sg2snow, punif_histsnow,punif_agesnow, &
227 pf=zd, pvegtype=zvegtype, &
228 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
232 ALLOCATE(zdepth(kl,tpsnow%NLAYER,kpatch))
234 IF (osnow_ideal)
THEN
235 zdepth(:,:,:) = zd(:,:,:)
237 IF (tpsnow%NLAYER==1)
THEN
239 zdepth(:,1,jpatch) = zd(:,1,jpatch)
241 ELSEIF (tpsnow%SCHEME==
'3-L')
THEN
242 zdepth(:,:,:)=zd(:,:,:)
243 ELSEIF (tpsnow%SCHEME==
'CRO')
THEN
244 ALLOCATE(zdtot(kl,kpatch))
246 DO jlayer=1,tpsnow%NLAYER
247 zdtot(:,:)=zdtot(:,:)+zd(:,jlayer,:)
250 CALL
snow3lgrid(zdepth(:,:,jpatch),zdtot(:,jpatch))
265 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
266 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
267 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
268 punif_asnow, osnow_ideal, punif_sg1snow, &
269 punif_sg2snow, punif_histsnow,punif_agesnow, &
270 pdepth=zdepth, pvegtype=zvegtype, &
271 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
278 IF (osnow_ideal)
THEN
280 tpsnow%WSNOW(:,:,:) = zw(:,:,:)
284 ALLOCATE(zwrho(
SIZE(tpsnow%WSNOW,1),kpatch))
285 ALLOCATE(zdtot(
SIZE(tpsnow%WSNOW,1),kpatch))
291 DO jlayer=1,tpsnow%NLAYER
292 WHERE (zpatch(:,jpatch)>0. .AND. tpsnow%RHO(:,jlayer,jpatch)/=xundef)
293 zwrho(:,jpatch) = zwrho(:,jpatch) + tpsnow%RHO(:,jlayer,jpatch) * zdepth(:,jlayer,jpatch)
295 zwrho(:,jpatch) = xundef
302 DO jlayer=1,tpsnow%NLAYER
303 WHERE(zpatch(:,jpatch)>0. .AND. zwrho(:,jpatch)/=0. .AND. zwrho(:,jpatch)/=xundef .AND. zw(:,1,jpatch)>0.0)
304 zdtot(:,jpatch) = zdtot(:,jpatch) + zdepth(:,jlayer,jpatch) * zw(:,1,jpatch) / zwrho(:,jpatch)
307 CALL
snow3lgrid(zdepth(:,:,jpatch),zdtot(:,jpatch))
312 DO jlayer=1,tpsnow%NLAYER
313 WHERE(zpatch(:,jpatch)>0..AND.tpsnow%RHO(:,jlayer,jpatch)/=xundef.AND.zdtot(:,jpatch)>0.)
314 tpsnow%WSNOW(:,jlayer,jpatch) = tpsnow%RHO(:,jlayer,jpatch) * zdepth(:,jlayer,jpatch)
315 ELSEWHERE(zpatch(:,jpatch)>0..AND.(tpsnow%RHO(:,jlayer,jpatch)==xundef.OR.zdtot(:,jpatch)==0.0))
316 tpsnow%WSNOW(:,jlayer,jpatch) = 0.0
318 tpsnow%WSNOW(:,jlayer,jpatch) = xundef
337 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
338 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
339 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
340 punif_asnow, osnow_ideal, punif_sg1snow, &
341 punif_sg2snow, punif_histsnow,punif_agesnow, &
342 pdepth=zdepth, pvegtype=zvegtype, &
343 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
345 IF (tpsnow%SCHEME/=
'D95')
THEN
351 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
352 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
353 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
354 punif_asnow, osnow_ideal, punif_sg1snow, &
355 punif_sg2snow, punif_histsnow,punif_agesnow, &
356 pdepth=zdepth, pvegtype=zvegtype, &
357 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
361 IF (tpsnow%SCHEME==
'CRO'.OR. tpsnow%SCHEME==
'3-L')
THEN
367 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
368 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
369 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
370 punif_asnow, osnow_ideal, punif_sg1snow, &
371 punif_sg2snow, punif_histsnow,punif_agesnow, &
372 pdepth=zdepth, pvegtype=zvegtype, &
373 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
375 WHERE(tpsnow%WSNOW(:,1,:)>0.0.AND.tpsnow%WSNOW(:,1,:)/=xundef.AND. &
376 tpsnow%AGE(:,1,:)==0.0.AND.tpsnow%ALB(:,:)<xaglamin)
377 tpsnow%ALB(:,:)=(xaglamin+xaglamax)/2.0
387 IF (tpsnow%SCHEME==
'CRO')
THEN
392 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
393 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
394 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
395 punif_asnow, osnow_ideal, punif_sg1snow, &
396 punif_sg2snow, punif_histsnow,punif_agesnow, &
397 pdepth=zdepth, pvegtype=zvegtype, &
398 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
403 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
404 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
405 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
406 punif_asnow, osnow_ideal, punif_sg1snow, &
407 punif_sg2snow, punif_histsnow,punif_agesnow, &
408 pdepth=zdepth, pvegtype=zvegtype, &
409 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
414 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
415 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tpsnow, tptime, &
416 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
417 punif_asnow, osnow_ideal, punif_sg1snow, &
418 punif_sg2snow, punif_histsnow,punif_agesnow, &
419 pdepth=zdepth, pvegtype=zvegtype, &
420 pvegtype_patch=zvegtype_patch, ppatch=zpatch )
430 DEALLOCATE(zvegtype_patch)
432 IF (lhook) CALL dr_hook(
'PREP_HOR_SNOW_FIELDS',1,zhook_handle)
subroutine prep_hor_snow_field(DTCO, IG, U, HPROGRAM, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, HSNSURF, KPATCH, KTEB_PATCH, KL, TPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, PF, PDEPTH, PVEGTYPE, PVEGTYPE_PATCH, PPATCH)
subroutine allocate_gr_snow(TPSNOW, KLU, KPATCH)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine prep_hor_snow_fields(DTCO, IG, U, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, KPATCH, KTEB_PATCH, KL, TPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, PVEGTYPE, PVEGTYPE_PATCH, PPATCH, OKEY)