60 FUNCTION vapcondcf(PTG,PPS,PWG,PWGI,PPSIA,PWSAT,PWFC,PQSAT,PQSATI,KWG_LAYER,KNL) RESULT(PVAPCOND)
64 USE modd_csts, ONLY : xmv, xmd, xtt, xp00, xg, xrv, xrholw
67 USE yomhook
,ONLY : lhook, dr_hook
68 USE parkind1
,ONLY : jprb
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/xmd)))
125 zesati = pqsati(jj,jl)*pps(jj)/((xmv/xmd)+pqsati(jj,jl)*(1.-(xmv/xmd)))
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)
172 USE yomhook
,ONLY : lhook, dr_hook
174 USE parkind1
,ONLY : jprb
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
192 REAL(KIND=JPRB) :: zhook_handle
194 IF (lhook) CALL dr_hook(
'MODE_HYDRO_DIF:INFMAX_FUNC',0,zhook_handle)
203 IF(zdepth(jj)<xhort_depth)
THEN
204 zs = min(1.0,pwg(jj,jl)/pwsat(jj,jl))
205 zcoef = pbcoef(jj,jl)*pmpotsat(jj,jl)*(zs-1.0)/pdzg(jj,jl)
206 zgreen_ampt(jj) = zgreen_ampt(jj)+pdzg(jj,jl)*pfrz(jj,jl)*pcondsat(jj,jl)*(zcoef+1.0)
207 zdepth(jj) = pdg(jj,jl)
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)
223 USE yomhook
,ONLY : lhook, dr_hook
224 USE parkind1
,ONLY : jprb
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(jj)
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)