7 hprogram,hsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,&
8 kluout,pfield,osnow_ideal,klayer,kteb_patch)
49 USE modd_prep, ONLY : cingrid_type, cinterp_type
57 USE yomhook
,ONLY : lhook, dr_hook
58 USE parkind1
,ONLY : jprb
60 USE modi_town_presence
61 USE modi_put_on_all_vegtypes
63 USE modi_prep_grid_extern
64 USE modi_open_aux_io_surf
65 USE modi_close_aux_io_surf
66 USE modi_allocate_gr_snow
71 USE modi_read_teb_patch
79 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
80 CHARACTER(LEN=10),
INTENT(IN) :: hsurf
81 CHARACTER(LEN=28),
INTENT(IN) :: hfile
82 CHARACTER(LEN=6),
INTENT(IN) :: hfiletype
83 CHARACTER(LEN=28),
INTENT(IN) :: hfilepgd
84 CHARACTER(LEN=6),
INTENT(IN) :: hfilepgdtype
85 INTEGER,
INTENT(IN) :: kluout
86 REAL,
DIMENSION(:,:,:),
POINTER :: pfield
87 LOGICAL,
INTENT(IN) :: osnow_ideal
88 INTEGER,
INTENT(IN) :: klayer
89 INTEGER,
INTENT(IN) :: kteb_patch
95 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zfield
96 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zfield_fine
97 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ztemp
98 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zwliq
99 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zd
100 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zdepth
101 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zgrid
104 CHARACTER(LEN=12) :: yrecfm
113 CHARACTER(LEN=8) :: yarea
114 CHARACTER(LEN=3) :: yprefix
116 INTEGER :: iteb_patch
118 CHARACTER(LEN=6) :: ymask
119 REAL(KIND=JPRB) :: zhook_handle
126 IF (lhook) CALL dr_hook(
'PREP_SNOW_EXTERN',0,zhook_handle)
131 yarea(1:4) = hsurf(7:10)
133 IF (yarea(1:4)==
'VEG ')
THEN
153 hfilepgd,hfilepgdtype,
'FULL ')
155 hfilepgdtype,
'VERSION',iversion,iresp)
157 hfilepgdtype,
'BUG',ibugfix,iresp)
160 gold_name=(iversion<7 .OR. (iversion==7 .AND. ibugfix<3))
163 hfilepgd,hfilepgdtype,ymask)
165 IF (yarea(1:4)==
'VEG ')
THEN
166 yrecfm =
'PATCH_NUMBER'
168 hfilepgdtype,yrecfm,ipatch,iresp)
171 IF (.NOT.gold_name)
THEN
172 IF (yarea(1:4)==
'ROOF') yarea(1:4) =
'RF '
173 IF (yarea(1:4)==
'ROAD') yarea(1:4) =
'RD '
177 hfilepgd,hfilepgdtype,iteb_patch)
178 IF (iteb_patch>1)
THEN
179 WRITE(yprefix,fmt=
'(A,I1,A)')
'T',min(kteb_patch,iteb_patch),
'_'
190 hfilepgd,hfilepgdtype,
'FULL ')
193 hfilepgdtype,kluout,cingrid_type,cinterp_type,ini)
200 IF (yarea(1:2)==
'RO' .OR. yarea(1:2)==
'GA' .OR. yarea(1:2)==
'RF' .OR. yarea(1:2)==
'RD')
THEN
204 IF (.NOT. gtown)
THEN
210 hfile,hfiletype,ymask)
212 hfiletype,trim(yarea),yprefix,ini,ipatch,tzsnow, &
213 hdir=
'A',kversion=iversion,kbugfix=ibugfix)
219 hfile,hfiletype,ymask)
221 hfiletype,trim(yarea),yprefix,ini,ipatch,tzsnow, &
222 hdir=
'A',kversion=iversion,kbugfix=ibugfix)
231 SELECT CASE (hsurf(1:3))
233 IF (osnow_ideal)
THEN
234 ALLOCATE(zfield(ini,klayer,ipatch))
235 zfield(:,:,:) = tzsnow%WSNOW(:,1:klayer,:)
236 ALLOCATE(pfield(ini,klayer,ivegtype))
239 ALLOCATE(zfield(ini,1,ipatch))
241 DO jlayer=1,tzsnow%NLAYER
242 zfield(:,1,:) = zfield(:,1,:) + tzsnow%WSNOW(:,jlayer,:)
244 WHERE ( zfield(:,1,:)>xundef ) zfield(:,1,:)=xundef
245 ALLOCATE(pfield(ini,1,ivegtype))
256 ALLOCATE(zfield(ini,1,ipatch))
257 zfield(:,1,:) = tzsnow%ALB(:,:)
259 ALLOCATE(pfield(ini,1,ivegtype))
269 ALLOCATE(zfield_fine(ini,klayer,ipatch))
270 IF (osnow_ideal)
THEN
271 zfield_fine(:,:,:) = tzsnow%WSNOW(:,1:klayer,:)/tzsnow%RHO(:,1:klayer,:)
272 WHERE(tzsnow%WSNOW(:,1:klayer,:)==xundef) zfield_fine(:,:,:)=xundef
274 ALLOCATE(zdepth(ini,tzsnow%NLAYER,ipatch))
275 zdepth(:,:,:) = tzsnow%WSNOW(:,:,:)/tzsnow%RHO(:,:,:)
276 WHERE(tzsnow%WSNOW(:,:,:)==xundef) zdepth(:,:,:)=xundef
277 IF(tzsnow%NLAYER/=klayer)
THEN
279 ALLOCATE(zd(ini,ipatch))
282 DO jlayer=1,tzsnow%NLAYER
284 IF(zdepth(ji,jlayer,jpatch)/=xundef)
THEN
285 zd(ji,jpatch) = zd(ji,jpatch) + zdepth(ji,jlayer,jpatch)
292 CALL
snow3lgrid(zfield_fine(:,:,jpatch),zd(:,jpatch))
296 zfield_fine(:,:,:)=zdepth(:,:,:)
300 ALLOCATE(pfield(ini,klayer,ivegtype))
302 DEALLOCATE(zfield_fine)
309 CASE (
'RHO',
'HEA',
'SG1',
'SG2',
'HIS',
'AGE')
310 ALLOCATE(zfield(ini,tzsnow%NLAYER,ipatch))
312 SELECT CASE (tzsnow%SCHEME)
313 CASE (
'D95',
'1-L',
'EBA')
314 ALLOCATE(zfield_fine(ini,ngrid_level,ipatch))
316 IF (hsurf(1:3)==
'RHO') zfield(:,1,:) = tzsnow%RHO(:,1,:)
317 IF (hsurf(1:3)==
'HEA')
THEN
318 ALLOCATE(ztemp(ini,tzsnow%NLAYER,ipatch))
319 ALLOCATE(zwliq(ini,tzsnow%NLAYER,ipatch))
320 IF (tzsnow%SCHEME==
'D95'.OR.tzsnow%SCHEME==
'EBA') ztemp(:,1,:) = xtt-2.
321 IF (tzsnow%SCHEME==
'1-L') ztemp(:,1,:) = tzsnow%T(:,1,:)
327 IF (hsurf(1:3)==
'SG1') zfield(:,1,:) = -20.0
328 IF (hsurf(1:3)==
'SG2') zfield(:,1,:) = 80.0
329 IF (hsurf(1:3)==
'HIS') zfield(:,1,:) = 0.0
330 IF (hsurf(1:3)==
'AGE') zfield(:,1,:) = 3.0
332 DO jlayer=1,ngrid_level
333 zfield_fine(:,jlayer,:) = zfield(:,1,:)
335 ALLOCATE(pfield(ini,ngrid_level,ivegtype))
340 IF (hsurf(1:3)==
'RHO') zfield(:,:,:) = tzsnow%RHO (:,1:tzsnow%NLAYER,:)
341 IF (hsurf(1:3)==
'HEA') zfield(:,:,:) = tzsnow%HEAT(:,1:tzsnow%NLAYER,:)
342 IF (hsurf(1:3)==
'AGE') zfield(:,:,:) = tzsnow%AGE (:,1:tzsnow%NLAYER,:)
343 IF (tzsnow%SCHEME==
'CRO')
THEN
344 IF (hsurf(1:3)==
'SG1') zfield(:,:,:) = tzsnow%GRAN1(:,1:tzsnow%NLAYER,:)
345 IF (hsurf(1:3)==
'SG2') zfield(:,:,:) = tzsnow%GRAN2(:,1:tzsnow%NLAYER,:)
346 IF (hsurf(1:3)==
'HIS') zfield(:,:,:) = tzsnow%HIST (:,1:tzsnow%NLAYER,:)
348 IF (hsurf(1:3)==
'SG1') zfield(:,:,:) = -20.0
349 IF (hsurf(1:3)==
'SG2') zfield(:,:,:) = 80.0
350 IF (hsurf(1:3)==
'HIS') zfield(:,:,:) = 0.0
353 IF (osnow_ideal)
THEN
354 ALLOCATE(zfield_fine(ini,klayer,ipatch))
355 zfield_fine(:,:,:) = zfield(:,:,:)
356 ALLOCATE(pfield(ini,klayer,ivegtype))
359 ALLOCATE(zfield_fine(ini,ngrid_level,ipatch))
362 ALLOCATE(zdepth(ini,tzsnow%NLAYER,ipatch))
364 zdepth(:,:,jpatch) = tzsnow%WSNOW(:,:,jpatch)/tzsnow%RHO(:,:,jpatch)
368 ALLOCATE(zd(ini,ipatch))
370 DO jlayer=1,tzsnow%NLAYER
371 zd(:,:) = zd(:,:) + zdepth(:,jlayer,:)
375 ALLOCATE(zgrid(ini,tzsnow%NLAYER,ipatch))
378 IF(zd(ji,jpatch)==0.0)
THEN
379 DO jlayer = 1,tzsnow%NLAYER
380 zgrid(ji,jlayer,jpatch)=
REAL(jlayer)/
REAL(tzsnow%nlayer)
383 DO jlayer = 1,tzsnow%NLAYER
385 zgrid(ji,jlayer,jpatch)=zdepth(ji,jlayer,jpatch)/ zd(ji,jpatch)
387 zgrid(ji,jlayer,jpatch) = zgrid(ji,jlayer-1,jpatch) + zdepth(ji,jlayer,jpatch)/zd(ji,jpatch)
399 xgrid_snow(:), zfield_fine(:,:,jpatch))
402 ALLOCATE(pfield(ini,ngrid_level,ivegtype))
409 DEALLOCATE(zfield_fine)
418 IF (lhook) CALL dr_hook(
'PREP_SNOW_EXTERN',1,zhook_handle)
subroutine allocate_gr_snow(TPSNOW, KLU, KPATCH)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine prep_snow_extern(HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD, OSNOW_IDEAL, KLAYER, KTEB_PATCH)
subroutine read_teb_patch(HFILEPGD, HFILEPGDTYPE, KTEB_PATCH)
subroutine put_on_all_vegtypes(KNI, KLAYER, KPATCH, KVEGTYPE, PFIELD_PATCH, PFIELD_VEGTYPE)
subroutine town_presence(HFILETYPE, OTEB)
subroutine read_gr_snow(HPROGRAM, HSURFTYPE, HPREFIX, KLU, KPATCH, TPSNOW, HDIR, KVERSION, KBUGFIX)
subroutine prep_grid_extern(HFILETYPE, KLUOUT, HGRIDTYPE, HINTERP_TYPE, KNI)