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

Last change on this file since 5441 was 5153, checked in by abarral, 5 months ago

Revert FCTTRE to INCLUDE to assess impact of inlining

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