33 USE yomhook
,ONLY : lhook, dr_hook
34 USE parkind1
,ONLY : jprb
64 REAL,
INTENT(IN) :: pp
65 REAL,
INTENT(IN) :: pq
67 REAL(KIND=JPRB) :: zhook_handle
68 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:PE_FROM_PQ_0D',0,zhook_handle)
69 pe = pq * pp /(0.622 + 0.378 * pq)
70 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:PE_FROM_PQ_0D',1,zhook_handle)
75 REAL,
DIMENSION(:),
INTENT(IN) :: pp
76 REAL,
DIMENSION(:),
INTENT(IN) :: pq
77 REAL,
DIMENSION(SIZE(PQ)) :: pe
78 REAL(KIND=JPRB) :: zhook_handle
79 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:PE_FROM_PQ_1D',0,zhook_handle)
80 pe(:) = pq(:) * pp(:) /(0.622 + 0.378 * pq(:))
81 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:PE_FROM_PQ_1D',1,zhook_handle)
90 REAL,
INTENT(IN) :: pt
91 REAL,
INTENT(IN) :: pq
96 REAL(KIND=JPRB) :: zhook_handle
98 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TD_FROM_TQ_0D',0,zhook_handle)
100 alpha = log(zpe/1000.)
101 IF (pt .GE. xtt .AND. pt .GE. 93.+xtt)
THEN
102 ptd = xtt+6.54+14.526*alpha+0.7389*alpha*alpha+0.09486*alpha**3 &
103 +0.4569*(zpe/1000.)**0.1984
104 ELSE IF (pt .LT. xtt)
THEN
105 ptd = xtt+6.09+12.608*alpha+0.4959*alpha*alpha
110 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TD_FROM_TQ_0D',1,zhook_handle)
117 REAL,
DIMENSION(:),
INTENT(IN) :: pt
118 REAL,
DIMENSION(:),
INTENT(IN) :: pq
119 REAL,
DIMENSION(SIZE(PQ)) :: ptd
121 REAL,
DIMENSION(SIZE(PQ)) :: alpha
122 REAL,
DIMENSION(SIZE(PQ)) :: zpe
123 REAL(KIND=JPRB) :: zhook_handle
125 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TD_FROM_TQ_1D',0,zhook_handle)
127 alpha(:) = log(zpe(:)/1000.)
128 WHERE (pt .GE. xtt .AND. pt .GE. 93.+xtt)
129 ptd = xtt+6.54+14.526*alpha+0.7389*alpha*alpha+0.09486*alpha**3 &
130 +0.4569*(zpe/1000.)**0.1984
131 ELSEWHERE (pt .LT. xtt)
132 ptd = xtt+6.09+12.608*alpha+0.4959*alpha*alpha
136 ptd(:) = min(ptd(:), pt(:))
137 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TD_FROM_TQ_1D',1,zhook_handle)
146 REAL,
INTENT(IN) :: pt
147 REAL,
INTENT(IN) :: pp
148 REAL,
INTENT(IN) :: ptwb
151 REAL(KIND=JPRB) :: zhook_handle
153 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:RV_FROM_TPTWB_0D',0,zhook_handle)
154 zrvsat =
qsat(pt, pp) / (1 -
qsat(pt, pp))
155 prv = ((2501. - 2.326*(ptwb-xtt))*zrvsat - 1.006*(pt - ptwb)) &
156 / (2501. + 1.86*(pt - xtt) -4.186*(ptwb - xtt))
157 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:RV_FROM_TPTWB_0D',1,zhook_handle)
164 REAL,
DIMENSION(:),
INTENT(IN) :: pt
165 REAL,
DIMENSION(:),
INTENT(IN) :: pp
166 REAL,
DIMENSION(:),
INTENT(IN) :: ptwb
167 REAL,
DIMENSION(SIZE(PT)) :: prv
168 REAL,
DIMENSION(SIZE(PT)) :: zrvsat
169 REAL(KIND=JPRB) :: zhook_handle
171 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:RV_FROM_TPTWB_1D',0,zhook_handle)
172 zrvsat =
qsat(pt, pp) / (1 -
qsat(pt, pp))
173 prv(:) = ((2501. - 2.326*(ptwb(:)-xtt))*zrvsat(:) - 1.006*(pt(:) - ptwb(:))) &
174 / (2501. + 1.86*(pt(:) - xtt) -4.186*(ptwb(:) - xtt))
175 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:RV_FROM_TPTWB_1D',1,zhook_handle)
183 REAL,
INTENT(IN) :: pt
184 REAL,
INTENT(IN) :: pq
185 REAL,
INTENT(IN) :: pp
189 REAL :: ztwbinf, ztwbsup, zrv
191 REAL(KIND=JPRB) :: zhook_handle
192 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TWB_FROM_TPQ_0D',0,zhook_handle)
198 ptwb = 0.5 * (ztwbsup + ztwbinf)
199 DO WHILE (ztwbsup - ztwbinf > 0.001 .OR. jiter .LE. 50)
201 IF (zrv .GT. pq/(1 - pq))
THEN
206 ptwb = 0.5 * (ztwbinf + ztwbsup)
209 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TWB_FROM_TPQ_0D',1,zhook_handle)
214 REAL,
DIMENSION(:),
INTENT(IN) :: pt
215 REAL,
DIMENSION(:),
INTENT(IN) :: pq
216 REAL,
DIMENSION(:),
INTENT(IN) :: pp
217 REAL,
DIMENSION(SIZE(PT)) :: ptwb
219 REAL,
DIMENSION(SIZE(PT)) :: ztd
220 REAL,
DIMENSION(SIZE(PT)) :: ztwbinf, ztwbsup, zrv
222 REAL(KIND=JPRB) :: zhook_handle
223 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TWB_FROM_TPQ_1D',0,zhook_handle)
228 ptwb = 0.5 * (ztwbsup + ztwbinf)
231 DO WHILE (ztwbsup(ji) - ztwbinf(ji) > 0.001 .OR. jiter .LE. 50)
233 IF (zrv(ji) .GT. pq(ji)/(1 - pq(ji)))
THEN
234 ztwbsup(ji) = ptwb(ji)
236 ztwbinf(ji) = ptwb(ji)
238 ptwb(ji) = 0.5 * (ztwbinf(ji) + ztwbsup(ji))
241 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:TWB_FROM_TPQ_1D',1,zhook_handle)
290 REAL,
INTENT(IN) :: pt
291 REAL,
INTENT(IN) :: pq
298 REAL(KIND=JPRB) :: zhook_handle
300 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:ENTH_FN_T_Q',0,zhook_handle)
303 zrv=max(pq/(1-pq),1.0e-5)
304 penth=1.00484d3*zt+zrv*(2.50094d6+1.85895d3*zt)
306 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:ENTH_FN_T_Q',1,zhook_handle)
359 REAL,
INTENT(IN) :: pt
360 REAL,
INTENT(IN) :: penth
367 REAL(KIND=JPRB) :: zhook_handle
369 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:Q_FN_T_ENTH',0,zhook_handle)
374 zrv=(penth-1.00484d3*zt)/(2.50094d6+1.85895d3*zt)
377 IF (zrv < 0.0d0)
THEN
384 IF (lhook) CALL dr_hook(
'MODE_PSYCHRO:Q_FN_T_ENTH',1,zhook_handle)
real function, dimension(size(pt)) twb_from_tpq_1d(PT, PP, PQ)
real function, dimension(size(pt)) rv_from_tptwb_1d(PT, PP, PTWB)
real function td_from_tq_0d(PT, PQ)
real function, dimension(size(pq)) td_from_tq_1d(PT, PQ)
real function, dimension(size(pq)) pe_from_pq_1d(PP, PQ)
real function pe_from_pq_0d(PP, PQ)
real function rv_from_tptwb_0d(PT, PP, PTWB)
real function twb_from_tpq_0d(PT, PP, PQ)