6 SUBROUTINE dif_layer(KLU, KGROUND_LAYER, KPATCH, KSIZE_NATURE_P, &
7 ppatch, pdg, pdroot, pdg2, prootfrac, &
8 kwg_layer, pdzg, pdzdif, psoilwght, &
9 prunoffd, klayer_hort, klayer_dun )
48 USE yomhook
,ONLY : lhook, dr_hook
49 USE parkind1
,ONLY : jprb
56 INTEGER,
INTENT(IN) :: klu
57 INTEGER,
INTENT(IN) :: kground_layer
58 INTEGER,
INTENT(IN) :: kpatch
59 INTEGER,
DIMENSION(:),
INTENT(IN) :: ksize_nature_p
60 REAL,
DIMENSION(:,:),
INTENT(IN) :: ppatch
61 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pdg
62 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdroot
63 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdg2
64 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: prootfrac
65 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: kwg_layer
66 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pdzg
67 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pdzdif
68 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: psoilwght
69 REAL,
DIMENSION(:,:),
INTENT(OUT) :: prunoffd
70 INTEGER,
INTENT(OUT) :: klayer_hort
71 INTEGER,
INTENT(OUT) :: klayer_dun
76 REAL,
DIMENSION(KLU) :: zwork
77 INTEGER,
DIMENSION(KLU,KPATCH) :: iwork
78 INTEGER :: jlayer, jpatch, jilu, idepth
80 REAL(KIND=JPRB) :: zhook_handle
86 IF (lhook) CALL dr_hook(
'DIF_LAYER',0,zhook_handle)
88 DO jlayer = 1, kground_layer
89 IF (any((prootfrac(:,jlayer,:)<0. .OR. prootfrac(:,jlayer,:)>1.) .AND. ppatch(:,:).NE.0.)) &
90 CALL
abor1_sfx(
'DIF_LAYER: WITH CISBA=DIF ROOTFRAC MUST BE DEFINED')
94 pdzdif(:,:,:) = xundef
95 psoilwght(:,:,:) = 0.0
99 IF (ksize_nature_p(jpatch) == 0 ) cycle
102 pdzg(:,1,jpatch) = pdg(:,1,jpatch)
103 DO jlayer=2,kground_layer
105 pdzg(jilu,jlayer,jpatch) = pdg(jilu,jlayer,jpatch) - pdg(jilu,jlayer-1,jpatch)
110 DO jlayer=1,kground_layer
112 IF(jlayer<kground_layer)
THEN
113 pdzdif(jilu,jlayer,jpatch)=0.5*(pdzg(jilu,jlayer,jpatch)+pdzg(jilu,jlayer+1,jpatch))
115 pdzdif(jilu,jlayer,jpatch)=0.5*pdzg(jilu,jlayer,jpatch)
124 iwork(:,:) = kwg_layer(:,:)
128 IF( ksize_nature_p(jpatch) == 0 ) cycle
131 idepth = kwg_layer(jilu,jpatch)
132 IF (idepth==nundef) idepth = kground_layer
134 IF(pdg(jilu,jlayer,jpatch)<xhort_depth) iwork(jilu,jpatch)=jlayer+1
140 klayer_hort=maxval(iwork(:,:),iwork(:,:)/=nundef)
144 iwork(:,:)=kwg_layer(:,:)
148 IF (ksize_nature_p(jpatch) == 0 ) cycle
151 IF(ppatch(jilu,jpatch)>0.0)
THEN
152 idepth = kwg_layer(jilu,jpatch)
153 IF(pdroot(jilu,jpatch)>0.0.AND.pdroot(jilu,jpatch)/=xundef)
THEN
154 prunoffd(jilu,jpatch) = pdg(jilu,1,jpatch)
156 IF(prootfrac(jilu,jlayer,jpatch)<0.90)
THEN
157 prunoffd(jilu,jpatch) = pdg(jilu,jlayer+1,jpatch)
161 prunoffd(jilu,jpatch) = min(0.6,pdg2(jilu,jpatch))
167 DO jlayer=1,kground_layer
169 IF(ppatch(jilu,jpatch)>0.0)
THEN
170 idepth=kwg_layer(jilu,jpatch)
171 IF(jlayer<=idepth)
THEN
172 zwork(jilu ) = zwork(jilu) + pdzg(jilu,jlayer,jpatch)
173 psoilwght(jilu,jlayer,jpatch) = min(pdzg(jilu,jlayer,jpatch), &
174 max(0.0,prunoffd(jilu,jpatch)-zwork(jilu)+pdzg(jilu,jlayer,jpatch)))
176 IF(pdg(jilu,jlayer,jpatch)<prunoffd(jilu,jpatch))
THEN
177 iwork(jilu,jpatch)=jlayer+1
185 klayer_dun=maxval(iwork(:,:),iwork(:,:)/=nundef)
187 IF (lhook) CALL dr_hook(
'DIF_LAYER',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine dif_layer(KLU, KGROUND_LAYER, KPATCH, KSIZE_NATURE_P, PPATCH, PDG, PDROOT, PDG2, PROOTFRAC, KWG_LAYER, PDZG, PDZDIF, PSOILWGHT, PRUNOFFD, KLAYER_HORT, KLAYER_DUN)