7 psoilhcapz,pct,pterm1,pterm2, &
8 ptdeep_a,ptdeep_b,ptg,pdeep_flux,&
72 USE modi_tridiag_ground
75 USE yomhook
,ONLY : lhook, dr_hook
76 USE parkind1
,ONLY : jprb
81 REAL,
INTENT(IN) :: ptstep
83 REAL,
DIMENSION(:),
INTENT(IN) :: pct, pterm1, pterm2, ptdeep_a, ptdeep_b
100 REAL,
DIMENSION(:,:),
INTENT(IN) :: psoilcondz, psoilhcapz, pflux_cor
105 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzdif, pdzg
109 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: ptg
112 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeep_flux
119 INTEGER :: ini, inlvld
121 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: ztgm, zdterm, zcterm, &
122 zfrcv, zamtrx, zbmtrx, &
125 REAL :: zwork1, zwork2
127 REAL(KIND=JPRB) :: zhook_handle
133 IF (lhook) CALL dr_hook(
'SOIL_HEATDIF',0,zhook_handle)
142 ini =
SIZE(ptg(:,:),1)
143 inlvld =
SIZE(ptg(:,:),2)
152 zwork1 = pdzg(jj,jl )/(2.0*pdzdif(jj,jl)*psoilcondz(jj,jl ))
153 zwork2 = pdzg(jj,jl+1)/(2.0*pdzdif(jj,jl)*psoilcondz(jj,jl+1))
155 zwork1 = pdzg(jj,jl)/(2.0*pdzdif(jj,jl)*psoilcondz(jj,jl))
158 zdterm(jj,jl)=1.0/(pdzdif(jj,jl)*(zwork1+zwork2))
159 zcterm(jj,jl)= psoilhcapz(jj,jl)*pdzg(jj,jl)/ptstep
168 zbmtrx(:,1) = 1./(pct(:)*ptstep)
169 zcmtrx(:,1) = -pterm2(:)*zbmtrx(:,1)
170 zfrcv(:,1) = pterm1(:)*zbmtrx(:,1)
176 zamtrx(jj,jl) = -zdterm(jj,jl-1)
177 zbmtrx(jj,jl) = zcterm(jj,jl) + zdterm(jj,jl-1) + zdterm(jj,jl)
178 zcmtrx(jj,jl) = -zdterm(jj,jl)
179 zfrcv(jj,jl) = zcterm(jj,jl)*ztgm(jj,jl)+pflux_cor(jj,jl)
186 zamtrx(:,inlvld) = -zdterm(:,inlvld-1)
187 zcmtrx(:,inlvld) = 0.0
197 WHERE(ptdeep_b(:) /= xundef)
200 zbmtrx(:,inlvld) = zcterm(:,inlvld) + zdterm(:,inlvld-1) &
201 + zdterm(:,inlvld)/(1.+zdterm(:,inlvld)*ptdeep_a)
202 zfrcv(:,inlvld) = zcterm(:,inlvld)*ztgm(:,inlvld) &
203 + zdterm(:,inlvld)*ptdeep_b(:)/(1.+zdterm(:,inlvld)*ptdeep_a) &
204 + pflux_cor(:,inlvld)
206 zbmtrx(:,inlvld) = zcterm(:,inlvld) + zdterm(:,inlvld-1)
207 zfrcv(:,inlvld) = zcterm(:,inlvld)*ztgm(:,inlvld)+pflux_cor(:,inlvld)
226 WHERE(ptdeep_b(:) /= xundef)
227 pdeep_flux=zdterm(:,inlvld)*(ztgm(:,inlvld)-ptdeep_b)/(1.+zdterm(:,inlvld)*ptdeep_a)
231 IF (lhook) CALL dr_hook(
'SOIL_HEATDIF',1,zhook_handle)
subroutine tridiag_ground(PA, PB, PC, PY, PX)
subroutine soil_heatdif(PTSTEP, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PCT, PTERM1, PTERM2, PTDEEP_A, PTDEEP_B, PTG, PDEEP_FLUX, PFLUX_COR)