Directory: | ./ |
---|---|
File: | dyn/vlspltqs.f |
Date: | 2022-01-11 19:19:34 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 179 | 259 | 69.1% |
Branches: | 127 | 204 | 62.3% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | c | ||
2 | c $Id: vlspltqs.F 2603 2016-07-25 09:31:56Z emillour $ | ||
3 | c | ||
4 | 480 | SUBROUTINE vlspltqs ( q,pente_max,masse,w,pbaru,pbarv,pdt, | |
5 | , p,pk,teta,iq ) | ||
6 | USE infotrac, ONLY: nqtot,nqdesc,iqfils | ||
7 | c | ||
8 | c Auteurs: P.Le Van, F.Hourdin, F.Forget, F.Codron | ||
9 | c | ||
10 | c ******************************************************************** | ||
11 | c Shema d'advection " pseudo amont " . | ||
12 | c + test sur humidite specifique: Q advecte< Qsat aval | ||
13 | c (F. Codron, 10/99) | ||
14 | c ******************************************************************** | ||
15 | c q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg .... | ||
16 | c | ||
17 | c pente_max facteur de limitation des pentes: 2 en general | ||
18 | c 0 pour un schema amont | ||
19 | c pbaru,pbarv,w flux de masse en u ,v ,w | ||
20 | c pdt pas de temps | ||
21 | c | ||
22 | c teta temperature potentielle, p pression aux interfaces, | ||
23 | c pk exner au milieu des couches necessaire pour calculer Qsat | ||
24 | c -------------------------------------------------------------------- | ||
25 | |||
26 | USE comconst_mod, ONLY: cpp | ||
27 | |||
28 | IMPLICIT NONE | ||
29 | c | ||
30 | include "dimensions.h" | ||
31 | include "paramet.h" | ||
32 | |||
33 | c | ||
34 | c Arguments: | ||
35 | c ---------- | ||
36 | REAL masse(ip1jmp1,llm),pente_max | ||
37 | REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm) | ||
38 | REAL q(ip1jmp1,llm,nqtot) | ||
39 | REAL w(ip1jmp1,llm),pdt | ||
40 | REAL p(ip1jmp1,llmp1),teta(ip1jmp1,llm),pk(ip1jmp1,llm) | ||
41 | INTEGER iq ! CRisi | ||
42 | c | ||
43 | c Local | ||
44 | c --------- | ||
45 | c | ||
46 | INTEGER i,ij,l,j,ii | ||
47 | INTEGER ifils,iq2 ! CRisi | ||
48 | c | ||
49 | REAL qsat(ip1jmp1,llm) | ||
50 | 960 | REAL zm(ip1jmp1,llm,nqtot) | |
51 | REAL mu(ip1jmp1,llm) | ||
52 | REAL mv(ip1jm,llm) | ||
53 | REAL mw(ip1jmp1,llm+1) | ||
54 | 480 | REAL zq(ip1jmp1,llm,nqtot) | |
55 | REAL temps1,temps2,temps3 | ||
56 | REAL zzpbar, zzw | ||
57 | LOGICAL testcpu | ||
58 | SAVE testcpu | ||
59 | SAVE temps1,temps2,temps3 | ||
60 | |||
61 | REAL qmin,qmax | ||
62 | DATA qmin,qmax/0.,1.e33/ | ||
63 | DATA testcpu/.false./ | ||
64 | DATA temps1,temps2,temps3/0.,0.,0./ | ||
65 | |||
66 | c--pour rapport de melange saturant-- | ||
67 | |||
68 | REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,play | ||
69 | REAL ptarg,pdelarg,foeew,zdelta | ||
70 | REAL tempe(ip1jmp1) | ||
71 | |||
72 | c fonction psat(T) | ||
73 | |||
74 | FOEEW ( PTARG,PDELARG ) = EXP ( | ||
75 | * (R3LES*(1.-PDELARG)+R3IES*PDELARG) * (PTARG-RTT) | ||
76 | * / (PTARG-(R4LES*(1.-PDELARG)+R4IES*PDELARG)) ) | ||
77 | |||
78 | r2es = 380.11733 | ||
79 | r3les = 17.269 | ||
80 | r3ies = 21.875 | ||
81 | r4les = 35.86 | ||
82 | r4ies = 7.66 | ||
83 | retv = 0.6077667 | ||
84 | rtt = 273.16 | ||
85 | |||
86 | c-- Calcul de Qsat en chaque point | ||
87 | c-- approximation: au milieu des couches play(l)=(p(l)+p(l+1))/2 | ||
88 | c pour eviter une exponentielle. | ||
89 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
|
19200 | DO l = 1, llm |
90 |
2/2✓ Branch 0 taken 20386080 times.
✓ Branch 1 taken 18720 times.
|
20404800 | DO ij = 1, ip1jmp1 |
91 | 20404800 | tempe(ij) = teta(ij,l) * pk(ij,l) /cpp | |
92 | ENDDO | ||
93 |
2/2✓ Branch 0 taken 20386080 times.
✓ Branch 1 taken 18720 times.
|
20405280 | DO ij = 1, ip1jmp1 |
94 | 20386080 | zdelta = MAX( 0., SIGN(1., rtt - tempe(ij)) ) | |
95 | 20386080 | play = 0.5*(p(ij,l)+p(ij,l+1)) | |
96 | 20386080 | qsat(ij,l) = MIN(0.5, r2es* FOEEW(tempe(ij),zdelta) / play ) | |
97 | 20404800 | qsat(ij,l) = qsat(ij,l) / ( 1. - retv * qsat(ij,l) ) | |
98 | ENDDO | ||
99 | ENDDO | ||
100 | |||
101 | c PRINT*,'Debut vlsplt version debug sans vlyqs' | ||
102 | |||
103 | 480 | zzpbar = 0.5 * pdt | |
104 | zzw = pdt | ||
105 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
|
19200 | DO l=1,llm |
106 |
2/2✓ Branch 0 taken 19150560 times.
✓ Branch 1 taken 18720 times.
|
19169280 | DO ij = iip2,ip1jm |
107 | 19169280 | mu(ij,l)=pbaru(ij,l) * zzpbar | |
108 | ENDDO | ||
109 |
2/2✓ Branch 0 taken 19768320 times.
✓ Branch 1 taken 18720 times.
|
19787040 | DO ij=1,ip1jm |
110 | 19787040 | mv(ij,l)=pbarv(ij,l) * zzpbar | |
111 | ENDDO | ||
112 |
2/2✓ Branch 0 taken 20386080 times.
✓ Branch 1 taken 18720 times.
|
20405280 | DO ij=1,ip1jmp1 |
113 | 20404800 | mw(ij,l)=w(ij,l) * zzw | |
114 | ENDDO | ||
115 | ENDDO | ||
116 | |||
117 |
2/2✓ Branch 0 taken 522720 times.
✓ Branch 1 taken 480 times.
|
523200 | DO ij=1,ip1jmp1 |
118 | 523200 | mw(ij,llm+1)=0. | |
119 | ENDDO | ||
120 | |||
121 | 480 | CALL SCOPY(ijp1llm,q(1,1,iq),1,zq(1,1,iq),1) | |
122 | 480 | CALL SCOPY(ijp1llm,masse,1,zm(1,1,iq),1) | |
123 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | if (nqdesc(iq).gt.0) then |
124 | ✗ | do ifils=1,nqdesc(iq) | |
125 | ✗ | iq2=iqfils(ifils,iq) | |
126 | ✗ | CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1) | |
127 | enddo | ||
128 | endif !if (nqfils(iq).gt.0) then | ||
129 | |||
130 | c call minmaxq(zq,qmin,qmax,'avant vlxqs ') | ||
131 | 480 | call vlxqs(zq,pente_max,zm,mu,qsat,iq) | |
132 | |||
133 | c call minmaxq(zq,qmin,qmax,'avant vlyqs ') | ||
134 | |||
135 | 480 | call vlyqs(zq,pente_max,zm,mv,qsat,iq) | |
136 | |||
137 | c call minmaxq(zq,qmin,qmax,'avant vlz ') | ||
138 | |||
139 | 480 | call vlz(zq,pente_max,zm,mw,iq) | |
140 | |||
141 | c call minmaxq(zq,qmin,qmax,'avant vlyqs ') | ||
142 | c call minmaxq(zm,qmin,qmax,'M avant vlyqs ') | ||
143 | |||
144 | 480 | call vlyqs(zq,pente_max,zm,mv,qsat,iq) | |
145 | |||
146 | c call minmaxq(zq,qmin,qmax,'avant vlxqs ') | ||
147 | c call minmaxq(zm,qmin,qmax,'M avant vlxqs ') | ||
148 | |||
149 | 480 | call vlxqs(zq,pente_max,zm,mu,qsat,iq) | |
150 | |||
151 | c call minmaxq(zq,qmin,qmax,'apres vlxqs ') | ||
152 | c call minmaxq(zm,qmin,qmax,'M apres vlxqs ') | ||
153 | |||
154 | |||
155 |
2/2✓ Branch 0 taken 18720 times.
✓ Branch 1 taken 480 times.
|
19200 | DO l=1,llm |
156 |
2/2✓ Branch 0 taken 20386080 times.
✓ Branch 1 taken 18720 times.
|
20404800 | DO ij=1,ip1jmp1 |
157 | 20404800 | q(ij,l,iq)=zq(ij,l,iq) | |
158 | ENDDO | ||
159 | 480 | DO ij=1,ip1jm+1,iip1 | |
160 |
2/2✓ Branch 0 taken 599040 times.
✓ Branch 1 taken 18720 times.
|
617760 | q(ij+iim,l,iq)=q(ij,l,iq) |
161 | ENDDO | ||
162 | ENDDO | ||
163 | ! CRisi: aussi pour les fils | ||
164 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 480 times.
|
480 | if (nqdesc(iq).gt.0) then |
165 | ✗ | do ifils=1,nqdesc(iq) | |
166 | ✗ | iq2=iqfils(ifils,iq) | |
167 | ✗ | DO l=1,llm | |
168 | ✗ | DO ij=1,ip1jmp1 | |
169 | ✗ | q(ij,l,iq2)=zq(ij,l,iq2) | |
170 | ENDDO | ||
171 | ✗ | DO ij=1,ip1jm+1,iip1 | |
172 | ✗ | q(ij+iim,l,iq2)=q(ij,l,iq2) | |
173 | ENDDO | ||
174 | ENDDO | ||
175 | enddo !do ifils=1,nqdesc(iq) | ||
176 | endif ! if (nqfils(iq).gt.0) then | ||
177 | !write(*,*) 'vlspltqs 183: fin de la routine' | ||
178 | |||
179 | 480 | RETURN | |
180 | END | ||
181 | 960 | SUBROUTINE vlxqs(q,pente_max,masse,u_m,qsat,iq) | |
182 | USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi | ||
183 | |||
184 | c | ||
185 | c Auteurs: P.Le Van, F.Hourdin, F.Forget | ||
186 | c | ||
187 | c ******************************************************************** | ||
188 | c Shema d'advection " pseudo amont " . | ||
189 | c ******************************************************************** | ||
190 | c | ||
191 | c -------------------------------------------------------------------- | ||
192 | IMPLICIT NONE | ||
193 | c | ||
194 | include "dimensions.h" | ||
195 | include "paramet.h" | ||
196 | c | ||
197 | c | ||
198 | c Arguments: | ||
199 | c ---------- | ||
200 | REAL masse(ip1jmp1,llm,nqtot),pente_max | ||
201 | REAL u_m( ip1jmp1,llm ) | ||
202 | REAL q(ip1jmp1,llm,nqtot) | ||
203 | REAL qsat(ip1jmp1,llm) | ||
204 | INTEGER iq ! CRisi | ||
205 | c | ||
206 | c Local | ||
207 | c --------- | ||
208 | c | ||
209 | INTEGER ij,l,j,i,iju,ijq,indu(ip1jmp1),niju | ||
210 | INTEGER n0,iadvplus(ip1jmp1,llm),nl(llm) | ||
211 | c | ||
212 | REAL new_m,zu_m,zdum(ip1jmp1,llm) | ||
213 | REAL dxq(ip1jmp1,llm),dxqu(ip1jmp1) | ||
214 | REAL zz(ip1jmp1) | ||
215 | REAL adxqu(ip1jmp1),dxqmax(ip1jmp1,llm) | ||
216 | REAL u_mq(ip1jmp1,llm) | ||
217 | |||
218 | ! CRisi | ||
219 | 1920 | REAL masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot) | |
220 | INTEGER ifils,iq2 ! CRisi | ||
221 | |||
222 | Logical first,testcpu | ||
223 | SAVE first,testcpu | ||
224 | |||
225 | REAL SSUM | ||
226 | REAL temps0,temps1,temps2,temps3,temps4,temps5 | ||
227 | SAVE temps0,temps1,temps2,temps3,temps4,temps5 | ||
228 | |||
229 | |||
230 | DATA first,testcpu/.true.,.false./ | ||
231 | |||
232 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 959 times.
|
960 | IF(first) THEN |
233 | 1 | temps1=0. | |
234 | 1 | temps2=0. | |
235 | 1 | temps3=0. | |
236 | 1 | temps4=0. | |
237 | 1 | temps5=0. | |
238 | 1 | first=.false. | |
239 | ENDIF | ||
240 | |||
241 | c calcul de la pente a droite et a gauche de la maille | ||
242 | |||
243 | |||
244 |
1/2✓ Branch 0 taken 960 times.
✗ Branch 1 not taken.
|
960 | IF (pente_max.gt.-1.e-5) THEN |
245 | c IF (pente_max.gt.10) THEN | ||
246 | |||
247 | c calcul des pentes avec limitation, Van Leer scheme I: | ||
248 | c ----------------------------------------------------- | ||
249 | |||
250 | c calcul de la pente aux points u | ||
251 |
2/2✓ Branch 0 taken 960 times.
✓ Branch 1 taken 37440 times.
|
38400 | DO l = 1, llm |
252 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38301120 | DO ij=iip2,ip1jm-1 |
253 | 38301120 | dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq) | |
254 | c IF(u_m(ij,l).lt.0.) stop'limx n admet pas les U<0' | ||
255 | c sigu(ij)=u_m(ij,l)/masse(ij,l,iq) | ||
256 | ENDDO | ||
257 | 1160640 | DO ij=iip1+iip1,ip1jm,iip1 | |
258 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | dxqu(ij)=dxqu(ij-iim) |
259 | c sigu(ij)=sigu(ij-iim) | ||
260 | ENDDO | ||
261 | |||
262 |
2/2✓ Branch 0 taken 38301120 times.
✓ Branch 1 taken 37440 times.
|
38338560 | DO ij=iip2,ip1jm |
263 | 38338560 | adxqu(ij)=abs(dxqu(ij)) | |
264 | ENDDO | ||
265 | |||
266 | c calcul de la pente maximum dans la maille en valeur absolue | ||
267 | |||
268 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38301120 | DO ij=iip2+1,ip1jm |
269 | dxqmax(ij,l)=pente_max* | ||
270 | 38301120 | , min(adxqu(ij-1),adxqu(ij)) | |
271 | c limitation subtile | ||
272 | c , min(adxqu(ij-1)/sigu(ij-1),adxqu(ij)/(1.-sigu(ij))) | ||
273 | |||
274 | |||
275 | ENDDO | ||
276 | |||
277 | 1160640 | DO ij=iip1+iip1,ip1jm,iip1 | |
278 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | dxqmax(ij-iim,l)=dxqmax(ij,l) |
279 | ENDDO | ||
280 | |||
281 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38302080 | DO ij=iip2+1,ip1jm |
282 |
2/2✓ Branch 0 taken 27096747 times.
✓ Branch 1 taken 11166933 times.
|
38263680 | IF(dxqu(ij-1)*dxqu(ij).gt.0) THEN |
283 | 27096747 | dxq(ij,l)=dxqu(ij-1)+dxqu(ij) | |
284 | ELSE | ||
285 | c extremum local | ||
286 | 11166933 | dxq(ij,l)=0. | |
287 | ENDIF | ||
288 | 38263680 | dxq(ij,l)=0.5*dxq(ij,l) | |
289 | dxq(ij,l)= | ||
290 | 38301120 | , sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l)) | |
291 | ENDDO | ||
292 | |||
293 | ENDDO ! l=1,llm | ||
294 | |||
295 | ELSE ! (pente_max.lt.-1.e-5) | ||
296 | |||
297 | c Pentes produits: | ||
298 | c ---------------- | ||
299 | |||
300 | ✗ | DO l = 1, llm | |
301 | ✗ | DO ij=iip2,ip1jm-1 | |
302 | ✗ | dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq) | |
303 | ENDDO | ||
304 | ✗ | DO ij=iip1+iip1,ip1jm,iip1 | |
305 | ✗ | dxqu(ij)=dxqu(ij-iim) | |
306 | ENDDO | ||
307 | |||
308 | ✗ | DO ij=iip2+1,ip1jm | |
309 | ✗ | zz(ij)=dxqu(ij-1)*dxqu(ij) | |
310 | ✗ | zz(ij)=zz(ij)+zz(ij) | |
311 | ✗ | IF(zz(ij).gt.0) THEN | |
312 | ✗ | dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij)) | |
313 | ELSE | ||
314 | c extremum local | ||
315 | ✗ | dxq(ij,l)=0. | |
316 | ENDIF | ||
317 | ENDDO | ||
318 | |||
319 | ENDDO | ||
320 | |||
321 | ENDIF ! (pente_max.lt.-1.e-5) | ||
322 | |||
323 | c bouclage de la pente en iip1: | ||
324 | c ----------------------------- | ||
325 | |||
326 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
327 | 1160640 | DO ij=iip1+iip1,ip1jm,iip1 | |
328 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | dxq(ij-iim,l)=dxq(ij,l) |
329 | ENDDO | ||
330 | |||
331 |
2/2✓ Branch 0 taken 40772160 times.
✓ Branch 1 taken 37440 times.
|
40810560 | DO ij=1,ip1jmp1 |
332 | 40809600 | iadvplus(ij,l)=0 | |
333 | ENDDO | ||
334 | |||
335 | ENDDO | ||
336 | |||
337 | |||
338 | c calcul des flux a gauche et a droite | ||
339 | |||
340 | c on cumule le flux correspondant a toutes les mailles dont la masse | ||
341 | c au travers de la paroi pENDant le pas de temps. | ||
342 | c le rapport de melange de l'air advecte est min(q_vanleer, Qsat_downwind) | ||
343 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
344 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38302080 | DO ij=iip2,ip1jm-1 |
345 |
2/2✓ Branch 0 taken 27282878 times.
✓ Branch 1 taken 10980802 times.
|
38301120 | IF (u_m(ij,l).gt.0.) THEN |
346 | 27282878 | zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq) | |
347 | u_mq(ij,l)=u_m(ij,l)* | ||
348 | 27282878 | $ min(q(ij,l,iq)+0.5*zdum(ij,l)*dxq(ij,l),qsat(ij+1,l)) | |
349 | ELSE | ||
350 | 10980802 | zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq) | |
351 | u_mq(ij,l)=u_m(ij,l)* | ||
352 | 10980802 | $ min(q(ij+1,l,iq)-0.5*zdum(ij,l)*dxq(ij+1,l),qsat(ij,l)) | |
353 | ENDIF | ||
354 | ENDDO | ||
355 | ENDDO | ||
356 | |||
357 | |||
358 | c detection des points ou on advecte plus que la masse de la | ||
359 | c maille | ||
360 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
361 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38302080 | DO ij=iip2,ip1jm-1 |
362 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 38263680 times.
|
38301120 | IF(zdum(ij,l).lt.0) THEN |
363 | ✗ | iadvplus(ij,l)=1 | |
364 | ✗ | u_mq(ij,l)=0. | |
365 | ENDIF | ||
366 | ENDDO | ||
367 | ENDDO | ||
368 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
369 | 960 | DO ij=iip1+iip1,ip1jm,iip1 | |
370 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | iadvplus(ij,l)=iadvplus(ij-iim,l) |
371 | ENDDO | ||
372 | ENDDO | ||
373 | |||
374 | |||
375 | |||
376 | c traitement special pour le cas ou on advecte en longitude plus que le | ||
377 | c contenu de la maille. | ||
378 | c cette partie est mal vectorisee. | ||
379 | |||
380 | c pas d'influence de la pression saturante (pour l'instant) | ||
381 | |||
382 | c calcul du nombre de maille sur lequel on advecte plus que la maille. | ||
383 | |||
384 | n0=0 | ||
385 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
386 | 37440 | nl(l)=0 | |
387 |
2/2✓ Branch 0 taken 38301120 times.
✓ Branch 1 taken 37440 times.
|
38338560 | DO ij=iip2,ip1jm |
388 | 38338560 | nl(l)=nl(l)+iadvplus(ij,l) | |
389 | ENDDO | ||
390 | 38400 | n0=n0+nl(l) | |
391 | ENDDO | ||
392 | |||
393 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 960 times.
|
960 | IF(n0.gt.0) THEN |
394 | ccc PRINT*,'Nombre de points pour lesquels on advect plus que le' | ||
395 | ccc & ,'contenu de la maille : ',n0 | ||
396 | |||
397 | ✗ | DO l=1,llm | |
398 | ✗ | IF(nl(l).gt.0) THEN | |
399 | iju=0 | ||
400 | c indicage des mailles concernees par le traitement special | ||
401 | ✗ | DO ij=iip2,ip1jm | |
402 | ✗ | IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0) THEN | |
403 | ✗ | iju=iju+1 | |
404 | ✗ | indu(iju)=ij | |
405 | ENDIF | ||
406 | ENDDO | ||
407 | niju=iju | ||
408 | c PRINT*,'niju,nl',niju,nl(l) | ||
409 | |||
410 | c traitement des mailles | ||
411 | ✗ | DO iju=1,niju | |
412 | ✗ | ij=indu(iju) | |
413 | ✗ | j=(ij-1)/iip1+1 | |
414 | ✗ | zu_m=u_m(ij,l) | |
415 | ✗ | u_mq(ij,l)=0. | |
416 | ✗ | IF(zu_m.gt.0.) THEN | |
417 | ijq=ij | ||
418 | ✗ | i=ijq-(j-1)*iip1 | |
419 | c accumulation pour les mailles completements advectees | ||
420 | ✗ | do while(zu_m.gt.masse(ijq,l,iq)) | |
421 | u_mq(ij,l)=u_mq(ij,l)+q(ijq,l,iq) | ||
422 | ✗ | & *masse(ijq,l,iq) | |
423 | ✗ | zu_m=zu_m-masse(ijq,l,iq) | |
424 | ✗ | i=mod(i-2+iim,iim)+1 | |
425 | ✗ | ijq=(j-1)*iip1+i | |
426 | ENDDO | ||
427 | c ajout de la maille non completement advectee | ||
428 | u_mq(ij,l)=u_mq(ij,l)+zu_m* | ||
429 | & (q(ijq,l,iq)+0.5*(1.-zu_m/masse(ijq,l,iq)) | ||
430 | ✗ | & *dxq(ijq,l)) | |
431 | ELSE | ||
432 | ✗ | ijq=ij+1 | |
433 | ✗ | i=ijq-(j-1)*iip1 | |
434 | c accumulation pour les mailles completements advectees | ||
435 | ✗ | do while(-zu_m.gt.masse(ijq,l,iq)) | |
436 | u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq) | ||
437 | ✗ | & *masse(ijq,l,iq) | |
438 | ✗ | zu_m=zu_m+masse(ijq,l,iq) | |
439 | ✗ | i=mod(i,iim)+1 | |
440 | ✗ | ijq=(j-1)*iip1+i | |
441 | ENDDO | ||
442 | c ajout de la maille non completement advectee | ||
443 | u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)- | ||
444 | ✗ | & 0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l)) | |
445 | ENDIF | ||
446 | ENDDO | ||
447 | ENDIF | ||
448 | ENDDO | ||
449 | ENDIF ! n0.gt.0 | ||
450 | |||
451 | |||
452 | |||
453 | c bouclage en latitude | ||
454 | |||
455 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
456 | 960 | DO ij=iip1+iip1,ip1jm,iip1 | |
457 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | u_mq(ij,l)=u_mq(ij-iim,l) |
458 | ENDDO | ||
459 | ENDDO | ||
460 | |||
461 | ! CRisi: appel récursif de l'advection sur les fils. | ||
462 | ! Il faut faire ça avant d'avoir mis à jour q et masse | ||
463 | !write(*,*) 'vlspltqs 326: iq,nqfils(iq)=',iq,nqfils(iq) | ||
464 | |||
465 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 960 times.
|
960 | if (nqfils(iq).gt.0) then |
466 | ✗ | do ifils=1,nqdesc(iq) | |
467 | ✗ | iq2=iqfils(ifils,iq) | |
468 | ✗ | DO l=1,llm | |
469 | ✗ | DO ij=iip2,ip1jm | |
470 | ! On a besoin de q et masse seulement entre iip2 et ip1jm | ||
471 | ✗ | masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) | |
472 | ✗ | Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) | |
473 | enddo | ||
474 | enddo | ||
475 | enddo !do ifils=1,nqdesc(iq) | ||
476 | ✗ | do ifils=1,nqfils(iq) | |
477 | ✗ | iq2=iqfils(ifils,iq) | |
478 | ✗ | call vlx(Ratio,pente_max,masseq,u_mq,iq2) | |
479 | enddo !do ifils=1,nqfils(iq) | ||
480 | endif !if (nqfils(iq).gt.0) then | ||
481 | ! end CRisi | ||
482 | |||
483 | c calcul des tendances | ||
484 | |||
485 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
486 |
2/2✓ Branch 0 taken 38263680 times.
✓ Branch 1 taken 37440 times.
|
38301120 | DO ij=iip2+1,ip1jm |
487 | 38263680 | new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l) | |
488 | q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ | ||
489 | & u_mq(ij-1,l)-u_mq(ij,l)) | ||
490 | 38263680 | & /new_m | |
491 | 38301120 | masse(ij,l,iq)=new_m | |
492 | ENDDO | ||
493 | c Modif Fred 22 03 96 correction d'un bug (les scopy ci-dessous) | ||
494 | 960 | DO ij=iip1+iip1,ip1jm,iip1 | |
495 | 1160640 | q(ij-iim,l,iq)=q(ij,l,iq) | |
496 |
2/2✓ Branch 0 taken 1123200 times.
✓ Branch 1 taken 37440 times.
|
1160640 | masse(ij-iim,l,iq)=masse(ij,l,iq) |
497 | ENDDO | ||
498 | ENDDO | ||
499 | |||
500 | ! retablir les fils en rapport de melange par rapport a l'air: | ||
501 | ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio | ||
502 | ! puis on boucle en longitude | ||
503 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 960 times.
|
960 | if (nqdesc(iq).gt.0) then |
504 | ✗ | do ifils=1,nqdesc(iq) | |
505 | ✗ | iq2=iqfils(ifils,iq) | |
506 | ✗ | DO l=1,llm | |
507 | ✗ | DO ij=iip2+1,ip1jm | |
508 | ✗ | q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) | |
509 | enddo | ||
510 | ✗ | DO ij=iip1+iip1,ip1jm,iip1 | |
511 | ✗ | q(ij-iim,l,iq2)=q(ij,l,iq2) | |
512 | enddo ! DO ij=ijb+iip1-1,ije,iip1 | ||
513 | enddo !DO l=1,llm | ||
514 | enddo !do ifils=1,nqdesc(iq) | ||
515 | endif !if (nqfils(iq).gt.0) then | ||
516 | |||
517 | c CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1) | ||
518 | c CALL SCOPY((jjm-1)*llm,masse(iip1+iip1,1),iip1,masse(iip2,1),iip1) | ||
519 | |||
520 | |||
521 | 960 | RETURN | |
522 | END | ||
523 | 150720 | SUBROUTINE vlyqs(q,pente_max,masse,masse_adv_v,qsat,iq) | |
524 | USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi | ||
525 | c | ||
526 | c Auteurs: P.Le Van, F.Hourdin, F.Forget | ||
527 | c | ||
528 | c ******************************************************************** | ||
529 | c Shema d'advection " pseudo amont " . | ||
530 | c ******************************************************************** | ||
531 | c q,masse_adv_v,w sont des arguments d'entree pour le s-pg .... | ||
532 | c qsat est un argument de sortie pour le s-pg .... | ||
533 | c | ||
534 | c | ||
535 | c -------------------------------------------------------------------- | ||
536 | |||
537 | USE comconst_mod, ONLY: pi | ||
538 | |||
539 | IMPLICIT NONE | ||
540 | c | ||
541 | include "dimensions.h" | ||
542 | include "paramet.h" | ||
543 | include "comgeom.h" | ||
544 | c | ||
545 | c | ||
546 | c Arguments: | ||
547 | c ---------- | ||
548 | REAL masse(ip1jmp1,llm,nqtot),pente_max | ||
549 | REAL masse_adv_v( ip1jm,llm) | ||
550 | REAL q(ip1jmp1,llm,nqtot) | ||
551 | REAL qsat(ip1jmp1,llm) | ||
552 | INTEGER iq ! CRisi | ||
553 | c | ||
554 | c Local | ||
555 | c --------- | ||
556 | c | ||
557 | INTEGER i,ij,l | ||
558 | c | ||
559 | REAL airej2,airejjm,airescb(iim),airesch(iim) | ||
560 | REAL dyq(ip1jmp1,llm),dyqv(ip1jm) | ||
561 | REAL adyqv(ip1jm),dyqmax(ip1jmp1) | ||
562 | REAL qbyv(ip1jm,llm) | ||
563 | |||
564 | REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs | ||
565 | c REAL newq,oldmasse | ||
566 | Logical first,testcpu | ||
567 | REAL temps0,temps1,temps2,temps3,temps4,temps5 | ||
568 | SAVE temps0,temps1,temps2,temps3,temps4,temps5 | ||
569 | SAVE first,testcpu | ||
570 | |||
571 | REAL convpn,convps,convmpn,convmps | ||
572 | REAL sinlon(iip1),sinlondlon(iip1) | ||
573 | REAL coslon(iip1),coslondlon(iip1) | ||
574 | SAVE sinlon,coslon,sinlondlon,coslondlon | ||
575 | SAVE airej2,airejjm | ||
576 | |||
577 | 1920 | REAL masseq(ip1jmp1,llm,nqtot),Ratio(ip1jmp1,llm,nqtot) ! CRisi | |
578 | INTEGER ifils,iq2 ! CRisi | ||
579 | c | ||
580 | c | ||
581 | REAL SSUM | ||
582 | |||
583 | DATA first,testcpu/.true.,.false./ | ||
584 | DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./ | ||
585 | |||
586 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 959 times.
|
960 | IF(first) THEN |
587 | 1 | PRINT*,'Shema Amont nouveau appele dans Vanleer ' | |
588 | 1 | first=.false. | |
589 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
33 | do i=2,iip1 |
590 | 32 | coslon(i)=cos(rlonv(i)) | |
591 | 32 | sinlon(i)=sin(rlonv(i)) | |
592 | 32 | coslondlon(i)=coslon(i)*(rlonu(i)-rlonu(i-1))/pi | |
593 | 33 | sinlondlon(i)=sinlon(i)*(rlonu(i)-rlonu(i-1))/pi | |
594 | ENDDO | ||
595 | 1 | coslon(1)=coslon(iip1) | |
596 | 1 | coslondlon(1)=coslondlon(iip1) | |
597 | 1 | sinlon(1)=sinlon(iip1) | |
598 | 1 | sinlondlon(1)=sinlondlon(iip1) | |
599 | 1 | airej2 = SSUM( iim, aire(iip2), 1 ) | |
600 | 1 | airejjm= SSUM( iim, aire(ip1jm -iim), 1 ) | |
601 | ENDIF | ||
602 | |||
603 | c | ||
604 | |||
605 | |||
606 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l = 1, llm |
607 | c | ||
608 | c -------------------------------- | ||
609 | c CALCUL EN LATITUDE | ||
610 | c -------------------------------- | ||
611 | |||
612 | c On commence par calculer la valeur du traceur moyenne sur le premier cercle | ||
613 | c de latitude autour du pole (qpns pour le pole nord et qpsn pour | ||
614 | c le pole nord) qui sera utilisee pour evaluer les pentes au pole. | ||
615 | |||
616 |
2/2✓ Branch 0 taken 1198080 times.
✓ Branch 1 taken 37440 times.
|
1235520 | DO i = 1, iim |
617 | 1198080 | airescb(i) = aire(i+ iip1) * q(i+ iip1,l,iq) | |
618 | 1235520 | airesch(i) = aire(i+ ip1jm- iip1) * q(i+ ip1jm- iip1,l,iq) | |
619 | ENDDO | ||
620 | 37440 | qpns = SSUM( iim, airescb ,1 ) / airej2 | |
621 | 37440 | qpsn = SSUM( iim, airesch ,1 ) / airejjm | |
622 | |||
623 | c calcul des pentes aux points v | ||
624 | |||
625 |
2/2✓ Branch 0 taken 39536640 times.
✓ Branch 1 taken 37440 times.
|
39574080 | DO ij=1,ip1jm |
626 | 39536640 | dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq) | |
627 | 39574080 | adyqv(ij)=abs(dyqv(ij)) | |
628 | ENDDO | ||
629 | |||
630 | c calcul des pentes aux points scalaires | ||
631 | |||
632 |
2/2✓ Branch 0 taken 38301120 times.
✓ Branch 1 taken 37440 times.
|
38338560 | DO ij=iip2,ip1jm |
633 | 38301120 | dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij)) | |
634 | 38301120 | dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij)) | |
635 | 38338560 | dyqmax(ij)=pente_max*dyqmax(ij) | |
636 | ENDDO | ||
637 | |||
638 | c calcul des pentes aux poles | ||
639 | |||
640 |
2/2✓ Branch 0 taken 1235520 times.
✓ Branch 1 taken 37440 times.
|
1272960 | DO ij=1,iip1 |
641 | 1235520 | dyq(ij,l)=qpns-q(ij+iip1,l,iq) | |
642 | 1272960 | dyq(ip1jm+ij,l)=q(ip1jm+ij-iip1,l,iq)-qpsn | |
643 | ENDDO | ||
644 | |||
645 | c filtrage de la derivee | ||
646 | dyn1=0. | ||
647 | dys1=0. | ||
648 | dyn2=0. | ||
649 | dys2=0. | ||
650 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 1198080 times.
|
1235520 | DO ij=1,iim |
651 | 1198080 | dyn1=dyn1+sinlondlon(ij)*dyq(ij,l) | |
652 | 1198080 | dys1=dys1+sinlondlon(ij)*dyq(ip1jm+ij,l) | |
653 | 1198080 | dyn2=dyn2+coslondlon(ij)*dyq(ij,l) | |
654 | 1235520 | dys2=dys2+coslondlon(ij)*dyq(ip1jm+ij,l) | |
655 | ENDDO | ||
656 |
2/2✓ Branch 0 taken 1235520 times.
✓ Branch 1 taken 37440 times.
|
1272960 | DO ij=1,iip1 |
657 | 1235520 | dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij) | |
658 | 1272960 | dyq(ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij) | |
659 | ENDDO | ||
660 | |||
661 | c calcul des pentes limites aux poles | ||
662 | |||
663 | fn=1. | ||
664 | fs=1. | ||
665 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 1198080 times.
|
1235520 | DO ij=1,iim |
666 |
2/2✓ Branch 0 taken 202056 times.
✓ Branch 1 taken 996024 times.
|
1198080 | IF(pente_max*adyqv(ij).lt.abs(dyq(ij,l))) THEN |
667 | 202056 | fn=min(pente_max*adyqv(ij)/abs(dyq(ij,l)),fn) | |
668 | ENDIF | ||
669 |
2/2✓ Branch 0 taken 245116 times.
✓ Branch 1 taken 952964 times.
|
1235520 | IF(pente_max*adyqv(ij+ip1jm-iip1).lt.abs(dyq(ij+ip1jm,l))) THEN |
670 | 245116 | fs=min(pente_max*adyqv(ij+ip1jm-iip1)/abs(dyq(ij+ip1jm,l)),fs) | |
671 | ENDIF | ||
672 | ENDDO | ||
673 |
2/2✓ Branch 0 taken 1235520 times.
✓ Branch 1 taken 37440 times.
|
1272960 | DO ij=1,iip1 |
674 | 1235520 | dyq(ij,l)=fn*dyq(ij,l) | |
675 | 1272960 | dyq(ip1jm+ij,l)=fs*dyq(ip1jm+ij,l) | |
676 | ENDDO | ||
677 | |||
678 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC | ||
679 | C En memoire de dIFferents tests sur la | ||
680 | C limitation des pentes aux poles. | ||
681 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC | ||
682 | C PRINT*,dyq(1) | ||
683 | C PRINT*,dyqv(iip1+1) | ||
684 | C appn=abs(dyq(1)/dyqv(iip1+1)) | ||
685 | C PRINT*,dyq(ip1jm+1) | ||
686 | C PRINT*,dyqv(ip1jm-iip1+1) | ||
687 | C apps=abs(dyq(ip1jm+1)/dyqv(ip1jm-iip1+1)) | ||
688 | C DO ij=2,iim | ||
689 | C appn=amax1(abs(dyq(ij)/dyqv(ij)),appn) | ||
690 | C apps=amax1(abs(dyq(ip1jm+ij)/dyqv(ip1jm-iip1+ij)),apps) | ||
691 | C ENDDO | ||
692 | C appn=min(pente_max/appn,1.) | ||
693 | C apps=min(pente_max/apps,1.) | ||
694 | C | ||
695 | C | ||
696 | C cas ou on a un extremum au pole | ||
697 | C | ||
698 | C IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) | ||
699 | C & appn=0. | ||
700 | C IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* | ||
701 | C & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) | ||
702 | C & apps=0. | ||
703 | C | ||
704 | C limitation des pentes aux poles | ||
705 | C DO ij=1,iip1 | ||
706 | C dyq(ij)=appn*dyq(ij) | ||
707 | C dyq(ip1jm+ij)=apps*dyq(ip1jm+ij) | ||
708 | C ENDDO | ||
709 | C | ||
710 | C test | ||
711 | C DO ij=1,iip1 | ||
712 | C dyq(iip1+ij)=0. | ||
713 | C dyq(ip1jm+ij-iip1)=0. | ||
714 | C ENDDO | ||
715 | C DO ij=1,ip1jmp1 | ||
716 | C dyq(ij)=dyq(ij)*cos(rlatu((ij-1)/iip1+1)) | ||
717 | C ENDDO | ||
718 | C | ||
719 | C changement 10 07 96 | ||
720 | C IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.) | ||
721 | C & THEN | ||
722 | C DO ij=1,iip1 | ||
723 | C dyqmax(ij)=0. | ||
724 | C ENDDO | ||
725 | C ELSE | ||
726 | C DO ij=1,iip1 | ||
727 | C dyqmax(ij)=pente_max*abs(dyqv(ij)) | ||
728 | C ENDDO | ||
729 | C ENDIF | ||
730 | C | ||
731 | C IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* | ||
732 | C & dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.) | ||
733 | C &THEN | ||
734 | C DO ij=ip1jm+1,ip1jmp1 | ||
735 | C dyqmax(ij)=0. | ||
736 | C ENDDO | ||
737 | C ELSE | ||
738 | C DO ij=ip1jm+1,ip1jmp1 | ||
739 | C dyqmax(ij)=pente_max*abs(dyqv(ij-iip1)) | ||
740 | C ENDDO | ||
741 | C ENDIF | ||
742 | C fin changement 10 07 96 | ||
743 | CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC | ||
744 | |||
745 | c calcul des pentes limitees | ||
746 | |||
747 |
2/2✓ Branch 0 taken 38301120 times.
✓ Branch 1 taken 37440 times.
|
38339520 | DO ij=iip2,ip1jm |
748 |
2/2✓ Branch 0 taken 26560912 times.
✓ Branch 1 taken 11740208 times.
|
38338560 | IF(dyqv(ij)*dyqv(ij-iip1).gt.0.) THEN |
749 | 26560912 | dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l)) | |
750 | ELSE | ||
751 | 11740208 | dyq(ij,l)=0. | |
752 | ENDIF | ||
753 | ENDDO | ||
754 | |||
755 | ENDDO | ||
756 | |||
757 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
758 |
2/2✓ Branch 0 taken 39536640 times.
✓ Branch 1 taken 37440 times.
|
39575040 | DO ij=1,ip1jm |
759 |
2/2✓ Branch 0 taken 20058114 times.
✓ Branch 1 taken 19478526 times.
|
39536640 | IF( masse_adv_v(ij,l).GT.0. ) THEN |
760 | qbyv(ij,l)= MIN( qsat(ij+iip1,l), q(ij+iip1,l,iq ) + | ||
761 | , dyq(ij+iip1,l)*0.5*(1.-masse_adv_v(ij,l) | ||
762 | 20058114 | , /masse(ij+iip1,l,iq))) | |
763 | ELSE | ||
764 | qbyv(ij,l)= MIN( qsat(ij,l), q(ij,l,iq) - dyq(ij,l) * | ||
765 | 19478526 | , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l,iq)) ) | |
766 | ENDIF | ||
767 | 39574080 | qbyv(ij,l) = masse_adv_v(ij,l)*qbyv(ij,l) | |
768 | ENDDO | ||
769 | ENDDO | ||
770 | |||
771 | |||
772 | ! CRisi: appel récursif de l'advection sur les fils. | ||
773 | ! Il faut faire ça avant d'avoir mis à jour q et masse | ||
774 | !write(*,*) 'vlyqs 689: iq,nqfils(iq)=',iq,nqfils(iq) | ||
775 | |||
776 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 960 times.
|
960 | if (nqfils(iq).gt.0) then |
777 | ✗ | do ifils=1,nqdesc(iq) | |
778 | ✗ | iq2=iqfils(ifils,iq) | |
779 | ✗ | DO l=1,llm | |
780 | ✗ | DO ij=1,ip1jmp1 | |
781 | ✗ | masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) | |
782 | ✗ | Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) | |
783 | enddo | ||
784 | enddo | ||
785 | enddo !do ifils=1,nqdesc(iq) | ||
786 | |||
787 | ✗ | do ifils=1,nqfils(iq) | |
788 | ✗ | iq2=iqfils(ifils,iq) | |
789 | !write(*,*) 'vlyqs 783: appel rec de vly, iq2=',iq2 | ||
790 | ✗ | call vly(Ratio,pente_max,masseq,qbyv,iq2) | |
791 | enddo !do ifils=1,nqfils(iq) | ||
792 | endif !if (nqfils(iq).gt.0) then | ||
793 | |||
794 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
795 |
2/2✓ Branch 0 taken 38301120 times.
✓ Branch 1 taken 37440 times.
|
38338560 | DO ij=iip2,ip1jm |
796 | newmasse=masse(ij,l,iq) | ||
797 | 38301120 | & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l) | |
798 | q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+qbyv(ij,l) | ||
799 | 38301120 | & -qbyv(ij-iip1,l))/newmasse | |
800 | 38338560 | masse(ij,l,iq)=newmasse | |
801 | ENDDO | ||
802 | c.-. ancienne version | ||
803 | 37440 | convpn=SSUM(iim,qbyv(1,l),1)/apoln | |
804 | 37440 | convmpn=ssum(iim,masse_adv_v(1,l),1)/apoln | |
805 |
2/2✓ Branch 0 taken 1235520 times.
✓ Branch 1 taken 37440 times.
|
1272960 | DO ij = 1,iip1 |
806 | 1235520 | newmasse=masse(ij,l,iq)+convmpn*aire(ij) | |
807 | q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convpn*aire(ij))/ | ||
808 | 1235520 | & newmasse | |
809 | 1272960 | masse(ij,l,iq)=newmasse | |
810 | ENDDO | ||
811 | 37440 | convps = -SSUM(iim,qbyv(ip1jm-iim,l),1)/apols | |
812 | 37440 | convmps = -SSUM(iim,masse_adv_v(ip1jm-iim,l),1)/apols | |
813 |
2/2✓ Branch 0 taken 1235520 times.
✓ Branch 1 taken 37440 times.
|
1273920 | DO ij = ip1jm+1,ip1jmp1 |
814 | 1235520 | newmasse=masse(ij,l,iq)+convmps*aire(ij) | |
815 | q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convps*aire(ij))/ | ||
816 | 1235520 | & newmasse | |
817 | 1272960 | masse(ij,l,iq)=newmasse | |
818 | ENDDO | ||
819 | c.-. fin ancienne version | ||
820 | |||
821 | c._. nouvelle version | ||
822 | c convpn=SSUM(iim,qbyv(1,l),1) | ||
823 | c convmpn=ssum(iim,masse_adv_v(1,l),1) | ||
824 | c oldmasse=ssum(iim,masse(1,l),1) | ||
825 | c newmasse=oldmasse+convmpn | ||
826 | c newq=(q(1,l)*oldmasse+convpn)/newmasse | ||
827 | c newmasse=newmasse/apoln | ||
828 | c DO ij = 1,iip1 | ||
829 | c q(ij,l)=newq | ||
830 | c masse(ij,l,iq)=newmasse*aire(ij) | ||
831 | c ENDDO | ||
832 | c convps=-SSUM(iim,qbyv(ip1jm-iim,l),1) | ||
833 | c convmps=-ssum(iim,masse_adv_v(ip1jm-iim,l),1) | ||
834 | c oldmasse=ssum(iim,masse(ip1jm-iim,l),1) | ||
835 | c newmasse=oldmasse+convmps | ||
836 | c newq=(q(ip1jmp1,l)*oldmasse+convps)/newmasse | ||
837 | c newmasse=newmasse/apols | ||
838 | c DO ij = ip1jm+1,ip1jmp1 | ||
839 | c q(ij,l)=newq | ||
840 | c masse(ij,l,iq)=newmasse*aire(ij) | ||
841 | c ENDDO | ||
842 | c._. fin nouvelle version | ||
843 | ENDDO | ||
844 | |||
845 | !write(*,*) 'vly 866' | ||
846 | |||
847 | ! retablir les fils en rapport de melange par rapport a l'air: | ||
848 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 960 times.
|
960 | if (nqdesc(iq).gt.0) then |
849 | ✗ | do ifils=1,nqdesc(iq) | |
850 | ✗ | iq2=iqfils(ifils,iq) | |
851 | ✗ | DO l=1,llm | |
852 | ✗ | DO ij=1,ip1jmp1 | |
853 | ✗ | q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) | |
854 | enddo | ||
855 | enddo | ||
856 | enddo !do ifils=1,nqdesc(iq) | ||
857 | endif !if (nqfils(iq).gt.0) then | ||
858 | !write(*,*) 'vly 879' | ||
859 | |||
860 | 960 | RETURN | |
861 | END | ||
862 |