10 hfilepgd,hfilepgdtype, &
11 kluout,ounif,hsnsurf,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, &
20 pvegtype_patch,ppatch )
70 USE modi_prep_snow_grib
71 USE modi_prep_snow_unif
72 USE modi_prep_snow_extern
73 USE modi_prep_snow_buffer
75 USE modi_vegtype_grid_to_patch_grid
77 USE modi_vegtype_to_patch
81 USE yomhook
,ONLY : lhook, dr_hook
82 USE parkind1
,ONLY : jprb
92 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
95 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
96 CHARACTER(LEN=28),
INTENT(IN) :: hfile
97 CHARACTER(LEN=6),
INTENT(IN) :: hfiletype
98 CHARACTER(LEN=28),
INTENT(IN) :: hfilepgd
99 CHARACTER(LEN=6),
INTENT(IN) :: hfilepgdtype
100 INTEGER,
INTENT(IN) :: kluout
101 LOGICAL,
INTENT(IN) :: ounif
102 CHARACTER(LEN=10) :: hsnsurf
103 INTEGER,
INTENT(IN) :: kpatch
104 INTEGER,
INTENT(IN) :: kteb_patch
105 INTEGER,
INTENT(IN) :: kl
108 REAL,
DIMENSION(:),
INTENT(IN) :: punif_wsnow
109 REAL,
DIMENSION(:),
INTENT(IN) :: punif_rsnow
110 REAL,
DIMENSION(:),
INTENT(IN) :: punif_tsnow
111 REAL,
DIMENSION(:),
INTENT(IN) :: punif_lwcsnow
112 REAL,
INTENT(IN) :: punif_asnow
113 LOGICAL,
INTENT(IN) :: osnow_ideal
114 REAL,
DIMENSION(:),
INTENT(IN) :: punif_sg1snow
115 REAL,
DIMENSION(:),
INTENT(IN) :: punif_sg2snow
116 REAL,
DIMENSION(:),
INTENT(IN) :: punif_histsnow
117 REAL,
DIMENSION(:),
INTENT(IN) :: punif_agesnow
119 REAL,
DIMENSION(:,:,:),
INTENT(OUT),
OPTIONAL :: pf
120 REAL,
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: pdepth
121 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pvegtype
122 REAL,
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: pvegtype_patch
123 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: ppatch
128 REAL,
POINTER,
DIMENSION(:,:,:) :: zfieldin
129 REAL,
POINTER,
DIMENSION(:,:) :: zfield
130 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zfieldout
131 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: zd
132 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zw
133 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zheat
134 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: zgrid
136 LOGICAL :: gsnow_ideal
140 REAL(KIND=JPRB) :: zhook_handle
146 IF (lhook) CALL dr_hook(
'PREP_HOR_SNOW_FIELD',0,zhook_handle)
148 gsnow_ideal = .false.
155 gsnow_ideal = osnow_ideal
156 CALL
prep_snow_unif(kluout,hsnsurf,zfieldin, tptime, gsnow_ideal, &
157 punif_wsnow, punif_rsnow, punif_tsnow, &
158 punif_lwcsnow, punif_asnow, punif_sg1snow, &
159 punif_sg2snow, punif_histsnow, punif_agesnow, &
161 ELSE IF (hfiletype==
'GRIB ')
THEN
162 CALL
prep_snow_grib(hprogram,hsnsurf,hfile,kluout,tpsnow%NLAYER,zfieldin)
163 ELSE IF (hfiletype==
'MESONH' .OR. hfiletype==
'ASCII ' .OR. hfiletype==
'LFI '.OR. hfiletype==
'FA ')
THEN
164 gsnow_ideal = osnow_ideal
166 hprogram,hsnsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,&
167 kluout,zfieldin,gsnow_ideal,tpsnow%NLAYER,kteb_patch)
168 ELSE IF (hfiletype==
'BUFFER')
THEN
170 hprogram,hsnsurf,kluout,tpsnow%NLAYER,zfieldin)
172 CALL
abor1_sfx(
'PREP_HOR_SNOW_FIELD: data file type not supported : '//hfiletype)
179 ALLOCATE(zfieldout(kl,
SIZE(zfieldin,2),
SIZE(zfieldin,3)))
180 ALLOCATE(zfield(
SIZE(zfieldin,1),
SIZE(zfieldin,2)))
182 DO jvegtype = 1,
SIZE(zfieldin,3)
184 zfield=zfieldin(:,:,jvegtype)
185 IF(present(pvegtype).AND.
SIZE(zfieldin,3)==nvegtype) linterp(:) = (pvegtype(:,jvegtype) > 0.)
186 IF(present(pdepth))
THEN
189 linterp(:) = (linterp(:).AND.pdepth(:,1,jpatch)>0..AND.pdepth(:,1,jpatch)<xundef)
193 kluout,zfield,zfieldout(:,:,jvegtype))
204 ALLOCATE(zw(
SIZE(zfieldout,1),
SIZE(zfieldout,2),kpatch))
207 IF (
SIZE(zfieldout,3)==nvegtype.AND.
SIZE(pvegtype_patch,2)==nvegtype)
THEN
211 zw(:,:,jpatch) = zfieldout(:,:,1)
219 IF (present(pdepth) .AND. .NOT.gsnow_ideal)
THEN
223 ALLOCATE(zd(
SIZE(tpsnow%WSNOW,1),kpatch))
226 DO jlayer=1,tpsnow%NLAYER
227 WHERE (pdepth(:,jlayer,jpatch)/=xundef) zd(:,jpatch) = zd(:,jpatch) + pdepth(:,jlayer,jpatch)
233 ALLOCATE(zgrid(
SIZE(zw,1),tpsnow%NLAYER,kpatch))
234 zgrid(:,1,:) = pdepth(:,1,:)
235 IF(tpsnow%NLAYER>1)
THEN
237 DO jlayer=2,tpsnow%NLAYER
238 zgrid(:,jlayer,jpatch) = zgrid(:,jlayer-1,jpatch) + pdepth(:,jlayer,jpatch)
246 DO jlayer=1,tpsnow%NLAYER
247 WHERE (zd(:,jpatch)/=0.)
248 zgrid(:,jlayer,jpatch) = zgrid(:,jlayer,jpatch) / zd(:,jpatch)
250 zgrid(:,jlayer,jpatch) = 1.0
257 ELSEIF (.NOT.gsnow_ideal)
THEN
258 IF (hsnsurf(1:3)==
'RHO' .OR. hsnsurf(1:3)==
'HEA')
THEN
259 WRITE(kluout,*)
'when interpolation profiles of snow pack quantities,'
260 WRITE(kluout,*)
'depth of snow layers must be given'
261 CALL
abor1_sfx(
'PREP_HOR_SNOW_FIELD: DEPTH OF SNOW LAYERS NEEDED')
269 SELECT CASE (hsnsurf(1:3))
273 IF (gsnow_ideal)
THEN
274 pf(:,:,:) = zw(:,:,:)
276 DO jlayer=1,
SIZE(pf,2)
277 pf(:,jlayer,:) = zw(:,1,:)
281 IF (present(ppatch))
THEN
282 DO jlayer = 1,tpsnow%NLAYER
283 WHERE(ppatch(:,:)==0.)
284 pf(:,jlayer,:) = xundef
291 IF (gsnow_ideal)
THEN
292 pf(:,:,:) = zw(:,:,:)
294 DO jlayer=1,
SIZE(pf,2)
295 pf(:,jlayer,:) = zw(:,jlayer,:)
299 IF (present(ppatch))
THEN
300 DO jlayer = 1,tpsnow%NLAYER
301 WHERE(ppatch(:,:)==0.)
302 pf(:,jlayer,:) = xundef
311 IF (gsnow_ideal)
THEN
312 tpsnow%RHO(:,:,:) = zw(:,:,:)
313 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
314 tpsnow%RHO(:,:,:) = zw(:,:,:)
322 DO jlayer=1,tpsnow%NLAYER
323 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%RHO(:,jlayer,jpatch) = xundef
332 tpsnow%ALB(:,jpatch) = zw(:,1,jpatch)
337 WHERE(pdepth(:,1,jpatch)==0. .OR. pdepth(:,1,jpatch)==xundef) tpsnow%ALB(:,jpatch) = xundef
344 IF (tpsnow%SCHEME==
'3-L' .OR. tpsnow%SCHEME==
'CRO')
THEN
346 IF (gsnow_ideal)
THEN
347 tpsnow%HEAT(:,:,:) = zw(:,:,:)
348 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
349 tpsnow%HEAT(:,:,:) = zw(:,:,:)
357 DO jlayer=1,tpsnow%NLAYER
358 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%HEAT(:,jlayer,jpatch) = xundef
362 ELSE IF (tpsnow%SCHEME==
'1-L')
THEN
364 ALLOCATE(zheat(
SIZE(zfieldout,1),tpsnow%NLAYER,kpatch))
366 IF (gsnow_ideal)
THEN
367 zheat(:,:,:) = zw(:,:,:)
368 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
369 zheat(:,:,:) = zw(:,:,:)
376 WHERE (tpsnow%T>xtt) tpsnow%T = xtt
381 DO jlayer=1,tpsnow%NLAYER
382 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%T(:,jlayer,jpatch) = xundef
391 IF (gsnow_ideal)
THEN
392 tpsnow%GRAN1(:,:,:) = zw(:,:,:)
393 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
394 tpsnow%GRAN1(:,:,:) = zw(:,:,:)
402 DO jlayer=1,tpsnow%NLAYER
403 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%GRAN1(:,jlayer,jpatch) = xundef
409 IF (gsnow_ideal)
THEN
410 tpsnow%GRAN2(:,:,:) = zw(:,:,:)
411 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
412 tpsnow%GRAN2(:,:,:) = zw(:,:,:)
420 DO jlayer=1,tpsnow%NLAYER
421 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%GRAN2(:,jlayer,jpatch) = xundef
427 IF (gsnow_ideal)
THEN
428 tpsnow%HIST(:,:,:) = zw(:,:,:)
429 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
430 tpsnow%HIST(:,:,:) = zw(:,:,:)
438 DO jlayer=1,tpsnow%NLAYER
439 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%HIST(:,jlayer,jpatch) = xundef
445 IF (tpsnow%SCHEME==
'3-L'.AND.(.NOT.gsnow_ideal).AND.(.NOT.ounif))
THEN
446 tpsnow%AGE(:,:,:) = 0.0
448 IF (gsnow_ideal)
THEN
449 tpsnow%AGE(:,:,:) = zw(:,:,:)
450 ELSEIF(
SIZE(zw,2)==tpsnow%NLAYER)
THEN
451 tpsnow%AGE(:,:,:) = zw(:,:,:)
460 DO jlayer=1,tpsnow%NLAYER
461 WHERE(pdepth(:,jlayer,jpatch)==0. .OR. pdepth(:,jlayer,jpatch)==xundef) tpsnow%AGE(:,jlayer,jpatch) = xundef
471 DEALLOCATE(zfieldin )
472 DEALLOCATE(zfieldout)
473 IF (present(pdepth) .AND. .NOT.gsnow_ideal)
DEALLOCATE(zgrid )
475 IF (lhook) CALL dr_hook(
'PREP_HOR_SNOW_FIELD',1,zhook_handle)
487 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pt1
488 REAL,
DIMENSION(:),
INTENT(IN) :: pgrid1
489 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pd2
490 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pt2
493 REAL,
DIMENSION(SIZE(PT1,1),SIZE(PT1,2)) :: zd1
494 REAL,
DIMENSION(SIZE(PD2,1),SIZE(PD2,2)) :: zd2
496 REAL(KIND=JPRB) :: zhook_handle
500 IF (lhook) CALL dr_hook(
'INIT_FROM_REF_GRID',0,zhook_handle)
504 zd2(:,jl) = pd2(:,jl,jpatch)
508 zd1(:,jl) = pgrid1(jl)
513 IF (lhook) CALL dr_hook(
'INIT_FROM_REF_GRID',1,zhook_handle)
subroutine prep_snow_buffer(IG, U, HPROGRAM, HSURF, KLUOUT, KLAYER, PFIELD)
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 init_from_ref_grid(PGRID1, PT1, PD2, PT2)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine abor1_sfx(YTEXT)
subroutine prep_snow_grib(HPROGRAM, HSURF, HFILE, KLUOUT, KLAYER, PFIELD)
subroutine hor_interpol(DTCO, U, KLUOUT, PFIELDIN, PFIELDOUT)
subroutine vegtype_grid_to_patch_grid(KPATCH, PVEGTYPE_PATCH, PPATCH, PFIELDOUT, PW)
subroutine prep_snow_unif(KLUOUT, HSURF, PFIELD, TPTIME, OSNOW_IDEAL, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, KLAYER)
subroutine prep_snow_extern(HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD, OSNOW_IDEAL, KLAYER, KTEB_PATCH)