LMDZ
clouds_bigauss.F90
Go to the documentation of this file.
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 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine clouds_bigauss(klon, nd, r, rs, qtc, sigt, ptconv, ratqsc, cldf)