| Line |
Branch |
Exec |
Source |
| 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 |
|
|
|
| 120 |
|
|
|