GCC Code Coverage Report


Directory: ./
File: phys/cv3_cine.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 179 182 98.4%
Branches: 209 216 96.8%

Line Branch Exec Source
1
2 ! $Id: cv3_cine.F90 2416 2015-12-24 11:58:33Z jyg $
3
4 745478 SUBROUTINE cv3_cine(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, &
5 240 cina, cinb, plfc)
6
7 ! **************************************************************
8 ! *
9 ! CV3_CINE *
10 ! *
11 ! *
12 ! written by : Frederique Cheruy *
13 ! vectorization: Jean-Yves Grandpeix, 19/06/2003, 11.54.43 *
14 ! modified by : *
15 ! **************************************************************
16
17 IMPLICIT NONE
18
19 include "YOMCST.h"
20 include "cvthermo.h"
21 include "cv3param.h"
22 ! input:
23 INTEGER ncum, nd, nloc
24 INTEGER icb(nloc), inb(nloc)
25 REAL pbase(nloc), plcl(nloc)
26 REAL p(nloc, nd), ph(nloc, nd+1)
27 REAL tv(nloc, nd), tvp(nloc, nd)
28
29 ! output
30 REAL cina(nloc), cinb(nloc), plfc(nloc)
31
32 ! local variables
33 INTEGER il, i, j, k
34 480 INTEGER itop(nloc), ineg(nloc), ilow(nloc)
35 480 INTEGER ifst(nloc), isublcl(nloc)
36 480 LOGICAL lswitch(nloc), lswitch1(nloc), lswitch2(nloc), lswitch3(nloc)
37 480 LOGICAL exist_lfc(nloc)
38 REAL dpmax
39 REAL deltap, dcin
40 480 REAL buoylcl(nloc), tvplcl(nloc), tvlcl(nloc)
41 480 REAL p0(nloc)
42 480 REAL buoyz(nloc), buoy(nloc, nd)
43
44 ! -------------------------------------------------------------
45 ! Initialization
46 ! -------------------------------------------------------------
47
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
48 127097 cina(il) = 0.
49 127337 cinb(il) = 0.
50 END DO
51
52 ! --------------------------------------------------------------
53 ! Recompute buoyancies
54 ! --------------------------------------------------------------
55
2/2
✓ Branch 0 taken 9360 times.
✓ Branch 1 taken 240 times.
9600 DO k = 1, nd
56
2/2
✓ Branch 0 taken 4956783 times.
✓ Branch 1 taken 9360 times.
4966383 DO il = 1, ncum
57 ! print*,'tvp tv=',tvp(il,k),tv(il,k)
58 4966143 buoy(il, k) = tvp(il, k) - tv(il, k)
59 END DO
60 END DO
61 ! ---------------------------------------------------------------
62
63 ! calcul de la flottabilite a LCL (Buoylcl)
64 ! ifst = first P-level above lcl
65 ! isublcl = highest P-level below lcl.
66 ! ---------------------------------------------------------------
67
68
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
69 127337 tvplcl(il) = tvp(il, 1)*(plcl(il)/p(il,1))**(2./7.) !For dry air, R/Cp=2/7
70 END DO
71
72
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
73
2/2
✓ Branch 0 taken 58224 times.
✓ Branch 1 taken 68873 times.
127337 IF (plcl(il)>p(il,icb(il))) THEN
74 58224 ifst(il) = icb(il)
75 58224 isublcl(il) = icb(il) - 1
76 ELSE
77 68873 ifst(il) = icb(il) + 1
78 68873 isublcl(il) = icb(il)
79 END IF
80 END DO
81
82
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
83 tvlcl(il) = tv(il, ifst(il)-1) + (tv(il,ifst(il))-tv(il,ifst(il)-1))*( &
84 127337 plcl(il)-p(il,ifst(il)-1))/(p(il,ifst(il))-p(il,ifst(il)-1))
85 END DO
86
87
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
88 127337 buoylcl(il) = tvplcl(il) - tvlcl(il)
89 END DO
90
91 ! ---------------------------------------------------------------
92 ! premiere couche contenant un niveau de flotabilite positive
93 ! et premiere couche contenant un niveau de flotabilite negative
94 ! au dessus du niveau de condensation
95 ! ---------------------------------------------------------------
96
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
97 127097 itop(il) = nl - 1
98 127097 ineg(il) = nl - 1
99 127337 exist_lfc(il) = .FALSE.
100 END DO
101
2/2
✓ Branch 0 taken 6240 times.
✓ Branch 1 taken 240 times.
6480 DO k = nl - 1, 1, -1
102
2/2
✓ Branch 0 taken 3304522 times.
✓ Branch 1 taken 6240 times.
3311002 DO il = 1, ncum
103
2/2
✓ Branch 0 taken 2715198 times.
✓ Branch 1 taken 589324 times.
3310762 IF (k>=ifst(il)) THEN
104
2/2
✓ Branch 0 taken 922535 times.
✓ Branch 1 taken 1792663 times.
2715198 IF (buoy(il,k)>0.) THEN
105 922535 itop(il) = k
106 922535 exist_lfc(il) = .TRUE.
107 ELSE
108 1792663 ineg(il) = k
109 END IF
110 END IF
111 END DO
112 END DO
113
114 ! ---------------------------------------------------------------
115 ! When there is no positive buoyancy level, set Plfc, Cina and Cinb
116 ! to arbitrary extreme values.
117 ! ---------------------------------------------------------------
118
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
119
2/2
✓ Branch 0 taken 7523 times.
✓ Branch 1 taken 119574 times.
127337 IF (.NOT. exist_lfc(il)) THEN
120 7523 plfc(il) = 1.111
121 7523 cinb(il) = -1111.
122 7523 cina(il) = -1112.
123 END IF
124 END DO
125
126
127 ! ---------------------------------------------------------------
128 ! -- Two cases : BUOYlcl >= 0 and BUOYlcl < 0.
129 ! ---------------------------------------------------------------
130
131 ! --------------------
132 ! -- 1.0 BUOYlcl >=0.
133 ! --------------------
134
135 dpmax = 50.
136
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
137
4/4
✓ Branch 0 taken 32430 times.
✓ Branch 1 taken 94667 times.
✓ Branch 2 taken 217 times.
✓ Branch 3 taken 32213 times.
127097 lswitch1(il) = buoylcl(il) >= 0. .AND. exist_lfc(il)
138 127337 lswitch(il) = lswitch1(il)
139 END DO
140
141 ! 1.1 No inhibition case
142 ! ----------------------
143 ! If buoyancy is positive at LCL and stays positive over a large enough
144 ! pressure interval (=DPMAX), inhibition is set to zero,
145
146
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
147
2/2
✓ Branch 0 taken 32213 times.
✓ Branch 1 taken 94884 times.
127337 IF (lswitch(il)) THEN
148
2/2
✓ Branch 0 taken 27749 times.
✓ Branch 1 taken 4464 times.
32213 IF (p(il,ineg(il))<p(il,icb(il))-dpmax) THEN
149 27749 plfc(il) = plcl(il)
150 27749 cina(il) = 0.
151 27749 cinb(il) = 0.
152 END IF
153 END IF
154 END DO
155
156 ! 1.2 Upper inhibition only case
157 ! ------------------------------
158
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
159 127097 lswitch2(il) = p(il, ineg(il)) >= p(il, icb(il)) - dpmax
160
4/4
✓ Branch 0 taken 32213 times.
✓ Branch 1 taken 94884 times.
✓ Branch 2 taken 27749 times.
✓ Branch 3 taken 4464 times.
249970 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
161 END DO
162
163 ! 1.2.1 Recompute itop (=1st layer with positive buoyancy above ineg)
164 ! -------------------------------------------------------------------
165
166
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
167
2/2
✓ Branch 0 taken 4464 times.
✓ Branch 1 taken 122633 times.
127337 IF (lswitch(il)) THEN
168 4464 itop(il) = nl - 1
169 END IF
170 END DO
171
172
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 240 times.
6720 DO k = nl, 1, -1
173
2/2
✓ Branch 0 taken 3431619 times.
✓ Branch 1 taken 6480 times.
3438339 DO il = 1, ncum
174
2/2
✓ Branch 0 taken 120528 times.
✓ Branch 1 taken 3311091 times.
3438099 IF (lswitch(il)) THEN
175
4/4
✓ Branch 0 taken 103528 times.
✓ Branch 1 taken 17000 times.
✓ Branch 2 taken 14918 times.
✓ Branch 3 taken 88610 times.
120528 IF (k>=ineg(il) .AND. buoy(il,k)>0) THEN
176 14918 itop(il) = k
177 END IF
178 END IF
179 END DO
180 END DO
181
182 ! If there is no layer with positive buoyancy above ineg, set Plfc,
183 ! Cina and Cinb to arbitrary extreme values.
184
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
185
4/4
✓ Branch 0 taken 4464 times.
✓ Branch 1 taken 122633 times.
✓ Branch 2 taken 736 times.
✓ Branch 3 taken 3728 times.
127337 IF (lswitch(il) .AND. itop(il) == nl - 1) THEN
186 736 plfc(il) = 1.121
187 736 cinb(il) = -1121.
188 736 cina(il) = -1122.
189 END IF
190 END DO
191
192
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
193 127097 lswitch3(il) = itop(il) < nl -1
194
6/6
✓ Branch 0 taken 32213 times.
✓ Branch 1 taken 94884 times.
✓ Branch 2 taken 4464 times.
✓ Branch 3 taken 27749 times.
✓ Branch 4 taken 736 times.
✓ Branch 5 taken 3728 times.
250706 lswitch(il) = lswitch1(il) .AND. lswitch2(il) .AND. lswitch3(il)
195 END DO
196
197
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
198
2/2
✓ Branch 0 taken 3728 times.
✓ Branch 1 taken 123369 times.
127337 IF (lswitch(il)) THEN
199 3728 cinb(il) = 0.
200
201 ! 1.2.2 Calcul de la pression du niveau de flot. nulle juste au-dessus
202 ! de LCL
203 ! ---------------------------------------------------------------------------
204
2/2
✓ Branch 0 taken 288 times.
✓ Branch 1 taken 3440 times.
3728 IF (ineg(il)>isublcl(il)+1) THEN
205 ! In order to get P0, one may interpolate linearly buoyancies
206 ! between P(ineg) and P(ineg-1).
207 p0(il) = (buoy(il,ineg(il))*p(il,ineg(il)-1)-buoy(il,ineg(il)-1)*p(il,ineg(il)))/ &
208 288 (buoy(il,ineg(il))-buoy(il,ineg(il)-1))
209 ELSE
210 ! In order to get P0, one has to interpolate between P(ineg) and
211 ! Plcl.
212 p0(il) = (buoy(il,ineg(il))*plcl(il)-buoylcl(il)*p(il,ineg(il)))/ &
213 3440 (buoy(il,ineg(il))-buoylcl(il))
214 END IF
215 END IF
216 END DO
217
218 ! 1.2.3 Computation of PLFC
219 ! -------------------------
220
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
221
2/2
✓ Branch 0 taken 3728 times.
✓ Branch 1 taken 123369 times.
127337 IF (lswitch(il)) THEN
222 plfc(il) = (buoy(il,itop(il))*p(il,itop(il)-1)-buoy(il,itop( &
223 3728 il)-1)*p(il,itop(il)))/(buoy(il,itop(il))-buoy(il,itop(il)-1))
224 END IF
225 END DO
226
227 ! 1.2.4 Computation of CINA
228 ! -------------------------
229
230 ! Upper part of CINA : integral from P(itop-1) to Plfc
231
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
232
2/2
✓ Branch 0 taken 3728 times.
✓ Branch 1 taken 123369 times.
127337 IF (lswitch(il)) THEN
233 3728 deltap = p(il, itop(il)-1) - plfc(il)
234 3728 dcin = rd*buoy(il, itop(il)-1)*deltap/(p(il,itop(il)-1)+plfc(il))
235 3728 cina(il) = min(0., dcin)
236 END IF
237 END DO
238
239 ! Middle part of CINA : integral from P(ineg) to P(itop-1)
240
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 240 times.
6720 DO k = 1, nl
241
2/2
✓ Branch 0 taken 3431619 times.
✓ Branch 1 taken 6480 times.
3438339 DO il = 1, ncum
242
2/2
✓ Branch 0 taken 100656 times.
✓ Branch 1 taken 3330963 times.
3438099 IF (lswitch(il)) THEN
243
4/4
✓ Branch 0 taken 87415 times.
✓ Branch 1 taken 13241 times.
✓ Branch 2 taken 624 times.
✓ Branch 3 taken 86791 times.
100656 IF (k>=ineg(il) .AND. k<=itop(il)-2) THEN
244 624 deltap = p(il, k) - p(il, k+1)
245 624 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
246 624 cina(il) = cina(il) + min(0., dcin)
247 END IF
248 END IF
249 END DO
250 END DO
251
252 ! Lower part of CINA : integral from P0 to P(ineg)
253
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
254
2/2
✓ Branch 0 taken 3728 times.
✓ Branch 1 taken 123369 times.
127337 IF (lswitch(il)) THEN
255 3728 deltap = p0(il) - p(il, ineg(il))
256 3728 dcin = rd*buoy(il, ineg(il))*deltap/(p(il,ineg(il))+p0(il))
257 3728 cina(il) = cina(il) + min(0., dcin)
258 END IF
259 END DO
260
261
262 ! ------------------
263 ! -- 2.0 BUOYlcl <0.
264 ! ------------------
265
266
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
267
4/4
✓ Branch 0 taken 94667 times.
✓ Branch 1 taken 32430 times.
✓ Branch 2 taken 7306 times.
✓ Branch 3 taken 87361 times.
127097 lswitch1(il) = buoylcl(il) < 0. .AND. exist_lfc(il)
268 127337 lswitch(il) = lswitch1(il)
269 END DO
270
271 ! 2.0.1 Premiere couche ou la flotabilite est negative au dessus du sol
272 ! ----------------------------------------------------
273 ! au cas ou elle existe sinon ilow=1 (nk apres)
274 ! on suppose que la parcelle part de la premiere couche
275
276
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
277
2/2
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
127337 IF (lswitch(il)) THEN
278 87361 ilow(il) = 1
279 END IF
280 END DO
281
282
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 240 times.
6720 DO k = nl, 1, -1
283
2/2
✓ Branch 0 taken 3431619 times.
✓ Branch 1 taken 6480 times.
3438339 DO il = 1, ncum
284
4/4
✓ Branch 0 taken 2358747 times.
✓ Branch 1 taken 1072872 times.
✓ Branch 2 taken 353091 times.
✓ Branch 3 taken 2005656 times.
3438099 IF (lswitch(il) .AND. k<=icb(il)-1) THEN
285
2/2
✓ Branch 0 taken 124409 times.
✓ Branch 1 taken 228682 times.
353091 IF (buoy(il,k)<0.) THEN
286 124409 ilow(il) = k
287 END IF
288 END IF
289 END DO
290 END DO
291
292 ! 2.0.2 Calcul de la pression du niveau de flot. nulle sous le nuage
293 ! ----------------------------------------------------
294
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
295
2/2
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
127337 IF (lswitch(il)) THEN
296
2/2
✓ Branch 0 taken 11895 times.
✓ Branch 1 taken 75466 times.
87361 IF (ilow(il)>1) THEN
297 p0(il) = (buoy(il,ilow(il))*p(il,ilow(il)-1)-buoy(il,ilow( &
298 11895 il)-1)*p(il,ilow(il)))/(buoy(il,ilow(il))-buoy(il,ilow(il)-1))
299 11895 buoyz(il) = 0.
300 ELSE
301 75466 p0(il) = p(il, 1)
302 75466 buoyz(il) = buoy(il, 1)
303 END IF
304 END IF
305 END DO
306
307 ! 2.1. Computation of CINB
308 ! -----------------------
309
310
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
311 lswitch2(il) = (isublcl(il)==1 .AND. ilow(il)==1) .OR. &
312
2/6
✗ Branch 0 not taken.
✓ Branch 1 taken 127097 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 127097 times.
✗ Branch 5 not taken.
127097 (isublcl(il)==ilow(il)-1)
313
3/4
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
✓ Branch 2 taken 87361 times.
✗ Branch 3 not taken.
254434 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
314 END DO
315 ! c IF ( (isublcl .EQ. 1 .AND. ilow .EQ. 1)
316 ! c $ .OR.(isublcl .EQ. ilow-1)) THEN
317
318 ! 2.1.1 First case : Plcl just above P0
319 ! -------------------------------------
320
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
321
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 127097 times.
127337 IF (lswitch(il)) THEN
322 deltap = p0(il) - plcl(il)
323 dcin = rd*(buoyz(il)+buoylcl(il))*deltap/(p0(il)+plcl(il))
324 cinb(il) = min(0., dcin)
325 END IF
326 END DO
327
328
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
329
3/4
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 87361 times.
167073 lswitch(il) = lswitch1(il) .AND. .NOT. lswitch2(il)
330 END DO
331 ! c ELSE
332
333 ! 2.1.2 Second case : there is at least one P-level between P0 and Plcl
334 ! ---------------------------------------------------------------------
335
336 ! Lower part of CINB : integral from P0 to P(ilow)
337
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
338
2/2
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
127337 IF (lswitch(il)) THEN
339 87361 deltap = p0(il) - p(il, ilow(il))
340 87361 dcin = rd*(buoyz(il)+buoy(il,ilow(il)))*deltap/(p0(il)+p(il,ilow(il)))
341 87361 cinb(il) = min(0., dcin)
342 END IF
343 END DO
344
345
346 ! Middle part of CINB : integral from P(ilow) to P(isublcl)
347 ! c DO k = ilow,isublcl-1
348
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 240 times.
6720 DO k = 1, nl
349
2/2
✓ Branch 0 taken 3431619 times.
✓ Branch 1 taken 6480 times.
3438339 DO il = 1, ncum
350
6/6
✓ Branch 0 taken 2358747 times.
✓ Branch 1 taken 1072872 times.
✓ Branch 2 taken 2339985 times.
✓ Branch 3 taken 18762 times.
✓ Branch 4 taken 293399 times.
✓ Branch 5 taken 2046586 times.
3438099 IF (lswitch(il) .AND. k>=ilow(il) .AND. k<=isublcl(il)-1) THEN
351 293399 deltap = p(il, k) - p(il, k+1)
352 293399 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
353 293399 cinb(il) = cinb(il) + min(0., dcin)
354 END IF
355 END DO
356 END DO
357
358 ! Upper part of CINB : integral from P(isublcl) to Plcl
359
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
360
2/2
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
127337 IF (lswitch(il)) THEN
361 87361 deltap = p(il, isublcl(il)) - plcl(il)
362 dcin = rd*(buoy(il,isublcl(il))+buoylcl(il))*deltap/ &
363 87361 (p(il,isublcl(il))+plcl(il))
364 87361 cinb(il) = cinb(il) + min(0., dcin)
365 END IF
366 END DO
367
368
369 ! c ENDIF
370
371 ! 2.2 Computation of CINA
372 ! ---------------------
373
374
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
375 127097 lswitch2(il) = plcl(il) > p(il, itop(il)-1)
376
4/4
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
✓ Branch 2 taken 48979 times.
✓ Branch 3 taken 38382 times.
216052 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
377 END DO
378
379 ! 2.2.1 FIrst case : Plcl > P(itop-1)
380 ! ---------------------------------
381 ! In order to get Plfc, one may interpolate linearly buoyancies
382 ! between P(itop) and P(itop-1).
383
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
384
2/2
✓ Branch 0 taken 38382 times.
✓ Branch 1 taken 88715 times.
127337 IF (lswitch(il)) THEN
385 plfc(il) = (buoy(il,itop(il))*p(il,itop(il)-1)-buoy(il,itop( &
386 38382 il)-1)*p(il,itop(il)))/(buoy(il,itop(il))-buoy(il,itop(il)-1))
387 END IF
388 END DO
389
390 ! Upper part of CINA : integral from P(itop-1) to Plfc
391
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
392
2/2
✓ Branch 0 taken 38382 times.
✓ Branch 1 taken 88715 times.
127337 IF (lswitch(il)) THEN
393 38382 deltap = p(il, itop(il)-1) - plfc(il)
394 38382 dcin = rd*buoy(il, itop(il)-1)*deltap/(p(il,itop(il)-1)+plfc(il))
395 38382 cina(il) = min(0., dcin)
396 END IF
397 END DO
398
399 ! Middle part of CINA : integral from P(icb+1) to P(itop-1)
400
2/2
✓ Branch 0 taken 6480 times.
✓ Branch 1 taken 240 times.
6720 DO k = 1, nl
401
2/2
✓ Branch 0 taken 3431619 times.
✓ Branch 1 taken 6480 times.
3438339 DO il = 1, ncum
402
6/6
✓ Branch 0 taken 1036314 times.
✓ Branch 1 taken 2395305 times.
✓ Branch 2 taken 835619 times.
✓ Branch 3 taken 200695 times.
✓ Branch 4 taken 10326 times.
✓ Branch 5 taken 825293 times.
3438099 IF (lswitch(il) .AND. k>=icb(il)+1 .AND. k<=itop(il)-2) THEN
403 10326 deltap = p(il, k) - p(il, k+1)
404 10326 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
405 10326 cina(il) = cina(il) + min(0., dcin)
406 END IF
407 END DO
408 END DO
409
410 ! Lower part of CINA : integral from Plcl to P(icb+1)
411
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
412
2/2
✓ Branch 0 taken 38382 times.
✓ Branch 1 taken 88715 times.
127337 IF (lswitch(il)) THEN
413
2/2
✓ Branch 0 taken 25988 times.
✓ Branch 1 taken 12394 times.
38382 IF (plcl(il)>p(il,icb(il))) THEN
414
2/2
✓ Branch 0 taken 5631 times.
✓ Branch 1 taken 20357 times.
25988 IF (icb(il)<itop(il)-1) THEN
415 5631 deltap = p(il, icb(il)) - p(il, icb(il)+1)
416 dcin = 0.5*rd*(buoy(il,icb(il))+buoy(il,icb(il)+1))*deltap/ &
417 5631 ph(il, icb(il)+1)
418 5631 cina(il) = cina(il) + min(0., dcin)
419 END IF
420
421 25988 deltap = plcl(il) - p(il, icb(il))
422 dcin = rd*(buoylcl(il)+buoy(il,icb(il)))*deltap/ &
423 25988 (plcl(il)+p(il,icb(il)))
424 25988 cina(il) = cina(il) + min(0., dcin)
425 ELSE
426 12394 deltap = plcl(il) - p(il, icb(il)+1)
427 dcin = rd*(buoylcl(il)+buoy(il,icb(il)+1))*deltap/ &
428 12394 (plcl(il)+p(il,icb(il)+1))
429 12394 cina(il) = cina(il) + min(0., dcin)
430 END IF
431 END IF
432 END DO
433
434
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
435
4/4
✓ Branch 0 taken 87361 times.
✓ Branch 1 taken 39736 times.
✓ Branch 2 taken 38382 times.
✓ Branch 3 taken 48979 times.
205455 lswitch(il) = lswitch1(il) .AND. .NOT. lswitch2(il)
436 END DO
437 ! c ELSE
438
439 ! 2.2.2 Second case : Plcl lies between P(itop-1) and P(itop);
440 ! ----------------------------------------------------------
441 ! In order to get Plfc, one has to interpolate between P(itop) and Plcl.
442
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
443
2/2
✓ Branch 0 taken 48979 times.
✓ Branch 1 taken 78118 times.
127337 IF (lswitch(il)) THEN
444 plfc(il) = (buoy(il,itop(il))*plcl(il)-buoylcl(il)*p(il,itop(il)))/ &
445 48979 (buoy(il,itop(il))-buoylcl(il))
446 END IF
447 END DO
448
449
2/2
✓ Branch 0 taken 127097 times.
✓ Branch 1 taken 240 times.
127337 DO il = 1, ncum
450
2/2
✓ Branch 0 taken 48979 times.
✓ Branch 1 taken 78118 times.
127337 IF (lswitch(il)) THEN
451 48979 deltap = plcl(il) - plfc(il)
452 48979 dcin = rd*buoylcl(il)*deltap/(plcl(il)+plfc(il))
453 48979 cina(il) = min(0., dcin)
454 END IF
455 END DO
456 ! c ENDIF
457
458
459
460 240 RETURN
461 END SUBROUTINE cv3_cine
462