source: trunk/LMDZ.COMMON/libf/dyn3d_common/limx.F @ 3493

Last change on this file since 3493 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

File size: 2.4 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE limx(s0,sx,sm,pente_max)
5c
6c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
7c
8c    ********************************************************************
9c     Shema  d'advection " pseudo amont " .
10c    ********************************************************************
11c     nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
12c
13c
14c   --------------------------------------------------------------------
15      IMPLICIT NONE
16c
17#include "dimensions.h"
18#include "paramet.h"
19#include "comgeom.h"
20c
21c
22c   Arguments:
23c   ----------
24      real pente_max
25      REAL s0(ip1jmp1,llm),sm(ip1jmp1,llm)
26      real sx(ip1jmp1,llm)
27c
28c      Local
29c   ---------
30c
31      INTEGER ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
32      integer n0,iadvplus(ip1jmp1,llm),nl(llm)
33c
34      REAL q(ip1jmp1,llm)
35      real dxq(ip1jmp1,llm)
36
37
38      REAL new_m,zm
39      real dxqu(ip1jmp1)
40      real adxqu(ip1jmp1),dxqmax(ip1jmp1)
41
42      Logical extremum,first
43      save first
44
45      REAL      SSUM,CVMGP,CVMGT
46      integer ismax,ismin
47      EXTERNAL  SSUM, convflu,ismin,ismax
48      EXTERNAL filtreg
49
50      data first/.true./
51
52
53       DO  l = 1,llm
54         DO  ij=1,ip1jmp1
55               q(ij,l) = s0(ij,l) / sm ( ij,l )
56               dxq(ij,l) = sx(ij,l) /sm(ij,l)
57         ENDDO
58       ENDDO
59
60c   calcul de la pente a droite et a gauche de la maille
61
62      do l = 1, llm
63         do ij=iip2,ip1jm-1
64            dxqu(ij)=q(ij+1,l)-q(ij,l)
65         enddo
66         do ij=iip1+iip1,ip1jm,iip1
67            dxqu(ij)=dxqu(ij-iim)
68         enddo
69
70         do ij=iip2,ip1jm
71            adxqu(ij)=abs(dxqu(ij))
72         enddo
73
74c   calcul de la pente maximum dans la maille en valeur absolue
75
76         do ij=iip2+1,ip1jm
77            dxqmax(ij)=pente_max*min(adxqu(ij-1),adxqu(ij))
78         enddo
79
80         do ij=iip1+iip1,ip1jm,iip1
81            dxqmax(ij-iim)=dxqmax(ij)
82         enddo
83
84c   calcul de la pente avec limitation
85
86         do ij=iip2+1,ip1jm
87            if(     dxqu(ij-1)*dxqu(ij).gt.0.
88     &         .and. dxq(ij,l)*dxqu(ij).gt.0.) then
89              dxq(ij,l)=
90     &         sign(min(abs(dxq(ij,l)),dxqmax(ij)),dxq(ij,l))
91            else
92c   extremum local
93               dxq(ij,l)=0.
94            endif
95         enddo
96         do ij=iip1+iip1,ip1jm,iip1
97            dxq(ij-iim,l)=dxq(ij,l)
98         enddo
99
100         DO  ij=1,ip1jmp1
101               sx(ij,l) = dxq(ij,l)*sm(ij,l)
102         ENDDO
103
104       ENDDO
105
106      RETURN
107      END
Note: See TracBrowser for help on using the repository browser.