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

Diff of /trunk/dyn3d/pentes_ini.f

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

trunk/libf/dyn3d/pentes_ini.f revision 32 by guez, Tue Apr 6 17:52:58 2010 UTC trunk/dyn3d/pentes_ini.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 1  Line 1 
1  !  
2  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/pentes_ini.F,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/pentes_ini.F,v 1.1.1.1 2004/05/19
3  !  ! 12:53:07 lmdzadmin Exp $
4        SUBROUTINE pentes_ini (q,w,masse,pbaru,pbarv,mode)  
5        use dimens_m  SUBROUTINE pentes_ini(q, w, masse, pbaru, pbarv, mode)
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 des pentes  
18  c   ********************************************************************    ! ********************************************************************
19  c   Reference possible : Russel. G.L., Lerner J.A.:    ! Transport des traceurs par la methode des pentes
20  c         A new Finite-Differencing Scheme for Traceur Transport    ! ********************************************************************
21  c         Equation , Journal of Applied Meteorology, pp 1483-1498,dec. 81    ! Reference possible : Russel. G.L., Lerner J.A.:
22  c   ********************************************************************    ! A new Finite-Differencing Scheme for Traceur Transport
23  c   q,w,masse,pbaru et pbarv    ! Equation , Journal of Applied Meteorology, pp 1483-1498,dec. 81
24  c                      sont des arguments d'entree  pour le s-pg ....    ! ********************************************************************
25  c    ! q,w,masse,pbaru et pbarv
26  c=======================================================================    ! sont des arguments d'entree  pour le s-pg ....
27    
28      ! =======================================================================
29    
30  c   Arguments:  
31  c   ----------  
32        integer mode    ! Arguments:
33        REAL, intent(in):: pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm )    ! ----------
34        REAL q( iip1,jjp1,llm,0:3)    INTEGER mode
35        REAL w( ip1jmp1,llm )    REAL, INTENT (IN) :: pbaru(ip1jmp1, llm), pbarv(ip1jm, llm)
36        REAL masse( iip1,jjp1,llm)    REAL q(iip1, jjp1, llm, 0:3)
37  c   Local:    REAL w(ip1jmp1, llm)
38  c   ------    REAL masse(iip1, jjp1, llm)
39        LOGICAL limit    ! Local:
40        REAL sm ( iip1,jjp1, llm )    ! ------
41        REAL s0( iip1,jjp1,llm ),  sx( iip1,jjp1,llm )    LOGICAL limit
42        REAL sy( iip1,jjp1,llm ),  sz( iip1,jjp1,llm )    REAL sm(iip1, jjp1, llm)
43        real masn,mass,zz    REAL s0(iip1, jjp1, llm), sx(iip1, jjp1, llm)
44        INTEGER i,j,l,iq    REAL sy(iip1, jjp1, llm), sz(iip1, jjp1, llm)
45      REAL masn, mass, zz
46  c  modif Fred 24 03 96    INTEGER i, j, l, iq
47    
48        real sinlon(iip1),sinlondlon(iip1)    ! modif Fred 24 03 96
49        real coslon(iip1),coslondlon(iip1)  
50        save sinlon,coslon,sinlondlon,coslondlon    REAL sinlon(iip1), sinlondlon(iip1)
51        real dyn1,dyn2,dys1,dys2    REAL coslon(iip1), coslondlon(iip1)
52        real qpn,qps,dqzpn,dqzps    SAVE sinlon, coslon, sinlondlon, coslondlon
53        real smn,sms,s0n,s0s,sxn(iip1),sxs(iip1)    REAL dyn1, dyn2, dys1, dys2
54        real qmin,zq,pente_max    REAL qpn, qps, dqzpn, dqzps
55  c    REAL smn, sms, s0n, s0s, sxn(iip1), sxs(iip1)
56        REAL      SSUM    REAL qmin, zq, pente_max
57        integer ismax,ismin,lati,latf  
58        EXTERNAL  SSUM, convflu,ismin,ismax    REAL ssum
59        logical first    INTEGER ismax, ismin, lati, latf
60        save first    EXTERNAL ssum, convflu, ismin, ismax
61  c   fin modif    LOGICAL first
62      SAVE first
63  c      EXTERNAL masskg    ! fin modif
64        EXTERNAL advx  
65        EXTERNAL advy    ! EXTERNAL masskg
66        EXTERNAL advz    EXTERNAL advx
67      EXTERNAL advy
68  c  modif Fred 24 03 96    EXTERNAL advz
69        data first/.true./  
70      ! modif Fred 24 03 96
71        limit = .TRUE.    DATA first/.TRUE./
72        pente_max=2  
73  c     if (mode.eq.1.or.mode.eq.3) then    limit = .TRUE.
74  c     if (mode.eq.1) then    pente_max = 2
75        if (mode.ge.1) then    ! if (mode.eq.1.or.mode.eq.3) then
76          lati=2    ! if (mode.eq.1) then
77          latf=jjm    IF (mode>=1) THEN
78        else      lati = 2
79          lati=1      latf = jjm
80          latf=jjp1    ELSE
81        endif      lati = 1
82        latf = jjp1
83        qmin=0.4995    END IF
84        qmin=0.  
85        if(first) then    qmin = 0.4995
86           print*,'SCHEMA AMONT NOUVEAU'    qmin = 0.
87           first=.false.    IF (first) THEN
88           do i=2,iip1      PRINT *, 'SCHEMA AMONT NOUVEAU'
89              coslon(i)=cos(rlonv(i))      first = .FALSE.
90              sinlon(i)=sin(rlonv(i))      DO i = 2, iip1
91              coslondlon(i)=coslon(i)*(rlonu(i)-rlonu(i-1))/pi        coslon(i) = cos(rlonv(i))
92              sinlondlon(i)=sinlon(i)*(rlonu(i)-rlonu(i-1))/pi        sinlon(i) = sin(rlonv(i))
93              print*,coslondlon(i),sinlondlon(i)        coslondlon(i) = coslon(i)*(rlonu(i)-rlonu(i-1))/pi
94           enddo        sinlondlon(i) = sinlon(i)*(rlonu(i)-rlonu(i-1))/pi
95           coslon(1)=coslon(iip1)        PRINT *, coslondlon(i), sinlondlon(i)
96           coslondlon(1)=coslondlon(iip1)      END DO
97           sinlon(1)=sinlon(iip1)      coslon(1) = coslon(iip1)
98           sinlondlon(1)=sinlondlon(iip1)      coslondlon(1) = coslondlon(iip1)
99           print*,'sum sinlondlon ',ssum(iim,sinlondlon,1)/sinlondlon(1)      sinlon(1) = sinlon(iip1)
100           print*,'sum coslondlon ',ssum(iim,coslondlon,1)/coslondlon(1)      sinlondlon(1) = sinlondlon(iip1)
101          DO l = 1,llm      PRINT *, 'sum sinlondlon ', ssum(iim, sinlondlon, 1)/sinlondlon(1)
102          DO j = 1,jjp1      PRINT *, 'sum coslondlon ', ssum(iim, coslondlon, 1)/coslondlon(1)
103           DO i = 1,iip1      DO l = 1, llm
104           q ( i,j,l,1 )=0.        DO j = 1, jjp1
105           q ( i,j,l,2 )=0.          DO i = 1, iip1
106           q ( i,j,l,3 )=0.              q(i, j, l, 1) = 0.
107           ENDDO            q(i, j, l, 2) = 0.
108           ENDDO            q(i, j, l, 3) = 0.
109          ENDDO          END DO
110                  END DO
111        endif      END DO
112    
113  c *** q contient les qqtes de traceur avant l'advection    END IF
114    
115  c *** Affectation des tableaux S a partir de Q    ! *** q contient les qqtes de traceur avant l'advection
116  c *** Rem : utilisation de SCOPY ulterieurement  
117      ! *** Affectation des tableaux S a partir de Q
118         DO l = 1,llm    ! *** Rem : utilisation de SCOPY ulterieurement
119          DO j = 1,jjp1  
120           DO i = 1,iip1    DO l = 1, llm
121               s0( i,j,llm+1-l ) = q ( i,j,l,0 )      DO j = 1, jjp1
122               sx( i,j,llm+1-l ) = q ( i,j,l,1 )        DO i = 1, iip1
123               sy( i,j,llm+1-l ) = q ( i,j,l,2 )          s0(i, j, llm+1-l) = q(i, j, l, 0)
124               sz( i,j,llm+1-l ) = q ( i,j,l,3 )          sx(i, j, llm+1-l) = q(i, j, l, 1)
125           ENDDO          sy(i, j, llm+1-l) = q(i, j, l, 2)
126          ENDDO          sz(i, j, llm+1-l) = q(i, j, l, 3)
127         ENDDO        END DO
128        END DO
129  c *** On calcule la masse d'air en kg    END DO
130    
131         DO  l = 1,llm    ! *** On calcule la masse d'air en kg
132           DO  j = 1,jjp1  
133             DO  i = 1,iip1    DO l = 1, llm
134              sm ( i,j,llm+1-l)=masse( i,j,l )      DO j = 1, jjp1
135            ENDDO        DO i = 1, iip1
136           ENDDO          sm(i, j, llm+1-l) = masse(i, j, l)
137         ENDDO        END DO
138        END DO
139  c *** On converti les champs S en atome (resp. kg)    END DO
140  c *** Les routines d'advection traitent les champs  
141  c *** a advecter si ces derniers sont en atome (resp. kg)    ! *** On converti les champs S en atome (resp. kg)
142  c *** A optimiser !!!    ! *** Les routines d'advection traitent les champs
143      ! *** a advecter si ces derniers sont en atome (resp. kg)
144         DO  l = 1,llm    ! *** A optimiser !!!
145           DO  j = 1,jjp1  
146             DO  i = 1,iip1    DO l = 1, llm
147                 s0(i,j,l) = s0(i,j,l) * sm ( i,j,l )      DO j = 1, jjp1
148                 sx(i,j,l) = sx(i,j,l) * sm ( i,j,l )        DO i = 1, iip1
149                 sy(i,j,l) = sy(i,j,l) * sm ( i,j,l )          s0(i, j, l) = s0(i, j, l)*sm(i, j, l)
150                 sz(i,j,l) = sz(i,j,l) * sm ( i,j,l )          sx(i, j, l) = sx(i, j, l)*sm(i, j, l)
151             ENDDO          sy(i, j, l) = sy(i, j, l)*sm(i, j, l)
152           ENDDO          sz(i, j, l) = sz(i, j, l)*sm(i, j, l)
153         ENDDO        END DO
154        END DO
155  c *** Appel des subroutines d'advection en X, en Y et en Z    END DO
156  c *** Advection avec "time-splitting"  
157            ! *** Appel des subroutines d'advection en X, en Y et en Z
158         if(mode.eq.2) then    ! *** Advection avec "time-splitting"
159            do l=1,llm  
160              s0s=0.    IF (mode==2) THEN
161              s0n=0.      DO l = 1, llm
162              dyn1=0.        s0s = 0.
163              dys1=0.        s0n = 0.
164              dyn2=0.        dyn1 = 0.
165              dys2=0.        dys1 = 0.
166              smn=0.        dyn2 = 0.
167              sms=0.        dys2 = 0.
168              do i=1,iim        smn = 0.
169                 smn=smn+sm(i,1,l)        sms = 0.
170                 sms=sms+sm(i,jjp1,l)        DO i = 1, iim
171                 s0n=s0n+s0(i,1,l)          smn = smn + sm(i, 1, l)
172                 s0s=s0s+s0(i,jjp1,l)          sms = sms + sm(i, jjp1, l)
173                 zz=sy(i,1,l)/sm(i,1,l)          s0n = s0n + s0(i, 1, l)
174                 dyn1=dyn1+sinlondlon(i)*zz          s0s = s0s + s0(i, jjp1, l)
175                 dyn2=dyn2+coslondlon(i)*zz          zz = sy(i, 1, l)/sm(i, 1, l)
176                 zz=sy(i,jjp1,l)/sm(i,jjp1,l)          dyn1 = dyn1 + sinlondlon(i)*zz
177                 dys1=dys1+sinlondlon(i)*zz          dyn2 = dyn2 + coslondlon(i)*zz
178                 dys2=dys2+coslondlon(i)*zz          zz = sy(i, jjp1, l)/sm(i, jjp1, l)
179              enddo          dys1 = dys1 + sinlondlon(i)*zz
180              do i=1,iim          dys2 = dys2 + coslondlon(i)*zz
181                 sy(i,1,l)=dyn1*sinlon(i)+dyn2*coslon(i)        END DO
182                 sy(i,jjp1,l)=dys1*sinlon(i)+dys2*coslon(i)        DO i = 1, iim
183              enddo          sy(i, 1, l) = dyn1*sinlon(i) + dyn2*coslon(i)
184              do i=1,iim          sy(i, jjp1, l) = dys1*sinlon(i) + dys2*coslon(i)
185                 s0(i,1,l)=s0n/smn+sy(i,1,l)        END DO
186                 s0(i,jjp1,l)=s0s/sms-sy(i,jjp1,l)        DO i = 1, iim
187              enddo          s0(i, 1, l) = s0n/smn + sy(i, 1, l)
188            s0(i, jjp1, l) = s0s/sms - sy(i, jjp1, l)
189              s0(iip1,1,l)=s0(1,1,l)        END DO
190              s0(iip1,jjp1,l)=s0(1,jjp1,l)  
191          s0(iip1, 1, l) = s0(1, 1, l)
192              do i=1,iim        s0(iip1, jjp1, l) = s0(1, jjp1, l)
193                 sxn(i)=s0(i+1,1,l)-s0(i,1,l)  
194                 sxs(i)=s0(i+1,jjp1,l)-s0(i,jjp1,l)        DO i = 1, iim
195  c   on rerentre les masses          sxn(i) = s0(i+1, 1, l) - s0(i, 1, l)
196              enddo          sxs(i) = s0(i+1, jjp1, l) - s0(i, jjp1, l)
197              do i=1,iim          ! on rerentre les masses
198                 sy(i,1,l)=sy(i,1,l)*sm(i,1,l)        END DO
199                 sy(i,jjp1,l)=sy(i,jjp1,l)*sm(i,jjp1,l)        DO i = 1, iim
200                 s0(i,1,l)=s0(i,1,l)*sm(i,1,l)          sy(i, 1, l) = sy(i, 1, l)*sm(i, 1, l)
201                 s0(i,jjp1,l)=s0(i,jjp1,l)*sm(i,jjp1,l)          sy(i, jjp1, l) = sy(i, jjp1, l)*sm(i, jjp1, l)
202              enddo          s0(i, 1, l) = s0(i, 1, l)*sm(i, 1, l)
203              sxn(iip1)=sxn(1)          s0(i, jjp1, l) = s0(i, jjp1, l)*sm(i, jjp1, l)
204              sxs(iip1)=sxs(1)        END DO
205              do i=1,iim        sxn(iip1) = sxn(1)
206                 sx(i+1,1,l)=0.25*(sxn(i)+sxn(i+1))*sm(i+1,1,l)        sxs(iip1) = sxs(1)
207                 sx(i+1,jjp1,l)=0.25*(sxs(i)+sxs(i+1))*sm(i+1,jjp1,l)        DO i = 1, iim
208              enddo          sx(i+1, 1, l) = 0.25*(sxn(i)+sxn(i+1))*sm(i+1, 1, l)
209              s0(iip1,1,l)=s0(1,1,l)          sx(i+1, jjp1, l) = 0.25*(sxs(i)+sxs(i+1))*sm(i+1, jjp1, l)
210              s0(iip1,jjp1,l)=s0(1,jjp1,l)        END DO
211              sy(iip1,1,l)=sy(1,1,l)        s0(iip1, 1, l) = s0(1, 1, l)
212              sy(iip1,jjp1,l)=sy(1,jjp1,l)        s0(iip1, jjp1, l) = s0(1, jjp1, l)
213              sx(1,1,l)=sx(iip1,1,l)        sy(iip1, 1, l) = sy(1, 1, l)
214              sx(1,jjp1,l)=sx(iip1,jjp1,l)        sy(iip1, jjp1, l) = sy(1, jjp1, l)
215            enddo        sx(1, 1, l) = sx(iip1, 1, l)
216        endif        sx(1, jjp1, l) = sx(iip1, jjp1, l)
217        END DO
218        if (mode.eq.4) then    END IF
219           do l=1,llm  
220              do i=1,iip1    IF (mode==4) THEN
221                 sx(i,1,l)=0.      DO l = 1, llm
222                 sx(i,jjp1,l)=0.        DO i = 1, iip1
223                 sy(i,1,l)=0.          sx(i, 1, l) = 0.
224                 sy(i,jjp1,l)=0.          sx(i, jjp1, l) = 0.
225              enddo          sy(i, 1, l) = 0.
226           enddo          sy(i, jjp1, l) = 0.
227        endif        END DO
228        call limx(s0,sx,sm,pente_max)      END DO
229         call advx( limit,.5*dtvr,pbaru,sm,s0,sx,sy,sz,lati,latf)    END IF
230        if (mode.eq.4) then    CALL limx(s0, sx, sm, pente_max)
231           do l=1,llm    CALL advx(limit, .5*dtvr, pbaru, sm, s0, sx, sy, sz, lati, latf)
232              do i=1,iip1    IF (mode==4) THEN
233                 sx(i,1,l)=0.      DO l = 1, llm
234                 sx(i,jjp1,l)=0.        DO i = 1, iip1
235                 sy(i,1,l)=0.          sx(i, 1, l) = 0.
236                 sy(i,jjp1,l)=0.          sx(i, jjp1, l) = 0.
237              enddo          sy(i, 1, l) = 0.
238           enddo          sy(i, jjp1, l) = 0.
239        endif        END DO
240         call   limy(s0,sy,sm,pente_max)      END DO
241         call advy( limit,.5*dtvr,pbarv,sm,s0,sx,sy,sz )    END IF
242         do j=1,jjp1    CALL limy(s0, sy, sm, pente_max)
243            do i=1,iip1    CALL advy(limit, .5*dtvr, pbarv, sm, s0, sx, sy, sz)
244               sz(i,j,1)=0.    DO j = 1, jjp1
245               sz(i,j,llm)=0.      DO i = 1, iip1
246            enddo        sz(i, j, 1) = 0.
247         enddo        sz(i, j, llm) = 0.
248         call limz(s0,sz,sm,pente_max)      END DO
249         call advz( limit,dtvr,w,sm,s0,sx,sy,sz )    END DO
250        if (mode.eq.4) then    CALL limz(s0, sz, sm, pente_max)
251           do l=1,llm    CALL advz(limit, dtvr, w, sm, s0, sx, sy, sz)
252              do i=1,iip1    IF (mode==4) THEN
253                 sx(i,1,l)=0.      DO l = 1, llm
254                 sx(i,jjp1,l)=0.        DO i = 1, iip1
255                 sy(i,1,l)=0.          sx(i, 1, l) = 0.
256                 sy(i,jjp1,l)=0.          sx(i, jjp1, l) = 0.
257              enddo          sy(i, 1, l) = 0.
258           enddo          sy(i, jjp1, l) = 0.
259        endif        END DO
260          call limy(s0,sy,sm,pente_max)      END DO
261         call advy( limit,.5*dtvr,pbarv,sm,s0,sx,sy,sz )    END IF
262         do l=1,llm    CALL limy(s0, sy, sm, pente_max)
263            do j=1,jjp1    CALL advy(limit, .5*dtvr, pbarv, sm, s0, sx, sy, sz)
264               sm(iip1,j,l)=sm(1,j,l)    DO l = 1, llm
265               s0(iip1,j,l)=s0(1,j,l)      DO j = 1, jjp1
266               sx(iip1,j,l)=sx(1,j,l)        sm(iip1, j, l) = sm(1, j, l)
267               sy(iip1,j,l)=sy(1,j,l)        s0(iip1, j, l) = s0(1, j, l)
268               sz(iip1,j,l)=sz(1,j,l)        sx(iip1, j, l) = sx(1, j, l)
269            enddo        sy(iip1, j, l) = sy(1, j, l)
270         enddo        sz(iip1, j, l) = sz(1, j, l)
271        END DO
272      END DO
273        if (mode.eq.4) then  
274           do l=1,llm  
275              do i=1,iip1    IF (mode==4) THEN
276                 sx(i,1,l)=0.      DO l = 1, llm
277                 sx(i,jjp1,l)=0.        DO i = 1, iip1
278                 sy(i,1,l)=0.          sx(i, 1, l) = 0.
279                 sy(i,jjp1,l)=0.          sx(i, jjp1, l) = 0.
280              enddo          sy(i, 1, l) = 0.
281           enddo          sy(i, jjp1, l) = 0.
282        endif        END DO
283         call limx(s0,sx,sm,pente_max)      END DO
284         call advx( limit,.5*dtvr,pbaru,sm,s0,sx,sy,sz,lati,latf)    END IF
285  c ***   On repasse les S dans la variable q directement 14/10/94    CALL limx(s0, sx, sm, pente_max)
286  c   On revient a des rapports de melange en divisant par la masse    CALL advx(limit, .5*dtvr, pbaru, sm, s0, sx, sy, sz, lati, latf)
287      ! ***   On repasse les S dans la variable q directement 14/10/94
288  c En dehors des poles:    ! On revient a des rapports de melange en divisant par la masse
289    
290         DO  l = 1,llm    ! En dehors des poles:
291          DO  j = 1,jjp1  
292           DO  i = 1,iim    DO l = 1, llm
293               q(i,j,llm+1-l,0)=s0(i,j,l)/sm(i,j,l)      DO j = 1, jjp1
294               q(i,j,llm+1-l,1)=sx(i,j,l)/sm(i,j,l)        DO i = 1, iim
295               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)
296               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)
297           ENDDO          q(i, j, llm+1-l, 2) = sy(i, j, l)/sm(i, j, l)
298          ENDDO          q(i, j, llm+1-l, 3) = sz(i, j, l)/sm(i, j, l)
299        ENDDO        END DO
300        END DO
301  c Traitements specifiques au pole    END DO
302    
303        if(mode.ge.1) then    ! Traitements specifiques au pole
304        DO l=1,llm  
305  c   filtrages aux poles    IF (mode>=1) THEN
306           masn=ssum(iim,sm(1,1,l),1)      DO l = 1, llm
307           mass=ssum(iim,sm(1,jjp1,l),1)        ! filtrages aux poles
308           qpn=ssum(iim,s0(1,1,l),1)/masn        masn = ssum(iim, sm(1,1,l), 1)
309           qps=ssum(iim,s0(1,jjp1,l),1)/mass        mass = ssum(iim, sm(1,jjp1,l), 1)
310           dqzpn=ssum(iim,sz(1,1,l),1)/masn        qpn = ssum(iim, s0(1,1,l), 1)/masn
311           dqzps=ssum(iim,sz(1,jjp1,l),1)/mass        qps = ssum(iim, s0(1,jjp1,l), 1)/mass
312           do i=1,iip1        dqzpn = ssum(iim, sz(1,1,l), 1)/masn
313              q( i,1,llm+1-l,3)=dqzpn        dqzps = ssum(iim, sz(1,jjp1,l), 1)/mass
314              q( i,jjp1,llm+1-l,3)=dqzps        DO i = 1, iip1
315              q( i,1,llm+1-l,0)=qpn          q(i, 1, llm+1-l, 3) = dqzpn
316              q( i,jjp1,llm+1-l,0)=qps          q(i, jjp1, llm+1-l, 3) = dqzps
317           enddo          q(i, 1, llm+1-l, 0) = qpn
318           if(mode.eq.3) then          q(i, jjp1, llm+1-l, 0) = qps
319              dyn1=0.        END DO
320              dys1=0.        IF (mode==3) THEN
321              dyn2=0.          dyn1 = 0.
322              dys2=0.          dys1 = 0.
323              do i=1,iim          dyn2 = 0.
324                 dyn1=dyn1+sinlondlon(i)*sy(i,1,l)/sm(i,1,l)          dys2 = 0.
325                 dyn2=dyn2+coslondlon(i)*sy(i,1,l)/sm(i,1,l)          DO i = 1, iim
326                 dys1=dys1+sinlondlon(i)*sy(i,jjp1,l)/sm(i,jjp1,l)            dyn1 = dyn1 + sinlondlon(i)*sy(i, 1, l)/sm(i, 1, l)
327                 dys2=dys2+coslondlon(i)*sy(i,jjp1,l)/sm(i,jjp1,l)            dyn2 = dyn2 + coslondlon(i)*sy(i, 1, l)/sm(i, 1, l)
328              enddo            dys1 = dys1 + sinlondlon(i)*sy(i, jjp1, l)/sm(i, jjp1, l)
329              do i=1,iim            dys2 = dys2 + coslondlon(i)*sy(i, jjp1, l)/sm(i, jjp1, l)
330                 q(i,1,llm+1-l,2)=          END DO
331       s          (sinlon(i)*dyn1+coslon(i)*dyn2)          DO i = 1, iim
332                 q(i,1,llm+1-l,0)=q(i,1,llm+1-l,0)+q(i,1,llm+1-l,2)            q(i, 1, llm+1-l, 2) = (sinlon(i)*dyn1+coslon(i)*dyn2)
333                 q(i,jjp1,llm+1-l,2)=            q(i, 1, llm+1-l, 0) = q(i, 1, llm+1-l, 0) + q(i, 1, llm+1-l, 2)
334       s          (sinlon(i)*dys1+coslon(i)*dys2)            q(i, jjp1, llm+1-l, 2) = (sinlon(i)*dys1+coslon(i)*dys2)
335                 q(i,jjp1,llm+1-l,0)=q(i,jjp1,llm+1-l,0)            q(i, jjp1, llm+1-l, 0) = q(i, jjp1, llm+1-l, 0) - &
336       s         -q(i,jjp1,llm+1-l,2)              q(i, jjp1, llm+1-l, 2)
337              enddo          END DO
338           endif        END IF
339           if(mode.eq.1) then        IF (mode==1) THEN
340  c   on filtre les valeurs au bord de la "grande maille pole"          ! on filtre les valeurs au bord de la "grande maille pole"
341              dyn1=0.          dyn1 = 0.
342              dys1=0.          dys1 = 0.
343              dyn2=0.          dyn2 = 0.
344              dys2=0.          dys2 = 0.
345              do i=1,iim          DO i = 1, iim
346                 zz=s0(i,2,l)/sm(i,2,l)-q(i,1,llm+1-l,0)            zz = s0(i, 2, l)/sm(i, 2, l) - q(i, 1, llm+1-l, 0)
347                 dyn1=dyn1+sinlondlon(i)*zz            dyn1 = dyn1 + sinlondlon(i)*zz
348                 dyn2=dyn2+coslondlon(i)*zz            dyn2 = dyn2 + coslondlon(i)*zz
349                 zz=q(i,jjp1,llm+1-l,0)-s0(i,jjm,l)/sm(i,jjm,l)            zz = q(i, jjp1, llm+1-l, 0) - s0(i, jjm, l)/sm(i, jjm, l)
350                 dys1=dys1+sinlondlon(i)*zz            dys1 = dys1 + sinlondlon(i)*zz
351                 dys2=dys2+coslondlon(i)*zz            dys2 = dys2 + coslondlon(i)*zz
352              enddo          END DO
353              do i=1,iim          DO i = 1, iim
354                 q(i,1,llm+1-l,2)=            q(i, 1, llm+1-l, 2) = (sinlon(i)*dyn1+coslon(i)*dyn2)/2.
355       s          (sinlon(i)*dyn1+coslon(i)*dyn2)/2.            q(i, 1, llm+1-l, 0) = q(i, 1, llm+1-l, 0) + q(i, 1, llm+1-l, 2)
356                 q(i,1,llm+1-l,0)=q(i,1,llm+1-l,0)+q(i,1,llm+1-l,2)            q(i, jjp1, llm+1-l, 2) = (sinlon(i)*dys1+coslon(i)*dys2)/2.
357                 q(i,jjp1,llm+1-l,2)=            q(i, jjp1, llm+1-l, 0) = q(i, jjp1, llm+1-l, 0) - &
358       s          (sinlon(i)*dys1+coslon(i)*dys2)/2.              q(i, jjp1, llm+1-l, 2)
359                 q(i,jjp1,llm+1-l,0)=q(i,jjp1,llm+1-l,0)          END DO
360       s         -q(i,jjp1,llm+1-l,2)          q(iip1, 1, llm+1-l, 0) = q(1, 1, llm+1-l, 0)
361              enddo          q(iip1, jjp1, llm+1-l, 0) = q(1, jjp1, llm+1-l, 0)
362              q(iip1,1,llm+1-l,0)=q(1,1,llm+1-l,0)  
363              q(iip1,jjp1,llm+1-l,0)=q(1,jjp1,llm+1-l,0)          DO i = 1, iim
364              sxn(i) = q(i+1, 1, llm+1-l, 0) - q(i, 1, llm+1-l, 0)
365              do i=1,iim            sxs(i) = q(i+1, jjp1, llm+1-l, 0) - q(i, jjp1, llm+1-l, 0)
366                 sxn(i)=q(i+1,1,llm+1-l,0)-q(i,1,llm+1-l,0)          END DO
367                 sxs(i)=q(i+1,jjp1,llm+1-l,0)-q(i,jjp1,llm+1-l,0)          sxn(iip1) = sxn(1)
368              enddo          sxs(iip1) = sxs(1)
369              sxn(iip1)=sxn(1)          DO i = 1, iim
370              sxs(iip1)=sxs(1)            q(i+1, 1, llm+1-l, 1) = 0.25*(sxn(i)+sxn(i+1))
371              do i=1,iim            q(i+1, jjp1, llm+1-l, 1) = 0.25*(sxs(i)+sxs(i+1))
372                 q(i+1,1,llm+1-l,1)=0.25*(sxn(i)+sxn(i+1))          END DO
373                 q(i+1,jjp1,llm+1-l,1)=0.25*(sxs(i)+sxs(i+1))          q(1, 1, llm+1-l, 1) = q(iip1, 1, llm+1-l, 1)
374              enddo          q(1, jjp1, llm+1-l, 1) = q(iip1, jjp1, llm+1-l, 1)
375              q(1,1,llm+1-l,1)=q(iip1,1,llm+1-l,1)  
376              q(1,jjp1,llm+1-l,1)=q(iip1,jjp1,llm+1-l,1)        END IF
377    
378           endif      END DO
379      END IF
380         ENDDO  
381         endif    ! bouclage en longitude
382      DO iq = 0, 3
383  c bouclage en longitude      DO l = 1, llm
384        do iq=0,3        DO j = 1, jjp1
385           do l=1,llm          q(iip1, j, l, iq) = q(1, j, l, iq)
386              do j=1,jjp1        END DO
387                 q(iip1,j,l,iq)=q(1,j,l,iq)      END DO
388              enddo    END DO
389           enddo  
390        enddo    DO l = 1, llm
391        DO j = 1, jjp1
392          DO l = 1,llm        DO i = 1, iip1
393           DO j = 1,jjp1          IF (q(i,j,l,0)<0.) THEN
394            DO i = 1,iip1            q(i, j, l, 0) = 0.
395                  IF (q(i,j,l,0).lt.0.)  THEN          END IF
396                       q(i,j,l,0)=0.        END DO
397                   ENDIF      END DO
398            ENDDO    END DO
399           ENDDO  
400          ENDDO    DO l = 1, llm
401        DO j = 1, jjp1
402         do l=1,llm        DO i = 1, iip1
403            do j=1,jjp1          IF (q(i,j,l,0)<qmin) PRINT *, 'apres pentes, s0(', i, ',', j, ',', l, &
404             do i=1,iip1            ')=', q(i, j, l, 0)
405               if(q(i,j,l,0).lt.qmin)        END DO
406       ,       print*,'apres pentes, s0(',i,',',j,',',l,')=',q(i,j,l,0)      END DO
407             enddo    END DO
408            enddo    RETURN
409         enddo  END SUBROUTINE pentes_ini
       RETURN  
       END  

Legend:
Removed from v.32  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21