6 SUBROUTINE param_cls(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PH, PHW, &
7 psfth, psftq, psfzon, psfmer, &
8 pt2m, pq2m, phu2m, pzon10m, pmer10m )
56 USE modd_csts, ONLY : xkarman, xrd, xcpd, xp00, xrv, xg
62 USE yomhook
,ONLY : lhook, dr_hook
63 USE parkind1
,ONLY : jprb
71 REAL,
DIMENSION(:),
INTENT(IN) :: pta
72 REAL,
DIMENSION(:),
INTENT(IN) :: pts
73 REAL,
DIMENSION(:),
INTENT(IN) :: pqa
74 REAL,
DIMENSION(:),
INTENT(IN) :: ppa
75 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa
76 REAL,
DIMENSION(:),
INTENT(IN) :: pzona
77 REAL,
DIMENSION(:),
INTENT(IN) :: pmera
78 REAL,
DIMENSION(:),
INTENT(IN) :: ph
79 REAL,
DIMENSION(:),
INTENT(IN) :: phw
80 REAL,
DIMENSION(:),
INTENT(IN) :: psfzon
81 REAL,
DIMENSION(:),
INTENT(IN) :: psfmer
82 REAL,
DIMENSION(:),
INTENT(IN) :: psfth
83 REAL,
DIMENSION(:),
INTENT(IN) :: psftq
85 REAL,
DIMENSION(:),
INTENT(OUT) :: pt2m
86 REAL,
DIMENSION(:),
INTENT(OUT) :: pq2m
87 REAL,
DIMENSION(:),
INTENT(OUT) :: phu2m
88 REAL,
DIMENSION(:),
INTENT(OUT) :: pzon10m
89 REAL,
DIMENSION(:),
INTENT(OUT) :: pmer10m
93 REAL,
DIMENSION(SIZE(PTA)) :: zustar
94 REAL,
DIMENSION(SIZE(PTA)) :: zth
95 REAL,
DIMENSION(SIZE(PTA)) :: zrv
96 REAL,
DIMENSION(SIZE(PTA)) :: zlmo
97 REAL,
DIMENSION(SIZE(PTA)) :: zh_o_lmo
98 REAL,
DIMENSION(SIZE(PTA)) :: z10m_o_lmo
99 REAL,
DIMENSION(SIZE(PTA)) :: z2m_o_lmo
100 REAL,
DIMENSION(SIZE(PTA)) :: ztstar
101 REAL,
DIMENSION(SIZE(PTA)) :: zqstar
102 REAL,
DIMENSION(SIZE(PTA)) :: zth2m
103 REAL,
DIMENSION(SIZE(PTA)) :: zp2m
104 REAL,
DIMENSION(SIZE(PTA)) :: zqsat2m
107 REAL,
DIMENSION(SIZE(PTA)) :: zwt
108 REAL,
DIMENSION(SIZE(PTA)) :: zwq
109 REAL,
DIMENSION(SIZE(PTA)) :: zexn
111 REAL(KIND=JPRB) :: zhook_handle
114 IF (lhook) CALL dr_hook(
'PARAM_CLS',0,zhook_handle)
120 zustar(:) = sqrt(sqrt(psfzon(:)**2+psfmer(:)**2))
124 zexn(:) = (ppa(:)/xp00)**(xrd/xcpd)
128 zth(:) = pta(:) / zexn(:)
133 zrv = 1./(1./pqa(:) - 1.)
140 zwt(:) = psfth(:) / (prhoa(:) * xcpd / zexn(:))
141 zwq(:) = psftq(:) / prhoa(:)
146 zlmo =
lmo(zustar,zth,zrv,zwt,zwq)
151 zlmo = zlmo * (1.-sign(1.,zlmo))/2. + max(zlmomin,zlmo) * (1.+sign(1.,zlmo))/2.
160 z10m_o_lmo = z10m/zlmo
180 WHERE (psfzon(:)>=0.)
181 pzon10m(:) = pzona(:) - sqrt( psfzon(:))/xkarman *( log( z10m/phw) &
184 pzon10m(:) = min( 0., pzon10m(:) )
187 WHERE (psfzon(:)< 0.)
188 pzon10m(:) = pzona(:) + sqrt(-psfzon(:))/xkarman *( log( z10m/phw) &
191 pzon10m(:) = max( 0., pzon10m(:) )
194 WHERE (psfmer(:)>=0.)
195 pmer10m(:) = pmera(:) - sqrt( psfmer(:))/xkarman *( log( z10m/phw) &
198 pmer10m(:) = min( 0., pmer10m(:) )
201 WHERE (psfmer(:)< 0.)
202 pmer10m(:) = pmera(:) + sqrt(-psfmer(:))/xkarman *( log( z10m/phw) &
205 pmer10m(:) = max( 0., pmer10m(:) )
219 ztstar(:) = - zwt(:) / max(zustar,0.01)
223 zth2m(:) = zth(:) + 0.74 * ztstar(:)/xkarman *( log( z2m/ph) &
229 zp2m(:) = ppa(:) - xg * prhoa(:) * (z2m-ph(:))
233 WHERE (zwt(:) > 0. .OR. pts(:) == xundef)
235 pt2m(:) = zth2m(:) * (zp2m(:)/xp00)**(xrd/xcpd)
238 pt2m(:) = pts(:) + (pta(:)-pts(:))*z2m/ph(:)
245 zqstar(:) = - zwq(:) / max(zustar,0.01)
249 pq2m(:) = pqa(:) + 0.74 * zqstar(:)/xkarman *( log( z2m/ph) &
255 zqsat2m(:) =
qsat(pt2m(:),zp2m(:))
256 pq2m(:) = min(zqsat2m(:),pq2m(:))
258 phu2m(:) = pq2m(:) / zqsat2m(:)
259 IF (lhook) CALL dr_hook(
'PARAM_CLS',1,zhook_handle)
subroutine param_cls(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PH, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PT2M, PQ2M, PHU2M, PZON10M, PMER10M)