source: LMDZ5/trunk/libf/dyn3d_common/advy.F @ 2597

Last change on this file since 2597 was 2597, checked in by Ehouarn Millour, 8 years ago

Cleanup in the dynamics: get rid of comconst.h, make it a module comconst_mod.
EM

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