GCC Code Coverage Report


Directory: ./
File: dyn3d_common/advy.f
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 180 0.0%
Branches: 0 110 0.0%

Line Branch Exec Source
1 !
2 ! $Header$
3 !
4 ✗ SUBROUTINE advy(limit,dty,pbarv,sm,s0,sx,sy,sz)
5 IMPLICIT NONE
6
7 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8 C C
9 C first-order moments (SOM) advection of tracer in Y direction C
10 C C
11 C Source : Pascal Simon ( Meteo, CNRM ) C
12 C Adaptation : A.A. (LGGE) C
13 C Derniere Modif : 15/12/94 LAST
14 C C
15 C sont les arguments d'entree pour le s-pg C
16 C C
17 C argument de sortie du s-pg C
18 C C
19 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
20 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
21 C
22 C Rem : Probleme aux poles il faut reecrire ce cas specifique
23 C Attention au sens de l'indexation
24 C
25 C parametres principaux du modele
26 C
27 C
28 include "dimensions.h"
29 include "paramet.h"
30 include "comgeom2.h"
31
32 C Arguments :
33 C ----------
34 C dty : frequence fictive d'appel du transport
35 C parbu,pbarv : flux de masse en x et y en Pa.m2.s-1
36
37 INTEGER lon,lat,niv
38 INTEGER i,j,jv,k,kp,l
39 INTEGER ntra
40 PARAMETER (ntra = 1)
41
42 REAL dty
43 REAL pbarv ( iip1,jjm, llm )
44
45 C moments: SM total mass in each grid box
46 C S0 mass of tracer in each grid box
47 C Si 1rst order moment in i direction
48 C
49 REAL SM(iip1,jjp1,llm)
50 + ,S0(iip1,jjp1,llm,ntra)
51 REAL sx(iip1,jjp1,llm,ntra)
52 + ,sy(iip1,jjp1,llm,ntra)
53 + ,sz(iip1,jjp1,llm,ntra)
54
55
56 C Local :
57 C -------
58
59 C mass fluxes across the boundaries (UGRI,VGRI,WGRI)
60 C mass fluxes in kg
61 C declaration :
62
63 REAL VGRI(iip1,0:jjp1,llm)
64
65 C Rem : UGRI et WGRI ne sont pas utilises dans
66 C cette subroutine ( advection en y uniquement )
67 C Rem 2 :le dimensionnement de VGRI depend de celui de pbarv
68 C
69 C the moments F are similarly defined and used as temporary
70 C storage for portions of the grid boxes in transit
71 C
72 REAL F0(iim,0:jjp1,ntra),FM(iim,0:jjp1)
73 REAL FX(iim,jjm,ntra),FY(iim,jjm,ntra)
74 REAL FZ(iim,jjm,ntra)
75 REAL S00(ntra)
76 REAL SM0 ! Just temporal variable
77 C
78 C work arrays
79 C
80 REAL ALF(iim,0:jjp1),ALF1(iim,0:jjp1)
81 REAL ALFQ(iim,0:jjp1),ALF1Q(iim,0:jjp1)
82 REAL TEMPTM ! Just temporal variable
83 c
84 C Special pour poles
85 c
86 REAL sbms,sfms,sfzs,sbmn,sfmn,sfzn
87 REAL sns0(ntra),snsz(ntra),snsm
88 REAL s1v(llm),slatv(llm)
89 REAL qy1(iim,llm,ntra),qylat(iim,llm,ntra)
90 REAL cx1(llm,ntra), cxLAT(llm,ntra)
91 REAL cy1(llm,ntra), cyLAT(llm,ntra)
92 REAL z1(iim), zcos(iim), zsin(iim)
93 real smpn,smps,s0pn,s0ps
94 REAL SSUM
95 EXTERNAL SSUM
96 C
97 REAL sqi,sqf
98 LOGICAL LIMIT
99
100 lon = iim ! rem : Il est possible qu'un pbl. arrive ici
101 lat = jjp1 ! a cause des dim. differentes entre les
102 niv=llm
103
104 C
105 C the moments Fi are used as temporary storage for
106 C portions of the grid boxes in transit at the current level
107 C
108 C work arrays
109 C
110
111 ✗ DO l = 1,llm
112 ✗ DO j = 1,jjm
113 ✗ DO i = 1,iip1
114 ✗ vgri (i,j,llm+1-l)=-1.*pbarv(i,j,l)
115 enddo
116 enddo
117 ✗ do i=1,iip1
118 ✗ vgri(i,0,l) = 0.
119 ✗ vgri(i,jjp1,l) = 0.
120 enddo
121 enddo
122
123 ✗ DO 1 L=1,NIV
124 C
125 C place limits on appropriate moments before transport
126 C (if flux-limiting is to be applied)
127 C
128 ✗ IF(.NOT.LIMIT) GO TO 11
129 C
130 ✗ DO 10 JV=1,NTRA
131 ✗ DO 10 K=1,LAT
132 ✗ DO 100 I=1,LON
133 sy(I,K,L,JV)=SIGN(AMIN1(AMAX1(S0(I,K,L,JV),0.),
134 ✗ + ABS(sy(I,K,L,JV))),sy(I,K,L,JV))
135 ✗ 100 CONTINUE
136 ✗ 10 CONTINUE
137 C
138 11 CONTINUE
139 C
140 C le flux a travers le pole Nord est traite separement
141 C
142 SM0=0.
143 ✗ DO 20 JV=1,NTRA
144 S00(JV)=0.
145 ✗ 20 CONTINUE
146 C
147 ✗ DO 21 I=1,LON
148 C
149 ✗ IF(VGRI(I,0,L).LE.0.) THEN
150 ✗ FM(I,0)=-VGRI(I,0,L)*DTY
151 ✗ ALF(I,0)=FM(I,0)/SM(I,1,L)
152 ✗ SM(I,1,L)=SM(I,1,L)-FM(I,0)
153 ✗ SM0=SM0+FM(I,0)
154 ENDIF
155 C
156 ✗ ALFQ(I,0)=ALF(I,0)*ALF(I,0)
157 ✗ ALF1(I,0)=1.-ALF(I,0)
158 ✗ ALF1Q(I,0)=ALF1(I,0)*ALF1(I,0)
159 C
160 ✗ 21 CONTINUE
161 C
162 ✗ DO 22 JV=1,NTRA
163 ✗ DO 220 I=1,LON
164 C
165 ✗ IF(VGRI(I,0,L).LE.0.) THEN
166 C
167 F0(I,0,JV)=ALF(I,0)*
168 ✗ + ( S0(I,1,L,JV)-ALF1(I,0)*sy(I,1,L,JV) )
169 C
170 ✗ S00(JV)=S00(JV)+F0(I,0,JV)
171 ✗ S0(I,1,L,JV)=S0(I,1,L,JV)-F0(I,0,JV)
172 ✗ sy(I,1,L,JV)=ALF1Q(I,0)*sy(I,1,L,JV)
173 ✗ sx(I,1,L,JV)=ALF1 (I,0)*sx(I,1,L,JV)
174 ✗ sz(I,1,L,JV)=ALF1 (I,0)*sz(I,1,L,JV)
175 C
176 ENDIF
177 C
178 ✗ 220 CONTINUE
179 ✗ 22 CONTINUE
180 C
181 ✗ DO 23 I=1,LON
182 ✗ IF(VGRI(I,0,L).GT.0.) THEN
183 ✗ FM(I,0)=VGRI(I,0,L)*DTY
184 ✗ ALF(I,0)=FM(I,0)/SM0
185 ENDIF
186 ✗ 23 CONTINUE
187 C
188 ✗ DO 24 JV=1,NTRA
189 ✗ DO 240 I=1,LON
190 ✗ IF(VGRI(I,0,L).GT.0.) THEN
191 ✗ F0(I,0,JV)=ALF(I,0)*S00(JV)
192 ENDIF
193 ✗ 240 CONTINUE
194 ✗ 24 CONTINUE
195 C
196 C puts the temporary moments Fi into appropriate neighboring boxes
197 C
198 ✗ DO 25 I=1,LON
199 C
200 ✗ IF(VGRI(I,0,L).GT.0.) THEN
201 ✗ SM(I,1,L)=SM(I,1,L)+FM(I,0)
202 ✗ ALF(I,0)=FM(I,0)/SM(I,1,L)
203 ENDIF
204 C
205 ✗ ALF1(I,0)=1.-ALF(I,0)
206 C
207 ✗ 25 CONTINUE
208 C
209 ✗ DO 26 JV=1,NTRA
210 ✗ DO 260 I=1,LON
211 C
212 ✗ IF(VGRI(I,0,L).GT.0.) THEN
213 C
214 ✗ TEMPTM=ALF(I,0)*S0(I,1,L,JV)-ALF1(I,0)*F0(I,0,JV)
215 ✗ S0(I,1,L,JV)=S0(I,1,L,JV)+F0(I,0,JV)
216 ✗ sy(I,1,L,JV)=ALF1(I,0)*sy(I,1,L,JV)+3.*TEMPTM
217 C
218 ENDIF
219 C
220 ✗ 260 CONTINUE
221 ✗ 26 CONTINUE
222 C
223 C calculate flux and moments between adjacent boxes
224 C 1- create temporary moments/masses for partial boxes in transit
225 C 2- reajusts moments remaining in the box
226 C
227 C flux from KP to K if V(K).lt.0 and from K to KP if V(K).gt.0
228 C
229 ✗ DO 30 K=1,LAT-1
230 ✗ KP=K+1
231 ✗ DO 300 I=1,LON
232 C
233 ✗ IF(VGRI(I,K,L).LT.0.) THEN
234 ✗ FM(I,K)=-VGRI(I,K,L)*DTY
235 ✗ ALF(I,K)=FM(I,K)/SM(I,KP,L)
236 ✗ SM(I,KP,L)=SM(I,KP,L)-FM(I,K)
237 ELSE
238 ✗ FM(I,K)=VGRI(I,K,L)*DTY
239 ✗ ALF(I,K)=FM(I,K)/SM(I,K,L)
240 ✗ SM(I,K,L)=SM(I,K,L)-FM(I,K)
241 ENDIF
242 C
243 ✗ ALFQ(I,K)=ALF(I,K)*ALF(I,K)
244 ✗ ALF1(I,K)=1.-ALF(I,K)
245 ✗ ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K)
246 C
247 ✗ 300 CONTINUE
248 ✗ 30 CONTINUE
249 C
250 ✗ DO 31 JV=1,NTRA
251 ✗ DO 31 K=1,LAT-1
252 ✗ KP=K+1
253 ✗ DO 310 I=1,LON
254 C
255 ✗ IF(VGRI(I,K,L).LT.0.) THEN
256 C
257 F0(I,K,JV)=ALF (I,K)*
258 ✗ + ( S0(I,KP,L,JV)-ALF1(I,K)*sy(I,KP,L,JV) )
259 ✗ FY(I,K,JV)=ALFQ(I,K)*sy(I,KP,L,JV)
260 ✗ FX(I,K,JV)=ALF (I,K)*sx(I,KP,L,JV)
261 ✗ FZ(I,K,JV)=ALF (I,K)*sz(I,KP,L,JV)
262 C
263 ✗ S0(I,KP,L,JV)=S0(I,KP,L,JV)-F0(I,K,JV)
264 ✗ sy(I,KP,L,JV)=ALF1Q(I,K)*sy(I,KP,L,JV)
265 ✗ sx(I,KP,L,JV)=sx(I,KP,L,JV)-FX(I,K,JV)
266 ✗ sz(I,KP,L,JV)=sz(I,KP,L,JV)-FZ(I,K,JV)
267 C
268 ELSE
269 C
270 F0(I,K,JV)=ALF (I,K)*
271 ✗ + ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) )
272 ✗ FY(I,K,JV)=ALFQ(I,K)*sy(I,K,L,JV)
273 ✗ FX(I,K,JV)=ALF(I,K)*sx(I,K,L,JV)
274 ✗ FZ(I,K,JV)=ALF(I,K)*sz(I,K,L,JV)
275 C
276 ✗ S0(I,K,L,JV)=S0(I,K,L,JV)-F0(I,K,JV)
277 ✗ sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV)
278 ✗ sx(I,K,L,JV)=sx(I,K,L,JV)-FX(I,K,JV)
279 ✗ sz(I,K,L,JV)=sz(I,K,L,JV)-FZ(I,K,JV)
280 C
281 ENDIF
282 C
283 ✗ 310 CONTINUE
284 ✗ 31 CONTINUE
285 C
286 C puts the temporary moments Fi into appropriate neighboring boxes
287 C
288 ✗ DO 32 K=1,LAT-1
289 ✗ KP=K+1
290 ✗ DO 320 I=1,LON
291 C
292 ✗ IF(VGRI(I,K,L).LT.0.) THEN
293 ✗ SM(I,K,L)=SM(I,K,L)+FM(I,K)
294 ✗ ALF(I,K)=FM(I,K)/SM(I,K,L)
295 ELSE
296 ✗ SM(I,KP,L)=SM(I,KP,L)+FM(I,K)
297 ✗ ALF(I,K)=FM(I,K)/SM(I,KP,L)
298 ENDIF
299 C
300 ✗ ALF1(I,K)=1.-ALF(I,K)
301 C
302 ✗ 320 CONTINUE
303 ✗ 32 CONTINUE
304 C
305 ✗ DO 33 JV=1,NTRA
306 ✗ DO 33 K=1,LAT-1
307 ✗ KP=K+1
308 ✗ DO 330 I=1,LON
309 C
310 ✗ IF(VGRI(I,K,L).LT.0.) THEN
311 C
312 ✗ TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV)
313 ✗ S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV)
314 sy(I,K,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,K,L,JV)
315 ✗ + +3.*TEMPTM
316 ✗ sx(I,K,L,JV)=sx(I,K,L,JV)+FX(I,K,JV)
317 ✗ sz(I,K,L,JV)=sz(I,K,L,JV)+FZ(I,K,JV)
318 C
319 ELSE
320 C
321 ✗ TEMPTM=ALF(I,K)*S0(I,KP,L,JV)-ALF1(I,K)*F0(I,K,JV)
322 ✗ S0(I,KP,L,JV)=S0(I,KP,L,JV)+F0(I,K,JV)
323 sy(I,KP,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,KP,L,JV)
324 ✗ + +3.*TEMPTM
325 ✗ sx(I,KP,L,JV)=sx(I,KP,L,JV)+FX(I,K,JV)
326 ✗ sz(I,KP,L,JV)=sz(I,KP,L,JV)+FZ(I,K,JV)
327 C
328 ENDIF
329 C
330 ✗ 330 CONTINUE
331 ✗ 33 CONTINUE
332 C
333 C traitement special pour le pole Sud (idem pole Nord)
334 C
335 K=LAT
336 C
337 SM0=0.
338 ✗ DO 40 JV=1,NTRA
339 S00(JV)=0.
340 ✗ 40 CONTINUE
341 C
342 ✗ DO 41 I=1,LON
343 C
344 ✗ IF(VGRI(I,K,L).GE.0.) THEN
345 ✗ FM(I,K)=VGRI(I,K,L)*DTY
346 ✗ ALF(I,K)=FM(I,K)/SM(I,K,L)
347 ✗ SM(I,K,L)=SM(I,K,L)-FM(I,K)
348 ✗ SM0=SM0+FM(I,K)
349 ENDIF
350 C
351 ✗ ALFQ(I,K)=ALF(I,K)*ALF(I,K)
352 ✗ ALF1(I,K)=1.-ALF(I,K)
353 ✗ ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K)
354 C
355 ✗ 41 CONTINUE
356 C
357 ✗ DO 42 JV=1,NTRA
358 ✗ DO 420 I=1,LON
359 C
360 ✗ IF(VGRI(I,K,L).GE.0.) THEN
361 F0 (I,K,JV)=ALF(I,K)*
362 ✗ + ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) )
363 ✗ S00(JV)=S00(JV)+F0(I,K,JV)
364 C
365 ✗ S0(I,K,L,JV)=S0 (I,K,L,JV)-F0 (I,K,JV)
366 ✗ sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV)
367 ✗ sx(I,K,L,JV)=ALF1(I,K)*sx(I,K,L,JV)
368 ✗ sz(I,K,L,JV)=ALF1(I,K)*sz(I,K,L,JV)
369 ENDIF
370 C
371 ✗ 420 CONTINUE
372 ✗ 42 CONTINUE
373 C
374 ✗ DO 43 I=1,LON
375 ✗ IF(VGRI(I,K,L).LT.0.) THEN
376 ✗ FM(I,K)=-VGRI(I,K,L)*DTY
377 ✗ ALF(I,K)=FM(I,K)/SM0
378 ENDIF
379 ✗ 43 CONTINUE
380 C
381 ✗ DO 44 JV=1,NTRA
382 ✗ DO 440 I=1,LON
383 ✗ IF(VGRI(I,K,L).LT.0.) THEN
384 ✗ F0(I,K,JV)=ALF(I,K)*S00(JV)
385 ENDIF
386 ✗ 440 CONTINUE
387 ✗ 44 CONTINUE
388 C
389 C puts the temporary moments Fi into appropriate neighboring boxes
390 C
391 ✗ DO 45 I=1,LON
392 C
393 ✗ IF(VGRI(I,K,L).LT.0.) THEN
394 ✗ SM(I,K,L)=SM(I,K,L)+FM(I,K)
395 ✗ ALF(I,K)=FM(I,K)/SM(I,K,L)
396 ENDIF
397 C
398 ✗ ALF1(I,K)=1.-ALF(I,K)
399 C
400 ✗ 45 CONTINUE
401 C
402 ✗ DO 46 JV=1,NTRA
403 ✗ DO 460 I=1,LON
404 C
405 ✗ IF(VGRI(I,K,L).LT.0.) THEN
406 C
407 ✗ TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV)
408 ✗ S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV)
409 ✗ sy(I,K,L,JV)=ALF1(I,K)*sy(I,K,L,JV)+3.*TEMPTM
410 C
411 ENDIF
412 C
413 ✗ 460 CONTINUE
414 ✗ 46 CONTINUE
415 C
416 ✗ 1 CONTINUE
417 C
418 ✗ RETURN
419 END
420
421