6 SUBROUTINE prep_hor_teb_garden_field (DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, &
7 HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KPATCH,YDCTL)
55 USE modd_prep_teb_garden
, ONLY : xgrid_soil, ngrid_level, &
56 xwsnow_gd, xrsnow_gd, xtsnow_gd, xlwcsnow_gd, &
57 xagesnow_gd, xasnow_gd, lsnow_ideal_gd
59 USE modd_isba_par
, ONLY : xwgmin
60 USE modd_data_cover_par
, ONLY : nvegtype
65 USE modi_prep_grib_grid
66 USE modi_read_prep_teb_garden_conf
67 USE modi_read_prep_garden_snow
68 USE modi_prep_teb_garden_ascllv
69 USE modi_prep_teb_garden_grib
70 USE modi_prep_teb_garden_unif
71 USE modi_prep_teb_garden_buffer
73 USE modi_put_on_all_vegtypes
74 USE modi_vegtype_grid_to_patch_grid
75 USE modi_prep_hor_snow_fields
77 USE modi_prep_teb_garden_extern
79 USE modi_allocate_gr_snow
97 TYPE(
sso_t),
INTENT(INOUT) :: USS
105 TYPE(
grid_t),
INTENT(INOUT) :: TG
107 type(
prep_ctl),
INTENT(INOUT) :: ydctl
109 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
110 CHARACTER(LEN=7),
INTENT(IN) :: HSURF
111 CHARACTER(LEN=28),
INTENT(IN) :: HATMFILE
112 CHARACTER(LEN=6),
INTENT(IN) :: HATMFILETYPE
113 CHARACTER(LEN=28),
INTENT(IN) :: HPGDFILE
114 CHARACTER(LEN=6),
INTENT(IN) :: HPGDFILETYPE
116 INTEGER,
INTENT(IN) :: KPATCH
120 CHARACTER(LEN=6) :: YFILETYPE
121 CHARACTER(LEN=28) :: YFILE
122 CHARACTER(LEN=6) :: YFILEPGDTYPE
123 CHARACTER(LEN=28) :: YFILEPGD
124 CHARACTER(LEN=6) :: YFILETYPE_SNOW
125 CHARACTER(LEN=28) :: YFILE_SNOW
126 CHARACTER(LEN=6) :: YFILEPGDTYPE_SNOW
127 CHARACTER(LEN=28) :: YFILEPGD_SNOW
128 REAL,
POINTER,
DIMENSION(:,:,:) :: ZFIELDIN=>null()
132 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZFIELDOUTP
133 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZFIELDOUTV
134 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZVEGTYPE_PATCH
135 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZW
136 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZSUM
137 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZF
138 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZDG
139 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZPATCH
140 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZSG1SNOW, ZSG2SNOW, ZHISTSNOW
145 LOGICAL :: GUNIF_SNOW
146 INTEGER :: JVEGTYPE, JPATCH
148 INTEGER :: JI, INP, INL, INI
151 REAL(KIND=JPRB) :: ZHOOK_HANDLE
157 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GARDEN_FIELD',0,zhook_handle)
160 CALL abor1_sfx(
'PREP_HOR_TEB_GARDEN_FIELD: TWO STEP PREP NOT IMPLEMENTED')
166 hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,iluout,gunif)
175 IF (hsurf==
'SN_VEG ')
THEN 177 yfiletype_snow,yfilepgd_snow,yfilepgdtype_snow,gunif_snow)
179 IF(.NOT.gunif_snow.AND.len_trim(yfile_snow)==0.AND.len_trim(yfiletype_snow)==0)
THEN 181 IF (yfiletype==
'GRIB')
THEN 183 yfiletype_snow = yfiletype
184 yfilepgd_snow = yfilepgd
185 yfilepgdtype_snow = yfilepgdtype
188 IF(all(xwsnow_gd==
xundef)) xwsnow_gd = 0.0
192 ALLOCATE(zsg1snow(
SIZE(xwsnow_gd)))
193 ALLOCATE(zsg2snow(
SIZE(xwsnow_gd)))
194 ALLOCATE(zhistsnow(
SIZE(xwsnow_gd)))
196 ALLOCATE(tnpsnow%AL(1))
197 tnpsnow%AL(1)%SCHEME = pek%TSNOW%SCHEME
198 tnpsnow%AL(1)%NLAYER = pek%TSNOW%NLAYER
202 yfilepgd, yfilepgdtype, &
203 iluout,gunif_snow,1, kpatch, &
204 ini, tnpsnow, top%TTIME, &
205 xwsnow_gd, xrsnow_gd, xtsnow_gd,&
206 xlwcsnow_gd, xasnow_gd, &
207 lsnow_ideal_gd, zsg1snow, &
208 zsg2snow, zhistsnow, xagesnow_gd, ydctl, &
209 pvegtype_patch=s%XVEGTYPE_PATCH, ppatch=s%XPATCH )
212 pek%TSNOW%WSNOW = tnpsnow%AL(1)%WSNOW
213 pek%TSNOW%RHO = tnpsnow%AL(1)%RHO
214 pek%TSNOW%ALB = tnpsnow%AL(1)%ALB
215 IF (pek%TSNOW%SCHEME/=
'D95') pek%TSNOW%HEAT = tnpsnow%AL(1)%HEAT
216 IF (pek%TSNOW%SCHEME==
'CRO'.OR.pek%TSNOW%SCHEME==
'3-L') &
217 pek%TSNOW%AGE = tnpsnow%AL(1)%AGE
218 IF (pek%TSNOW%SCHEME==
'CRO')
THEN 219 pek%TSNOW%GRAN1 = tnpsnow%AL(1)%GRAN1
220 pek%TSNOW%GRAN2 = tnpsnow%AL(1)%GRAN2
221 pek%TSNOW%HIST = tnpsnow%AL(1)%HIST
225 DEALLOCATE(tnpsnow%AL)
229 DEALLOCATE(zhistsnow)
230 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GARDEN_FIELD',1,zhook_handle)
240 ELSE IF (yfiletype==
'ASCLLV')
THEN 242 ELSE IF (yfiletype==
'GRIB ')
THEN 245 ELSE IF (yfiletype==
'MESONH' .OR. yfiletype==
'ASCII ' .OR. yfiletype==
'LFI '&
246 .OR.yfiletype==
'FA '.OR. yfiletype==
'AROME '.OR.yfiletype==
'NC ')
THEN 248 hprogram,hsurf,yfile,yfiletype,yfilepgd,yfilepgdtype,iluout,kpatch,zfieldin)
249 ELSE IF (yfiletype==
'BUFFER')
THEN 252 CALL abor1_sfx(
'PREP_HOR_TEB_GARDEN_FIELD: data file type not supported : '//yfiletype)
260 inl =
SIZE(zfieldin,2)
261 inp =
SIZE(zfieldin,3)
263 IF (.NOT.
ASSOCIATED(zfieldin))
ALLOCATE(zfieldin(0,0,0))
268 CALL mpi_bcast(inl,kind(inl)/4,mpi_integer,
npio,
ncomm,infompi)
269 CALL mpi_bcast(inp,kind(inp)/4,mpi_integer,
npio,
ncomm,infompi)
273 ALLOCATE(zfieldoutp(ini,inl,inp))
276 IF (inp==nvegtype)
linterp = (s%XVEGTYPE(:,jpatch) > 0.)
277 CALL hor_interpol(dtco, u, gcp, iluout,zfieldin(:,:,jpatch),zfieldoutp(:,:,jpatch))
281 DEALLOCATE(zfieldin )
283 ALLOCATE(zw(ini,inl))
288 ALLOCATE(zfieldoutv(ini,inl,nvegtype))
292 DO jlayer=1,
SIZE(zw,2)
293 zsum(:) =
sum(s%XVEGTYPE(:,:),2,zfieldoutv(:,jlayer,:)/=
xundef)
294 DO jvegtype=1,nvegtype
295 WHERE (zfieldoutv(:,jlayer,jvegtype)/=
xundef)
296 zw(:,jlayer) = zw(:,jlayer) + s%XVEGTYPE(:,jvegtype) * zfieldoutv(:,jlayer,jvegtype) / zsum(:)
300 IF (all(zfieldoutv(ji,jlayer,:)==
xundef)) zw(ji,jlayer) =
xundef 303 DEALLOCATE(zfieldoutv)
308 zw(:,:) = zfieldoutp(:,:,1)
312 DEALLOCATE(zfieldoutp)
324 ALLOCATE(zf(ini,io%NGROUND_LAYER))
330 ALLOCATE(pek%XWG(ini,io%NGROUND_LAYER))
331 pek%XWG(:,:) = k%XWWILT + zf(:,:) * (k%XWFC-k%XWWILT)
332 pek%XWG(:,:) = max(min(pek%XWG(:,:),k%XWSAT),xwgmin)
341 ALLOCATE(zf(ini,io%NGROUND_LAYER))
347 ALLOCATE(pek%XWGI(ini,io%NGROUND_LAYER))
348 pek%XWGI(:,:) = zf(:,:) * k%XWSAT
349 pek%XWGI(:,:) = max(min(pek%XWGI(:,:),k%XWSAT),0.)
358 iwork=io%NGROUND_LAYER
359 ALLOCATE(pek%XTG(ini,iwork))
360 ALLOCATE(zdg(
SIZE(p%XDG,1),iwork))
361 IF (io%CISBA==
'2-L'.OR.io%CISBA==
'3-L')
THEN 364 IF(io%CISBA==
'3-L') zdg(:,3) = 5.00
367 zdg(:,:) = p%XDG(:,:)
375 ALLOCATE(pek%XWR(ini))
383 WHERE (zw(:,1)/=
xundef) pek%XLAI(:) = zw(:,1)
393 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GARDEN_FIELD',1,zhook_handle)
407 REAL,
DIMENSION(:,:),
INTENT(IN) :: PT1
408 REAL,
DIMENSION(:),
INTENT(IN) :: PGRID1
409 REAL,
DIMENSION(:,:),
INTENT(IN) :: PD2
410 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PT2
413 REAL,
DIMENSION(SIZE(PT1),SIZE(PT1,2)) :: ZD1
415 INTEGER :: ILAYER1, ILAYER2
416 REAL(KIND=JPRB) :: ZHOOK_HANDLE
420 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',0,zhook_handle)
422 IF (
SIZE(pt1,2)==3)
THEN 427 IF (io%CISBA==
'2-L' .OR. io%CISBA==
'3-L')
THEN 429 IF(
SIZE(pt2,2)>3)
THEN 437 pt2(:,1:ilayer1) = pt1(:,1:ilayer1)
440 DO jl=ilayer1+1,ilayer2
441 pt2(:,jl) = pt2(:,ilayer1)
445 ELSEIF(io%CISBA==
'DIF')
THEN 449 DO jl=2,io%NGROUND_LAYER
454 DO jl=2,io%NGROUND_LAYER
455 IF(p%XROOTFRAC(ji,jl)<=1.0)
THEN 456 pt2(ji,jl) = pt1(ji,2)
471 zd1(:,jl) = pgrid1(jl)
480 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',1,zhook_handle)
subroutine prep_grib_grid(HGRIB, KLUOUT, HINMODEL, HGRIDTYPE, HINTERP_
character(len=10) cingrid_type
subroutine prep_hor_teb_garden_field(DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
subroutine prep_teb_garden_ascllv(DTCO, UG, U, USS, HPROGRAM, HSURF, KLUOUT, PFIELD)
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 init_from_ref_grid(PGRID1, PT1, PD2, PT2)
real, dimension(:), allocatable xzs_ls
subroutine prep_teb_garden_unif(KLUOUT, HSURF, PFIELD)
character(len=6) cinterp_type
subroutine read_prep_garden_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE,
subroutine put_on_all_vegtypes(KNI, KLAYER, KPATCH, KVEGTYPE, PFIELD_P
subroutine abor1_sfx(YTEXT)
character(len=6) cinmodel
subroutine prep_teb_garden_extern(DTCO, IO, U, GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)
logical, dimension(:), allocatable linterp
subroutine hor_interpol(DTCO, U, GCP, KLUOUT, PFIELDIN, PFIELDOUT)
logical function prep_ctl_can(YDCTL)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine read_prep_teb_garden_conf(HPROGRAM, HVAR, HFILE, HFILETYPE
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine prep_teb_garden_buffer(HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine prep_teb_garden_grib(HPROGRAM, HSURF, HFILE, KLUOUT, PFIELD)
subroutine type_snow_init(YSURF_SNOW)