GCC Code Coverage Report


Directory: ./
File: phys/calwake.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 143 145 98.6%
Branches: 93 96 96.9%

Line Branch Exec Source
1
2 ! $Id: calwake.F90 3208 2018-02-16 11:42:18Z jyg $
3
4 480 SUBROUTINE calwake(iflag_wake_tend, paprs, pplay, dtime, &
5 t, q, omgb, &
6 dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, wgen, &
7 sigd, Cin, &
8 480 wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens, &
9 wake_dth, wake_h, &
10 wake_pe, wake_fip, wake_gfl, &
11 480 dt_wake, dq_wake, wake_k, t_x, q_x, wake_omgbdth, &
12 wake_dp_omgb, &
13 wake_dtke, wake_dqke, &
14 wake_omg, wake_dp_deltomg, &
15 wake_spread, wake_cstar, wake_d_deltat_gw, &
16 wake_ddeltat, wake_ddeltaq, wake_ds, awake_ddens, wake_ddens)
17 ! **************************************************************
18 ! *
19 ! CALWAKE *
20 ! interface avec le schema de calcul de la poche *
21 ! froide *
22 ! *
23 ! written by : CHERUY Frederique, 13/03/2000, 10.31.05 *
24 ! modified by : ROEHRIG Romain, 01/30/2007 *
25 ! **************************************************************
26
27 USE dimphy
28 USE phys_state_var_mod, ONLY: pctsrf
29 USE indice_sol_mod, ONLY: is_oce
30 USE print_control_mod, ONLY: mydebug=>debug , lunout, prt_level
31 IMPLICIT NONE
32 ! ======================================================================
33 include "YOMCST.h"
34
35 ! Arguments
36 ! ----------
37 ! Input
38 ! ----
39 INTEGER, INTENT (IN) :: iflag_wake_tend
40 REAL, INTENT (IN) :: dtime
41 REAL, DIMENSION(klon, klev), INTENT (IN) :: pplay
42 REAL, DIMENSION(klon, klev+1), INTENT (IN) :: paprs
43 REAL, DIMENSION(klon, klev), INTENT (IN) :: t, q, omgb
44 REAL, DIMENSION(klon, klev), INTENT (IN) :: dt_dwn, dq_dwn
45 REAL, DIMENSION(klon, klev), INTENT (IN) :: m_up, m_dwn
46 REAL, DIMENSION(klon, klev), INTENT (IN) :: dt_a, dq_a
47 REAL, DIMENSION(klon), INTENT (IN) :: wgen
48 REAL, DIMENSION(klon), INTENT (IN) :: sigd
49 REAL, DIMENSION(klon), INTENT (IN) :: Cin
50 ! Input/Output
51 ! ------------
52 REAL, DIMENSION(klon, klev), INTENT (INOUT) :: wake_deltat, wake_deltaq
53 REAL, DIMENSION(klon), INTENT (INOUT) :: wake_s
54 REAL, DIMENSION(klon), INTENT (INOUT) :: awake_dens, wake_dens
55 ! Output
56 ! ------
57 REAL, DIMENSION(klon, klev), INTENT (OUT) :: dt_wake, dq_wake
58 !!jyg REAL, DIMENSION(klon), INTENT (OUT) :: wake_k
59 INTEGER, DIMENSION(klon), INTENT (OUT) :: wake_k
60 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_d_deltat_gw
61 REAL, DIMENSION(klon), INTENT (OUT) :: wake_h
62 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_dth
63 REAL, DIMENSION(klon), INTENT (OUT) :: wake_pe, wake_fip, wake_gfl
64 REAL, DIMENSION(klon, klev), INTENT (OUT) :: t_x, q_x
65 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_omgbdth, wake_dp_omgb
66 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_dtke, wake_dqke
67 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_omg, wake_dp_deltomg
68 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_spread
69 REAL, DIMENSION(klon), INTENT (OUT) :: wake_cstar
70 REAL, DIMENSION(klon, klev), INTENT (OUT) :: wake_ddeltat, wake_ddeltaq
71 REAL, DIMENSION(klon), INTENT (OUT) :: wake_ds, awake_ddens, wake_ddens
72
73
74 ! Variable internes
75 ! -----------------
76 LOGICAL, SAVE :: first = .TRUE.
77 !$OMP THREADPRIVATE(first)
78 INTEGER :: i, l
79 960 INTEGER, DIMENSION(klon) :: znatsurf ! 0 if pctsrf(is_oce)>0.1; 1 else.
80 REAL :: aire
81 960 REAL, DIMENSION(klon, klev) :: p, pi
82 960 REAL, DIMENSION(klon, klev+1) :: ph
83 960 REAL, DIMENSION(klon, klev) :: omgbe
84 960 REAL, DIMENSION(klon, klev) :: te, qe
85 960 REAL, DIMENSION(klon, klev) :: dtdwn, dqdwn
86 960 REAL, DIMENSION(klon, klev) :: dta, dqa
87 960 REAL, DIMENSION(klon, klev) :: amdwn, amup
88 960 REAL, DIMENSION(klon, klev) :: dtw, dqw, dth
89 960 REAL, DIMENSION(klon, klev) :: dtls, dqls
90 960 REAL, DIMENSION(klon, klev) :: tx, qx
91 960 REAL, DIMENSION(klon) :: hw, wape, fip, gfl
92 960 REAL, DIMENSION(klon) :: sigmaw, awdens, wdens
93 960 REAL, DIMENSION(klon, klev) :: omgbdth
94 960 REAL, DIMENSION(klon, klev) :: dp_omgb
95 960 REAL, DIMENSION(klon, klev) :: dtke, dqke
96 960 REAL, DIMENSION(klon, klev) :: omg
97 960 REAL, DIMENSION(klon, klev) :: dp_deltomg, spread
98 960 REAL, DIMENSION(klon) :: cstar
99 960 REAL, DIMENSION(klon) :: sigd0
100 960 INTEGER, DIMENSION(klon) :: ktopw
101 960 REAL, DIMENSION(klon, klev) :: d_deltat_gw
102 960 REAL, DIMENSION(klon, klev) :: d_deltatw, d_deltaqw
103 960 REAL, DIMENSION(klon) :: d_sigmaw, d_awdens, d_wdens
104
105 REAL :: rdcp
106
107
108
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
480 IF (prt_level >= 10) THEN
109 print *, '-> calwake, wake_s, wgen input ', wake_s(1), wgen(1)
110 ENDIF
111
112 rdcp = 1./3.5
113
114
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 znatsurf(:) = 0
115
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1,klon
116
2/2
✓ Branch 0 taken 159645 times.
✓ Branch 1 taken 317475 times.
477600 IF (pctsrf(i,is_oce) < 0.1) znatsurf(i) = 1
117 ENDDO
118
119
120 ! -----------------------------------------------------------
121 ! IM 290108 DO 999 i=1,klon ! a vectoriser
122 ! ----------------------------------------------------------
123
124
125
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
126
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
127 18607680 p(i, l) = pplay(i, l)
128 18607680 ph(i, l) = paprs(i, l)
129 18607680 pi(i, l) = (pplay(i,l)/100000.)**rdcp
130
131 18607680 te(i, l) = t(i, l)
132 18607680 qe(i, l) = q(i, l)
133 18607680 omgbe(i, l) = omgb(i, l)
134
135 18607680 dtdwn(i, l) = dt_dwn(i, l)
136 18607680 dqdwn(i, l) = dq_dwn(i, l)
137 18607680 dta(i, l) = dt_a(i, l)
138 18626400 dqa(i, l) = dq_a(i, l)
139 END DO
140 END DO
141
142 !----------------------------------------------------------------
143 ! Initialize tendencies to zero
144 !----------------------------------------------------------------
145
4/4
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
18626880 dtls(:,:) = 0.
146
4/4
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
18626880 dqls(:,:) = 0.
147
4/4
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
18626880 d_deltat_gw(:,:) = 0.
148
4/4
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
18626880 d_deltatw(:,:) = 0.
149
4/4
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
✓ Branch 2 taken 18607680 times.
✓ Branch 3 taken 18720 times.
18626880 d_deltaqw(:,:) = 0.
150
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 d_sigmaw(:) = 0.
151
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 d_awdens(:) = 0.
152
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 d_wdens(:) = 0.
153 !
154
155
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
156 477600 sigd0(i) = sigd(i)
157 END DO
158 ! print*, 'sigd0,sigd', sigd0, sigd(i)
159
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
160 477600 ph(i, klev+1) = 0.
161 END DO
162
163 !!jyg! DO i = 1, klon
164 !!jyg! ktopw(i) = NINT(wake_k(i))
165 !!jyg! END DO
166
167
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
168 477600 hw(i) = wake_h(i)
169 END DO
170 !
171 ! Make a copy of state variables
172
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
173
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
174 18607680 dtw(i, l) = wake_deltat(i, l)
175 18626400 dqw(i, l) = wake_deltaq(i, l)
176 END DO
177 END DO
178
179
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
180 477600 sigmaw(i) = wake_s(i)
181 END DO
182
183
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
184 477120 awdens(i) = max(0., awake_dens(i))
185 477600 wdens(i) = max(0., wake_dens(i))
186 END DO
187
188 ! fkc les flux de masses sont evalues aux niveaux et valent 0 a la surface
189 ! fkc on veut le flux de masse au milieu des couches
190
191
2/2
✓ Branch 0 taken 18240 times.
✓ Branch 1 taken 480 times.
18720 DO l = 1, klev - 1
192
2/2
✓ Branch 0 taken 18130560 times.
✓ Branch 1 taken 18240 times.
18149280 DO i = 1, klon
193 18130560 amdwn(i, l) = 0.5*(m_dwn(i,l)+m_dwn(i,l+1))
194 18148800 amdwn(i, l) = (m_dwn(i,l+1))
195 END DO
196 END DO
197
198 ! au sommet le flux de masse est nul
199
200
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
201 477600 amdwn(i, klev) = 0.5*m_dwn(i, klev)
202 END DO
203
204
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
205
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
206 18626400 amup(i, l) = m_up(i, l)
207 END DO
208 END DO
209
210 CALL wake(znatsurf, p, ph, pi, dtime, &
211 te, qe, omgbe, &
212 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
213 sigd0, Cin, &
214 dtw, dqw, sigmaw, awdens, wdens, & ! state variables
215 dth, hw, wape, fip, gfl, &
216 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
217 dtke, dqke, omg, dp_deltomg, spread, cstar, &
218 d_deltat_gw, &
219 480 d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens) ! tendencies
220
221 !
222
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
223
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
224
2/2
✓ Branch 0 taken 3220035 times.
✓ Branch 1 taken 15387645 times.
18626400 IF (ktopw(i)>0) THEN
225 3220035 wake_d_deltat_gw(i, l) = d_deltat_gw(i, l)
226 3220035 wake_omgbdth(i, l) = omgbdth(i, l)
227 3220035 wake_dp_omgb(i, l) = dp_omgb(i, l)
228 3220035 wake_dtke(i, l) = dtke(i, l)
229 3220035 wake_dqke(i, l) = dqke(i, l)
230 3220035 wake_omg(i, l) = omg(i, l)
231 3220035 wake_dp_deltomg(i, l) = dp_deltomg(i, l)
232 3220035 wake_spread(i, l) = spread(i, l)
233 3220035 wake_dth(i, l) = dth(i, l)
234 3220035 dt_wake(i, l) = dtls(i, l)*dtime ! derivative -> tendency
235 3220035 dq_wake(i, l) = dqls(i, l)*dtime ! derivative -> tendency
236 3220035 t_x(i, l) = tx(i, l)
237 3220035 q_x(i, l) = qx(i, l)
238 ELSE
239 15387645 wake_d_deltat_gw(i, l) = 0.
240 15387645 wake_omgbdth(i, l) = 0.
241 15387645 wake_dp_omgb(i, l) = 0.
242 15387645 wake_dtke(i, l) = 0.
243 15387645 wake_dqke(i, l) = 0.
244 15387645 wake_omg(i, l) = 0.
245 15387645 wake_dp_deltomg(i, l) = 0.
246 15387645 wake_spread(i, l) = 0.
247 15387645 wake_dth(i, l) = 0.
248 15387645 dt_wake(i, l) = 0.
249 15387645 dq_wake(i, l) = 0.
250 15387645 t_x(i, l) = te(i, l)
251 15387645 q_x(i, l) = qe(i, l)
252 END IF
253 END DO
254 END DO
255
256
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
257 477120 wake_h(i) = hw(i)
258 477120 wake_pe(i) = wape(i)
259 477120 wake_fip(i) = fip(i)
260 477120 wake_gfl(i) = gfl(i)
261 477120 wake_k(i) = ktopw(i)
262 477600 wake_cstar(i) = cstar(i)
263 END DO
264
265 ! Tendencies of state variables
266
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
267
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
268
2/2
✓ Branch 0 taken 3220035 times.
✓ Branch 1 taken 15387645 times.
18626400 IF (ktopw(i)>0) THEN
269 3220035 wake_ddeltat(i, l) = d_deltatw(i, l)*dtime
270 3220035 wake_ddeltaq(i, l) = d_deltaqw(i, l)*dtime
271 ELSE
272 15387645 wake_ddeltat(i, l) = -wake_deltat(i, l)
273 15387645 wake_ddeltaq(i, l) = -wake_deltaq(i, l)
274 END IF
275 END DO
276 END DO
277
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
278
2/2
✓ Branch 0 taken 82565 times.
✓ Branch 1 taken 394555 times.
477600 IF (ktopw(i)>0) THEN
279 82565 wake_ds(i) = d_sigmaw(i)*dtime
280 82565 awake_ddens(i) = d_awdens(i)*dtime
281 82565 wake_ddens(i) = d_wdens(i)*dtime
282 ELSE
283 394555 wake_ds(i) = -wake_s(i)
284 394555 wake_ddens(i)= -wake_dens(i)
285 END IF
286 END DO
287 !
288
289 !jyg<
290
1/2
✓ Branch 0 taken 480 times.
✗ Branch 1 not taken.
480 IF (iflag_wake_tend .EQ. 0) THEN
291 ! Update State variables
292
2/2
✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
19200 DO l = 1, klev
293
2/2
✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 18720 times.
18626880 DO i = 1, klon
294
2/2
✓ Branch 0 taken 3220035 times.
✓ Branch 1 taken 15387645 times.
18626400 IF (ktopw(i)>0) THEN
295 3220035 wake_deltat(i, l) = dtw(i, l)
296 3220035 wake_deltaq(i, l) = dqw(i, l)
297 ELSE
298 15387645 wake_deltat(i, l) = 0.
299 15387645 wake_deltaq(i, l) = 0.
300 END IF
301 END DO
302 END DO
303
2/2
✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
477600 DO i = 1, klon
304 477120 wake_s(i) = sigmaw(i)
305 477120 awake_dens(i) = awdens(i)
306 477600 wake_dens(i) = wdens(i)
307 END DO
308 ENDIF ! (iflag_wake_tend .EQ. 0)
309 !
310
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 479 times.
480 IF (first) THEN
311
2/2
✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
995 DO i = 1,klon
312
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 994 times.
995 IF (wake_dens(i) < -1.) THEN
313 wake_dens(i) = wdens(i)
314 ENDIF
315 ENDDO
316 1 first=.false.
317 ENDIF ! (first)
318 !>jyg
319
320 480 RETURN
321 END SUBROUTINE calwake
322
323