8 HFILEPGD,HFILEPGDTYPE, &
10 KTEB_PATCH, KL,TNPSNOW, TPTIME, &
11 PUNIF_WSNOW, PUNIF_RSNOW, &
12 PUNIF_TSNOW, PUNIF_LWCSNOW, &
13 PUNIF_ASNOW, OSNOW_IDEAL, &
14 PUNIF_SG1SNOW, PUNIF_SG2SNOW,&
15 PUNIF_HISTSNOW,PUNIF_AGESNOW, YDCTL,&
16 PVEGTYPE_PATCH, KSIZE_P, KR_P,&
56 USE modd_snow_par
, ONLY : xaglamin, xaglamax
58 USE modd_data_cover_par
, ONLY : nvegtype
62 USE modi_allocate_gr_snow
63 USE modi_prep_hor_snow_field
65 USE modi_open_aux_io_surf
67 USE modi_close_aux_io_surf
80 TYPE(
grid_t),
INTENT(INOUT) :: G
84 type(
prep_ctl),
INTENT (INOUT) :: ydctl
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(INOUT) :: 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_PATCH
111 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: KSIZE_P
112 INTEGER,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: KR_P
113 REAL,
DIMENSION(:,:),
INTENT(IN ),
OPTIONAL :: PPATCH
114 LOGICAL,
INTENT(OUT),
OPTIONAL :: OKEY
120 CHARACTER(LEN=10) :: YSNSURF
121 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZWRHO
122 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZDEPTH
123 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZDTOT
124 INTEGER,
DIMENSION(KPATCH) :: ISIZE_P
125 INTEGER,
DIMENSION(KL,KPATCH) :: IR_P
126 REAL,
DIMENSION(KL,KPATCH) :: ZPATCH
127 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZVEGTYPE_PATCH
129 INTEGER :: JP, ISNOW_NLAYER
130 INTEGER :: JL, JI, ISIZE
132 CHARACTER(LEN=16) :: YRECFM
136 REAL(KIND=JPRB) :: ZHOOK_HANDLE
139 IF (
lhook)
CALL dr_hook(
'PREP_HOR_SNOW_FIELDS',0,zhook_handle)
141 isnow_nlayer = tnpsnow%AL(1)%NLAYER
143 IF (
PRESENT(ksize_p))
THEN 144 isize_p(:) = ksize_p(:)
149 IF (
PRESENT(kr_p))
THEN 150 ir_p(:,:) = kr_p(:,:)
157 IF (
PRESENT(ppatch))
THEN 162 IF (
PRESENT(pvegtype_patch))
THEN 163 ALLOCATE(zvegtype_patch(kl,
SIZE(pvegtype_patch,2),kpatch))
164 zvegtype_patch = pvegtype_patch
166 ALLOCATE(zvegtype_patch(kl,1,kpatch))
180 IF(
PRESENT(okey))
THEN 182 IF ( (hfiletype==
'MESONH' .OR. hfiletype==
'ASCII ' .OR. hfiletype==
'LFI '.OR. hfiletype==
'FA ') &
183 .AND. (hsurf==
'SN_VEG ') )
THEN 187 CALL read_surf(hfiletype,yrecfm,iversion,iresp)
193 CALL read_surf(hfiletype,yrecfm,gglacier,iresp)
195 IF(gglacier)okey=.false.
200 IF(osnow_ideal)okey=.false.
210 hprogram, hfile, hfiletype, hfilepgd, hfilepgdtype, &
211 kluout, ounif, ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
212 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow,&
213 punif_asnow, osnow_ideal, punif_sg1snow, &
214 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
215 zvegtype_patch, zpatch, isize_p, ir_p )
222 ALLOCATE(tnpsnow%AL(jp)%DEPTH(isize_p(jp),isnow_nlayer))
227 hprogram, hfile, hfiletype, hfilepgd, hfilepgdtype, &
228 kluout, ounif, ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
229 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow,&
230 punif_asnow, osnow_ideal, punif_sg1snow, &
231 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
232 zvegtype_patch, zpatch, isize_p, ir_p )
236 ALLOCATE(zdepth(kl,isnow_nlayer,kpatch))
240 IF (osnow_ideal .OR. isnow_nlayer==1 .OR. tnpsnow%AL(jp)%SCHEME==
'3-L')
THEN 241 zdepth(1:isize_p(jp),:,jp) = tnpsnow%AL(jp)%DEPTH(:,:)
242 ELSEIF (tnpsnow%AL(1)%SCHEME==
'CRO')
THEN 243 ALLOCATE(zdtot(isize_p(jp)))
246 zdtot(:) = zdtot(:) + tnpsnow%AL(jp)%DEPTH(:,jl)
248 CALL snow3lgrid(zdepth(1:isize_p(jp),:,jp),zdtot(:))
255 DEALLOCATE(tnpsnow%AL(jp)%DEPTH)
266 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
267 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
268 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
269 punif_asnow, osnow_ideal, punif_sg1snow, &
270 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
271 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
278 IF (.NOT.osnow_ideal)
THEN 294 WHERE (zpatch(1:isize,jp)>0. .AND. sk%RHO(:,jl)/=
xundef)
295 zwrho(1:isize) = zwrho(1:isize) + sk%RHO(:,jl) * zdepth(1:isize,jl,jp)
301 DO jl = 1,isnow_nlayer
303 WHERE(zpatch(1:isize,jp)>0. .AND. zwrho(1:isize)/=0. &
304 .AND. zwrho(1:isize)/=
xundef .AND. sk%WSNOW(:,1)>0.0)
305 zdtot(1:isize) = zdtot(1:isize) + zdepth(1:isize,jl,jp) * sk%WSNOW(:,1) / zwrho(1:isize)
309 IF (isnow_nlayer > 1)
THEN 310 CALL snow3lgrid(zdepth(1:isize,:,jp),zdtot(1:isize))
312 zdepth(1:isize,1,jp) = zdtot(1:isize)
317 WHERE(zpatch(1:isize,jp)>0..AND.sk%RHO(:,jl)/=
xundef.AND.zdtot(1:isize)>0.)
318 sk%WSNOW(:,jl) = sk%RHO(:,jl) * zdepth(1:isize,jl,jp)
319 ELSEWHERE(zpatch(1:isize,jp)>0..AND.(sk%RHO(:,jl)==
xundef.OR.zdtot(1:isize)==0.0))
341 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
342 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
343 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
344 punif_asnow, osnow_ideal, punif_sg1snow, &
345 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
346 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
348 IF (tnpsnow%AL(1)%SCHEME/=
'D95')
THEN 353 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
354 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
355 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
356 punif_asnow, osnow_ideal, punif_sg1snow, &
357 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
358 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
362 IF (tnpsnow%AL(1)%SCHEME==
'CRO'.OR. tnpsnow%AL(1)%SCHEME==
'3-L')
THEN 367 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
368 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
369 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
370 punif_asnow, osnow_ideal, punif_sg1snow, &
371 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
372 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
375 WHERE(tnpsnow%AL(jp)%WSNOW(:,1)>0.0 .AND. tnpsnow%AL(jp)%WSNOW(:,1)/=
xundef .AND. &
376 tnpsnow%AL(jp)%AGE(:,1)==0.0 .AND. tnpsnow%AL(jp)%ALB(:)<xaglamin)
377 tnpsnow%AL(jp)%ALB(:)=(xaglamin+xaglamax)/2.0
388 IF (tnpsnow%AL(1)%SCHEME==
'CRO')
THEN 392 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
393 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
394 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
395 punif_asnow, osnow_ideal, punif_sg1snow, &
396 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
397 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
401 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
402 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
403 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
404 punif_asnow, osnow_ideal, punif_sg1snow, &
405 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
406 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
410 hprogram,hfile,hfiletype,hfilepgd,hfilepgdtype, &
411 kluout,ounif,ysnsurf, kpatch, kteb_patch, kl, tnpsnow, tptime, &
412 punif_wsnow, punif_rsnow, punif_tsnow, punif_lwcsnow, &
413 punif_asnow, osnow_ideal, punif_sg1snow, &
414 punif_sg2snow, punif_histsnow,punif_agesnow, ydctl, &
415 zvegtype_patch, zpatch, isize_p, ir_p, pdepth=zdepth )
422 DEALLOCATE(zvegtype_patch)
424 IF (
lhook)
CALL dr_hook(
'PREP_HOR_SNOW_FIELDS',1,zhook_handle)
subroutine prep_hor_snow_fields(DTCO, G, U, GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, KPATCH, KTEB_PATCH, KL, TNPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, YDCTL, PVEGTYPE_PATCH, KSIZE_P, KR_P, PPATCH, OKEY)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine prep_hor_snow_field(DTCO, G, U, GCP, HPROGRAM, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, OUNIF, HSNSURF, KPATCH, KTEB_PATCH, KL, TNPSNOW, TPTIME, PUNIF_WSNOW, PUNIF_RSNOW, PUNIF_TSNOW, PUNIF_LWCSNOW, PUNIF_ASNOW, OSNOW_IDEAL, PUNIF_SG1SNOW, PUNIF_SG2SNOW, PUNIF_HISTSNOW, PUNIF_AGESNOW, YDCTL, PVEGTYPE_PATCH, PPATCH, KSIZE_P, KR_P, PDEPTH)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK, HDIR)