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 |