7 HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KPATCH,YDCTL)
48 USE modd_prep_teb
, ONLY : xgrid_roof, xgrid_road, xgrid_wall, xgrid_floor, lsnow_ideal_teb, &
49 xwsnow_roof, xrsnow_roof, xtsnow_roof, xlwcsnow_roof, xasnow_roof, &
50 xwsnow_road, xrsnow_road, xtsnow_road, xlwcsnow_road, xasnow_road, &
51 xhui_bld, xhui_bld_def
60 USE modi_prep_grib_grid
61 USE modi_read_prep_teb_conf
62 USE modi_read_prep_teb_snow
63 USE modi_prep_teb_grib
64 USE modi_prep_teb_unif
65 USE modi_prep_teb_buffer
67 USE modi_prep_hor_snow_fields
69 USE modi_prep_teb_extern
70 USE modi_allocate_gr_snow
85 TYPE(
bem_t),
INTENT(INOUT) :: B
90 TYPE(
grid_t),
INTENT(INOUT) :: G
91 TYPE(
teb_t),
INTENT(INOUT) :: T
93 type(
prep_ctl),
INTENT(INOUT) :: ydctl
95 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
96 CHARACTER(LEN=7),
INTENT(IN) :: HSURF
97 CHARACTER(LEN=28),
INTENT(IN) :: HATMFILE
98 CHARACTER(LEN=6),
INTENT(IN) :: HATMFILETYPE
99 CHARACTER(LEN=28),
INTENT(IN) :: HPGDFILE
100 CHARACTER(LEN=6),
INTENT(IN) :: HPGDFILETYPE
102 INTEGER,
INTENT(IN) :: KPATCH
108 CHARACTER(LEN=6) :: YFILETYPE
109 CHARACTER(LEN=28) :: YFILE
110 CHARACTER(LEN=6) :: YFILEPGDTYPE
111 CHARACTER(LEN=28) :: YFILEPGD
112 REAL,
DIMENSION(:),
ALLOCATABLE :: ZSG1SNOW, ZSG2SNOW, ZHISTSNOW, ZAGESNOW
113 REAL,
POINTER,
DIMENSION(:,:) :: ZFIELDIN
114 REAL,
POINTER,
DIMENSION(:,:) :: ZFIELDOUT
115 REAL,
ALLOCATABLE,
DIMENSION(:) :: ZPS
116 REAL,
PARAMETER :: ZRHOA=1.19
118 INTEGER :: INFOMPI, INL
122 REAL(KIND=JPRB) :: ZHOOK_HANDLE
128 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_FIELD',0,zhook_handle)
132 hatmfile,hatmfiletype,hpgdfile,hpgdfiletype,iluout,gunif)
140 IF (hsurf==
'SN_ROOF')
THEN 142 t%TSNOW_ROAD%SCHEME,t%TSNOW_ROAD%NLAYER,&
143 yfile,yfiletype,yfilepgd,yfilepgdtype)
144 IF (len_trim(yfile)>0 .AND. len_trim(yfiletype)>0) gunif = .false.
145 ALLOCATE(zsg1snow(
SIZE(xwsnow_roof)))
146 ALLOCATE(zsg2snow(
SIZE(xwsnow_roof)))
147 ALLOCATE(zhistsnow(
SIZE(xwsnow_roof)))
148 ALLOCATE(zagesnow(
SIZE(xwsnow_roof)))
149 ALLOCATE(tnpsnow%AL(1))
150 tnpsnow%AL(1)%SCHEME = t%TSNOW_ROOF%SCHEME
151 tnpsnow%AL(1)%NLAYER = t%TSNOW_ROOF%NLAYER
155 yfilepgd, yfilepgdtype, &
156 iluout,gunif,1,kpatch, &
157 SIZE(g%XLAT),tnpsnow, top%TTIME,&
158 xwsnow_roof, xrsnow_roof, &
159 xtsnow_roof, xlwcsnow_roof, &
161 lsnow_ideal_teb, zsg1snow, &
162 zsg2snow, zhistsnow, zagesnow, ydctl)
165 t%TSNOW_ROOF%WSNOW = tnpsnow%AL(1)%WSNOW
166 t%TSNOW_ROOF%RHO = tnpsnow%AL(1)%RHO
167 t%TSNOW_ROOF%ALB = tnpsnow%AL(1)%ALB
168 t%TSNOW_ROOF%T = tnpsnow%AL(1)%T
169 t%TSNOW_ROOF%HEAT = tnpsnow%AL(1)%HEAT
172 DEALLOCATE(tnpsnow%AL)
176 DEALLOCATE(zhistsnow)
178 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_FIELD',1,zhook_handle)
180 ELSE IF (hsurf==
'SN_ROAD')
THEN 182 t%TSNOW_ROAD%SCHEME,t%TSNOW_ROAD%NLAYER,&
183 yfile,yfiletype,yfilepgd,yfilepgdtype)
184 IF (len_trim(yfile)>0 .AND. len_trim(yfiletype)>0) gunif = .false.
185 ALLOCATE(zsg1snow(
SIZE(xwsnow_road)))
186 ALLOCATE(zsg2snow(
SIZE(xwsnow_road)))
187 ALLOCATE(zhistsnow(
SIZE(xwsnow_road)))
188 ALLOCATE(zagesnow(
SIZE(xwsnow_road)))
189 ALLOCATE(tnpsnow%AL(1))
190 tnpsnow%AL(1)%SCHEME = t%TSNOW_ROAD%SCHEME
191 tnpsnow%AL(1)%NLAYER = t%TSNOW_ROAD%NLAYER
195 yfilepgd, yfilepgdtype, &
196 iluout,gunif,1,kpatch, &
197 SIZE(g%XLAT),tnpsnow, top%TTIME,&
198 xwsnow_road, xrsnow_road, &
199 xtsnow_road, xlwcsnow_road, &
201 lsnow_ideal_teb, zsg1snow, &
202 zsg2snow, zhistsnow, zagesnow, ydctl)
205 t%TSNOW_ROAD%WSNOW = tnpsnow%AL(1)%WSNOW
206 t%TSNOW_ROAD%RHO = tnpsnow%AL(1)%RHO
207 t%TSNOW_ROAD%ALB = tnpsnow%AL(1)%ALB
208 t%TSNOW_ROAD%T = tnpsnow%AL(1)%T
209 t%TSNOW_ROAD%HEAT = tnpsnow%AL(1)%HEAT
212 DEALLOCATE(tnpsnow%AL)
216 DEALLOCATE(zhistsnow)
218 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_FIELD',1,zhook_handle)
225 NULLIFY (zfieldin, zfieldout)
227 IF (ydctl%LPART1)
THEN 231 ELSE IF (yfiletype==
'GRIB ')
THEN 234 ELSE IF (yfiletype==
'MESONH' .OR.yfiletype==
'ASCII ' .OR.yfiletype==
'LFI '&
235 .OR.yfiletype==
'FA '.OR.yfiletype==
'AROME '.OR.yfiletype==
'NC ')
THEN 236 CALL prep_teb_extern(dtco,gcp,top,bop,hprogram,hsurf,yfile,yfiletype,yfilepgd,yfilepgdtype,iluout,kpatch,zfieldin)
237 ELSE IF (yfiletype==
'BUFFER')
THEN 240 CALL abor1_sfx(
'PREP_HOR_TEB_FIELD: data file type not supported : '//yfiletype)
249 IF (ydctl%LPART3)
THEN 252 inl =
SIZE(zfieldin,2)
253 ELSEIF (.NOT.
ASSOCIATED(zfieldin))
THEN 254 ALLOCATE(zfieldin(0,0))
259 CALL mpi_bcast(inl,kind(inl)/4,mpi_integer,
npio,
ncomm,infompi)
262 ALLOCATE(zfieldout(
SIZE(g%XLAT),inl))
264 IF (top%CWALL_OPT/=
'UNIF'.OR.
trim(hsurf)/=
'T_WALLB')
THEN 265 CALL hor_interpol(dtco, u, gcp, iluout,zfieldin,zfieldout)
268 DEALLOCATE(zfieldin )
274 IF (ydctl%LPART5)
THEN 280 ALLOCATE(
xzs_ls(
SIZE(zfieldout,1)))
281 xzs_ls(:) = zfieldout(:,1)
283 ALLOCATE(t%XWS_ROOF(
SIZE(zfieldout,1)))
284 t%XWS_ROOF(:) = zfieldout(:,1)
286 ALLOCATE(t%XWS_ROAD(
SIZE(zfieldout,1)))
287 t%XWS_ROAD(:) = zfieldout(:,1)
289 ALLOCATE(t%XTI_ROAD(
SIZE(zfieldout,1)))
290 t%XTI_ROAD(:) = zfieldout(:,1)
292 ALLOCATE(b%XTI_BLD (
SIZE(zfieldout,1)))
293 b%XTI_BLD (:) = zfieldout(:,1)
295 ALLOCATE(b%XQI_BLD (
SIZE(zfieldout,1)))
296 IF (all(zfieldout .GE.
xundef-1.e+5 .AND. zfieldout .LE.
xundef+1.e+5))
THEN 297 ALLOCATE(zps(
SIZE(zfieldout,1)))
299 IF (xhui_bld==
xundef)
THEN 300 zfieldout(:,1) = xhui_bld_def *
qsat(b%XTI_BLD, zps)
302 zfieldout(:,1) = xhui_bld *
qsat(b%XTI_BLD, zps)
306 b%XQI_BLD (:) = zfieldout(:,1)
308 ALLOCATE(b%XT_WIN1 (
SIZE(zfieldout,1)))
309 b%XT_WIN1 (:) = zfieldout(:,1)
311 ALLOCATE(b%XT_WIN2 (
SIZE(zfieldout,1)))
312 b%XT_WIN2 (:) = zfieldout(:,1)
314 ALLOCATE(b%XT_FLOOR(
SIZE(zfieldout,1),bop%NFLOOR_LAYER))
317 ALLOCATE(b%XT_MASS(
SIZE(zfieldout,1),bop%NFLOOR_LAYER))
320 ALLOCATE(t%XT_ROAD(
SIZE(zfieldout,1),top%NROAD_LAYER))
323 ALLOCATE(t%XT_WALL_A(
SIZE(zfieldout,1),top%NWALL_LAYER))
326 ALLOCATE(t%XT_WALL_B(
SIZE(zfieldout,1),top%NWALL_LAYER))
327 IF (top%CWALL_OPT==
'UNIF')
THEN 328 t%XT_WALL_B = t%XT_WALL_A
333 ALLOCATE(t%XT_ROOF(
SIZE(zfieldout,1),top%NROOF_LAYER))
336 ALLOCATE(t%XT_CANYON(
SIZE(zfieldout,1)))
337 t%XT_CANYON (:) = zfieldout(:,1)
339 ALLOCATE(t%XQ_CANYON(
SIZE(zfieldout,1)))
340 t%XQ_CANYON (:) = zfieldout(:,1)
348 IF (
ASSOCIATED (zfieldout))
DEALLOCATE(zfieldout)
349 IF (
lhook)
CALL dr_hook(
'PREP_HOR_TEB_FIELD',1,zhook_handle)
362 REAL,
DIMENSION(:,:),
INTENT(IN) :: PT1
363 REAL,
DIMENSION(:),
INTENT(IN) :: PGRID1
364 REAL,
DIMENSION(:,:),
INTENT(IN) :: PD2
365 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PT2
368 REAL,
DIMENSION(SIZE(PT1,1),SIZE(PT1,2)) :: ZD1
369 REAL,
DIMENSION(SIZE(PD2,1),SIZE(PD2,2)) :: ZD2
370 REAL,
DIMENSION(SIZE(PD2,1)) :: ZD
371 REAL(KIND=JPRB) :: ZHOOK_HANDLE
373 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',0,zhook_handle)
378 zd2(:,jl) = zd(:) + pd2(:,jl)/2.
379 zd(:) = zd(:) + pd2(:,jl)
383 zd1(:,jl) = pgrid1(jl) * zd(:)
387 IF (
lhook)
CALL dr_hook(
'INIT_FROM_REF_GRID',1,zhook_handle)
static const char * trim(const char *name, int *n)
subroutine prep_grib_grid(HGRIB, KLUOUT, HINMODEL, HGRIDTYPE, HINTERP_
character(len=10) cingrid_type
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 read_prep_teb_conf(HPROGRAM, HVAR, HFILE, HFILETYPE, HFILEP
subroutine init_from_ref_grid(PGRID1, PT1, PD2, PT2)
real, dimension(:), allocatable xzs_ls
character(len=6) cinterp_type
subroutine abor1_sfx(YTEXT)
character(len=6) cinmodel
subroutine prep_hor_teb_field(B, BOP, DTCO, U, GCP, G, T, TOP, HPROGRAM, HSURF, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KPATCH, YDCTL)
subroutine hor_interpol(DTCO, U, GCP, KLUOUT, PFIELDIN, PFIELDOUT)
subroutine prep_teb_grib(HPROGRAM, HSURF, HFILE, KLUOUT, PFIELD)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine allocate_gr_snow(TPSNOW, KLU)
subroutine prep_teb_extern(DTCO, GCP, TOP, BOP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)
subroutine prep_teb_buffer(HPROGRAM, HSURF, KLUOUT, PFIELD)
subroutine prep_teb_unif(KLUOUT, HSURF, PFIELD)
subroutine read_prep_teb_snow(HPROGRAM, HSNOW_ROOF, KSNOW_ROOF, HSNOW
subroutine type_snow_init(YSURF_SNOW)