GCC Code Coverage Report


Directory: ./
File: phys/conemav.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 40 0.0%
Branches: 0 32 0.0%

Line Branch Exec Source
1
2 ! $Header$
3
4 SUBROUTINE conemav(dtime, paprs, pplay, t, q, u, v, tra, ntra, work1, work2, &
5 d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, ktop, upwd, dnwd, dnwdbis, &
6 ma, cape, tvp, iflag, pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr)
7
8
9 USE dimphy
10 USE infotrac_phy, ONLY: nbtr
11 IMPLICIT NONE
12 ! ======================================================================
13 ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
14 ! Objet: schema de convection de Emanuel (1991) interface
15 ! ======================================================================
16 ! Arguments:
17 ! dtime--input-R-pas d'integration (s)
18 ! s-------input-R-la valeur "s" pour chaque couche
19 ! sigs----input-R-la valeur "sigma" de chaque couche
20 ! sig-----input-R-la valeur de "sigma" pour chaque niveau
21 ! psolpa--input-R-la pression au sol (en Pa)
22 ! pskapa--input-R-exponentiel kappa de psolpa
23 ! h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
24 ! q-------input-R-vapeur d'eau (en kg/kg)
25
26 ! work*: input et output: deux variables de travail,
27 ! on peut les mettre a 0 au debut
28 ! ALE-----input-R-energie disponible pour soulevement
29
30 ! d_h-----output-R-increment de l'enthalpie potentielle (h)
31 ! d_q-----output-R-increment de la vapeur d'eau
32 ! rain----output-R-la pluie (mm/s)
33 ! snow----output-R-la neige (mm/s)
34 ! upwd----output-R-saturated updraft mass flux (kg/m**2/s)
35 ! dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
36 ! dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
37 ! Cape----output-R-CAPE (J/kg)
38 ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
39 ! adiabatiquement a partir du niveau 1 (K)
40 ! deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
41 ! Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
42 ! ======================================================================
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 include "YOETHF.h"
78 include "FCTTRE.h"
79
80
81 IF (ifrst==0) THEN
82 ifrst = 1
83 ALLOCATE (cbmf(klon))
84 DO i = 1, klon
85 cbmf(i) = 0.
86 END DO
87 END IF
88
89 DO k = 1, klev + 1
90 DO i = 1, klon
91 em_ph(i, k) = paprs(i, k)/100.0
92 END DO
93 END DO
94
95 DO k = 1, klev
96 DO i = 1, klon
97 em_p(i, k) = pplay(i, k)/100.0
98 END DO
99 END DO
100
101
102 DO k = 1, klev
103 DO i = 1, klon
104 zx_t = t(i, k)
105 zdelta = max(0., sign(1.,rtt-zx_t))
106 zx_qs = min(0.5, r2es*foeew(zx_t,zdelta)/em_p(i,k)/100.0)
107 zcor = 1./(1.-retv*zx_qs)
108 qs(i, k) = zx_qs*zcor
109 END DO
110 END DO
111
112 noff = 2
113 minorig = 2
114 CALL convect1(klon, klev, klev+1, noff, minorig, t, q, qs, u, v, em_p, &
115 em_ph, iflag, d_t, d_q, d_u, d_v, rain, cbmf, dtime, ma)
116
117 DO i = 1, klon
118 rain(i) = rain(i)/86400.
119 rflag(i) = iflag(i)
120 END DO
121 ! call dump2d(iim,jjm-1,rflag(2:klon-1),'FLAG CONVECTION ')
122 ! if (klon.eq.1) then
123 ! print*,'IFLAG ',iflag
124 ! else
125 ! write(*,'(96i1)') (iflag(i),i=2,klon-1)
126 ! endif
127 DO k = 1, klev
128 DO i = 1, klon
129 d_t(i, k) = dtime*d_t(i, k)
130 d_q(i, k) = dtime*d_q(i, k)
131 d_u(i, k) = dtime*d_u(i, k)
132 d_v(i, k) = dtime*d_v(i, k)
133 END DO
134 DO itra = 1, ntra
135 DO i = 1, klon
136 d_tra(i, k, itra) = 0.
137 END DO
138 END DO
139 END DO
140
141
142
143
144 RETURN
145 END SUBROUTINE conemav
146
147