/[lmdze]/trunk/Sources/dyn3d/advzp.f
ViewVC logotype

Diff of /trunk/Sources/dyn3d/advzp.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.3  
changed lines
  Added in v.105

  ViewVC Help
Powered by ViewVC 1.1.21