7 psource,ptdeep_a,ptdeep_b,pconda_delz,pa_coef,pb_coef)
63 USE yomhook
,ONLY : lhook, dr_hook
64 USE parkind1
,ONLY : jprb
70 REAL,
INTENT(IN) :: ptstep
71 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdepth
72 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptemp
74 REAL,
DIMENSION(:,:),
INTENT(IN) :: pheatcap
75 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcondtrm
76 REAL,
DIMENSION(:,:),
INTENT(IN) :: psource
77 REAL,
DIMENSION(:),
INTENT(IN) :: ptdeep_a, ptdeep_b
90 REAL,
DIMENSION(:),
INTENT(OUT) :: pconda_delz
93 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pa_coef
94 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pb_coef
99 INTEGER :: jj, ji, inl, ini
100 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zd_g
101 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zdlz
102 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zlambda
103 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zgheatcap
105 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zthrm
106 REAL,
DIMENSION(SIZE(PDEPTH,1)) :: zc_coef
107 REAL,
DIMENSION(SIZE(PDEPTH,1)) :: za_coefd
108 REAL,
DIMENSION(SIZE(PDEPTH,1)) :: zb_coefd
109 REAL,
DIMENSION(SIZE(PDEPTH,1),SIZE(PDEPTH,2)) :: zsink
111 REAL(KIND=JPRB) :: zhook_handle
115 REAL,
PARAMETER :: zdz_min = 1.e-6
119 IF (lhook) CALL dr_hook(
'TRIDIAG_GROUND_RM_COEFS',0,zhook_handle)
134 zd_g(:,1) = pdepth(:,1)
137 zd_g(ji,jj) = pdepth(ji,jj) - pdepth(ji,jj-1)
140 zd_g(:,:) = max(zdz_min, zd_g(:,:))
146 zdlz(ji,jj) = (zd_g(ji,jj)+zd_g(ji,jj+1))*0.5
149 zdlz(:,inl) = zd_g(:,inl)*0.5
153 zgheatcap(:,:) = zd_g(:,:)*pheatcap(:,:)
159 zthrm(ji,jj) = (zd_g(ji,jj)+zd_g(ji,jj+1))/ &
160 ((zd_g(ji,jj+1)/pcondtrm(ji,jj+1))+ &
161 (zd_g(ji,jj) /pcondtrm(ji,jj) ))
164 zthrm(:,inl) = pcondtrm(:,inl)
171 zsink(:,:) = -psource(:,:)
175 zlambda(:,:) = zthrm(:,:)/zdlz(:,:)
179 pconda_delz(:) = zlambda(:,1)
196 WHERE(ptdeep_b(:) == xundef)
198 zc_coef(:) = (zgheatcap(:,inl)/ptstep) &
200 pa_coef(:,inl) = zlambda(:,inl-1)/zc_coef(:)
201 pb_coef(:,inl) = ( ptemp(:,inl)*(zgheatcap(:,inl)/ptstep) &
202 - zsink(:,inl) )/zc_coef(:)
211 zc_coef(:) = 1. - ptdeep_a(:)*zlambda(:,inl)
212 za_coefd(:) = -zlambda(:,inl)/zc_coef(:)
213 zb_coefd(:) = zlambda(:,inl)*ptdeep_b(:)/zc_coef(:)
215 zc_coef(:) = (zgheatcap(:,inl)/ptstep) &
216 + zlambda(:,inl-1) - za_coefd(:)
217 pa_coef(:,inl) = zlambda(:,inl-1)/zc_coef(:)
218 pb_coef(:,inl) = ( ptemp(:,inl)*(zgheatcap(:,inl)/ptstep) &
219 + zb_coefd(:) - zsink(:,inl) )/zc_coef(:)
227 zc_coef(ji) = (zgheatcap(ji,jj)/ptstep) &
228 + zlambda(ji,jj)*(1.0-pa_coef(ji,jj+1)) &
230 pa_coef(ji,jj) = zlambda(ji,jj-1)/zc_coef(ji)
231 pb_coef(ji,jj) = ( ptemp(ji,jj)*(zgheatcap(ji,jj)/ptstep) &
232 + zlambda(ji,jj)*pb_coef(ji,jj+1) &
233 - zsink(ji,jj) )/zc_coef(ji)
242 IF (lhook) CALL dr_hook(
'TRIDIAG_GROUND_RM_COEFS',1,zhook_handle)
subroutine tridiag_ground_rm_coefs(PTSTEP, PDEPTH, PTEMP, PHEATCAP, PCONDTRM, PSOURCE, PTDEEP_A, PTDEEP_B, PCONDA_DELZ, PA_COEF, PB_COEF)