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

Diff of /trunk/dyn3d/prather.f

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

trunk/libf/dyn3d/prather.f revision 31 by guez, Thu Apr 1 14:59:19 2010 UTC trunk/dyn3d/prather.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/prather.F,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/prather.F,v 1.1.1.1 2004/05/19
3  !  ! 12:53:07 lmdzadmin Exp $
4        SUBROUTINE prather (q,w,masse,pbaru,pbarv,nt,dt)  
5        use dimens_m  SUBROUTINE prather(q, w, masse, pbaru, pbarv, nt, dt)
6        use paramet_m    USE dimens_m
7        use comconst    USE paramet_m
8        use comvert    USE comconst
9        use comgeom    USE disvert_m
10        IMPLICIT NONE    USE comgeom
11      USE nr_util, ONLY: pi
12  c=======================================================================    IMPLICIT NONE
13  c   Adaptation LMDZ:  A.Armengaud (LGGE)  
14  c   ----------------    ! =======================================================================
15  c    ! Adaptation LMDZ:  A.Armengaud (LGGE)
16  c   ************************************************    ! ----------------
17  c   Transport des traceurs par la methode de prather  
18  c   Ref :    ! ************************************************
19  c    ! Transport des traceurs par la methode de prather
20  c   ************************************************    ! Ref :
21  c   q,w,pext,pbaru et pbarv : arguments d'entree  pour le s-pg  
22  c    ! ************************************************
23  c=======================================================================    ! q,w,pext,pbaru et pbarv : arguments d'entree  pour le s-pg
24    
25      ! =======================================================================
26    
27  c   Arguments:  
28  c   ----------  
29        INTEGER iq,nt    ! Arguments:
30        REAL, intent(in):: pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm )    ! ----------
31        REAL masse(iip1,jjp1,llm)    INTEGER iq, nt
32        REAL q( iip1,jjp1,llm,0:9)    REAL, INTENT (IN) :: pbaru(ip1jmp1, llm), pbarv(ip1jm, llm)
33        REAL w( ip1jmp1,llm )    REAL masse(iip1, jjp1, llm)
34        integer ordre,ilim    REAL q(iip1, jjp1, llm, 0:9)
35      REAL w(ip1jmp1, llm)
36  c   Local:    INTEGER ordre, ilim
37  c   ------  
38        LOGICAL limit    ! Local:
39        real zq(iip1,jjp1,llm)    ! ------
40        REAL sm ( iip1,jjp1, llm )    LOGICAL limit
41        REAL s0( iip1,jjp1,llm ),  sx( iip1,jjp1,llm )    REAL zq(iip1, jjp1, llm)
42        REAL sy( iip1,jjp1,llm ),  sz( iip1,jjp1,llm )    REAL sm(iip1, jjp1, llm)
43        REAL sxx( iip1,jjp1,llm)    REAL s0(iip1, jjp1, llm), sx(iip1, jjp1, llm)
44        REAL sxy( iip1,jjp1,llm)    REAL sy(iip1, jjp1, llm), sz(iip1, jjp1, llm)
45        REAL sxz( iip1,jjp1,llm)    REAL sxx(iip1, jjp1, llm)
46        REAL syy( iip1,jjp1,llm )    REAL sxy(iip1, jjp1, llm)
47        REAL syz( iip1,jjp1,llm )    REAL sxz(iip1, jjp1, llm)
48        REAL szz( iip1,jjp1,llm ),zz    REAL syy(iip1, jjp1, llm)
49        INTEGER i,j,l,indice    REAL syz(iip1, jjp1, llm)
50        real sxn(iip1),sxs(iip1)    REAL szz(iip1, jjp1, llm), zz
51      INTEGER i, j, l, indice
52        real sinlon(iip1),sinlondlon(iip1)    REAL sxn(iip1), sxs(iip1)
53        real coslon(iip1),coslondlon(iip1)  
54        real qmin,qmax    REAL sinlon(iip1), sinlondlon(iip1)
55        save qmin,qmax    REAL coslon(iip1), coslondlon(iip1)
56        save sinlon,coslon,sinlondlon,coslondlon    REAL qmin, qmax
57        real dyn1,dyn2,dys1,dys2,qpn,qps,dqzpn,dqzps    SAVE qmin, qmax
58        real masn,mass    SAVE sinlon, coslon, sinlondlon, coslondlon
59  c    REAL dyn1, dyn2, dys1, dys2, qpn, qps, dqzpn, dqzps
60        REAL      SSUM    REAL masn, mass
61        integer ismax,ismin  
62        EXTERNAL  SSUM, convflu,ismin,ismax    REAL ssum
63        logical first    INTEGER ismax, ismin
64        save first    EXTERNAL ssum, convflu, ismin, ismax
65        EXTERNAL advxp,advyp,advzp    LOGICAL first
66      SAVE first
67      EXTERNAL advxp, advyp, advzp
68        data first/.true./  
69        data qmin,qmax/-1.e33,1.e33/  
70      DATA first/.TRUE./
71      DATA qmin, qmax/ -1.E33, 1.E33/
72  c==========================================================================  
73  c==========================================================================  
74  c     MODIFICATION POUR PAS DE TEMPS ADAPTATIF, dtvr remplace par dt    ! ==========================================================================
75  c==========================================================================    ! ==========================================================================
76  c==========================================================================    ! MODIFICATION POUR PAS DE TEMPS ADAPTATIF, dtvr remplace par dt
77        REAL dt    ! ==========================================================================
78  c==========================================================================    ! ==========================================================================
79        limit = .TRUE.    REAL dt
80      ! ==========================================================================
81        if(first) then    limit = .TRUE.
82           print*,'SCHEMA PRATHER'  
83           first=.false.    IF (first) THEN
84           do i=2,iip1      PRINT *, 'SCHEMA PRATHER'
85              coslon(i)=cos(rlonv(i))      first = .FALSE.
86              sinlon(i)=sin(rlonv(i))      DO i = 2, iip1
87              coslondlon(i)=coslon(i)*(rlonu(i)-rlonu(i-1))/pi        coslon(i) = cos(rlonv(i))
88              sinlondlon(i)=sinlon(i)*(rlonu(i)-rlonu(i-1))/pi        sinlon(i) = sin(rlonv(i))
89           enddo        coslondlon(i) = coslon(i)*(rlonu(i)-rlonu(i-1))/pi
90           coslon(1)=coslon(iip1)        sinlondlon(i) = sinlon(i)*(rlonu(i)-rlonu(i-1))/pi
91           coslondlon(1)=coslondlon(iip1)      END DO
92           sinlon(1)=sinlon(iip1)      coslon(1) = coslon(iip1)
93           sinlondlon(1)=sinlondlon(iip1)      coslondlon(1) = coslondlon(iip1)
94        sinlon(1) = sinlon(iip1)
95          DO l = 1,llm      sinlondlon(1) = sinlondlon(iip1)
96          DO j = 1,jjp1  
97          DO i = 1,iip1      DO l = 1, llm
98          q( i,j,l,1 )=0.        DO j = 1, jjp1
99          q( i,j,l,2)=0.          DO i = 1, iip1
100          q( i,j,l,3)=0.            q(i, j, l, 1) = 0.
101          q( i,j,l,4)=0.            q(i, j, l, 2) = 0.
102          q( i,j,l,5)=0.            q(i, j, l, 3) = 0.
103          q( i,j,l,6)=0.            q(i, j, l, 4) = 0.
104          q( i,j,l,7)=0.            q(i, j, l, 5) = 0.
105          q( i,j,l,8)=0.            q(i, j, l, 6) = 0.
106          q( i,j,l,9)=0.            q(i, j, l, 7) = 0.
107          ENDDO            q(i, j, l, 8) = 0.
108          ENDDO            q(i, j, l, 9) = 0.
109          ENDDO          END DO
110        endif        END DO
111  c   Fin modif Fred      END DO
112      END IF
113  c *** On calcule la masse d'air en kg    ! Fin modif Fred
114    
115         DO l = 1,llm    ! *** On calcule la masse d'air en kg
116          DO j = 1,jjp1  
117           DO i = 1,iip1    DO l = 1, llm
118           sm( i,j,llm+1-l ) =masse(i,j,l)      DO j = 1, jjp1
119           ENDDO        DO i = 1, iip1
120          ENDDO          sm(i, j, llm+1-l) = masse(i, j, l)
121         ENDDO        END DO
122        END DO
123  c *** q contient les qqtes de traceur avant l'advection    END DO
124    
125  c *** Affectation des tableaux S a partir de Q    ! *** q contient les qqtes de traceur avant l'advection
126    
127         DO l = 1,llm    ! *** Affectation des tableaux S a partir de Q
128          DO j = 1,jjp1  
129           DO i = 1,iip1    DO l = 1, llm
130         s0( i,j,l) = q ( i,j,llm+1-l,0 )*sm(i,j,l)      DO j = 1, jjp1
131         sx( i,j,l) = q( i,j,llm+1-l,1 )*sm(i,j,l)        DO i = 1, iip1
132         sy( i,j,l) = q( i,j,llm+1-l,2)*sm(i,j,l)          s0(i, j, l) = q(i, j, llm+1-l, 0)*sm(i, j, l)
133         sz( i,j,l) = q( i,j,llm+1-l,3)*sm(i,j,l)          sx(i, j, l) = q(i, j, llm+1-l, 1)*sm(i, j, l)
134         sxx( i,j,l) = q( i,j,llm+1-l,4)*sm(i,j,l)          sy(i, j, l) = q(i, j, llm+1-l, 2)*sm(i, j, l)
135         sxy( i,j,l) = q( i,j,llm+1-l,5)*sm(i,j,l)          sz(i, j, l) = q(i, j, llm+1-l, 3)*sm(i, j, l)
136         sxz( i,j,l) = q( i,j,llm+1-l,6)*sm(i,j,l)          sxx(i, j, l) = q(i, j, llm+1-l, 4)*sm(i, j, l)
137         syy( i,j,l) = q( i,j,llm+1-l,7)*sm(i,j,l)          sxy(i, j, l) = q(i, j, llm+1-l, 5)*sm(i, j, l)
138         syz( i,j,l) = q( i,j,llm+1-l,8)*sm(i,j,l)          sxz(i, j, l) = q(i, j, llm+1-l, 6)*sm(i, j, l)
139         szz( i,j,l) = q( i,j,llm+1-l,9)*sm(i,j,l)          syy(i, j, l) = q(i, j, llm+1-l, 7)*sm(i, j, l)
140           ENDDO          syz(i, j, l) = q(i, j, llm+1-l, 8)*sm(i, j, l)
141          ENDDO          szz(i, j, l) = q(i, j, llm+1-l, 9)*sm(i, j, l)
142         ENDDO        END DO
143  c *** Appel des subroutines d'advection en X, en Y et en Z      END DO
144  c *** Advection avec "time-splitting"    END DO
145            ! *** Appel des subroutines d'advection en X, en Y et en Z
146  c-----------------------------------------------------------    ! *** Advection avec "time-splitting"
147         do indice =1,nt  
148         call advxp( limit,0.5*dt,pbaru,sm,s0,sx,sy,sz    ! -----------------------------------------------------------
149       .             ,sxx,sxy,sxz,syy,syz,szz,1 )    DO indice = 1, nt
150          end do      CALL advxp(limit, 0.5*dt, pbaru, sm, s0, sx, sy, sz, sxx, sxy, sxz, syy, &
151          do l=1,llm        syz, szz, 1)
152          do i=1,iip1    END DO
153          sy(i,1,l)=0.    DO l = 1, llm
154          sy(i,jjp1,l)=0.      DO i = 1, iip1
155          enddo        sy(i, 1, l) = 0.
156          enddo        sy(i, jjp1, l) = 0.
157  c---------------------------------------------------------      END DO
158         call advyp( limit,.5*dt*nt,pbarv,sm,s0,sx,sy,sz    END DO
159       .             ,sxx,sxy,sxz,syy,syz,szz,1 )    ! ---------------------------------------------------------
160  c---------------------------------------------------------    CALL advyp(limit, .5*dt*nt, pbarv, sm, s0, sx, sy, sz, sxx, sxy, sxz, syy, &
161        syz, szz, 1)
162  c---------------------------------------------------------    ! ---------------------------------------------------------
163         do j=1,jjp1  
164            do i=1,iip1    ! ---------------------------------------------------------
165               sz(i,j,1)=0.    DO j = 1, jjp1
166               sz(i,j,llm)=0.      DO i = 1, iip1
167               sxz(i,j,1)=0.        sz(i, j, 1) = 0.
168               sxz(i,j,llm)=0.        sz(i, j, llm) = 0.
169               syz(i,j,1)=0.        sxz(i, j, 1) = 0.
170               syz(i,j,llm)=0.        sxz(i, j, llm) = 0.
171               szz(i,j,1)=0.        syz(i, j, 1) = 0.
172               szz(i,j,llm)=0.        syz(i, j, llm) = 0.
173            enddo        szz(i, j, 1) = 0.
174         enddo        szz(i, j, llm) = 0.
175         call advzp( limit,dt*nt,w,sm,s0,sx,sy,sz      END DO
176       .             ,sxx,sxy,sxz,syy,syz,szz,1 )    END DO
177          do l=1,llm    CALL advzp(limit, dt*nt, w, sm, s0, sx, sy, sz, sxx, sxy, sxz, syy, syz, &
178          do i=1,iip1      szz, 1)
179          sy(i,1,l)=0.    DO l = 1, llm
180          sy(i,jjp1,l)=0.      DO i = 1, iip1
181          enddo        sy(i, 1, l) = 0.
182          enddo        sy(i, jjp1, l) = 0.
183        END DO
184  c---------------------------------------------------------    END DO
185    
186  c---------------------------------------------------------    ! ---------------------------------------------------------
187         call advyp( limit,.5*dt*nt,pbarv,sm,s0,sx,sy,sz  
188       .             ,sxx,sxy,sxz,syy,syz,szz,1 )    ! ---------------------------------------------------------
189  c---------------------------------------------------------    CALL advyp(limit, .5*dt*nt, pbarv, sm, s0, sx, sy, sz, sxx, sxy, sxz, syy, &
190         DO l = 1,llm      syz, szz, 1)
191          DO j = 1,jjp1    ! ---------------------------------------------------------
192               s0( iip1,j,l)=s0( 1,j,l )    DO l = 1, llm
193               sx( iip1,j,l)=sx( 1,j,l )      DO j = 1, jjp1
194               sy( iip1,j,l)=sy( 1,j,l )        s0(iip1, j, l) = s0(1, j, l)
195               sz( iip1,j,l)=sz( 1,j,l )        sx(iip1, j, l) = sx(1, j, l)
196               sxx( iip1,j,l)=sxx( 1,j,l )        sy(iip1, j, l) = sy(1, j, l)
197               sxy( iip1,j,l)=sxy( 1,j,l)        sz(iip1, j, l) = sz(1, j, l)
198               sxz( iip1,j,l)=sxz( 1,j,l )        sxx(iip1, j, l) = sxx(1, j, l)
199               syy( iip1,j,l)=syy( 1,j,l )        sxy(iip1, j, l) = sxy(1, j, l)
200               syz( iip1,j,l)=syz( 1,j,l)        sxz(iip1, j, l) = sxz(1, j, l)
201               szz( iip1,j,l)=szz( 1,j,l )        syy(iip1, j, l) = syy(1, j, l)
202          ENDDO        syz(iip1, j, l) = syz(1, j, l)
203         ENDDO        szz(iip1, j, l) = szz(1, j, l)
204         do indice=1,nt      END DO
205         call advxp( limit,0.5*dt,pbaru,sm,s0,sx,sy,sz    END DO
206       .             ,sxx,sxy,sxz,syy,syz,szz,1 )    DO indice = 1, nt
207          end do      CALL advxp(limit, 0.5*dt, pbaru, sm, s0, sx, sy, sz, sxx, sxy, sxz, syy, &
208  c---------------------------------------------------------        syz, szz, 1)
209  c---------------------------------------------------------    END DO
210  c ***   On repasse les S dans la variable qpr    ! ---------------------------------------------------------
211  c ***   On repasse les S dans la variable q directement 14/10/94    ! ---------------------------------------------------------
212      ! ***   On repasse les S dans la variable qpr
213         DO  l = 1,llm    ! ***   On repasse les S dans la variable q directement 14/10/94
214          DO  j = 1,jjp1  
215           DO  i = 1,iip1    DO l = 1, llm
216        q( i,j,llm+1-l,0 )=s0( i,j,l )/sm(i,j,l)      DO j = 1, jjp1
217        q( i,j,llm+1-l,1 ) = sx( i,j,l )/sm(i,j,l)        DO i = 1, iip1
218        q( i,j,llm+1-l,2 ) = sy( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 0) = s0(i, j, l)/sm(i, j, l)
219        q( i,j,llm+1-l,3 ) = sz( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 1) = sx(i, j, l)/sm(i, j, l)
220        q( i,j,llm+1-l,4 ) = sxx( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 2) = sy(i, j, l)/sm(i, j, l)
221        q( i,j,llm+1-l,5 ) = sxy( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 3) = sz(i, j, l)/sm(i, j, l)
222        q( i,j,llm+1-l,6 ) = sxz( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 4) = sxx(i, j, l)/sm(i, j, l)
223        q( i,j,llm+1-l,7 ) = syy( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 5) = sxy(i, j, l)/sm(i, j, l)
224        q( i,j,llm+1-l,8 ) = syz( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 6) = sxz(i, j, l)/sm(i, j, l)
225        q( i,j,llm+1-l,9 ) = szz( i,j,l )/sm(i,j,l)          q(i, j, llm+1-l, 7) = syy(i, j, l)/sm(i, j, l)
226        ENDDO          q(i, j, llm+1-l, 8) = syz(i, j, l)/sm(i, j, l)
227        ENDDO          q(i, j, llm+1-l, 9) = szz(i, j, l)/sm(i, j, l)
228        ENDDO        END DO
229        END DO
230  c---------------------------------------------------------    END DO
231  c      go to  777  
232  c   filtrages aux poles    ! ---------------------------------------------------------
233      ! go to  777
234  c Traitements specifiques au pole    ! filtrages aux poles
235    
236  c   filtrages aux poles    ! Traitements specifiques au pole
237           DO l=1,llm  
238  c   filtrages aux poles    ! filtrages aux poles
239           masn=ssum(iim,sm(1,1,l),1)    DO l = 1, llm
240           mass=ssum(iim,sm(1,jjp1,l),1)      ! filtrages aux poles
241           qpn=ssum(iim,s0(1,1,l),1)/masn      masn = ssum(iim, sm(1,1,l), 1)
242           qps=ssum(iim,s0(1,jjp1,l),1)/mass      mass = ssum(iim, sm(1,jjp1,l), 1)
243           dqzpn=ssum(iim,sz(1,1,l),1)/masn      qpn = ssum(iim, s0(1,1,l), 1)/masn
244           dqzps=ssum(iim,sz(1,jjp1,l),1)/mass      qps = ssum(iim, s0(1,jjp1,l), 1)/mass
245           do i=1,iip1      dqzpn = ssum(iim, sz(1,1,l), 1)/masn
246            q( i,1,llm+1-l,3)=dqzpn      dqzps = ssum(iim, sz(1,jjp1,l), 1)/mass
247            q( i,jjp1,llm+1-l,3)=dqzps      DO i = 1, iip1
248            q( i,1,llm+1-l,0)=qpn        q(i, 1, llm+1-l, 3) = dqzpn
249            q( i,jjp1,llm+1-l,0)=qps        q(i, jjp1, llm+1-l, 3) = dqzps
250           enddo        q(i, 1, llm+1-l, 0) = qpn
251  c       enddo        q(i, jjp1, llm+1-l, 0) = qps
252  c         print*,'qpn',qpn,'qps',qps      END DO
253  c          print*,'dqzpn',dqzpn,'dqzps',dqzps      dyn1 = 0.
254  c       enddo      dys1 = 0.
255             dyn1=0.      dyn2 = 0.
256             dys1=0.      dys2 = 0.
257             dyn2=0.      DO i = 1, iim
258             dys2=0.        zz = s0(i, 2, l)/sm(i, 2, l) - q(i, 1, llm+1-l, 0)
259          do i=1,iim        dyn1 = dyn1 + sinlondlon(i)*zz
260          zz=s0(i,2,l)/sm(i,2,l)-q(i,1,llm+1-l,0)        dyn2 = dyn2 + coslondlon(i)*zz
261          dyn1=dyn1+sinlondlon(i)*zz        zz = q(i, jjp1, llm+1-l, 0) - s0(i, jjm, l)/sm(i, jjm, l)
262          dyn2=dyn2+coslondlon(i)*zz        dys1 = dys1 + sinlondlon(i)*zz
263          zz=q(i,jjp1,llm+1-l,0)-s0(i,jjm,l)/sm(i,jjm,l)        dys2 = dys2 + coslondlon(i)*zz
264          dys1=dys1+sinlondlon(i)*zz      END DO
265          dys2=dys2+coslondlon(i)*zz      DO i = 1, iim
266          enddo        q(i, 1, llm+1-l, 2) = (sinlon(i)*dyn1+coslon(i)*dyn2)/2.
267           do i=1,iim        q(i, 1, llm+1-l, 0) = q(i, 1, llm+1-l, 0) + q(i, 1, llm+1-l, 2)
268           q(i,1,llm+1-l,2)=        q(i, jjp1, llm+1-l, 2) = (sinlon(i)*dys1+coslon(i)*dys2)/2.
269       $   (sinlon(i)*dyn1+coslon(i)*dyn2)/2.        q(i, jjp1, llm+1-l, 0) = q(i, jjp1, llm+1-l, 0) - &
270           q(i,1,llm+1-l,0)=q(i,1,llm+1-l,0)          q(i, jjp1, llm+1-l, 2)
271       $          +q(i,1,llm+1-l,2)      END DO
272           q(i,jjp1,llm+1-l,2)=      q(iip1, 1, llm+1-l, 0) = q(1, 1, llm+1-l, 0)
273       $   (sinlon(i)*dys1+coslon(i)*dys2)/2.      q(iip1, jjp1, llm+1-l, 0) = q(1, jjp1, llm+1-l, 0)
274           q(i,jjp1,llm+1-l,0)=q(i,jjp1,llm+1-l,0)      DO i = 1, iim
275       $      -q(i,jjp1,llm+1-l,2)        sxn(i) = q(i+1, 1, llm+1-l, 0) - q(i, 1, llm+1-l, 0)
276           enddo        sxs(i) = q(i+1, jjp1, llm+1-l, 0) - q(i, jjp1, llm+1-l, 0)
277        q(iip1,1,llm+1-l,0)=q(1,1,llm+1-l,0)      END DO
278        q(iip1,jjp1,llm+1-l,0)=q(1,jjp1,llm+1-l,0)      sxn(iip1) = sxn(1)
279        do i=1,iim      sxs(iip1) = sxs(1)
280        sxn(i)=q(i+1,1,llm+1-l,0)-q(i,1,llm+1-l,0)      DO i = 1, iim
281        sxs(i)=q(i+1,jjp1,llm+1-l,0)-q(i,jjp1,llm+1-l,0)        q(i+1, 1, llm+1-l, 1) = 0.25*(sxn(i)+sxn(i+1))
282        enddo        q(i+1, jjp1, llm+1-l, 1) = 0.25*(sxs(i)+sxs(i+1))
283        sxn(iip1)=sxn(1)      END DO
284        sxs(iip1)=sxs(1)      q(1, 1, llm+1-l, 1) = q(iip1, 1, llm+1-l, 1)
285        do i=1,iim      q(1, jjp1, llm+1-l, 1) = q(iip1, jjp1, llm+1-l, 1)
286        q(i+1,1,llm+1-l,1)=0.25*(sxn(i)+sxn(i+1))    END DO
287        q(i+1,jjp1,llm+1-l,1)=0.25*(sxs(i)+sxs(i+1))    DO l = 1, llm
288        DO i = 1, iim
289          q(i, 1, llm+1-l, 4) = 0.
290          q(i, jjp1, llm+1-l, 4) = 0.
291          q(i, 1, llm+1-l, 5) = 0.
292          q(i, jjp1, llm+1-l, 5) = 0.
293          q(i, 1, llm+1-l, 6) = 0.
294          q(i, jjp1, llm+1-l, 6) = 0.
295          q(i, 1, llm+1-l, 7) = 0.
296          q(i, jjp1, llm+1-l, 7) = 0.
297          q(i, 1, llm+1-l, 8) = 0.
298          q(i, jjp1, llm+1-l, 8) = 0.
299          q(i, 1, llm+1-l, 9) = 0.
300          q(i, jjp1, llm+1-l, 9) = 0.
301        END DO
302      END DO
303    
304      ! bouclage en longitude
305      DO l = 1, llm
306        DO j = 1, jjp1
307          q(iip1, j, l, 0) = q(1, j, l, 0)
308          q(iip1, j, llm+1-l, 0) = q(1, j, llm+1-l, 0)
309          q(iip1, j, llm+1-l, 1) = q(1, j, llm+1-l, 1)
310          q(iip1, j, llm+1-l, 2) = q(1, j, llm+1-l, 2)
311          q(iip1, j, llm+1-l, 3) = q(1, j, llm+1-l, 3)
312          q(iip1, j, llm+1-l, 4) = q(1, j, llm+1-l, 4)
313          q(iip1, j, llm+1-l, 5) = q(1, j, llm+1-l, 5)
314          q(iip1, j, llm+1-l, 6) = q(1, j, llm+1-l, 6)
315          q(iip1, j, llm+1-l, 7) = q(1, j, llm+1-l, 7)
316          q(iip1, j, llm+1-l, 8) = q(1, j, llm+1-l, 8)
317          q(iip1, j, llm+1-l, 9) = q(1, j, llm+1-l, 9)
318        END DO
319      END DO
320      DO l = 1, llm
321        DO j = 2, jjm
322          DO i = 1, iip1
323            IF (q(i,j,l,0)<0.) THEN
324              PRINT *, '------------ BIP-----------'
325              PRINT *, 'S0(', i, j, l, ')=', q(i, j, l, 0), q(i, j-1, l, 0)
326              PRINT *, 'SX(', i, j, l, ')=', q(i, j, l, 1)
327              PRINT *, 'SY(', i, j, l, ')=', q(i, j, l, 2), q(i, j-1, l, 2)
328              PRINT *, 'SZ(', i, j, l, ')=', q(i, j, l, 3)
329              q(i, j, l, 0) = 0.
330            END IF
331          END DO
332        END DO
333        DO j = 1, jjp1, jjm
334          DO i = 1, iip1
335            IF (q(i,j,l,0)<0.) THEN
336              PRINT *, '------------ BIP 2-----------'
337              PRINT *, 'S0(', i, j, l, ')=', q(i, j, l, 0)
338              PRINT *, 'SX(', i, j, l, ')=', q(i, j, l, 1)
339              PRINT *, 'SY(', i, j, l, ')=', q(i, j, l, 2)
340              PRINT *, 'SZ(', i, j, l, ')=', q(i, j, l, 3)
341    
342              q(i, j, l, 0) = 0.
343              ! STOP
344            END IF
345        END DO        END DO
346        q(1,1,llm+1-l,1)=q(iip1,1,llm+1-l,1)      END DO
347        q(1,jjp1,llm+1-l,1)=    END DO
348       $   q(iip1,jjp1,llm+1-l,1)    RETURN
349          enddo  END SUBROUTINE prather
          do l=1,llm  
            do i=1,iim  
             q( i,1,llm+1-l,4)=0.  
             q( i,jjp1,llm+1-l,4)=0.  
             q( i,1,llm+1-l,5)=0.  
             q( i,jjp1,llm+1-l,5)=0.  
             q( i,1,llm+1-l,6)=0.  
             q( i,jjp1,llm+1-l,6)=0.  
             q( i,1,llm+1-l,7)=0.  
             q( i,jjp1,llm+1-l,7)=0.  
             q( i,1,llm+1-l,8)=0.  
             q( i,jjp1,llm+1-l,8)=0.  
             q( i,1,llm+1-l,9)=0.  
             q( i,jjp1,llm+1-l,9)=0.  
           enddo  
          ENDDO  
   
 777      continue  
 c  
 c   bouclage en longitude  
       do l=1,llm  
       do j=1,jjp1  
       q(iip1,j,l,0)=q(1,j,l,0)  
       q(iip1,j,llm+1-l,0)=q(1,j,llm+1-l,0)  
       q(iip1,j,llm+1-l,1)=q(1,j,llm+1-l,1)  
       q(iip1,j,llm+1-l,2)=q(1,j,llm+1-l,2)  
       q(iip1,j,llm+1-l,3)=q(1,j,llm+1-l,3)  
       q(iip1,j,llm+1-l,4)=q(1,j,llm+1-l,4)  
       q(iip1,j,llm+1-l,5)=q(1,j,llm+1-l,5)  
       q(iip1,j,llm+1-l,6)=q(1,j,llm+1-l,6)  
       q(iip1,j,llm+1-l,7)=q(1,j,llm+1-l,7)  
       q(iip1,j,llm+1-l,8)=q(1,j,llm+1-l,8)  
       q(iip1,j,llm+1-l,9)=q(1,j,llm+1-l,9)  
       enddo  
       enddo  
         DO l = 1,llm  
          DO j = 2,jjm  
            DO i = 1,iip1  
          IF (q(i,j,l,0).lt.0.)  THEN  
          PRINT*,'------------ BIP-----------'  
          PRINT*,'S0(',i,j,l,')=',q(i,j,l,0),  
      $          q(i,j-1,l,0)  
          PRINT*,'SX(',i,j,l,')=',q(i,j,l,1)  
          PRINT*,'SY(',i,j,l,')=',q(i,j,l,2),  
      $   q(i,j-1,l,2)    
          PRINT*,'SZ(',i,j,l,')=',q(i,j,l,3)  
 c                    PRINT*,' PBL EN SORTIE D'' ADVZP'  
                      q(i,j,l,0)=0.  
 c                  STOP  
                ENDIF  
            ENDDO  
          ENDDO  
          do j=1,jjp1,jjm  
          do i=1,iip1  
                IF (q(i,j,l,0).lt.0.)  THEN  
                PRINT*,'------------ BIP 2-----------'  
          PRINT*,'S0(',i,j,l,')=',q(i,j,l,0)  
          PRINT*,'SX(',i,j,l,')=',q(i,j,l,1)  
          PRINT*,'SY(',i,j,l,')=',q(i,j,l,2)  
          PRINT*,'SZ(',i,j,l,')=',q(i,j,l,3)  
   
                      q(i,j,l,0)=0.  
 c                  STOP  
                ENDIF  
          enddo  
          enddo  
         ENDDO  
       RETURN  
       END  

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

  ViewVC Help
Powered by ViewVC 1.1.21