6 SUBROUTINE soilgrid(PSOILGRID, PSOILDEPTH, PDG, KWG_LAYER )
60 USE modd_isba_par
, ONLY : noptimlayer, xoptimgrid
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)) :: zref
87 REAL(KIND=JPRB) :: zhook_handle
109 IF(inl==noptimlayer)
THEN 110 IF( all(psoilgrid(1:inl)==xoptimgrid(1:noptimlayer)) ) loptimgrid=.true
123 WHERE(psoildepth(:)/=
xundef)
124 pdg(:,1)=min(0.01,psoilgrid(1))
131 IF( psoildepth(jj)==
xundef )
THEN 140 pdg(jj,jl) = psoilgrid(jl)
142 IF ( psoilgrid(jl)-psoilgrid(jl-1)<=0.3 )
THEN 143 zwork = abs(psoilgrid(jl)-psoildepth(jj))
144 IF(zwork<=zref(jj))
THEN 148 ELSEIF(psoildepth(jj)>=(psoilgrid(jl)*0.3+psoilgrid(jl-1)*0.7)
THEN 158 IF(any(kwg_layer(:)==0))
THEN 159 CALL abor1_sfx(
'SOILGRID: WITH CISBA=DIF NWG_LAYER MUST BE DEFINED FOR EACH POINT' 168 SUBROUTINE optimsoilgrid
176 INTEGER,
PARAMETER :: ndlim = 13
178 REAL,
DIMENSION(NDLIM),
PARAMETER :: zdlim = &
179 (/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
181 REAL,
DIMENSION(SIZE(PDG,1)) :: zdg_water
184 REAL(KIND=JPRB) :: zhook_handle
189 IF (
lhook)
CALL dr_hook(
'SOILGRID:OPTIMSOILGRID',0,zhook_handle)
199 IF(psoildepth(jj)<=1.1)
THEN 200 zdg_water(jj)=min(1.0,psoildepth(jj))
201 ELSEIF(psoildepth(jj)>1.1.AND.psoildepth(jj)<=1.25)
THEN 203 ELSEIF(psoildepth(jj)>5.50.AND.psoildepth(jj)<=8.00)
THEN 205 ELSEIF(psoildepth(jj)>8.00.AND.psoildepth(jj)<
xundef)
THEN 209 IF(psoildepth(jj)>zdlim(jl).AND.psoildepth(jj)<=zdlim(jl+1)
THEN 210 zdg_water(jj)=merge(zdlim(jl),zdlim(jl+1),psoildepth(jj)<
219 IF(psoildepth(jj)<1.25)
THEN 220 zdg_water(jj)=min(1.0,psoildepth(jj))
221 ELSEIF(psoildepth(jj)>=5.50.AND.psoildepth(jj)<6.50)
THEN 223 ELSEIF(psoildepth(jj)>=6.50.AND.psoildepth(jj)<10.50)
THEN 225 ELSEIF(psoildepth(jj)>=10.50.AND.psoildepth(jj)<
xundef)
THEN 229 IF(psoildepth(jj)>=zdlim(jl).AND.psoildepth(jj)<zdlim(jl+1)
THEN 230 zdg_water(jj)=merge(zdlim(jl),zdlim(jl+1),psoildepth(jj)<
243 IF(psoildepth(jj)==
xundef)
THEN 250 pdg(jj,:) = psoilgrid(:)
252 lwork=(zdg_water(jj)<=1.0.OR.&
253 zdg_water(jj)==1.5.OR.&
254 zdg_water(jj)==2.0.OR.&
255 zdg_water(jj)==3.0.OR.&
256 zdg_water(jj)==5.0.OR.&
257 zdg_water(jj)==8.0.OR.&
258 zdg_water(jj)==12.0 )
262 zwork = abs(psoilgrid(jl)-zdg_water(jj))
263 IF(zwork<=zref(jj))
THEN 277 WHERE (zdg_water(:)==1.25)
279 pdg(:,9) = zdg_water(:)
280 ELSEWHERE (zdg_water(:)==1.75 .OR. zdg_water(:)==2.25)
282 pdg(:,10) = zdg_water(:)
283 WHERE (zdg_water(:)==1.75) pdg(:,9) = 1.25
284 ELSEWHERE (zdg_water(:)==2.50 .OR. zdg_water(:)==2.75 .OR. zdg_water(:)=
287 ELSEWHERE (zdg_water(:)==4.00 .OR. zdg_water(:)==4.50 .OR. zdg_water(:)=
292 IF (
lhook)
CALL dr_hook(
'SOILGRID:OPTIMSOILGRID',1,zhook_handle)
294 END SUBROUTINE optimsoilgrid
297 END SUBROUTINE soilgrid
subroutine abor1_sfx(YTEXT)
integer, parameter nundef