source: LMDZ6/branches/Amaury_dev/libf/phylmd/conemav.F90 @ 5151

Last change on this file since 5151 was 5144, checked in by abarral, 7 weeks ago

Put YOMCST.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.2 KB
Line 
1! $Header$
2
3SUBROUTINE conemav(dtime, paprs, pplay, t, q, u, v, tra, ntra, work1, work2, &
4        d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, ktop, upwd, dnwd, dnwdbis, &
5        ma, cape, tvp, iflag, pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr)
6
7  USE dimphy
8  USE infotrac_phy, ONLY: nbtr
9  USE lmdz_yoethf
10  USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep
11  USE lmdz_yomcst
12
13  IMPLICIT NONE
14  ! ======================================================================
15  ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
16  ! Objet: schema de convection de Emanuel (1991) interface
17  ! ======================================================================
18  ! Arguments:
19  ! dtime--input-R-pas d'integration (s)
20  ! s-------input-R-la valeur "s" pour chaque couche
21  ! sigs----input-R-la valeur "sigma" de chaque couche
22  ! sig-----input-R-la valeur de "sigma" pour chaque niveau
23  ! psolpa--input-R-la pression au sol (en Pa)
24  ! pskapa--input-R-exponentiel kappa de psolpa
25  ! h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
26  ! q-------input-R-vapeur d'eau (en kg/kg)
27
28  ! work*: input et output: deux variables de travail,
29  ! on peut les mettre a 0 au debut
30  ! ALE-----input-R-energie disponible pour soulevement
31
32  ! d_h-----output-R-increment de l'enthalpie potentielle (h)
33  ! d_q-----output-R-increment de la vapeur d'eau
34  ! rain----output-R-la pluie (mm/s)
35  ! snow----output-R-la neige (mm/s)
36  ! upwd----output-R-saturated updraft mass flux (kg/m**2/s)
37  ! dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
38  ! dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
39  ! Cape----output-R-CAPE (J/kg)
40  ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
41  ! adiabatiquement a partir du niveau 1 (K)
42  ! deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
43  ! Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
44  ! ======================================================================
45
46  REAL dtime, paprs(klon, klev + 1), pplay(klon, klev)
47  REAL t(klon, klev), q(klon, klev), u(klon, klev), v(klon, klev)
48  REAL tra(klon, klev, nbtr)
49  INTEGER ntra
50  REAL work1(klon, klev), work2(klon, klev)
51
52  REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, klev)
53  REAL d_tra(klon, klev, nbtr)
54  REAL rain(klon), snow(klon)
55
56  INTEGER kbas(klon), ktop(klon)
57  REAL em_ph(klon, klev + 1), em_p(klon, klev)
58  REAL upwd(klon, klev), dnwd(klon, klev), dnwdbis(klon, klev)
59  REAL ma(klon, klev), cape(klon), tvp(klon, klev)
60  INTEGER iflag(klon)
61  REAL rflag(klon)
62  REAL pbase(klon), bbase(klon)
63  REAL dtvpdt1(klon, klev), dtvpdq1(klon, klev)
64  REAL dplcldt(klon), dplcldr(klon)
65
66  REAL zx_t, zdelta, zx_qs, zcor
67
68  INTEGER noff, minorig
69  INTEGER i, k, itra
70  REAL qs(klon, klev)
71  REAL, ALLOCATABLE, SAVE :: cbmf(:)
72  !$OMP THREADPRIVATE(cbmf)
73  INTEGER ifrst
74  SAVE ifrst
75  DATA ifrst/0/
76  !$OMP THREADPRIVATE(ifrst)
77
78  IF (ifrst==0) THEN
79    ifrst = 1
80    ALLOCATE (cbmf(klon))
81    DO i = 1, klon
82      cbmf(i) = 0.
83    END DO
84  END IF
85
86  DO k = 1, klev + 1
87    DO i = 1, klon
88      em_ph(i, k) = paprs(i, k) / 100.0
89    END DO
90  END DO
91
92  DO k = 1, klev
93    DO i = 1, klon
94      em_p(i, k) = pplay(i, k) / 100.0
95    END DO
96  END DO
97
98  DO k = 1, klev
99    DO i = 1, klon
100      zx_t = t(i, k)
101      zdelta = max(0., sign(1., rtt - zx_t))
102      zx_qs = min(0.5, r2es * foeew(zx_t, zdelta) / em_p(i, k) / 100.0)
103      zcor = 1. / (1. - retv * zx_qs)
104      qs(i, k) = zx_qs * zcor
105    END DO
106  END DO
107
108  noff = 2
109  minorig = 2
110  CALL convect1(klon, klev, klev + 1, noff, minorig, t, q, qs, u, v, em_p, &
111          em_ph, iflag, d_t, d_q, d_u, d_v, rain, cbmf, dtime, ma)
112
113  DO i = 1, klon
114    rain(i) = rain(i) / 86400.
115    rflag(i) = iflag(i)
116  END DO
117  ! CALL dump2d(iim,jjm-1,rflag(2:klon-1),'FLAG CONVECTION   ')
118  ! if (klon.EQ.1) THEN
119  ! PRINT*,'IFLAG ',iflag
120  ! else
121  ! WRITE(*,'(96i1)') (iflag(i),i=2,klon-1)
122  ! END IF
123  DO k = 1, klev
124    DO i = 1, klon
125      d_t(i, k) = dtime * d_t(i, k)
126      d_q(i, k) = dtime * d_q(i, k)
127      d_u(i, k) = dtime * d_u(i, k)
128      d_v(i, k) = dtime * d_v(i, k)
129    END DO
130    DO itra = 1, ntra
131      DO i = 1, klon
132        d_tra(i, k, itra) = 0.
133      END DO
134    END DO
135  END DO
136
137END SUBROUTINE conemav
138
Note: See TracBrowser for help on using the repository browser.