6 SUBROUTINE prep_snow_extern (GCP,HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,&
7 KLUOUT,PFIELD,OSNOW_IDEAL,KLAYER,KTEB_PATCH)
49 USE modd_data_cover_par
, ONLY : nvegtype
56 USE modi_town_presence
58 USE modi_prep_grid_extern
59 USE modi_open_aux_io_surf
60 USE modi_close_aux_io_surf
61 USE modi_allocate_gr_snow
62 USE modi_dealloc_gr_snow
68 USE modi_read_teb_patch
76 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
77 CHARACTER(LEN=10),
INTENT(IN) :: HSURF
78 CHARACTER(LEN=28),
INTENT(IN) :: HFILE
79 CHARACTER(LEN=6),
INTENT(IN) :: HFILETYPE
80 CHARACTER(LEN=28),
INTENT(IN) :: HFILEPGD
81 CHARACTER(LEN=6),
INTENT(IN) :: HFILEPGDTYPE
82 INTEGER,
INTENT(IN) :: KLUOUT
83 REAL,
DIMENSION(:,:,:),
POINTER :: PFIELD
84 LOGICAL,
INTENT(INOUT) :: OSNOW_IDEAL
85 INTEGER,
INTENT(IN) :: KLAYER
86 INTEGER,
INTENT(IN) :: KTEB_PATCH
92 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZFIELD
93 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZHEAT
94 REAL,
DIMENSION(:),
ALLOCATABLE :: ZD
95 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDEPTH
96 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZGRID
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IMASK_P
101 CHARACTER(LEN=12) :: YRECFM
103 INTEGER :: IVERSION_PGD, IVERSION_PREP
105 INTEGER :: IBUGFIX_PGD, IBUGFIX_PREP
110 CHARACTER(LEN=8) :: YAREA
111 CHARACTER(LEN=3) :: YPREFIX
113 INTEGER :: ITEB_PATCH
115 CHARACTER(LEN=6) :: YMASK
116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
123 IF (
lhook)
CALL dr_hook(
'PREP_SNOW_EXTERN',0,zhook_handle)
128 yarea(1:4) = hsurf(7:10)
130 IF (yarea(1:4)==
'VEG ')
THEN 150 CALL read_surf(hfilepgdtype,
'VERSION',iversion_pgd,iresp,hdir=
'-')
151 CALL read_surf(hfilepgdtype,
'BUG',ibugfix_pgd,iresp,hdir=
'-')
152 gold_name=(iversion_pgd<7 .OR. (iversion_pgd==7 .AND. ibugfix_pgd<3))
162 IF (yarea(1:4)==
'VEG ')
THEN 163 yrecfm =
'PATCH_NUMBER' 164 CALL read_surf(hfilepgdtype,yrecfm,ipatch,iresp,hdir=
'-')
166 IF (.NOT.gold_name)
THEN 167 IF (yarea(1:4)==
'ROOF') yarea(1:4) =
'RF ' 168 IF (yarea(1:4)==
'ROAD') yarea(1:4) =
'RD ' 171 CALL read_teb_patch(hfilepgd,hfilepgdtype,iversion_pgd,ibugfix_pgd,iteb_patch,hdir=
'-')
175 IF (iteb_patch>1)
THEN 176 WRITE(yprefix,fmt=
'(A,I1,A)')
'T',min(kteb_patch,iteb_patch),
'_' 183 CALL read_surf(hfiletype,
'VERSION',iversion_prep,iresp,hdir=
'-')
184 CALL read_surf(hfiletype,
'BUG',ibugfix_prep,iresp,hdir=
'-')
199 ALLOCATE(imask_p(ini))
206 IF (yarea(1:2)==
'RO' .OR. yarea(1:2)==
'GA' .OR. yarea(1:2)==
'RF' .OR. yarea(1:2)==
'RD')
THEN 207 IF (.NOT. gtown)
THEN 214 hdir=
'E',kversion=iversion_prep,kbugfix=ibugfix_prep)
219 CALL read_gr_snow(hfiletype,
trim(yarea),yprefix,ini,ini,imask_p,jp,tzsnow, &
220 hdir=
'E',kversion=iversion_prep,kbugfix=ibugfix_prep,knpatch=ipatch)
231 SELECT CASE (hsurf(1:3))
233 IF (osnow_ideal)
THEN 234 IF (jp<=1)
ALLOCATE(pfield(ini,klayer,ipatch))
235 pfield(:,:,jp) = tzsnow%WSNOW(:,1:klayer)
237 IF (jp<=1)
ALLOCATE(pfield(ini,1,ipatch))
239 DO jl=1,tzsnow%NLAYER
240 pfield(:,1,jp) = pfield(:,1,jp) + tzsnow%WSNOW(:,jl)
251 IF (jp<=1)
ALLOCATE(pfield(ini,1,ipatch))
252 pfield(:,1,jp) = tzsnow%ALB(:)
260 IF (osnow_ideal)
THEN 261 IF (jp<=1)
ALLOCATE(pfield(ini,klayer,ipatch))
262 pfield(:,:,jp) = tzsnow%WSNOW(:,1:klayer)/tzsnow%RHO(:,1:klayer)
263 WHERE(tzsnow%WSNOW(:,1:klayer)==
xundef) pfield(:,:,jp)=
xundef 267 DO jl=1,tzsnow%NLAYER
268 WHERE (tzsnow%WSNOW(:,jl)/=
xundef)
269 zd(:) = zd(:) + tzsnow%WSNOW(:,jl)/tzsnow%RHO(:,jl)
272 IF (jp<=1)
ALLOCATE(pfield(ini,1,ipatch))
273 pfield(:,1,jp) = zd(:)
282 CASE (
'RHO',
'HEA',
'SG1',
'SG2',
'HIS',
'AGE')
284 SELECT CASE (tzsnow%SCHEME)
285 CASE (
'D95',
'1-L',
'EBA')
286 IF (jp<=1)
ALLOCATE(pfield(ini,1,ipatch))
288 IF (hsurf(1:3)==
'RHO') pfield(:,1,jp) = tzsnow%RHO(:,1)
289 IF (hsurf(1:3)==
'HEA')
THEN 290 IF (tzsnow%SCHEME==
'D95'.OR.tzsnow%SCHEME==
'EBA') pfield(:,1,jp) =
xtt-2.
291 IF (tzsnow%SCHEME==
'1-L') pfield(:,1,jp) = tzsnow%T(:,1)
293 IF (hsurf(1:3)==
'SG1') pfield(:,1,jp) = -20.0
294 IF (hsurf(1:3)==
'SG2') pfield(:,1,jp) = 80.0
295 IF (hsurf(1:3)==
'HIS') pfield(:,1,jp) = 0.0
296 IF (hsurf(1:3)==
'AGE') pfield(:,1,jp) = 3.0
299 ALLOCATE(zfield(ini,tzsnow%NLAYER))
301 IF (hsurf(1:3)==
'RHO') zfield(:,:) = tzsnow%RHO (:,1:tzsnow%NLAYER)
302 IF (hsurf(1:3)==
'AGE') zfield(:,:) = tzsnow%AGE(:,1:tzsnow%NLAYER)
303 IF (tzsnow%SCHEME==
'CRO')
THEN 304 IF (hsurf(1:3)==
'SG1') zfield(:,:) = tzsnow%GRAN1(:,1:tzsnow%NLAYER)
305 IF (hsurf(1:3)==
'SG2') zfield(:,:) = tzsnow%GRAN2(:,1:tzsnow%NLAYER)
306 IF (hsurf(1:3)==
'HIS') zfield(:,:) = tzsnow%HIST(:,1:tzsnow%NLAYER)
308 IF (hsurf(1:3)==
'SG1') zfield(:,:) = -20.0
309 IF (hsurf(1:3)==
'SG2') zfield(:,:) = 80.0
310 IF (hsurf(1:3)==
'HIS') zfield(:,:) = 0.0
313 IF ( hsurf(1:3)==
'HEA')
THEN 314 ALLOCATE(zheat(ini,tzsnow%NLAYER))
315 zheat(:,:) = tzsnow%HEAT(:,1:tzsnow%NLAYER)
321 IF (osnow_ideal)
THEN 322 IF (jp<=1)
ALLOCATE(pfield(ini,klayer,ipatch))
323 pfield(:,:,jp) = zfield(:,:)
326 IF (jp<=1)
ALLOCATE(pfield(ini,
ngrid_level,ipatch))
328 ALLOCATE(zdepth(ini,tzsnow%NLAYER))
329 zdepth(:,:) = tzsnow%WSNOW(:,:)/tzsnow%RHO(:,:)
334 DO jl=1,tzsnow%NLAYER
335 zd(:) = zd(:) + zdepth(:,jl)
339 ALLOCATE(zgrid(ini,tzsnow%NLAYER))
342 DO jl = 1,tzsnow%NLAYER
343 zgrid(ji,jl)=
REAL(jl)/
REAL(tzsnow%nlayer)
346 DO jl = 1,tzsnow%NLAYER
348 zgrid(ji,jl)=zdepth(ji,jl)/ zd(ji)
350 zgrid(ji,jl) = zgrid(ji,jl-1) + zdepth(ji,jl)/zd(ji)
382 IF (
lhook)
CALL dr_hook(
'PREP_SNOW_EXTERN',1,zhook_handle)
static const char * trim(const char *name, int *n)
character(len=10) cingrid_type
character(len=6) cinterp_type
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine town_presence(HFILETYPE, OTEB, HDIR)
subroutine prep_grid_extern(GCP, HFILETYPE, KLUOUT, HGRIDTYPE, HINTER
integer, parameter ngrid_level
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine read_teb_patch(HFILEPGD, HFILEPGDTYPE, KVERSION, KBUGFIX,
subroutine read_gr_snow(HPROGRAM, HSURFTYPE, HPREFIX, KLU, KSIZE_P, KMASK_P, KPATCH, TPSNOW, HDI
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK, HDIR)
subroutine prep_snow_extern(GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, PFIELD, OSNOW_IDEAL, KLAYER, KTEB_PATCH)
real, dimension(ngrid_level) xgrid_snow
subroutine dealloc_gr_snow(TPSNOW)