6 SUBROUTINE prep_hor_teb_greenroof_field (DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, &
7 HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KPATCH,YDCTL)
52 USE modd_prep_teb_greenroof
, ONLY : xgrid_soil, ngrid_level, &
53 xwsnow_gr, xrsnow_gr, xtsnow_gr,xlwcsnow_gr, &
54 xagesnow_gr, xasnow_gr, lsnow_ideal_gr
55 USE modd_isba_par
, ONLY : xwgmin
56 USE modd_data_cover_par
, ONLY : nvegtype
61 USE modi_prep_grib_grid
62 USE modi_read_prep_teb_greenroof_conf
63 USE modi_read_prep_greenroof_snow
64 USE modi_prep_teb_greenroof_ascllv
65 USE modi_prep_teb_greenroof_grib
66 USE modi_prep_teb_greenroof_unif
67 USE modi_prep_teb_greenroof_buffer
69 USE modi_vegtype_grid_to_patch_grid
70 USE modi_prep_hor_snow_fields
72 USE modi_prep_teb_greenroof_extern
73 USE modi_put_on_all_vegtypes
74 USE modi_allocate_gr_snow
93 TYPE(
sso_t),
INTENT(INOUT) :: USS
102 TYPE(
grid_t),
INTENT(INOUT) :: TG
104 type(
prep_ctl),
INTENT(INOUT) :: ydctl
106 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
107 CHARACTER(LEN=7),
INTENT(IN) :: HSURF
108 CHARACTER(LEN=28),
INTENT(IN) :: HATMFILE
109 CHARACTER(LEN=6),
INTENT(IN) :: HATMFILETYPE
110 CHARACTER(LEN=28),
INTENT(IN) :: HPGDFILE
111 CHARACTER(LEN=6),
INTENT(IN) :: HPGDFILETYPE
113 INTEGER,
INTENT(IN) :: KPATCH
117 CHARACTER(LEN=6) :: YFILETYPE
118 CHARACTER(LEN=28) :: YFILE
119 CHARACTER(LEN=6) :: YFILEPGDTYPE
120 CHARACTER(LEN=28) :: YFILEPGD
121 CHARACTER(LEN=6) :: YFILETYPE_SNOW
122 CHARACTER(LEN=28) :: YFILE_SNOW
123 CHARACTER(LEN=6) :: YFILEPGDTYPE_SNOW
124 CHARACTER(LEN=28) :: YFILEPGD_SNOW
125 REAL,
POINTER,
DIMENSION(:,:,:) :: ZFIELDIN=>null()
129 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZFIELDOUTP
130 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZFIELDOUTV
131 REAL,
ALLOCATABLE,
DIMENSION(:,:,:) :: ZVEGTYPE_PATCH
132 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZW
133 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZF
134 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZDG
135 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: ZPATCH
136 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZSG1SNOW, ZSG2SNOW, ZHISTSNOW
141 LOGICAL :: GUNIF_SNOW
142 INTEGER :: JVEGTYPE, JPATCH
144 INTEGER :: INI, INL, INP
147 REAL(KIND=JPRB) :: ZHOOK_HANDLE
153 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GREENROOF_FIELD',0,zhook_handle)
156 CALL abor1_sfx(
'PREP_HOR_TEB_GREENROOF_FIELD: TWO STEP PREP NOT IMPLEMENTED')
162 hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,iluout,gunif)
171 IF (hsurf==
'SN_VEG ')
THEN 173 yfiletype_snow,yfilepgd_snow,yfilepgdtype_snow,gunif_snow)
175 IF(.NOT.gunif_snow.AND.len_trim(yfile_snow)==0.AND.len_trim(yfiletype_snow)==0)
THEN 177 IF (yfiletype==
'GRIB')
THEN 179 yfiletype_snow = yfiletype
180 yfilepgd_snow = yfilepgd
181 yfilepgdtype_snow = yfilepgdtype
184 IF(all(xwsnow_gr==
xundef))xwsnow_gr=0.0
188 ALLOCATE(zsg1snow(
SIZE(xwsnow_gr)))
189 ALLOCATE(zsg2snow(
SIZE(xwsnow_gr)))
190 ALLOCATE(zhistsnow(
SIZE(xwsnow_gr)))
192 ALLOCATE(tnpsnow%AL(1))
193 tnpsnow%AL(1)%SCHEME = pek%TSNOW%SCHEME
194 tnpsnow%AL(1)%NLAYER = pek%TSNOW%NLAYER
198 yfilepgd, yfilepgdtype, &
199 iluout,gunif_snow, 1, kpatch, &
200 ini, tnpsnow, top%TTIME, &
201 xwsnow_gr, xrsnow_gr, xtsnow_gr,&
202 xlwcsnow_gr, xasnow_gr, &
203 lsnow_ideal_gr, zsg1snow, &
204 zsg2snow, zhistsnow, xagesnow_gr, ydctl, &
205 pvegtype_patch=s%XVEGTYPE_PATCH, ppatch=s%XPATCH )
208 pek%TSNOW%WSNOW = tnpsnow%AL(1)%WSNOW
209 pek%TSNOW%RHO = tnpsnow%AL(1)%RHO
210 pek%TSNOW%ALB = tnpsnow%AL(1)%ALB
211 IF (pek%TSNOW%SCHEME/=
'D95') pek%TSNOW%HEAT = tnpsnow%AL(1)%HEAT
212 IF (pek%TSNOW%SCHEME==
'CRO'.OR.pek%TSNOW%SCHEME==
'3-L') &
213 pek%TSNOW%AGE = tnpsnow%AL(1)%AGE
214 IF (pek%TSNOW%SCHEME==
'CRO')
THEN 215 pek%TSNOW%GRAN1 = tnpsnow%AL(1)%GRAN1
216 pek%TSNOW%GRAN2 = tnpsnow%AL(1)%GRAN2
217 pek%TSNOW%HIST = tnpsnow%AL(1)%HIST
222 DEALLOCATE(zhistsnow)
223 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GREENROOF_FIELD',1,zhook_handle)
233 ELSE IF (yfiletype==
'ASCLLV')
THEN 235 ELSE IF (yfiletype==
'GRIB ')
THEN 238 ELSE IF (yfiletype==
'MESONH' .OR. yfiletype==
'ASCII ' .OR. yfiletype==
'LFI '&
239 .OR. yfiletype==
'FA '.OR. yfiletype==
'AROME '.OR.yfiletype==
'NC ')
THEN 241 hprogram,hsurf,yfile,yfiletype,yfilepgd,yfilepgdtype,iluout,kpatch,zfieldin)
242 ELSE IF (yfiletype==
'BUFFER')
THEN 245 CALL abor1_sfx(
'PREP_HOR_TEB_GREENROOF_FIELD: data file type not supported : '//yfiletype)
253 inl =
SIZE(zfieldin,2)
254 inp =
SIZE(zfieldin,3)
256 IF (.NOT.
ASSOCIATED(zfieldin))
ALLOCATE(zfieldin(0,0,0))
261 CALL mpi_bcast(inl,kind(inl)/4,mpi_integer,
npio,
ncomm,infompi)
262 CALL mpi_bcast(inp,kind(inp)/4,mpi_integer,
npio,
ncomm,infompi)
266 ALLOCATE(zfieldoutp(ini,inl,inp))
269 IF (inp==nvegtype)
linterp = (s%XVEGTYPE(:,jpatch) > 0.)
270 CALL hor_interpol(dtco, u, gcp, iluout,zfieldin(:,:,jpatch),zfieldoutp(:,:,jpatch))
274 DEALLOCATE(zfieldin )
276 ALLOCATE(zw(ini,inl))
281 ALLOCATE(zfieldoutv(ini,inl,nvegtype))
284 DO jvegtype=1,nvegtype
285 DO jlayer=1,
SIZE(zw,2)
286 zw(:,jlayer) = zw(:,jlayer) + s%XVEGTYPE(:,jvegtype) * zfieldoutv(:,jlayer,jvegtype)
289 DEALLOCATE(zfieldoutv)
293 zw(:,:) = zfieldoutp(:,:,1)
297 DEALLOCATE(zfieldoutp)
316 ALLOCATE(zf(ini,io%NGROUND_LAYER))
323 ALLOCATE(pek%XWG(ini,io%NGROUND_LAYER))
324 pek%XWG(:,:) = k%XWWILT + zf(:,:) * (k%XWFC-k%XWWILT)
325 pek%XWG(:,:) = max(min(pek%XWG(:,:),k%XWSAT),xwgmin)
334 ALLOCATE(zf(ini,io%NGROUND_LAYER))
340 ALLOCATE(pek%XWGI(ini,io%NGROUND_LAYER))
341 pek%XWGI(:,:) = zf(:,:) * k%XWSAT
342 pek%XWGI(:,:) = max(min(pek%XWGI(:,:),k%XWSAT),0.)
351 iwork=io%NGROUND_LAYER
352 ALLOCATE(pek%XTG(ini,iwork))
353 ALLOCATE(zdg(
SIZE(p%XDG,1),iwork))
355 zdg(:,:) = p%XDG(:,:)
362 ALLOCATE(pek%XWR(ini))
369 WHERE (zw(:,1)/=
xundef) pek%XLAI(:) = zw(:,1)
376 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_GREENROOF_FIELD',1,zhook_handle)
390 REAL,
DIMENSION(:,:),
INTENT(IN) :: PT1
391 REAL,
DIMENSION(:),
INTENT(IN) :: PGRID1
392 REAL,
DIMENSION(:,:),
INTENT(IN) :: PD2
393 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PT2
396 REAL,
DIMENSION(SIZE(PT1,1),SIZE(PT1,2)) :: ZD1
398 INTEGER :: ILAYER1, ILAYER2
399 REAL(KIND=JPRB) :: ZHOOK_HANDLE
403 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',0,zhook_handle)
405 IF (
SIZE(pt1,2)==3)
THEN 413 DO jl=2,io%NGROUND_LAYER
418 DO jl=2,io%NGROUND_LAYER
419 IF(p%XROOTFRAC(ji,jl)<=1.0)
THEN 420 pt2(ji,jl) = pt1(ji,2)
434 zd1(:,jl) = pgrid1(jl)
443 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',1,zhook_handle)
subroutine prep_teb_greenroof_buffer(HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine prep_grib_grid(HGRIB, KLUOUT, HINMODEL, HGRIDTYPE, HINTERP_
character(len=10) cingrid_type
subroutine read_prep_teb_greenroof_conf(HPROGRAM, HVAR, HFILE, HFILET
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
character(len=6) cinterp_type
subroutine prep_teb_greenroof_ascllv(DTCO, UG, U, USS, HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine put_on_all_vegtypes(KNI, KLAYER, KPATCH, KVEGTYPE, PFIELD_P
subroutine abor1_sfx(YTEXT)
character(len=6) cinmodel
logical, dimension(:), allocatable linterp
subroutine hor_interpol(DTCO, U, GCP, KLUOUT, PFIELDIN, PFIELDOUT)
subroutine prep_teb_greenroof_unif(KLUOUT, HSURF, PFIELD)
subroutine prep_teb_greenroof_grib(HPROGRAM, HSURF, HFILE, KLUOUT, PFIELD)
subroutine prep_hor_teb_greenroof_field(DTCO, UG, U, USS, GCP, IO, S, K, P, PEK, TG, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
logical function prep_ctl_can(YDCTL)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine read_prep_greenroof_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFI
subroutine prep_teb_greenroof_extern(DTCO, IO, U, GCP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)