60 FUNCTION vapcondcf(PTG,PPS,PWG,PWGI,PPSIA,PWSAT,PWFC,PQSAT,PQSATI,KWG_LAYER,KNL)
RESULT(PVAPCOND)
65 USE modd_isba_par
, ONLY : xwgmin
75 REAL,
DIMENSION(: ),
INTENT(IN) :: PPS
76 REAL,
DIMENSION(:,:),
INTENT(IN) :: PWG,PWGI,PPSIA,PWSAT, &
78 INTEGER,
DIMENSION(:),
INTENT(IN) :: KWG_LAYER
79 INTEGER,
INTENT(IN) :: KNL
81 REAL,
DIMENSION(SIZE(PWG,1),SIZE(PWG,2)) :: PVAPCOND
86 REAL :: ZDVA, ZFVA, ZCHI, ZHUM, ZWORK, &
87 ZPV, ZESAT, ZESATI, ZWG, ZVC
89 INTEGER :: INI, JJ, JL, IDEPTH
93 REAL,
PARAMETER :: ZTORTY = 0.66
94 REAL,
PARAMETER :: ZNV = 1.88
95 REAL,
PARAMETER :: ZCV = 2.17e-5
96 REAL,
PARAMETER :: ZWK = 0.05
97 REAL,
PARAMETER :: ZLIM = tiny(1.0)
99 REAL(KIND=JPRB) :: ZHOOK_HANDLE
102 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:VAPCONDCF',0,zhook_handle)
116 idepth = kwg_layer(jj)
117 zwg = pwg(jj,jl) + pwgi(jj,jl)
119 IF(jl<=idepth .AND. zwg < pwfc(jj,jl) .AND. zwg > xwgmin)
THEN 123 zesat = pqsat(jj,jl)* pps(jj)/((
xmv/
xmd)+pqsat(jj,jl) *(1.-(
xmv 125 zesati = pqsati(jj,jl)*pps(jj)/((
xmv/
xmd)+pqsati(jj,jl)*(1.-(
xmv 129 zwork = znv*log(ptg(jj,jl)/
xtt)
130 zdva = zcv*(
xp00/pps(jj))*exp(zwork)
134 zfva = (pwsat(jj,jl) - zwg)*(1.+(zwg/(pwsat(jj,jl)-zwk)))
135 zfva = min(zfva,pwsat(jj,jl))
139 zhum = max(zlim,exp(ppsia(jj,jl)*
xg/(
xrv*ptg(jj,jl))))
143 zchi = pwgi(jj,jl)/zwg
147 zpv = zhum*(zchi*zesat + (1.-zchi)*zesati)
151 zvc = ztorty*pps(jj)*zdva*zfva*
xg*zpv/ &
152 ((pps(jj)-zpv)*(
xrv*
xrv*ptg(jj,jl)*ptg(jj,jl)))
156 pvapcond(jj,jl) = zvc/
xrholw 163 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:VAPCONDCF',1,zhook_handle)
171 FUNCTION infmax_func(PWG,PWSAT,PFRZ,PCONDSAT,PMPOTSAT,PBCOEF,PDZG,PDG,KLAYER_HORT)
176 REAL,
DIMENSION(:,:),
INTENT(IN) :: PWG
177 REAL,
DIMENSION(:,:),
INTENT(IN) :: PWSAT
178 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFRZ
179 REAL,
DIMENSION(:,:),
INTENT(IN) :: PCONDSAT
180 REAL,
DIMENSION(:,:),
INTENT(IN) :: PMPOTSAT
181 REAL,
DIMENSION(:,:),
INTENT(IN) :: PBCOEF
182 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDZG
183 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDG
184 INTEGER,
INTENT(IN) :: KLAYER_HORT
186 REAL,
DIMENSION(SIZE(PWG,1)) :: ZGREEN_AMPT, ZDEPTH
190 REAL,
DIMENSION(SIZE(PWG,1)) :: INFMAX_FUNC
192 REAL(KIND=JPRB) :: ZHOOK_HANDLE
194 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:INFMAX_FUNC',0,zhook_handle)
204 zs = min(1.0,pwg(jj,jl)/pwsat(jj,jl))
205 zcoef = pbcoef(jj,jl)*pmpotsat(jj,jl)*(zs-1.0)/pdzg(jj
214 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:INFMAX_FUNC',1,zhook_handle)
221 SUBROUTINE tridiag_dif(PAMTRX,PBMTRX,PCMTRX,PFRC,KWG_LAYER,KNL,PSOL)
226 REAL,
DIMENSION(:,:),
INTENT(IN) :: PAMTRX
227 REAL,
DIMENSION(:,:),
INTENT(IN) :: PBMTRX
228 REAL,
DIMENSION(:,:),
INTENT(IN) :: PCMTRX
229 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFRC
230 INTEGER,
DIMENSION(:),
INTENT(IN) :: KWG_LAYER
231 INTEGER,
INTENT(IN) :: KNL
232 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSOL
234 REAL,
DIMENSION(SIZE(PFRC,1),SIZE(PFRC,2)) :: ZWORK
235 REAL,
DIMENSION(SIZE(PFRC,1)) :: ZDET
237 INTEGER :: JJ, INI, IDEPTH
239 REAL(KIND=JPRB) :: ZHOOK_HANDLE
241 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:TRIDIAG_DIF',0,zhook_handle)
249 zdet(:) = pbmtrx(:,1)
250 psol(:,1) = pfrc(:,1) / zdet(:)
257 zwork(jj,jl) = pcmtrx(jj,jl-1)/zdet(jj)
258 zdet(jj) = pbmtrx(jj,jl) - pamtrx(jj,jl)*zwork(jj,jl)
259 psol(jj,jl) = (pfrc(jj,jl) - pamtrx(jj,jl)*psol(jj,jl-1))/zdet
269 psol(jj,jl) = psol(jj,jl)-zwork(jj,jl+1)*psol(jj,jl+1)
274 IF (
lhook)
CALL dr_hook(
'MODE_HYDRO_DIF:TRIDIAG_DIF',1,zhook_handle)
real, parameter xhort_depth