GCC Code Coverage Report


Directory: ./
File: dyn3d_common/advzp.f
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 162 0.0%
Branches: 0 62 0.0%

Line Branch Exec Source
1 !
2 ! $Header$
3 !
4 ✗ SUBROUTINE ADVZP(LIMIT,DTZ,W,SM,S0,SSX,SY,SZ
5 . ,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra )
6
7 IMPLICIT NONE
8
9 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10 C C
11 C second-order moments (SOM) advection of tracer in Z direction C
12 C C
13 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
14 C C
15 C Source : Pascal Simon ( Meteo, CNRM ) C
16 C Adaptation : A.A. (LGGE) C
17 C Derniere Modif : 19/11/95 LAST C
18 C C
19 C sont les arguments d'entree pour le s-pg C
20 C C
21 C argument de sortie du s-pg C
22 C C
23 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
24 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
25 C
26 C Rem : Probleme aux poles il faut reecrire ce cas specifique
27 C Attention au sens de l'indexation
28 C
29
30 C
31 C parametres principaux du modele
32 C
33 include "dimensions.h"
34 include "paramet.h"
35 include "comgeom.h"
36 C
37 C Arguments :
38 C ----------
39 C dty : frequence fictive d'appel du transport
40 C parbu,pbarv : flux de masse en x et y en Pa.m2.s-1
41 c
42 INTEGER lon,lat,niv
43 INTEGER i,j,jv,k,kp,l,lp
44 INTEGER ntra
45 c PARAMETER (ntra = 1)
46 c
47 REAL dtz
48 REAL w ( iip1,jjp1,llm )
49 c
50 C moments: SM total mass in each grid box
51 C S0 mass of tracer in each grid box
52 C Si 1rst order moment in i direction
53 C
54 REAL SM(iip1,jjp1,llm)
55 + ,S0(iip1,jjp1,llm,ntra)
56 REAL SSX(iip1,jjp1,llm,ntra)
57 + ,SY(iip1,jjp1,llm,ntra)
58 + ,SZ(iip1,jjp1,llm,ntra)
59 + ,SSXX(iip1,jjp1,llm,ntra)
60 + ,SSXY(iip1,jjp1,llm,ntra)
61 + ,SSXZ(iip1,jjp1,llm,ntra)
62 + ,SYY(iip1,jjp1,llm,ntra)
63 + ,SYZ(iip1,jjp1,llm,ntra)
64 + ,SZZ(iip1,jjp1,llm,ntra)
65 C
66 C Local :
67 C -------
68 C
69 C mass fluxes across the boundaries (UGRI,VGRI,WGRI)
70 C mass fluxes in kg
71 C declaration :
72 C
73 REAL WGRI(iip1,jjp1,0:llm)
74
75 C Rem : UGRI et VGRI ne sont pas utilises dans
76 C cette subroutine ( advection en z uniquement )
77 C Rem 2 :le dimensionnement de VGRI depend de celui de pbarv
78 C attention a celui de WGRI
79 C
80 C the moments F are similarly defined and used as temporary
81 C storage for portions of the grid boxes in transit
82 C
83 C the moments Fij are used as temporary storage for
84 C portions of the grid boxes in transit at the current level
85 C
86 C work arrays
87 C
88 C
89 ✗ REAL F0(iim,llm,ntra),FM(iim,llm)
90 ✗ REAL FX(iim,llm,ntra),FY(iim,llm,ntra)
91 ✗ REAL FZ(iim,llm,ntra)
92 ✗ REAL FXX(iim,llm,ntra),FXY(iim,llm,ntra)
93 ✗ REAL FXZ(iim,llm,ntra),FYY(iim,llm,ntra)
94 ✗ REAL FYZ(iim,llm,ntra),FZZ(iim,llm,ntra)
95 REAL S00(ntra)
96 REAL SM0 ! Just temporal variable
97 C
98 C work arrays
99 C
100 REAL ALF(iim),ALF1(iim)
101 REAL ALFQ(iim),ALF1Q(iim)
102 REAL ALF2(iim),ALF3(iim)
103 REAL ALF4(iim)
104 REAL TEMPTM ! Just temporal variable
105 REAL SLPMAX,S1MAX,S1NEW,S2NEW
106 c
107 REAL sqi,sqf
108 LOGICAL LIMIT
109
110 lon = iim ! rem : Il est possible qu'un pbl. arrive ici
111 lat = jjp1 ! a cause des dim. differentes entre les
112 niv = llm ! tab. S et VGRI
113
114 c-----------------------------------------------------------------
115 C *** Test : diag de la qtite totale de traceur dans
116 C l'atmosphere avant l'advection en Y
117 c
118 ✗ sqi = 0.
119 ✗ sqf = 0.
120 c
121 ✗ DO l = 1,llm
122 ✗ DO j = 1,jjp1
123 ✗ DO i = 1,iim
124 ✗ sqi = sqi + S0(i,j,l,ntra)
125 END DO
126 END DO
127 END DO
128 ✗ PRINT*,'---------- DIAG DANS ADVZP - ENTREE --------'
129 ✗ PRINT*,'sqi=',sqi
130
131 c-----------------------------------------------------------------
132 C Interface : adaptation nouveau modele
133 C -------------------------------------
134 C
135 C Conversion des flux de masses en kg
136
137 ✗ DO 500 l = 1,llm
138 ✗ DO 500 j = 1,jjp1
139 ✗ DO 500 i = 1,iip1
140 ✗ wgri (i,j,llm+1-l) = w (i,j,l)
141 ✗ 500 CONTINUE
142 ✗ do j=1,jjp1
143 ✗ do i=1,iip1
144 ✗ wgri(i,j,0)=0.
145 enddo
146 enddo
147 c
148 cAA rem : Je ne suis pas sur du signe
149 cAA Je ne suis pas sur pour le 0:llm
150 c
151 c-----------------------------------------------------------------
152 C---------------------- START HERE -------------------------------
153 C
154 C boucle sur les latitudes
155 C
156 ✗ DO 1 K=1,LAT
157 C
158 C place limits on appropriate moments before transport
159 C (if flux-limiting is to be applied)
160 C
161 ✗ IF(.NOT.LIMIT) GO TO 101
162 C
163 ✗ DO 10 JV=1,NTRA
164 ✗ DO 10 L=1,NIV
165 ✗ DO 100 I=1,LON
166 ✗ IF(S0(I,K,L,JV).GT.0.) THEN
167 SLPMAX=S0(I,K,L,JV)
168 ✗ S1MAX =1.5*SLPMAX
169 ✗ S1NEW =AMIN1(S1MAX,AMAX1(-S1MAX,SZ(I,K,L,JV)))
170 S2NEW =AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. ,
171 ✗ + AMAX1(ABS(S1NEW)-SLPMAX,SZZ(I,K,L,JV)) )
172 ✗ SZ (I,K,L,JV)=S1NEW
173 ✗ SZZ(I,K,L,JV)=S2NEW
174 ✗ SSXZ(I,K,L,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,SSXZ(I,K,L,JV)))
175 ✗ SYZ(I,K,L,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,SYZ(I,K,L,JV)))
176 ELSE
177 ✗ SZ (I,K,L,JV)=0.
178 ✗ SZZ(I,K,L,JV)=0.
179 ✗ SSXZ(I,K,L,JV)=0.
180 ✗ SYZ(I,K,L,JV)=0.
181 ENDIF
182 ✗ 100 CONTINUE
183 ✗ 10 CONTINUE
184 C
185 101 CONTINUE
186 C
187 C boucle sur les niveaux intercouches de 1 a NIV-1
188 C (flux nul au sommet L=0 et a la base L=NIV)
189 C
190 C calculate flux and moments between adjacent boxes
191 C (flux from LP to L if WGRI(L).lt.0, from L to LP if WGRI(L).gt.0)
192 C 1- create temporary moments/masses for partial boxes in transit
193 C 2- reajusts moments remaining in the box
194 C
195 ✗ DO 11 L=1,NIV-1
196 ✗ LP=L+1
197 C
198 ✗ DO 110 I=1,LON
199 C
200 ✗ IF(WGRI(I,K,L).LT.0.) THEN
201 ✗ FM(I,L)=-WGRI(I,K,L)*DTZ
202 ✗ ALF(I)=FM(I,L)/SM(I,K,LP)
203 ✗ SM(I,K,LP)=SM(I,K,LP)-FM(I,L)
204 ELSE
205 ✗ FM(I,L)=WGRI(I,K,L)*DTZ
206 ✗ ALF(I)=FM(I,L)/SM(I,K,L)
207 ✗ SM(I,K,L)=SM(I,K,L)-FM(I,L)
208 ENDIF
209 C
210 ✗ ALFQ (I)=ALF(I)*ALF(I)
211 ✗ ALF1 (I)=1.-ALF(I)
212 ✗ ALF1Q(I)=ALF1(I)*ALF1(I)
213 ✗ ALF2 (I)=ALF1(I)-ALF(I)
214 ✗ ALF3 (I)=ALF(I)*ALFQ(I)
215 ✗ ALF4 (I)=ALF1(I)*ALF1Q(I)
216 C
217 ✗ 110 CONTINUE
218 C
219 ✗ DO 111 JV=1,NTRA
220 ✗ DO 1110 I=1,LON
221 C
222 ✗ IF(WGRI(I,K,L).LT.0.) THEN
223 C
224 F0 (I,L,JV)=ALF (I)* ( S0(I,K,LP,JV)-ALF1(I)*
225 ✗ + ( SZ(I,K,LP,JV)-ALF2(I)*SZZ(I,K,LP,JV) ) )
226 ✗ FZ (I,L,JV)=ALFQ(I)*(SZ(I,K,LP,JV)-3.*ALF1(I)*SZZ(I,K,LP,JV))
227 ✗ FZZ(I,L,JV)=ALF3(I)*SZZ(I,K,LP,JV)
228 ✗ FXZ(I,L,JV)=ALFQ(I)*SSXZ(I,K,LP,JV)
229 ✗ FYZ(I,L,JV)=ALFQ(I)*SYZ(I,K,LP,JV)
230 ✗ FX (I,L,JV)=ALF (I)*(SSX(I,K,LP,JV)-ALF1(I)*SSXZ(I,K,LP,JV))
231 ✗ FY (I,L,JV)=ALF (I)*(SY(I,K,LP,JV)-ALF1(I)*SYZ(I,K,LP,JV))
232 ✗ FXX(I,L,JV)=ALF (I)*SSXX(I,K,LP,JV)
233 ✗ FXY(I,L,JV)=ALF (I)*SSXY(I,K,LP,JV)
234 ✗ FYY(I,L,JV)=ALF (I)*SYY(I,K,LP,JV)
235 C
236 ✗ S0 (I,K,LP,JV)=S0 (I,K,LP,JV)-F0 (I,L,JV)
237 SZ (I,K,LP,JV)=ALF1Q(I)
238 ✗ + *(SZ(I,K,LP,JV)+3.*ALF(I)*SZZ(I,K,LP,JV))
239 ✗ SZZ(I,K,LP,JV)=ALF4 (I)*SZZ(I,K,LP,JV)
240 ✗ SSXZ(I,K,LP,JV)=ALF1Q(I)*SSXZ(I,K,LP,JV)
241 ✗ SYZ(I,K,LP,JV)=ALF1Q(I)*SYZ(I,K,LP,JV)
242 ✗ SSX (I,K,LP,JV)=SSX (I,K,LP,JV)-FX (I,L,JV)
243 ✗ SY (I,K,LP,JV)=SY (I,K,LP,JV)-FY (I,L,JV)
244 ✗ SSXX(I,K,LP,JV)=SSXX(I,K,LP,JV)-FXX(I,L,JV)
245 ✗ SSXY(I,K,LP,JV)=SSXY(I,K,LP,JV)-FXY(I,L,JV)
246 ✗ SYY(I,K,LP,JV)=SYY(I,K,LP,JV)-FYY(I,L,JV)
247 C
248 ELSE
249 C
250 F0 (I,L,JV)=ALF (I)*(S0(I,K,L,JV)
251 ✗ + +ALF1(I) * (SZ(I,K,L,JV)+ALF2(I)*SZZ(I,K,L,JV)) )
252 ✗ FZ (I,L,JV)=ALFQ(I)*(SZ(I,K,L,JV)+3.*ALF1(I)*SZZ(I,K,L,JV))
253 ✗ FZZ(I,L,JV)=ALF3(I)*SZZ(I,K,L,JV)
254 ✗ FXZ(I,L,JV)=ALFQ(I)*SSXZ(I,K,L,JV)
255 ✗ FYZ(I,L,JV)=ALFQ(I)*SYZ(I,K,L,JV)
256 ✗ FX (I,L,JV)=ALF (I)*(SSX(I,K,L,JV)+ALF1(I)*SSXZ(I,K,L,JV))
257 ✗ FY (I,L,JV)=ALF (I)*(SY(I,K,L,JV)+ALF1(I)*SYZ(I,K,L,JV))
258 ✗ FXX(I,L,JV)=ALF (I)*SSXX(I,K,L,JV)
259 ✗ FXY(I,L,JV)=ALF (I)*SSXY(I,K,L,JV)
260 ✗ FYY(I,L,JV)=ALF (I)*SYY(I,K,L,JV)
261 C
262 ✗ S0 (I,K,L,JV)=S0 (I,K,L,JV)-F0(I,L,JV)
263 ✗ SZ (I,K,L,JV)=ALF1Q(I)*(SZ(I,K,L,JV)-3.*ALF(I)*SZZ(I,K,L,JV))
264 ✗ SZZ(I,K,L,JV)=ALF4 (I)*SZZ(I,K,L,JV)
265 ✗ SSXZ(I,K,L,JV)=ALF1Q(I)*SSXZ(I,K,L,JV)
266 ✗ SYZ(I,K,L,JV)=ALF1Q(I)*SYZ(I,K,L,JV)
267 ✗ SSX (I,K,L,JV)=SSX (I,K,L,JV)-FX (I,L,JV)
268 ✗ SY (I,K,L,JV)=SY (I,K,L,JV)-FY (I,L,JV)
269 ✗ SSXX(I,K,L,JV)=SSXX(I,K,L,JV)-FXX(I,L,JV)
270 ✗ SSXY(I,K,L,JV)=SSXY(I,K,L,JV)-FXY(I,L,JV)
271 ✗ SYY(I,K,L,JV)=SYY(I,K,L,JV)-FYY(I,L,JV)
272 C
273 ENDIF
274 C
275 ✗ 1110 CONTINUE
276 ✗ 111 CONTINUE
277 C
278 ✗ 11 CONTINUE
279 C
280 C puts the temporary moments Fi into appropriate neighboring boxes
281 C
282 ✗ DO 12 L=1,NIV-1
283 ✗ LP=L+1
284 C
285 ✗ DO 120 I=1,LON
286 C
287 ✗ IF(WGRI(I,K,L).LT.0.) THEN
288 ✗ SM(I,K,L)=SM(I,K,L)+FM(I,L)
289 ✗ ALF(I)=FM(I,L)/SM(I,K,L)
290 ELSE
291 ✗ SM(I,K,LP)=SM(I,K,LP)+FM(I,L)
292 ✗ ALF(I)=FM(I,L)/SM(I,K,LP)
293 ENDIF
294 C
295 ✗ ALF1(I)=1.-ALF(I)
296 ✗ ALFQ(I)=ALF(I)*ALF(I)
297 ✗ ALF1Q(I)=ALF1(I)*ALF1(I)
298 ✗ ALF2(I)=ALF(I)*ALF1(I)
299 ✗ ALF3(I)=ALF1(I)-ALF(I)
300 C
301 ✗ 120 CONTINUE
302 C
303 ✗ DO 121 JV=1,NTRA
304 ✗ DO 1210 I=1,LON
305 C
306 ✗ IF(WGRI(I,K,L).LT.0.) THEN
307 C
308 ✗ TEMPTM=-ALF(I)*S0(I,K,L,JV)+ALF1(I)*F0(I,L,JV)
309 ✗ S0 (I,K,L,JV)=S0(I,K,L,JV)+F0(I,L,JV)
310 SZZ(I,K,L,JV)=ALFQ(I)*FZZ(I,L,JV)+ALF1Q(I)*SZZ(I,K,L,JV)
311 ✗ + +5.*( ALF2(I)*(FZ(I,L,JV)-SZ(I,K,L,JV))+ALF3(I)*TEMPTM )
312 SZ (I,K,L,JV)=ALF (I)*FZ (I,L,JV)+ALF1 (I)*SZ (I,K,L,JV)
313 ✗ + +3.*TEMPTM
314 SSXZ(I,K,L,JV)=ALF (I)*FXZ(I,L,JV)+ALF1 (I)*SSXZ(I,K,L,JV)
315 ✗ + +3.*(ALF1(I)*FX (I,L,JV)-ALF (I)*SSX (I,K,L,JV))
316 SYZ(I,K,L,JV)=ALF (I)*FYZ(I,L,JV)+ALF1 (I)*SYZ(I,K,L,JV)
317 ✗ + +3.*(ALF1(I)*FY (I,L,JV)-ALF (I)*SY (I,K,L,JV))
318 ✗ SSX (I,K,L,JV)=SSX (I,K,L,JV)+FX (I,L,JV)
319 ✗ SY (I,K,L,JV)=SY (I,K,L,JV)+FY (I,L,JV)
320 ✗ SSXX(I,K,L,JV)=SSXX(I,K,L,JV)+FXX(I,L,JV)
321 ✗ SSXY(I,K,L,JV)=SSXY(I,K,L,JV)+FXY(I,L,JV)
322 ✗ SYY(I,K,L,JV)=SYY(I,K,L,JV)+FYY(I,L,JV)
323 C
324 ELSE
325 C
326 ✗ TEMPTM=ALF(I)*S0(I,K,LP,JV)-ALF1(I)*F0(I,L,JV)
327 ✗ S0 (I,K,LP,JV)=S0(I,K,LP,JV)+F0(I,L,JV)
328 SZZ(I,K,LP,JV)=ALFQ(I)*FZZ(I,L,JV)+ALF1Q(I)*SZZ(I,K,LP,JV)
329 ✗ + +5.*( ALF2(I)*(SZ(I,K,LP,JV)-FZ(I,L,JV))-ALF3(I)*TEMPTM )
330 SZ (I,K,LP,JV)=ALF (I)*FZ(I,L,JV)+ALF1(I)*SZ(I,K,LP,JV)
331 ✗ + +3.*TEMPTM
332 SSXZ(I,K,LP,JV)=ALF(I)*FXZ(I,L,JV)+ALF1(I)*SSXZ(I,K,LP,JV)
333 ✗ + +3.*(ALF(I)*SSX(I,K,LP,JV)-ALF1(I)*FX(I,L,JV))
334 SYZ(I,K,LP,JV)=ALF(I)*FYZ(I,L,JV)+ALF1(I)*SYZ(I,K,LP,JV)
335 ✗ + +3.*(ALF(I)*SY(I,K,LP,JV)-ALF1(I)*FY(I,L,JV))
336 ✗ SSX (I,K,LP,JV)=SSX (I,K,LP,JV)+FX (I,L,JV)
337 ✗ SY (I,K,LP,JV)=SY (I,K,LP,JV)+FY (I,L,JV)
338 ✗ SSXX(I,K,LP,JV)=SSXX(I,K,LP,JV)+FXX(I,L,JV)
339 ✗ SSXY(I,K,LP,JV)=SSXY(I,K,LP,JV)+FXY(I,L,JV)
340 ✗ SYY(I,K,LP,JV)=SYY(I,K,LP,JV)+FYY(I,L,JV)
341 C
342 ENDIF
343 C
344 ✗ 1210 CONTINUE
345 ✗ 121 CONTINUE
346 C
347 ✗ 12 CONTINUE
348 C
349 C fin de la boucle principale sur les latitudes
350 C
351 ✗ 1 CONTINUE
352 C
353 ✗ DO l = 1,llm
354 ✗ DO j = 1,jjp1
355 ✗ SM(iip1,j,l) = SM(1,j,l)
356 ✗ S0(iip1,j,l,ntra) = S0(1,j,l,ntra)
357 ✗ SSX(iip1,j,l,ntra) = SSX(1,j,l,ntra)
358 ✗ SY(iip1,j,l,ntra) = SY(1,j,l,ntra)
359 ✗ SZ(iip1,j,l,ntra) = SZ(1,j,l,ntra)
360 ENDDO
361 ENDDO
362 c C-------------------------------------------------------------
363 C *** Test : diag de la qqtite totale de tarceur
364 C dans l'atmosphere avant l'advection en z
365 ✗ DO l = 1,llm
366 ✗ DO j = 1,jjp1
367 ✗ DO i = 1,iim
368 ✗ sqf = sqf + S0(i,j,l,ntra)
369 ENDDO
370 ENDDO
371 ENDDO
372 ✗ PRINT*,'-------- DIAG DANS ADVZ - SORTIE ---------'
373 ✗ PRINT*,'sqf=', sqf
374
375 ✗ RETURN
376 END
377