7 hprogram,hsurf,kluout,klayer,pfield)
41 USE modi_prep_buffer_grid
44 USE modi_oi_hor_extrapol_surf
60 USE yomhook
,ONLY : lhook, dr_hook
61 USE parkind1
,ONLY : jprb
68 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
71 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
72 CHARACTER(LEN=10),
INTENT(IN) :: hsurf
73 INTEGER,
INTENT(IN) :: kluout
74 INTEGER,
INTENT(IN) :: klayer
75 REAL,
DIMENSION(:,:,:),
POINTER :: pfield
80 CHARACTER(LEN=6) :: yinmodel
81 REAL,
DIMENSION(:),
POINTER :: zfield1d
82 REAL,
DIMENSION(:),
POINTER :: zheat
83 REAL,
DIMENSION(:),
POINTER :: zrho
84 REAL,
DIMENSION(:),
POINTER :: zlsm
87 REAL,
ALLOCATABLE,
DIMENSION(:) :: zfield_ep
88 REAL,
ALLOCATABLE,
DIMENSION(:) :: zfield_ep_in
89 REAL,
ALLOCATABLE,
DIMENSION(:) :: zlsm_nature
90 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: ointerp
92 INTEGER,
PARAMETER :: idim2=10
93 REAL(KIND=JPRB) :: zhook_handle
100 IF (lhook) CALL dr_hook(
'PREP_SNOW_BUFFER',0,zhook_handle)
108 IF (hsurf(7:8)==
'RO')
THEN
110 SELECT CASE(hsurf(1:3))
112 ALLOCATE(pfield(nni,klayer,1))
114 ALLOCATE(pfield(nni,1,1))
116 ALLOCATE(pfield(nni,
SIZE(xgrid_snow),1))
128 SELECT CASE(hsurf(1:3))
134 IF ( lextrap_sn )
THEN
135 IF (
SIZE(u%NR_NATURE) /= u%NSIZE_NATURE )
THEN
136 CALL
abor1_sfx(
'ABORT: PREP_ISBA_BUFFER - DIFFERENT SIZES')
139 ALLOCATE(zfield_ep(u%NSIZE_NATURE))
140 ALLOCATE(zfield_ep_in(u%NSIZE_NATURE))
141 ALLOCATE(ointerp(u%NSIZE_NATURE))
142 ALLOCATE(zlsm_nature(u%NSIZE_NATURE))
151 WRITE(kluout,*)
'Extrapolating WWW from nearest land point in points where LSM < 0.5.'
158 DO ii=1,u%NSIZE_NATURE
159 IF ( zlsm_nature(ii) < 0.5 )
THEN
161 zfield_ep(ii) = xundef
165 zfield_ep_in(:) = zfield_ep
167 CALL
oi_hor_extrapol_surf(u%NSIZE_NATURE,ig%XLAT,ig%XLON,zfield_ep_in(:),ig%XLAT,ig%XLON,zfield_ep(:),ointerp,ndim2=idim2)
172 DEALLOCATE(zfield_ep)
173 DEALLOCATE(zfield_ep_in)
174 DEALLOCATE(zlsm_nature)
180 ALLOCATE(pfield(nni,1,nvegtype))
181 DO jvegtype=1,nvegtype
182 pfield(:,1,jvegtype)=zfield1d(:)
191 IF ( lextrap_sn )
THEN
192 IF (
SIZE(u%NR_NATURE) /= u%NSIZE_NATURE )
THEN
193 CALL
abor1_sfx(
'ABORT: PREP_ISBA_BUFFER - DIFFERENT SIZES')
196 ALLOCATE(zfield_ep(u%NSIZE_NATURE))
197 ALLOCATE(zfield_ep_in(u%NSIZE_NATURE))
198 ALLOCATE(ointerp(u%NSIZE_NATURE))
199 ALLOCATE(zlsm_nature(u%NSIZE_NATURE))
208 WRITE(kluout,*)
'Extrapolating DEP from nearest land point in points where LSM < 0.5.'
214 DO ii=1,u%NSIZE_NATURE
215 IF ( zlsm_nature(ii) < 0.5 )
THEN
217 zfield_ep(ii) = xundef
221 zfield_ep_in(:) = zfield_ep
223 CALL
oi_hor_extrapol_surf(u%NSIZE_NATURE,ig%XLAT,ig%XLON,zfield_ep_in(:),ig%XLAT,ig%XLON,zfield_ep(:),ointerp,ndim2=idim2)
228 DEALLOCATE(zfield_ep)
229 DEALLOCATE(zfield_ep_in)
230 DEALLOCATE(zlsm_nature)
236 ALLOCATE(pfield(nni,klayer,nvegtype))
237 DO jvegtype=1,nvegtype
238 CALL
snow3lgrid(pfield(:,:,jvegtype),zfield1d(:))
248 WHERE (zfield1d/=xundef) zfield1d(:) = min(zfield1d,xtt)
250 ALLOCATE(zheat(
SIZE(zfield1d)))
251 ALLOCATE(zrho(
SIZE(zfield1d)))
256 ALLOCATE(pfield(nni,
SIZE(xgrid_snow),nvegtype))
257 DO jvegtype=1,nvegtype
258 DO jlayer=1,
SIZE(xgrid_snow)
259 pfield(:,jlayer,jvegtype)=zheat(:)
269 ALLOCATE(pfield(nni,1,nvegtype))
270 pfield = 0.5 * ( xansmin + xansmax )
275 ALLOCATE(pfield(nni,
SIZE(xgrid_snow),nvegtype))
287 cinterp_type=
'BUFFER'
288 IF (lhook) CALL dr_hook(
'PREP_SNOW_BUFFER',1,zhook_handle)
subroutine prep_snow_buffer(IG, U, HPROGRAM, HSURF, KLUOUT, KLAYER, PFIELD)
subroutine read_buffer_snow_veg_depth(KLUOUT, HINMODEL, PFIELD)
subroutine read_buffer_land_mask(KLUOUT, HINMODEL, PMASK)
subroutine read_buffer_ts(KLUOUT, HINMODEL, PFIELD)
subroutine prep_buffer_grid(KLUOUT, HINMODEL, TPTIME_BUF)
subroutine abor1_sfx(YTEXT)
subroutine read_buffer_snow_veg(KLUOUT, HINMODEL, PFIELD)