6 SUBROUTINE soil_temp_arp(PTSTEP,PA,PB,PC,PGAMMAT,PTDEEP,PSODELX,PTG)
67 USE modi_tridiag_ground
70 USE yomhook
,ONLY : lhook, dr_hook
71 USE parkind1
,ONLY : jprb
76 REAL,
INTENT(IN) :: ptstep
78 REAL,
DIMENSION(:),
INTENT(IN) :: pa,pb,pc
80 REAL,
DIMENSION(:),
INTENT(IN) :: ptdeep, pgammat
90 REAL,
DIMENSION(:),
INTENT (IN) :: psodelx
92 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: ptg
102 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: ztgm, zfrcv, zamtrx, zbmtrx, &
103 zcmtrx, zlambda, zalpha
104 REAL(KIND=JPRB) :: zhook_handle
110 IF (lhook) CALL dr_hook(
'SOIL_TEMP_ARP',0,zhook_handle)
111 inlvld =
SIZE(ptg(:,:),2)
128 zalpha(:,jj) = psodelx(jj)*xday/(ptstep*psodelx(1)*2.0*xpi)
129 zlambda(:,jj) = 1.0/(psodelx(1)*(psodelx(jj)+psodelx(jj+1)))
131 zalpha(:,inlvld) = psodelx(inlvld)*xday/(ptstep*psodelx(1)*2.0*xpi)
138 zbmtrx(:,1) = pa(:)+(2.0*xpi/xday)*(1.0/(psodelx(1)*(psodelx(1)+psodelx(2)))-1.0)
139 zcmtrx(:,1) = -2.0*xpi/(xday*psodelx(1)*(psodelx(1)+psodelx(2)))
140 zfrcv(:,1) = pb(:)*ztgm(:,1)+pc(:)-2.0*xpi*ztgm(:,2)/xday
146 zamtrx(:,jj) = -zlambda(:,jj-1)
147 zbmtrx(:,jj) = zalpha(:,jj) + zlambda(:,jj-1) + zlambda(:,jj)
148 zcmtrx(:,jj) = -zlambda(:,jj)
149 zfrcv(:,jj) = zalpha(:,jj)*ztgm(:,jj)
155 zamtrx(:,inlvld) = -zlambda(:,inlvld-1)
156 zcmtrx(:,inlvld) = 0.0
158 WHERE(ptdeep(:) /= xundef .AND. pgammat(:) /= xundef)
159 zbmtrx(:,inlvld) = zalpha(:,inlvld) + zlambda(:,inlvld-1) + ptstep*pgammat(:)/xday
160 zfrcv(:,inlvld) = zalpha(:,inlvld)*ztgm(:,inlvld) + ptstep*pgammat(:)*ptdeep(:)/xday
162 zbmtrx(:,inlvld) = zalpha(:,inlvld) + zlambda(:,inlvld-1)
163 zfrcv(:,inlvld) = zalpha(:,inlvld)*ztgm(:,inlvld)
178 IF (lhook) CALL dr_hook(
'SOIL_TEMP_ARP',1,zhook_handle)
subroutine tridiag_ground(PA, PB, PC, PY, PX)
subroutine soil_temp_arp(PTSTEP, PA, PB, PC, PGAMMAT, PTDEEP, PSODELX, PTG)