7 SUBROUTINE clouds_gno(klon,ND,R,RS,QSUB,PTCONV,RATQSC,CLDF)
30 REAL r(klon,nd), rs(klon,nd), qsub(klon,nd)
31 LOGICAL ptconv(klon,nd)
42 REAL epsilon, vmax0, vmax(klon)
46 parameter( min_mu = 1.e-12, min_q=1.e-12 )
51 REAL xx(klon), aux(klon), coeff, block
52 REAL dist, fprime, det
53 REAL pi,
u,
v, erfcu, erfcv
55 real erf,hsqrtlog_2,v2
56 real sqrtpi,sqrt2,zx1,zx2,exdel
62 ratqsc(1:klon,1:nd)=0.0
63 ptconv(1:klon,1:nd)=.
false.
69 hsqrtlog_2=0.5*sqrt(log(2.))
77 qsat = max(qsat,min_mu)
110 IF ( qsub(
i,
k) .lt. min_q )
THEN
127 if (det.LE.0.0) vmax(
i) = vmax0 + 1.0
134 zx2=sqrt(1.0+
delta(
i)/(vmax(
i)*vmax(
i)))
138 if ( xx1 .GE. 0.0 ) xx(
i) = 0.5*xx2
140 if (
delta(
i).LT.0.) xx(
i) = -hsqrtlog_2
153 if (.not.lconv(
i))
then
155 u =
delta(
i)/(xx(
i)*sqrt2) + xx(
i)/(2.*sqrt2)
156 v =
delta(
i)/(xx(
i)*sqrt2) - xx(
i)/(2.*sqrt2)
159 IF (
v .GT. vmax(
i) )
THEN
161 IF ( abs(
u) .GT. vmax(
i)
162 : .AND.
delta(
i) .LT. 0. )
THEN
167 aux(
i) = 2.0*
delta(
i)*(1.-exdel)
169 if (aux(
i).lt.0.)
then
173 xx(
i) = -sqrt(aux(
i))
174 block = exp(-
v*
v) /
v / sqrtpi
184 aux(
i) = sqrtpi*erfcu*exp(min(v2,100.))
185 coeff = 1.0 - 0.5/(v2) + 0.75/(v2*v2)
186 block = coeff * exp(-v2) /
v / sqrtpi
187 dist =
v * aux(
i) / coeff -
beta(
i)
188 fprime = 2.0 / xx(
i) * (v2)
189 : * ( exp(-
delta(
i)) -
u * aux(
i) / coeff )
201 dist = erfcu / erfcv -
beta(
i)
204 if(zu2.gt.20..or. zv2.gt.20.)
then
214 fprime = 2. /sqrtpi /xx(
i) /(erfcv*erfcv)
215 : * ( erfcv*
v*exp(-zu2)
216 : - erfcu*
u*exp(-zv2) )
226 if (abs(fprime).lt.1.e-11)
then
231 fprime=sign(1.e-11,fprime)
235 if ( abs(dist/
beta(
i)) .LT. epsilon )
then
241 ratqsc(
i,
k)=min(2.*(
v-
u)*(
v-
u),20.)
242 ratqsc(
i,
k)=sqrt(exp(ratqsc(
i,
k))-1.)
243 cldf(
i,
k) = 0.5 * block
245 xx(
i) = xx(
i) - dist/fprime