6 SUBROUTINE tridiag_surf(PVARM,PF,PDFDDTDZ,PEXT,PDEXTDV,PTSTEP, &
7 PDZZ,PDZM,PVARP,OIMPL,PALFA,PBETA )
135 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVARM
136 REAL,
DIMENSION(:,:),
INTENT(IN) :: PF
137 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDFDDTDZ
138 REAL,
DIMENSION(:,:),
INTENT(IN) :: PEXT
140 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDEXTDV
142 REAL,
INTENT(IN) :: PTSTEP
143 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDZZ
144 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDZM
146 REAL,
DIMENSION(:,:),
INTENT(OUT):: PVARP
147 LOGICAL,
OPTIONAL,
INTENT(IN) :: OIMPL
151 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: PALFA
152 REAL,
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: PBETA
157 REAL,
DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2)) :: ZVARP
158 REAL,
DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2)) :: ZDZ_DFDDTDZ_O_DZ2
159 REAL,
DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2)) :: ZA, ZB, ZC
160 REAL,
DIMENSION(SIZE(PVARM,1),SIZE(PVARM,2)) :: ZY ,ZGAM
162 REAL,
DIMENSION(SIZE(PVARM,1)) :: ZBET
169 REAL(KIND=JPRB) :: ZHOOK_HANDLE
181 zdz_dfddtdz_o_dz2 = pdfddtdz/pdzz
188 IF (
PRESENT(oimpl))
THEN 197 zy(:,1) = pdzm(:,1)*pvarm(:,1)/ptstep &
200 - zdz_dfddtdz_o_dz2(:,1) * zimpl * pvarm(:,1)&
201 + zdz_dfddtdz_o_dz2(:,2) * zimpl * pvarm(:,2)&
202 - zdz_dfddtdz_o_dz2(:,2) * zimpl * pvarm(:,1)&
203 + pdzm(:,1)*pext(:,1) &
204 - pdzm(:,1)*pdextdv(:,1) * zimpl * pvarm(:,1)
207 zy(:,jk) = pdzm(:,jk)*pvarm(:,jk)/ptstep &
210 + zdz_dfddtdz_o_dz2(:,jk+1) * zimpl * pvarm(:,jk+1) &
211 - zdz_dfddtdz_o_dz2(:,jk+1) * zimpl * pvarm(:,jk ) &
212 - zdz_dfddtdz_o_dz2(:,jk ) * zimpl * pvarm(:,jk ) &
213 + zdz_dfddtdz_o_dz2(:,jk ) * zimpl * pvarm(:,jk-1) &
214 + pdzm(:,jk)*pext(:,jk) &
215 - pdzm(:,jk)*pdextdv(:,jk) * zimpl * pvarm(:,jk)
222 zy(:,ik) = pdzm(:,ik)*pvarm(:,ik)/ptstep &
223 + pdzm(:,ik)*pext(:,ik) &
224 - pdzm(:,ik)*pdextdv(:,ik) * zimpl * pvarm(:,ik)
234 zb(:,1) = pdzm(:,1)/ptstep &
235 - zdz_dfddtdz_o_dz2(:,1) * zimpl &
236 - zdz_dfddtdz_o_dz2(:,2) * zimpl &
237 - pdzm(:,1)*pdextdv(:,1)
238 zc(:,1) = zdz_dfddtdz_o_dz2(:,2) * zimpl
241 za(:,jk) = zdz_dfddtdz_o_dz2(:,jk ) * zimpl
242 zb(:,jk) = pdzm(:,jk)/ptstep &
243 - zdz_dfddtdz_o_dz2(:,jk+1) * zimpl &
244 - zdz_dfddtdz_o_dz2(:,jk ) * zimpl &
245 - pdzm(:,jk)*pdextdv(:,jk)
246 zc(:,jk) = zdz_dfddtdz_o_dz2(:,jk+1) * zimpl
253 zb(:,ik) = pdzm(:,ik)/ptstep &
254 - pdzm(:,ik)*pdextdv(:,ik)
260 zvarp(:,ik) = zy(:,ik) / zbet(:)
264 zgam(:,jk) = za(:,jk+1) / zbet(:)
266 zbet(:) = zb(:,jk) - zc(:,jk) * zgam(:,jk)
268 zvarp(:,jk)= ( zy(:,jk) - zc(:,jk) * zvarp(:,jk+1) ) / zbet(:)
272 zgam(:,1) = za(:,2) / zbet(:)
274 zbet(:) = zb(:,1) - zc(:,1) * zgam(:,1)
276 zvarp(:,1)= ( zy(:,1) - zc(:,1) * zvarp(:,2) ) / zbet(:)
284 zvarp(:,jk) = zvarp(:,jk) - zgam(:,jk-1) * zvarp(:,jk-1)
292 IF (.NOT. gimpl)
THEN
subroutine tridiag_surf(PVARM, PF, PDFDDTDZ, PEXT, PDEXTDV, PTSTEP, PDZZ, PDZM, PVARP, OIMPL, PALFA, PBETA)