1 |
|
|
|
2 |
|
|
! $Header$ |
3 |
|
|
|
4 |
|
|
|
5 |
|
|
! ================================================================================ |
6 |
|
|
|
7 |
|
|
SUBROUTINE clouds_bigauss(klon, nd, r, rs, qtc, sigt, ptconv, ratqsc, cldf) |
8 |
|
|
IMPLICIT NONE |
9 |
|
|
|
10 |
|
|
! -------------------------------------------------------------------------------- |
11 |
|
|
|
12 |
|
|
! Inputs: |
13 |
|
|
|
14 |
|
|
! ND----------: Number of vertical levels |
15 |
|
|
! R--------ND-: Domain-averaged mixing ratio of total water |
16 |
|
|
! RS-------ND-: Mean saturation humidity mixing ratio within the gridbox |
17 |
|
|
! QSUB-----ND-: Mixing ratio of condensed water within clouds associated |
18 |
|
|
! with SUBGRID-SCALE condensation processes (here, it is |
19 |
|
|
! predicted by the convection scheme) |
20 |
|
|
! Outputs: |
21 |
|
|
|
22 |
|
|
! PTCONV-----ND-: Point convectif = TRUE |
23 |
|
|
! RATQSC-----ND-: Largeur normalisee de la distribution |
24 |
|
|
! CLDF-----ND-: Fraction nuageuse |
25 |
|
|
|
26 |
|
|
! -------------------------------------------------------------------------------- |
27 |
|
|
|
28 |
|
|
|
29 |
|
|
INTEGER klon, nd |
30 |
|
|
REAL r(klon, nd), rs(klon, nd), qtc(klon, nd), sigt(klon, nd) |
31 |
|
|
LOGICAL ptconv(klon, nd) |
32 |
|
|
REAL ratqsc(klon, nd) |
33 |
|
|
REAL cldf(klon, nd) |
34 |
|
|
|
35 |
|
|
! -- parameters controlling the iteration: |
36 |
|
|
! -- nmax : maximum nb of iterations (hopefully never reached) |
37 |
|
|
! -- epsilon : accuracy of the numerical resolution |
38 |
|
|
! -- vmax : v-value above which we use an asymptotic expression for |
39 |
|
|
! ERF(v) |
40 |
|
|
|
41 |
|
|
INTEGER nmax |
42 |
|
|
PARAMETER (nmax=10) |
43 |
|
|
REAL epsilon, vmax0, vmax(klon) |
44 |
|
|
PARAMETER (epsilon=0.02, vmax0=2.0) |
45 |
|
|
|
46 |
|
|
REAL min_mu, min_q |
47 |
|
|
PARAMETER (min_mu=1.E-12, min_q=1.E-12) |
48 |
|
|
|
49 |
|
|
INTEGER i, k, n, m |
50 |
|
|
REAL mu, qsat, delta |
51 |
|
|
REAL sigma1, sigma2, alpha, qconv |
52 |
|
|
REAL xconv, xenv |
53 |
|
|
REAL cconv, cenv |
54 |
|
|
REAL pi, u, v |
55 |
|
|
REAL erf |
56 |
|
|
REAL sqrtpi, sqrt2 |
57 |
|
|
! lconv = true si le calcul a converge (entre autre si qsub < min_q) |
58 |
|
|
LOGICAL lconv(klon) |
59 |
|
|
|
60 |
|
|
|
61 |
|
|
cldf(1:klon, 1:nd) = 0.0 ! cym |
62 |
|
|
ratqsc(1:klon, 1:nd) = 0.0 |
63 |
|
|
ptconv(1:klon, 1:nd) = .FALSE. |
64 |
|
|
! cdir end arraycomb |
65 |
|
|
|
66 |
|
|
pi = acos(-1.) |
67 |
|
|
sqrtpi = sqrt(pi) |
68 |
|
|
sqrt2 = sqrt(2.) |
69 |
|
|
|
70 |
|
|
|
71 |
|
|
DO k = 1, nd |
72 |
|
|
|
73 |
|
|
DO i = 1, klon ! vector |
74 |
|
|
|
75 |
|
|
mu = r(i, k) |
76 |
|
|
mu = max(mu, min_mu) |
77 |
|
|
qsat = rs(i, k) |
78 |
|
|
qsat = max(qsat, min_mu) |
79 |
|
|
delta = log(mu/qsat) |
80 |
|
|
qconv=qtc(i,k) |
81 |
|
|
alpha=sigt(i,k) |
82 |
|
|
|
83 |
|
|
IF (qconv<min_q) THEN |
84 |
|
|
ptconv(i, k) = .FALSE. |
85 |
|
|
ratqsc(i, k) = 0. |
86 |
|
|
|
87 |
|
|
! Rien on a deja initialise |
88 |
|
|
|
89 |
|
|
ELSE |
90 |
|
|
|
91 |
|
|
sigma1=0.1*((qconv-mu)**2)**0.5+0.002*mu |
92 |
|
|
sigma2=0.1*((qconv-mu)**2)**0.5+0.002*qconv |
93 |
|
|
|
94 |
|
|
! sigma2=0.09*((qconv-mu)**2)**0.5/(alpha+0.01)**0.5+0.002*qconv |
95 |
|
|
!----------------------------------------------------------------------------------------------------------------- |
96 |
|
|
! Calcul de la couverture nuageuse et de ratqs |
97 |
|
|
!----------------------------------------------------------------------------------------------------------------- |
98 |
|
|
|
99 |
|
|
xconv=(qsat-qconv)/(sqrt(2.)*sigma2) |
100 |
|
|
xenv=(qsat-mu)/(sqrt(2.)*sigma1) |
101 |
|
|
|
102 |
|
|
cconv=0.5*(1.-1.*erf(xconv)) |
103 |
|
|
cenv=0.5*(1.-1.*erf(xenv)) |
104 |
|
|
cldf(i,k)=alpha*cconv+(1.-1.*alpha)*cenv |
105 |
|
|
ratqsc(i,k)= alpha*sigma1+(1.-1.*alpha)*sigma2 |
106 |
|
|
ptconv(i,k)= .TRUE. |
107 |
|
|
|
108 |
|
|
END IF |
109 |
|
|
|
110 |
|
|
END DO ! vector |
111 |
|
|
|
112 |
|
|
|
113 |
|
|
END DO ! K |
114 |
|
|
|
115 |
|
|
RETURN |
116 |
|
|
END SUBROUTINE clouds_bigauss |
117 |
|
|
|
118 |
|
|
|
119 |
|
|
|