7 PSOURCE,PTDEEP_A,PTDEEP_B,PCONDA_DELZ,PA_COEF,PB_COEF)
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)