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

Last change on this file since 5143 was 5143, checked in by abarral, 3 months ago

Put YOEGWD.h, FCTTRE.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
12  IMPLICIT NONE
13  ! ======================================================================
14  ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
15  ! Objet: schema de convection de Emanuel (1991) interface
16  ! ======================================================================
17  ! Arguments:
18  ! dtime--input-R-pas d'integration (s)
19  ! s-------input-R-la valeur "s" pour chaque couche
20  ! sigs----input-R-la valeur "sigma" de chaque couche
21  ! sig-----input-R-la valeur de "sigma" pour chaque niveau
22  ! psolpa--input-R-la pression au sol (en Pa)
23  ! pskapa--input-R-exponentiel kappa de psolpa
24  ! h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
25  ! q-------input-R-vapeur d'eau (en kg/kg)
26
27  ! work*: input et output: deux variables de travail,
28  ! on peut les mettre a 0 au debut
29  ! ALE-----input-R-energie disponible pour soulevement
30
31  ! d_h-----output-R-increment de l'enthalpie potentielle (h)
32  ! d_q-----output-R-increment de la vapeur d'eau
33  ! rain----output-R-la pluie (mm/s)
34  ! snow----output-R-la neige (mm/s)
35  ! upwd----output-R-saturated updraft mass flux (kg/m**2/s)
36  ! dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
37  ! dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
38  ! Cape----output-R-CAPE (J/kg)
39  ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
40  ! adiabatiquement a partir du niveau 1 (K)
41  ! deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
42  ! Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
43  ! ======================================================================
44
45  REAL dtime, paprs(klon, klev + 1), pplay(klon, klev)
46  REAL t(klon, klev), q(klon, klev), u(klon, klev), v(klon, klev)
47  REAL tra(klon, klev, nbtr)
48  INTEGER ntra
49  REAL work1(klon, klev), work2(klon, klev)
50
51  REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, klev)
52  REAL d_tra(klon, klev, nbtr)
53  REAL rain(klon), snow(klon)
54
55  INTEGER kbas(klon), ktop(klon)
56  REAL em_ph(klon, klev + 1), em_p(klon, klev)
57  REAL upwd(klon, klev), dnwd(klon, klev), dnwdbis(klon, klev)
58  REAL ma(klon, klev), cape(klon), tvp(klon, klev)
59  INTEGER iflag(klon)
60  REAL rflag(klon)
61  REAL pbase(klon), bbase(klon)
62  REAL dtvpdt1(klon, klev), dtvpdq1(klon, klev)
63  REAL dplcldt(klon), dplcldr(klon)
64
65  REAL zx_t, zdelta, zx_qs, zcor
66
67  INTEGER noff, minorig
68  INTEGER i, k, itra
69  REAL qs(klon, klev)
70  REAL, ALLOCATABLE, SAVE :: cbmf(:)
71  !$OMP THREADPRIVATE(cbmf)
72  INTEGER ifrst
73  SAVE ifrst
74  DATA ifrst/0/
75  !$OMP THREADPRIVATE(ifrst)
76  include "YOMCST.h"
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.