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

Diff of /trunk/dyn3d/advzp.f

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

trunk/dyn3d/advzp.f revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/dyn3d/advzp.f90 revision 81 by guez, Wed Mar 5 14:38:41 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 disvert_m    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, kp, 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)    REAL s00(ntra)
94        REAL FXX(iim,llm,ntra),FXY(iim,llm,ntra)    REAL sm0 ! Just temporal variable
95        REAL FXZ(iim,llm,ntra),FYY(iim,llm,ntra)  
96        REAL FYZ(iim,llm,ntra),FZZ(iim,llm,ntra)    ! work arrays
97        REAL S00(ntra)  
98        REAL SM0             ! Just temporal variable    REAL alf(iim), alf1(iim)
99  C    REAL alfq(iim), alf1q(iim)
100  C  work arrays    REAL alf2(iim), alf3(iim)
101  C    REAL alf4(iim)
102        REAL ALF(iim),ALF1(iim)    REAL temptm ! Just temporal variable
103        REAL ALFQ(iim),ALF1Q(iim)    REAL slpmax, s1max, s1new, s2new
104        REAL ALF2(iim),ALF3(iim)  
105        REAL ALF4(iim)    REAL sqi, sqf
106        REAL TEMPTM          ! Just temporal variable    LOGICAL limit
107        REAL SLPMAX,S1MAX,S1NEW,S2NEW  
108  c    lon = iim ! rem : Il est possible qu'un pbl. arrive ici
109        REAL sqi,sqf    lat = jjp1 ! a cause des dim. differentes entre les
110        LOGICAL LIMIT    niv = llm !       tab. S et VGRI
111    
112        lon = iim         ! rem : Il est possible qu'un pbl. arrive ici    ! -----------------------------------------------------------------
113        lat = jjp1        ! a cause des dim. differentes entre les    ! *** Test : diag de la qtite totale de traceur dans
114        niv = llm         !       tab. S et VGRI    ! l'atmosphere avant l'advection en Y
115                        
116  c-----------------------------------------------------------------    sqi = 0.
117  C *** Test : diag de la qtite totale de traceur dans    sqf = 0.
118  C            l'atmosphere avant l'advection en Y  
119  c    DO l = 1, llm
120        sqi = 0.      DO j = 1, jjp1
121        sqf = 0.        DO i = 1, iim
122  c          sqi = sqi + s0(i, j, l, ntra)
123        DO l = 1,llm        END DO
124           DO j = 1,jjp1      END DO
125             DO i = 1,iim    END DO
126                sqi = sqi + S0(i,j,l,ntra)    PRINT *, '---------- DIAG DANS ADVZP - ENTREE --------'
127             END DO    PRINT *, 'sqi=', sqi
128           END DO  
129      ! -----------------------------------------------------------------
130      ! Interface : adaptation nouveau modele
131      ! -------------------------------------
132    
133      ! Conversion des flux de masses en kg
134    
135      DO l = 1, llm
136        DO j = 1, jjp1
137          DO i = 1, iip1
138            wgri(i, j, llm+1-l) = w(i, j, l)
139        END DO        END DO
140        PRINT*,'---------- DIAG DANS ADVZP - ENTREE --------'      END DO
141        PRINT*,'sqi=',sqi    END DO
142      DO j = 1, jjp1
143        DO i = 1, iip1
144          wgri(i, j, 0) = 0.
145        END DO
146      END DO
147    
148      ! AA rem : Je ne suis pas sur du signe
149      ! AA       Je ne suis pas sur pour le 0:llm
150    
151      ! -----------------------------------------------------------------
152      ! ---------------------- START HERE -------------------------------
153    
154  c-----------------------------------------------------------------    ! boucle sur les latitudes
155  C  Interface : adaptation nouveau modele  
156  C  -------------------------------------    DO k = 1, lat
157  C  
158  C  Conversion des flux de masses en kg      ! place limits on appropriate moments before transport
159        ! (if flux-limiting is to be applied)
160        DO 500 l = 1,llm  
161           DO 500 j = 1,jjp1      IF (.NOT. limit) GO TO 101
162              DO 500 i = 1,iip1    
163              wgri (i,j,llm+1-l) = w (i,j,l)        DO jv = 1, ntra
164    500 CONTINUE        DO l = 1, niv
165        do j=1,jjp1          DO i = 1, lon
166           do i=1,iip1            IF (s0(i,k,l,jv)>0.) THEN
167              wgri(i,j,0)=0.              slpmax = s0(i, k, l, jv)
168           enddo              s1max = 1.5*slpmax
169        enddo              s1new = amin1(s1max, amax1(-s1max,sz(i,k,l,jv)))
170  c              s2new = amin1(2.*slpmax-abs(s1new)/3., amax1(abs( &
171  cAA rem : Je ne suis pas sur du signe                  s1new)-slpmax,szz(i,k,l,jv)))
172  cAA       Je ne suis pas sur pour le 0:llm              sz(i, k, l, jv) = s1new
173  c              szz(i, k, l, jv) = s2new
174  c-----------------------------------------------------------------              ssxz(i, k, l, jv) = amin1(slpmax, amax1(-slpmax,ssxz(i,k,l,jv)))
175  C---------------------- START HERE -------------------------------              syz(i, k, l, jv) = amin1(slpmax, amax1(-slpmax,syz(i,k,l,jv)))
176  C            ELSE
177  C  boucle sur les latitudes              sz(i, k, l, jv) = 0.
178  C              szz(i, k, l, jv) = 0.
179        DO 1 K=1,LAT              ssxz(i, k, l, jv) = 0.
180  C              syz(i, k, l, jv) = 0.
181  C  place limits on appropriate moments before transport            END IF
182  C      (if flux-limiting is to be applied)          END DO
183  C        END DO
184        IF(.NOT.LIMIT) GO TO 101      END DO
185  C  
186        DO 10 JV=1,NTRA  101 CONTINUE
187        DO 10 L=1,NIV  
188           DO 100 I=1,LON      ! boucle sur les niveaux intercouches de 1 a NIV-1
189              IF(S0(I,K,L,JV).GT.0.) THEN      ! (flux nul au sommet L=0 et a la base L=NIV)
190                SLPMAX=S0(I,K,L,JV)  
191                S1MAX =1.5*SLPMAX      ! calculate flux and moments between adjacent boxes
192                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)
193                S2NEW =AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. ,      ! 1- create temporary moments/masses for partial boxes in transit
194       +                     AMAX1(ABS(S1NEW)-SLPMAX,SZZ(I,K,L,JV)) )      ! 2- reajusts moments remaining in the box
195                SZ (I,K,L,JV)=S1NEW  
196                SZZ(I,K,L,JV)=S2NEW      DO l = 1, niv - 1
197                SSXZ(I,K,L,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,SSXZ(I,K,L,JV)))        lp = l + 1
198                SYZ(I,K,L,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,SYZ(I,K,L,JV)))  
199              ELSE        DO i = 1, lon
200                SZ (I,K,L,JV)=0.  
201                SZZ(I,K,L,JV)=0.          IF (wgri(i,k,l)<0.) THEN
202                SSXZ(I,K,L,JV)=0.            fm(i, l) = -wgri(i, k, l)*dtz
203                SYZ(I,K,L,JV)=0.            alf(i) = fm(i, l)/sm(i, k, lp)
204              ENDIF            sm(i, k, lp) = sm(i, k, lp) - fm(i, l)
205   100     CONTINUE          ELSE
206   10   CONTINUE            fm(i, l) = wgri(i, k, l)*dtz
207  C            alf(i) = fm(i, l)/sm(i, k, l)
208   101  CONTINUE            sm(i, k, l) = sm(i, k, l) - fm(i, l)
209  C          END IF
210  C  boucle sur les niveaux intercouches de 1 a NIV-1  
211  C   (flux nul au sommet L=0 et a la base L=NIV)          alfq(i) = alf(i)*alf(i)
212  C          alf1(i) = 1. - alf(i)
213  C  calculate flux and moments between adjacent boxes          alf1q(i) = alf1(i)*alf1(i)
214  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)
215  C  1- create temporary moments/masses for partial boxes in transit          alf3(i) = alf(i)*alfq(i)
216  C  2- reajusts moments remaining in the box          alf4(i) = alf1(i)*alf1q(i)
217  C  
218        DO 11 L=1,NIV-1        END DO
219        LP=L+1  
220  C        DO jv = 1, ntra
221        DO 110 I=1,LON          DO i = 1, lon
222  C  
223           IF(WGRI(I,K,L).LT.0.) THEN            IF (wgri(i,k,l)<0.) THEN
224             FM(I,L)=-WGRI(I,K,L)*DTZ  
225             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, &
226             SM(I,K,LP)=SM(I,K,LP)-FM(I,L)                jv)-alf2(i)*szz(i,k,lp,jv)))
227           ELSE              fz(i, l, jv) = alfq(i)*(sz(i,k,lp,jv)-3.*alf1(i)*szz(i,k,lp,jv))
228             FM(I,L)=WGRI(I,K,L)*DTZ              fzz(i, l, jv) = alf3(i)*szz(i, k, lp, jv)
229             ALF(I)=FM(I,L)/SM(I,K,L)              fxz(i, l, jv) = alfq(i)*ssxz(i, k, lp, jv)
230             SM(I,K,L)=SM(I,K,L)-FM(I,L)              fyz(i, l, jv) = alfq(i)*syz(i, k, lp, jv)
231           ENDIF              fx(i, l, jv) = alf(i)*(ssx(i,k,lp,jv)-alf1(i)*ssxz(i,k,lp,jv))
232  C              fy(i, l, jv) = alf(i)*(sy(i,k,lp,jv)-alf1(i)*syz(i,k,lp,jv))
233           ALFQ (I)=ALF(I)*ALF(I)              fxx(i, l, jv) = alf(i)*ssxx(i, k, lp, jv)
234           ALF1 (I)=1.-ALF(I)              fxy(i, l, jv) = alf(i)*ssxy(i, k, lp, jv)
235           ALF1Q(I)=ALF1(I)*ALF1(I)              fyy(i, l, jv) = alf(i)*syy(i, k, lp, jv)
236           ALF2 (I)=ALF1(I)-ALF(I)  
237           ALF3 (I)=ALF(I)*ALFQ(I)              s0(i, k, lp, jv) = s0(i, k, lp, jv) - f0(i, l, jv)
238           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, &
239  C                jv))
240   110  CONTINUE              szz(i, k, lp, jv) = alf4(i)*szz(i, k, lp, jv)
241  C              ssxz(i, k, lp, jv) = alf1q(i)*ssxz(i, k, lp, jv)
242        DO 111 JV=1,NTRA              syz(i, k, lp, jv) = alf1q(i)*syz(i, k, lp, jv)
243        DO 1110 I=1,LON              ssx(i, k, lp, jv) = ssx(i, k, lp, jv) - fx(i, l, jv)
244  C              sy(i, k, lp, jv) = sy(i, k, lp, jv) - fy(i, l, jv)
245           IF(WGRI(I,K,L).LT.0.) THEN              ssxx(i, k, lp, jv) = ssxx(i, k, lp, jv) - fxx(i, l, jv)
246  C              ssxy(i, k, lp, jv) = ssxy(i, k, lp, jv) - fxy(i, l, jv)
247             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)
248       +          ( SZ(I,K,LP,JV)-ALF2(I)*SZZ(I,K,LP,JV) ) )  
249             FZ (I,L,JV)=ALFQ(I)*(SZ(I,K,LP,JV)-3.*ALF1(I)*SZZ(I,K,LP,JV))            ELSE
250             FZZ(I,L,JV)=ALF3(I)*SZZ(I,K,LP,JV)  
251             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, &
252             FYZ(I,L,JV)=ALFQ(I)*SYZ(I,K,LP,JV)                jv)+alf2(i)*szz(i,k,l,jv)))
253             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))
254             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)
255             FXX(I,L,JV)=ALF (I)*SSXX(I,K,LP,JV)              fxz(i, l, jv) = alfq(i)*ssxz(i, k, l, jv)
256             FXY(I,L,JV)=ALF (I)*SSXY(I,K,LP,JV)              fyz(i, l, jv) = alfq(i)*syz(i, k, l, jv)
257             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))
258  C              fy(i, l, jv) = alf(i)*(sy(i,k,l,jv)+alf1(i)*syz(i,k,l,jv))
259             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)
260             SZ (I,K,LP,JV)=ALF1Q(I)              fxy(i, l, jv) = alf(i)*ssxy(i, k, l, jv)
261       +                   *(SZ(I,K,LP,JV)+3.*ALF(I)*SZZ(I,K,LP,JV))              fyy(i, l, jv) = alf(i)*syy(i, k, l, jv)
262             SZZ(I,K,LP,JV)=ALF4 (I)*SZZ(I,K,LP,JV)  
263             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)
264             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))
265             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)
266             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)
267             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)
268             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)
269             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)
270  C              ssxx(i, k, l, jv) = ssxx(i, k, l, jv) - fxx(i, l, jv)
271           ELSE              ssxy(i, k, l, jv) = ssxy(i, k, l, jv) - fxy(i, l, jv)
272  C              syy(i, k, l, jv) = syy(i, k, l, jv) - fyy(i, l, jv)
273             F0 (I,L,JV)=ALF (I)*(S0(I,K,L,JV)  
274       +           +ALF1(I) * (SZ(I,K,L,JV)+ALF2(I)*SZZ(I,K,L,JV)) )            END IF
275             FZ (I,L,JV)=ALFQ(I)*(SZ(I,K,L,JV)+3.*ALF1(I)*SZZ(I,K,L,JV))  
276             FZZ(I,L,JV)=ALF3(I)*SZZ(I,K,L,JV)          END DO
277             FXZ(I,L,JV)=ALFQ(I)*SSXZ(I,K,L,JV)        END DO
278             FYZ(I,L,JV)=ALFQ(I)*SYZ(I,K,L,JV)  
279             FX (I,L,JV)=ALF (I)*(SSX(I,K,L,JV)+ALF1(I)*SSXZ(I,K,L,JV))      END DO
280             FY (I,L,JV)=ALF (I)*(SY(I,K,L,JV)+ALF1(I)*SYZ(I,K,L,JV))  
281             FXX(I,L,JV)=ALF (I)*SSXX(I,K,L,JV)      ! puts the temporary moments Fi into appropriate neighboring boxes
282             FXY(I,L,JV)=ALF (I)*SSXY(I,K,L,JV)  
283             FYY(I,L,JV)=ALF (I)*SYY(I,K,L,JV)      DO l = 1, niv - 1
284  C        lp = l + 1
285             S0 (I,K,L,JV)=S0 (I,K,L,JV)-F0(I,L,JV)  
286             SZ (I,K,L,JV)=ALF1Q(I)*(SZ(I,K,L,JV)-3.*ALF(I)*SZZ(I,K,L,JV))        DO i = 1, lon
287             SZZ(I,K,L,JV)=ALF4 (I)*SZZ(I,K,L,JV)  
288             SSXZ(I,K,L,JV)=ALF1Q(I)*SSXZ(I,K,L,JV)          IF (wgri(i,k,l)<0.) THEN
289             SYZ(I,K,L,JV)=ALF1Q(I)*SYZ(I,K,L,JV)            sm(i, k, l) = sm(i, k, l) + fm(i, l)
290             SSX (I,K,L,JV)=SSX (I,K,L,JV)-FX (I,L,JV)            alf(i) = fm(i, l)/sm(i, k, l)
291             SY (I,K,L,JV)=SY (I,K,L,JV)-FY (I,L,JV)          ELSE
292             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)
293             SSXY(I,K,L,JV)=SSXY(I,K,L,JV)-FXY(I,L,JV)            alf(i) = fm(i, l)/sm(i, k, lp)
294             SYY(I,K,L,JV)=SYY(I,K,L,JV)-FYY(I,L,JV)          END IF
295  C  
296           ENDIF          alf1(i) = 1. - alf(i)
297  C          alfq(i) = alf(i)*alf(i)
298   1110 CONTINUE          alf1q(i) = alf1(i)*alf1(i)
299   111  CONTINUE          alf2(i) = alf(i)*alf1(i)
300  C          alf3(i) = alf1(i) - alf(i)
301   11   CONTINUE  
302  C        END DO
303  C  puts the temporary moments Fi into appropriate neighboring boxes  
304  C        DO jv = 1, ntra
305        DO 12 L=1,NIV-1          DO i = 1, lon
306        LP=L+1  
307  C            IF (wgri(i,k,l)<0.) THEN
308        DO 120 I=1,LON  
309  C              temptm = -alf(i)*s0(i, k, l, jv) + alf1(i)*f0(i, l, jv)
310           IF(WGRI(I,K,L).LT.0.) THEN              s0(i, k, l, jv) = s0(i, k, l, jv) + f0(i, l, jv)
311             SM(I,K,L)=SM(I,K,L)+FM(I,L)              szz(i, k, l, jv) = alfq(i)*fzz(i, l, jv) + &
312             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, &
313           ELSE                jv))+alf3(i)*temptm)
314             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) + &
315             ALF(I)=FM(I,L)/SM(I,K,LP)                3.*temptm
316           ENDIF              ssxz(i, k, l, jv) = alf(i)*fxz(i, l, jv) + &
317  C                alf1(i)*ssxz(i, k, l, jv) + 3.*(alf1(i)*fx(i,l,jv)-alf(i)*ssx(i &
318           ALF1(I)=1.-ALF(I)                ,k,l,jv))
319           ALFQ(I)=ALF(I)*ALF(I)              syz(i, k, l, jv) = alf(i)*fyz(i, l, jv) + &
320           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 &
321           ALF2(I)=ALF(I)*ALF1(I)                ,l,jv))
322           ALF3(I)=ALF1(I)-ALF(I)              ssx(i, k, l, jv) = ssx(i, k, l, jv) + fx(i, l, jv)
323  C              sy(i, k, l, jv) = sy(i, k, l, jv) + fy(i, l, jv)
324   120  CONTINUE              ssxx(i, k, l, jv) = ssxx(i, k, l, jv) + fxx(i, l, jv)
325  C              ssxy(i, k, l, jv) = ssxy(i, k, l, jv) + fxy(i, l, jv)
326        DO 121 JV=1,NTRA              syy(i, k, l, jv) = syy(i, k, l, jv) + fyy(i, l, jv)
327        DO 1210 I=1,LON  
328  C            ELSE
329           IF(WGRI(I,K,L).LT.0.) THEN  
330  C              temptm = alf(i)*s0(i, k, lp, jv) - alf1(i)*f0(i, l, jv)
331             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)
332             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) + &
333             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, &
334       +        +5.*( ALF2(I)*(FZ(I,L,JV)-SZ(I,K,L,JV))+ALF3(I)*TEMPTM )                jv))-alf3(i)*temptm)
335             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) + &
336       +                  +3.*TEMPTM                alf1(i)*sz(i, k, lp, jv) + 3.*temptm
337             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) + &
338       +              +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)* &
339             SYZ(I,K,L,JV)=ALF (I)*FYZ(I,L,JV)+ALF1 (I)*SYZ(I,K,L,JV)                fx(i,l,jv))
340       +              +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) + &
341             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 &
342             SY (I,K,L,JV)=SY (I,K,L,JV)+FY (I,L,JV)                (i,l,jv))
343             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)
344             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)
345             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)
346  C              ssxy(i, k, lp, jv) = ssxy(i, k, lp, jv) + fxy(i, l, jv)
347           ELSE              syy(i, k, lp, jv) = syy(i, k, lp, jv) + fyy(i, l, jv)
348  C  
349             TEMPTM=ALF(I)*S0(I,K,LP,JV)-ALF1(I)*F0(I,L,JV)            END IF
350             S0 (I,K,LP,JV)=S0(I,K,LP,JV)+F0(I,L,JV)  
351             SZZ(I,K,LP,JV)=ALFQ(I)*FZZ(I,L,JV)+ALF1Q(I)*SZZ(I,K,LP,JV)          END DO
352       +        +5.*( ALF2(I)*(SZ(I,K,LP,JV)-FZ(I,L,JV))-ALF3(I)*TEMPTM )        END DO
353             SZ (I,K,LP,JV)=ALF (I)*FZ(I,L,JV)+ALF1(I)*SZ(I,K,LP,JV)  
354       +                   +3.*TEMPTM      END DO
355             SSXZ(I,K,LP,JV)=ALF(I)*FXZ(I,L,JV)+ALF1(I)*SSXZ(I,K,LP,JV)  
356       +                   +3.*(ALF(I)*SSX(I,K,LP,JV)-ALF1(I)*FX(I,L,JV))      ! fin de la boucle principale sur les latitudes
357             SYZ(I,K,LP,JV)=ALF(I)*FYZ(I,L,JV)+ALF1(I)*SYZ(I,K,LP,JV)  
358       +                   +3.*(ALF(I)*SY(I,K,LP,JV)-ALF1(I)*FY(I,L,JV))    END DO
359             SSX (I,K,LP,JV)=SSX (I,K,LP,JV)+FX (I,L,JV)  
360             SY (I,K,LP,JV)=SY (I,K,LP,JV)+FY (I,L,JV)    DO l = 1, llm
361             SSXX(I,K,LP,JV)=SSXX(I,K,LP,JV)+FXX(I,L,JV)      DO j = 1, jjp1
362             SSXY(I,K,LP,JV)=SSXY(I,K,LP,JV)+FXY(I,L,JV)        sm(iip1, j, l) = sm(1, j, l)
363             SYY(I,K,LP,JV)=SYY(I,K,LP,JV)+FYY(I,L,JV)        s0(iip1, j, l, ntra) = s0(1, j, l, ntra)
364  C        ssx(iip1, j, l, ntra) = ssx(1, j, l, ntra)
365           ENDIF        sy(iip1, j, l, ntra) = sy(1, j, l, ntra)
366  C        sz(iip1, j, l, ntra) = sz(1, j, l, ntra)
367   1210 CONTINUE      END DO
368   121  CONTINUE    END DO
369  C    ! C-------------------------------------------------------------
370   12   CONTINUE    ! *** Test : diag de la qqtite totale de tarceur
371  C    ! dans l'atmosphere avant l'advection en z
372  C  fin de la boucle principale sur les latitudes    DO l = 1, llm
373  C      DO j = 1, jjp1
374   1    CONTINUE        DO i = 1, iim
375  C          sqf = sqf + s0(i, j, l, ntra)
376        DO l = 1,llm        END DO
377        DO j = 1,jjp1      END DO
378            SM(iip1,j,l) = SM(1,j,l)    END DO
379            S0(iip1,j,l,ntra) = S0(1,j,l,ntra)    PRINT *, '-------- DIAG DANS ADVZ - SORTIE ---------'
380            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  
381    
382        RETURN    RETURN
383        END  END SUBROUTINE advzp

Legend:
Removed from v.76  
changed lines
  Added in v.81

  ViewVC Help
Powered by ViewVC 1.1.21