[2206] | 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 | |
---|