source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/dyn3d_common/pentes_ini.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 20.2 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE pentes_ini (q,w,masse,pbaru,pbarv,mode)
5      IMPLICIT NONE
6
7c=======================================================================
8c   Adaptation LMDZ:  A.Armengaud (LGGE)
9c   ----------------
10c
11c   ********************************************************************
12c   Transport des traceurs par la methode des pentes
13c   ********************************************************************
14c   Reference possible : Russel. G.L., Lerner J.A.:
15c         A new Finite-Differencing Scheme for Traceur Transport 
16c         Equation , Journal of Applied Meteorology, pp 1483-1498,dec. 81 
17c   ********************************************************************
18c   q,w,masse,pbaru et pbarv 
19c                      sont des arguments d'entree  pour le s-pg ....
20c
21c=======================================================================
22
23
24!-----------------------------------------------------------------------
25!   INCLUDE 'dimensions.h'
26!
27!   dimensions.h contient les dimensions du modele
28!   ndm est tel que iim=2**ndm
29!-----------------------------------------------------------------------
30
31      INTEGER iim,jjm,llm,ndm
32
33      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
34
35!-----------------------------------------------------------------------
36!
37! $Header$
38!
39!
40!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
41!                 veillez  n'utiliser que des ! pour les commentaires
42!                 et  bien positionner les & des lignes de continuation
43!                 (les placer en colonne 6 et en colonne 73)
44!
45!
46!-----------------------------------------------------------------------
47!   INCLUDE 'paramet.h'
48
49      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
50      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
51      INTEGER  ijmllm,mvar
52      INTEGER jcfil,jcfllm
53
54      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
55     &    ,jjp1=jjm+1-1/jjm)
56      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
57      PARAMETER( kftd  = iim/2 -ndm )
58      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
59      PARAMETER( ip1jmi1= ip1jm - iip1 )
60      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
61      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
62      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
63
64!-----------------------------------------------------------------------
65!
66! $Id: comconst.h 1437 2010-09-30 08:29:10Z emillour $
67!
68!-----------------------------------------------------------------------
69! INCLUDE comconst.h
70
71      COMMON/comconsti/im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl,          &
72     &                 iflag_top_bound,mode_top_bound
73      COMMON/comconstr/dtvr,daysec,                                     &
74     & pi,dtphys,dtdiss,rad,r,kappa,cotot,unsim,g,omeg                  &
75     & ,dissip_fac_mid,dissip_fac_up,dissip_deltaz,dissip_hdelta        &
76     & ,dissip_pupstart  ,tau_top_bound,                                &
77     & daylen,molmass, ihf
78      COMMON/cpdetvenus/cpp,nu_venus,t0_venus
79
80      INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl
81      REAL dtvr ! dynamical time step (in s)
82      REAL daysec !length (in s) of a standard day
83      REAL pi    ! something like 3.14159....
84      REAL dtphys ! (s) time step for the physics
85      REAL dtdiss ! (s) time step for the dissipation
86      REAL rad ! (m) radius of the planet
87      REAL r ! Reduced Gas constant r=R/mu
88             ! with R=8.31.. J.K-1.mol-1, mu: mol mass of atmosphere (kg/mol)
89      REAL cpp   ! Cp
90      REAL kappa ! kappa=R/Cp
91      REAL cotot
92      REAL unsim ! = 1./iim
93      REAL g ! (m/s2) gravity
94      REAL omeg ! (rad/s) rotation rate of the planet
95! Dissipation factors, for Earth model:
96      REAL dissip_factz,dissip_zref !dissip_deltaz
97! Dissipation factors, for other planets:
98      REAL dissip_fac_mid,dissip_fac_up,dissip_deltaz,dissip_hdelta
99      REAL dissip_pupstart
100      INTEGER iflag_top_bound,mode_top_bound
101      REAL tau_top_bound
102      REAL daylen ! length of solar day, in 'standard' day length
103      REAL molmass ! (g/mol) molar mass of the atmosphere
104
105      REAL nu_venus,t0_venus ! coeffs needed for Cp(T), Venus atmosphere
106      REAL ihf  ! (W/m2) intrinsic heat flux for giant planets
107
108
109!-----------------------------------------------------------------------
110!
111! $Id: comvert.h 1654 2012-09-24 15:07:18Z aslmd $
112!
113!-----------------------------------------------------------------------
114!   INCLUDE 'comvert.h'
115
116      COMMON/comvertr/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm),     &
117     &               pa,preff,nivsigs(llm),nivsig(llm+1),               &
118     &               aps(llm),bps(llm),scaleheight,pseudoalt(llm)
119
120      common/comverti/disvert_type, pressure_exner
121
122      real ap     ! hybrid pressure contribution at interlayers
123      real bp     ! hybrid sigma contribution at interlayer
124      real presnivs ! (reference) pressure at mid-layers
125      real dpres
126      real pa     ! reference pressure (Pa) at which hybrid coordinates
127                  ! become purely pressure
128      real preff  ! reference surface pressure (Pa)
129      real nivsigs
130      real nivsig
131      real aps    ! hybrid pressure contribution at mid-layers
132      real bps    ! hybrid sigma contribution at mid-layers
133      real scaleheight ! atmospheric (reference) scale height (km)
134      real pseudoalt ! pseudo-altitude of model levels (km), based on presnivs(),
135                     ! preff and scaleheight
136
137      integer disvert_type ! type of vertical discretization:
138                           ! 1: Earth (default for planet_type==earth),
139                           !     automatic generation
140                           ! 2: Planets (default for planet_type!=earth),
141                           !     using 'z2sig.def' (or 'esasig.def) file
142
143      logical pressure_exner
144!     compute pressure inside layers using Exner function, else use mean
145!     of pressure values at interfaces
146
147 !-----------------------------------------------------------------------
148!
149! $Header$
150!
151!CDK comgeom2
152      COMMON/comgeom/                                                   &
153     & cu(iip1,jjp1),cv(iip1,jjm),unscu2(iip1,jjp1),unscv2(iip1,jjm)  , &
154     & aire(iip1,jjp1),airesurg(iip1,jjp1),aireu(iip1,jjp1)           , &
155     & airev(iip1,jjm),unsaire(iip1,jjp1),apoln,apols                 , &
156     & unsairez(iip1,jjm),airuscv2(iip1,jjm),airvscu2(iip1,jjm)       , &
157     & aireij1(iip1,jjp1),aireij2(iip1,jjp1),aireij3(iip1,jjp1)       , &
158     & aireij4(iip1,jjp1),alpha1(iip1,jjp1),alpha2(iip1,jjp1)         , &
159     & alpha3(iip1,jjp1),alpha4(iip1,jjp1),alpha1p2(iip1,jjp1)        , &
160     & alpha1p4(iip1,jjp1),alpha2p3(iip1,jjp1),alpha3p4(iip1,jjp1)    , &
161     & fext(iip1,jjm),constang(iip1,jjp1), rlatu(jjp1),rlatv(jjm),      &
162     & rlonu(iip1),rlonv(iip1),cuvsurcv(iip1,jjm),cvsurcuv(iip1,jjm)  , &
163     & cvusurcu(iip1,jjp1),cusurcvu(iip1,jjp1)                        , &
164     & cuvscvgam1(iip1,jjm),cuvscvgam2(iip1,jjm),cvuscugam1(iip1,jjp1), &
165     & cvuscugam2(iip1,jjp1),cvscuvgam(iip1,jjm),cuscvugam(iip1,jjp1) , &
166     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2                , &
167     & unsair_gam1(iip1,jjp1),unsair_gam2(iip1,jjp1)                  , &
168     & unsairz_gam(iip1,jjm),aivscu2gam(iip1,jjm),aiuscv2gam(iip1,jjm)  &
169     & , xprimu(iip1),xprimv(iip1)
170
171
172      REAL                                                               &
173     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,apoln,apols,unsaire &
174     & ,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4     , &
175     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 , &
176     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     , &
177     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1           , &
178     & unsapolnga2,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2     , &
179     & unsairz_gam,aivscu2gam,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu    , &
180     & cusurcvu,xprimu,xprimv
181
182c   Arguments:
183c   ----------
184      integer mode
185      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm )
186      REAL q( iip1,jjp1,llm,0:3)
187      REAL w( ip1jmp1,llm )
188      REAL masse( iip1,jjp1,llm)
189c   Local:
190c   ------
191      LOGICAL limit
192      REAL sm ( iip1,jjp1, llm )
193      REAL s0( iip1,jjp1,llm ),  sx( iip1,jjp1,llm )
194      REAL sy( iip1,jjp1,llm ),  sz( iip1,jjp1,llm )
195      real masn,mass,zz
196      INTEGER i,j,l,iq
197
198c  modif Fred 24 03 96
199
200      real sinlon(iip1),sinlondlon(iip1)
201      real coslon(iip1),coslondlon(iip1)
202      save sinlon,coslon,sinlondlon,coslondlon
203      real dyn1,dyn2,dys1,dys2
204      real qpn,qps,dqzpn,dqzps
205      real smn,sms,s0n,s0s,sxn(iip1),sxs(iip1)
206      real qmin,zq,pente_max
207c
208      REAL      SSUM
209      integer ismax,ismin,lati,latf
210      EXTERNAL  SSUM, convflu,ismin,ismax
211      logical first
212      save first
213c   fin modif
214
215c      EXTERNAL masskg
216      EXTERNAL advx
217      EXTERNAL advy
218      EXTERNAL advz
219
220c  modif Fred 24 03 96
221      data first/.true./
222
223      limit = .TRUE.
224      pente_max=2
225c     if (mode.eq.1.or.mode.eq.3) then
226c     if (mode.eq.1) then
227      if (mode.ge.1) then
228        lati=2
229        latf=jjm
230      else
231        lati=1
232        latf=jjp1
233      endif
234
235      qmin=0.4995
236      qmin=0.
237      if(first) then
238         print*,'SCHEMA AMONT NOUVEAU'
239         first=.false.
240         do i=2,iip1
241            coslon(i)=cos(rlonv(i))
242            sinlon(i)=sin(rlonv(i))
243            coslondlon(i)=coslon(i)*(rlonu(i)-rlonu(i-1))/pi
244            sinlondlon(i)=sinlon(i)*(rlonu(i)-rlonu(i-1))/pi
245            print*,coslondlon(i),sinlondlon(i)
246         enddo
247         coslon(1)=coslon(iip1)
248         coslondlon(1)=coslondlon(iip1)
249         sinlon(1)=sinlon(iip1)
250         sinlondlon(1)=sinlondlon(iip1)
251         print*,'sum sinlondlon ',ssum(iim,sinlondlon,1)/sinlondlon(1)
252         print*,'sum coslondlon ',ssum(iim,coslondlon,1)/coslondlon(1)
253        DO l = 1,llm
254        DO j = 1,jjp1
255         DO i = 1,iip1
256         q ( i,j,l,1 )=0.
257         q ( i,j,l,2 )=0.
258         q ( i,j,l,3 )=0. 
259         ENDDO
260         ENDDO
261        ENDDO
262       
263      endif
264c   Fin modif Fred
265
266c *** q contient les qqtes de traceur avant l'advection
267
268c *** Affectation des tableaux S a partir de Q
269c *** Rem : utilisation de SCOPY ulterieurement
270 
271       DO l = 1,llm
272        DO j = 1,jjp1
273         DO i = 1,iip1
274             s0( i,j,llm+1-l ) = q ( i,j,l,0 )
275             sx( i,j,llm+1-l ) = q ( i,j,l,1 )
276             sy( i,j,llm+1-l ) = q ( i,j,l,2 )
277             sz( i,j,llm+1-l ) = q ( i,j,l,3 )
278         ENDDO
279        ENDDO
280       ENDDO
281
282c      PRINT*,'----- S0 just before conversion -------'
283c      PRINT*,'S0(16,12,1)=',s0(16,12,1)
284c      PRINT*,'Q(16,12,1,4)=',q(16,12,1,4)
285
286c *** On calcule la masse d'air en kg
287
288       DO  l = 1,llm
289         DO  j = 1,jjp1
290           DO  i = 1,iip1
291            sm ( i,j,llm+1-l)=masse( i,j,l )
292          ENDDO
293         ENDDO
294       ENDDO
295
296c *** On converti les champs S en atome (resp. kg) 
297c *** Les routines d'advection traitent les champs
298c *** a advecter si ces derniers sont en atome (resp. kg)
299c *** A optimiser !!!
300
301       DO  l = 1,llm
302         DO  j = 1,jjp1
303           DO  i = 1,iip1
304               s0(i,j,l) = s0(i,j,l) * sm ( i,j,l )
305               sx(i,j,l) = sx(i,j,l) * sm ( i,j,l )
306               sy(i,j,l) = sy(i,j,l) * sm ( i,j,l )
307               sz(i,j,l) = sz(i,j,l) * sm ( i,j,l )
308           ENDDO
309         ENDDO
310       ENDDO
311
312c       ss0 = 0.
313c       DO l = 1,llm
314c        DO j = 1,jjp1
315c         DO i = 1,iim
316c            ss0 = ss0 + s0 ( i,j,l )
317c         ENDDO
318c        ENDDO
319c       ENDDO
320c       PRINT*, 'valeur tot s0 avant advection=',ss0
321
322c *** Appel des subroutines d'advection en X, en Y et en Z
323c *** Advection avec "time-splitting"
324     
325c-----------------------------------------------------------
326c      PRINT*,'----- S0 just before ADVX -------'
327c      PRINT*,'S0(16,12,1)=',s0(16,12,1)
328
329c-----------------------------------------------------------
330c      do l=1,llm
331c         do j=1,jjp1
332c          do i=1,iip1
333c             zq=s0(i,j,l)/sm(i,j,l)
334c            if(zq.lt.qmin)
335c    ,       print*,'avant advx1, s0(',i,',',j,',',l,')=',zq
336c          enddo
337c         enddo
338c      enddo
339CCC
340       if(mode.eq.2) then
341          do l=1,llm
342            s0s=0.
343            s0n=0.
344            dyn1=0.
345            dys1=0.
346            dyn2=0.
347            dys2=0.
348            smn=0.
349            sms=0.
350            do i=1,iim
351               smn=smn+sm(i,1,l)
352               sms=sms+sm(i,jjp1,l)
353               s0n=s0n+s0(i,1,l)
354               s0s=s0s+s0(i,jjp1,l)
355               zz=sy(i,1,l)/sm(i,1,l)
356               dyn1=dyn1+sinlondlon(i)*zz
357               dyn2=dyn2+coslondlon(i)*zz
358               zz=sy(i,jjp1,l)/sm(i,jjp1,l)
359               dys1=dys1+sinlondlon(i)*zz
360               dys2=dys2+coslondlon(i)*zz
361            enddo
362            do i=1,iim
363               sy(i,1,l)=dyn1*sinlon(i)+dyn2*coslon(i)
364               sy(i,jjp1,l)=dys1*sinlon(i)+dys2*coslon(i)
365            enddo
366            do i=1,iim
367               s0(i,1,l)=s0n/smn+sy(i,1,l)
368               s0(i,jjp1,l)=s0s/sms-sy(i,jjp1,l)
369            enddo
370
371            s0(iip1,1,l)=s0(1,1,l)
372            s0(iip1,jjp1,l)=s0(1,jjp1,l)
373
374            do i=1,iim
375               sxn(i)=s0(i+1,1,l)-s0(i,1,l)
376               sxs(i)=s0(i+1,jjp1,l)-s0(i,jjp1,l)
377c   on rerentre les masses
378            enddo
379            do i=1,iim
380               sy(i,1,l)=sy(i,1,l)*sm(i,1,l)
381               sy(i,jjp1,l)=sy(i,jjp1,l)*sm(i,jjp1,l)
382               s0(i,1,l)=s0(i,1,l)*sm(i,1,l)
383               s0(i,jjp1,l)=s0(i,jjp1,l)*sm(i,jjp1,l)
384            enddo
385            sxn(iip1)=sxn(1)
386            sxs(iip1)=sxs(1)
387            do i=1,iim
388               sx(i+1,1,l)=0.25*(sxn(i)+sxn(i+1))*sm(i+1,1,l)
389               sx(i+1,jjp1,l)=0.25*(sxs(i)+sxs(i+1))*sm(i+1,jjp1,l)
390            enddo
391            s0(iip1,1,l)=s0(1,1,l)
392            s0(iip1,jjp1,l)=s0(1,jjp1,l)
393            sy(iip1,1,l)=sy(1,1,l)
394            sy(iip1,jjp1,l)=sy(1,jjp1,l)
395            sx(1,1,l)=sx(iip1,1,l)
396            sx(1,jjp1,l)=sx(iip1,jjp1,l)
397          enddo
398      endif
399
400      if (mode.eq.4) then
401         do l=1,llm
402            do i=1,iip1
403               sx(i,1,l)=0.
404               sx(i,jjp1,l)=0.
405               sy(i,1,l)=0.
406               sy(i,jjp1,l)=0.
407            enddo
408         enddo
409      endif
410      call limx(s0,sx,sm,pente_max)
411c     call minmaxq(zq,1.e33,-1.e33,'avant advx     ')
412       call advx( limit,.5*dtvr,pbaru,sm,s0,sx,sy,sz,lati,latf)
413c     call minmaxq(zq,1.e33,-1.e33,'avant advy     ')
414      if (mode.eq.4) then
415         do l=1,llm
416            do i=1,iip1
417               sx(i,1,l)=0.
418               sx(i,jjp1,l)=0.
419               sy(i,1,l)=0.
420               sy(i,jjp1,l)=0.
421            enddo
422         enddo
423      endif
424       call   limy(s0,sy,sm,pente_max)
425       call advy( limit,.5*dtvr,pbarv,sm,s0,sx,sy,sz ) 
426c     call minmaxq(zq,1.e33,-1.e33,'avant advz     ')
427       do j=1,jjp1
428          do i=1,iip1
429             sz(i,j,1)=0.
430             sz(i,j,llm)=0.
431          enddo
432       enddo
433       call limz(s0,sz,sm,pente_max)
434       call advz( limit,dtvr,w,sm,s0,sx,sy,sz )
435      if (mode.eq.4) then
436         do l=1,llm
437            do i=1,iip1
438               sx(i,1,l)=0.
439               sx(i,jjp1,l)=0.
440               sy(i,1,l)=0.
441               sy(i,jjp1,l)=0.
442            enddo
443         enddo
444      endif
445        call limy(s0,sy,sm,pente_max)
446       call advy( limit,.5*dtvr,pbarv,sm,s0,sx,sy,sz ) 
447       do l=1,llm
448          do j=1,jjp1
449             sm(iip1,j,l)=sm(1,j,l)
450             s0(iip1,j,l)=s0(1,j,l)
451             sx(iip1,j,l)=sx(1,j,l)
452             sy(iip1,j,l)=sy(1,j,l)
453             sz(iip1,j,l)=sz(1,j,l)
454          enddo
455       enddo
456
457
458c     call minmaxq(zq,1.e33,-1.e33,'avant advx     ')
459      if (mode.eq.4) then
460         do l=1,llm
461            do i=1,iip1
462               sx(i,1,l)=0.
463               sx(i,jjp1,l)=0.
464               sy(i,1,l)=0.
465               sy(i,jjp1,l)=0.
466            enddo
467         enddo
468      endif
469       call limx(s0,sx,sm,pente_max)
470       call advx( limit,.5*dtvr,pbaru,sm,s0,sx,sy,sz,lati,latf) 
471c     call minmaxq(zq,1.e33,-1.e33,'apres advx     ')
472c      do l=1,llm
473c         do j=1,jjp1
474c          do i=1,iip1
475c             zq=s0(i,j,l)/sm(i,j,l)
476c            if(zq.lt.qmin)
477c    ,       print*,'apres advx2, s0(',i,',',j,',',l,')=',zq
478c          enddo
479c         enddo
480c      enddo
481c ***   On repasse les S dans la variable q directement 14/10/94
482c   On revient a des rapports de melange en divisant par la masse
483
484c En dehors des poles:
485
486       DO  l = 1,llm
487        DO  j = 1,jjp1
488         DO  i = 1,iim
489             q(i,j,llm+1-l,0)=s0(i,j,l)/sm(i,j,l)
490             q(i,j,llm+1-l,1)=sx(i,j,l)/sm(i,j,l)
491             q(i,j,llm+1-l,2)=sy(i,j,l)/sm(i,j,l)
492             q(i,j,llm+1-l,3)=sz(i,j,l)/sm(i,j,l)
493         ENDDO
494        ENDDO
495      ENDDO
496
497c Traitements specifiques au pole
498
499      if(mode.ge.1) then
500      DO l=1,llm
501c   filtrages aux poles
502         masn=ssum(iim,sm(1,1,l),1)
503         mass=ssum(iim,sm(1,jjp1,l),1)
504         qpn=ssum(iim,s0(1,1,l),1)/masn
505         qps=ssum(iim,s0(1,jjp1,l),1)/mass
506         dqzpn=ssum(iim,sz(1,1,l),1)/masn
507         dqzps=ssum(iim,sz(1,jjp1,l),1)/mass
508         do i=1,iip1
509            q( i,1,llm+1-l,3)=dqzpn
510            q( i,jjp1,llm+1-l,3)=dqzps
511            q( i,1,llm+1-l,0)=qpn
512            q( i,jjp1,llm+1-l,0)=qps
513         enddo
514         if(mode.eq.3) then
515            dyn1=0.
516            dys1=0.
517            dyn2=0.
518            dys2=0.
519            do i=1,iim
520               dyn1=dyn1+sinlondlon(i)*sy(i,1,l)/sm(i,1,l)
521               dyn2=dyn2+coslondlon(i)*sy(i,1,l)/sm(i,1,l)
522               dys1=dys1+sinlondlon(i)*sy(i,jjp1,l)/sm(i,jjp1,l)
523               dys2=dys2+coslondlon(i)*sy(i,jjp1,l)/sm(i,jjp1,l)
524            enddo
525            do i=1,iim
526               q(i,1,llm+1-l,2)=
527     s          (sinlon(i)*dyn1+coslon(i)*dyn2)
528               q(i,1,llm+1-l,0)=q(i,1,llm+1-l,0)+q(i,1,llm+1-l,2)
529               q(i,jjp1,llm+1-l,2)=
530     s          (sinlon(i)*dys1+coslon(i)*dys2)
531               q(i,jjp1,llm+1-l,0)=q(i,jjp1,llm+1-l,0)
532     s         -q(i,jjp1,llm+1-l,2)
533            enddo
534         endif
535         if(mode.eq.1) then
536c   on filtre les valeurs au bord de la "grande maille pole"
537            dyn1=0.
538            dys1=0.
539            dyn2=0.
540            dys2=0.
541            do i=1,iim
542               zz=s0(i,2,l)/sm(i,2,l)-q(i,1,llm+1-l,0)
543               dyn1=dyn1+sinlondlon(i)*zz
544               dyn2=dyn2+coslondlon(i)*zz
545               zz=q(i,jjp1,llm+1-l,0)-s0(i,jjm,l)/sm(i,jjm,l)
546               dys1=dys1+sinlondlon(i)*zz
547               dys2=dys2+coslondlon(i)*zz
548            enddo
549            do i=1,iim
550               q(i,1,llm+1-l,2)=
551     s          (sinlon(i)*dyn1+coslon(i)*dyn2)/2.
552               q(i,1,llm+1-l,0)=q(i,1,llm+1-l,0)+q(i,1,llm+1-l,2)
553               q(i,jjp1,llm+1-l,2)=
554     s          (sinlon(i)*dys1+coslon(i)*dys2)/2.
555               q(i,jjp1,llm+1-l,0)=q(i,jjp1,llm+1-l,0)
556     s         -q(i,jjp1,llm+1-l,2)
557            enddo
558            q(iip1,1,llm+1-l,0)=q(1,1,llm+1-l,0)
559            q(iip1,jjp1,llm+1-l,0)=q(1,jjp1,llm+1-l,0)
560
561            do i=1,iim
562               sxn(i)=q(i+1,1,llm+1-l,0)-q(i,1,llm+1-l,0)
563               sxs(i)=q(i+1,jjp1,llm+1-l,0)-q(i,jjp1,llm+1-l,0)
564            enddo
565            sxn(iip1)=sxn(1)
566            sxs(iip1)=sxs(1)
567            do i=1,iim
568               q(i+1,1,llm+1-l,1)=0.25*(sxn(i)+sxn(i+1))
569               q(i+1,jjp1,llm+1-l,1)=0.25*(sxs(i)+sxs(i+1))
570            enddo
571            q(1,1,llm+1-l,1)=q(iip1,1,llm+1-l,1)
572            q(1,jjp1,llm+1-l,1)=q(iip1,jjp1,llm+1-l,1)
573
574         endif
575
576       ENDDO
577       endif
578
579c bouclage en longitude
580      do iq=0,3
581         do l=1,llm
582            do j=1,jjp1
583               q(iip1,j,l,iq)=q(1,j,l,iq)
584            enddo
585         enddo
586      enddo
587
588c       PRINT*, ' SORTIE DE PENTES ---  ca peut glisser ....'
589
590        DO l = 1,llm
591         DO j = 1,jjp1
592          DO i = 1,iip1
593                IF (q(i,j,l,0).lt.0.)  THEN
594c                    PRINT*,'------------ BIP-----------' 
595c                    PRINT*,'Q0(',i,j,l,')=',q(i,j,l,0)
596c                    PRINT*,'QX(',i,j,l,')=',q(i,j,l,1)
597c                    PRINT*,'QY(',i,j,l,')=',q(i,j,l,2)
598c                    PRINT*,'QZ(',i,j,l,')=',q(i,j,l,3)
599c                            PRINT*,' PBL EN SORTIE DE PENTES'
600                     q(i,j,l,0)=0.
601c                    STOP
602                 ENDIF
603          ENDDO
604         ENDDO
605        ENDDO
606
607c       PRINT*, '-------------------------------------------'
608       
609       do l=1,llm
610          do j=1,jjp1
611           do i=1,iip1
612             if(q(i,j,l,0).lt.qmin)
613     ,       print*,'apres pentes, s0(',i,',',j,',',l,')=',q(i,j,l,0)
614           enddo
615          enddo
616       enddo
617      RETURN
618      END
619
620
621
622
623
624
625
626
627
628
629
630
Note: See TracBrowser for help on using the repository browser.