6 SUBROUTINE soilgrid(PSOILGRID, PSOILDEPTH, PDG, KWG_LAYER )
64 USE yomhook
,ONLY : lhook, dr_hook
65 USE parkind1
,ONLY : jprb
71 REAL,
DIMENSION(:),
INTENT(IN) :: psoilgrid
72 REAL,
DIMENSION(:,:),
INTENT(IN) :: psoildepth
73 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pdg
74 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kwg_layer
78 REAL,
DIMENSION(SIZE(PDG,1),SIZE(PDG,3)) :: zref
82 INTEGER :: ini,inl,ipatch
83 INTEGER :: jj,jl,jpatch
87 REAL(KIND=JPRB) :: zhook_handle
92 IF (lhook) CALL dr_hook(
'SOILGRID',0,zhook_handle)
110 IF(inl==noptimlayer)
THEN
111 IF( all(psoilgrid(1:inl)==xoptimgrid(1:noptimlayer)) ) loptimgrid=.true.
124 WHERE(psoildepth(:,:)/=xundef)
125 pdg(:,1,:)=min(0.01,psoilgrid(1))
133 IF( psoildepth(jj,jpatch)==xundef )
THEN
135 pdg(jj,:,jpatch) = xundef
136 kwg_layer(jj, jpatch) = nundef
142 pdg(jj,jl,jpatch) = psoilgrid(jl)
144 IF ( psoilgrid(jl)-psoilgrid(jl-1)<=0.3 )
THEN
145 zwork = abs(psoilgrid(jl)-psoildepth(jj,jpatch))
146 IF(zwork<=zref(jj,jpatch))
THEN
147 kwg_layer(jj,jpatch) = jl
148 zref(jj,jpatch) = zwork
150 ELSEIF(psoildepth(jj,jpatch)>=(psoilgrid(jl)*0.3+psoilgrid(jl-1)*0.7))
THEN
151 kwg_layer(jj,jpatch) = jl
161 IF(any(kwg_layer(:,:)==0))
THEN
162 CALL
abor1_sfx(
'SOILGRID: WITH CISBA=DIF NWG_LAYER MUST BE DEFINED FOR EACH POINT')
165 IF (lhook) CALL dr_hook(
'SOILGRID',1,zhook_handle)
179 INTEGER,
PARAMETER :: ndlim = 13
181 REAL,
DIMENSION(NDLIM),
PARAMETER :: zdlim = &
182 (/1.25,1.50,1.75,2.00,2.25,2.50,2.75,3.00,3.50,4.00,4.50,5.00,5.50/)
184 REAL,
DIMENSION(SIZE(PDG,1),SIZE(PDG,3)) :: zdg_water
187 REAL(KIND=JPRB) :: zhook_handle
192 IF (lhook) CALL dr_hook(
'SOILGRID:OPTIMSOILGRID',0,zhook_handle)
194 zdg_water(:,:) = xundef
199 IF(cdgdif==
'ROOT')
THEN
203 IF(psoildepth(jj,jpatch)<=1.1)
THEN
204 zdg_water(jj,jpatch)=min(1.0,psoildepth(jj,jpatch))
205 ELSEIF(psoildepth(jj,jpatch)>1.1.AND.psoildepth(jj,jpatch)<=1.25)
THEN
206 zdg_water(jj,jpatch)=1.25
207 ELSEIF(psoildepth(jj,jpatch)>5.50.AND.psoildepth(jj,jpatch)<=8.00)
THEN
208 zdg_water(jj,jpatch)=8.00
209 ELSEIF(psoildepth(jj,jpatch)>8.00.AND.psoildepth(jj,jpatch)<xundef)
THEN
210 zdg_water(jj,jpatch)=12.00
213 IF(psoildepth(jj,jpatch)>zdlim(jl).AND.psoildepth(jj,jpatch)<=zdlim(jl+1))
THEN
214 zdg_water(jj,jpatch)=merge(zdlim(jl),zdlim(jl+1),psoildepth(jj,jpatch)<(0.8*zdlim(jl)+0.2*zdlim(jl+1)))
225 IF(psoildepth(jj,jpatch)<1.25)
THEN
226 zdg_water(jj,jpatch)=min(1.0,psoildepth(jj,jpatch))
227 ELSEIF(psoildepth(jj,jpatch)>=5.50.AND.psoildepth(jj,jpatch)<6.50)
THEN
228 zdg_water(jj,jpatch)=5.50
229 ELSEIF(psoildepth(jj,jpatch)>=6.50.AND.psoildepth(jj,jpatch)<10.50)
THEN
230 zdg_water(jj,jpatch)=8.00
231 ELSEIF(psoildepth(jj,jpatch)>=10.50.AND.psoildepth(jj,jpatch)<xundef)
THEN
232 zdg_water(jj,jpatch)=12.00
235 IF(psoildepth(jj,jpatch)>=zdlim(jl).AND.psoildepth(jj,jpatch)<zdlim(jl+1))
THEN
236 zdg_water(jj,jpatch)=merge(zdlim(jl),zdlim(jl+1),psoildepth(jj,jpatch)<(0.4*zdlim(jl)+0.6*zdlim(jl+1)))
251 IF(psoildepth(jj,jpatch)==xundef)
THEN
253 pdg(jj,:,jpatch) = xundef
254 kwg_layer(jj, jpatch) = nundef
258 pdg(jj,:,jpatch) = psoilgrid(:)
260 lwork=(zdg_water(jj,jpatch)<=1.0.OR.&
261 zdg_water(jj,jpatch)==1.5.OR.&
262 zdg_water(jj,jpatch)==2.0.OR.&
263 zdg_water(jj,jpatch)==3.0.OR.&
264 zdg_water(jj,jpatch)==5.0.OR.&
265 zdg_water(jj,jpatch)==8.0.OR.&
266 zdg_water(jj,jpatch)==12.0 )
270 zwork = abs(psoilgrid(jl)-zdg_water(jj,jpatch))
271 IF(zwork<=zref(jj,jpatch))
THEN
272 kwg_layer(jj,jpatch)=jl
273 zref(jj,jpatch)=zwork
286 WHERE (zdg_water(:,:)==1.25)
288 pdg(:,9,:) = zdg_water(:,:)
289 ELSEWHERE (zdg_water(:,:)==1.75 .OR. zdg_water(:,:)==2.25)
291 pdg(:,10,:) = zdg_water(:,:)
292 WHERE (zdg_water(:,:)==1.75) pdg(:,9,:) = 1.25
293 ELSEWHERE (zdg_water(:,:)==2.50 .OR. zdg_water(:,:)==2.75 .OR. zdg_water(:,:)==3.50)
295 pdg(:,11,:) = zdg_water(:,:)
296 ELSEWHERE (zdg_water(:,:)==4.00 .OR. zdg_water(:,:)==4.50 .OR. zdg_water(:,:)==5.50)
298 pdg(:,12,:) = zdg_water(:,:)
301 IF (lhook) CALL dr_hook(
'SOILGRID:OPTIMSOILGRID',1,zhook_handle)
subroutine soilgrid(PSOILGRID, PSOILDEPTH, PDG, KWG_LAYER)
subroutine abor1_sfx(YTEXT)