/[lmdze]/trunk/Sources/dyn3d/limx.f
ViewVC logotype

Diff of /trunk/Sources/dyn3d/limx.f

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

trunk/dyn3d/limx.f revision 80 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/dyn3d/limx.f90 revision 81 by guez, Wed Mar 5 14:38:41 2014 UTC
# Line 1  Line 1 
 !  
 ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/limx.F,v 1.1.1.1 2004/05/19 12:53:06 lmdzadmin Exp $  
 !  
       SUBROUTINE limx(s0,sx,sm,pente_max)  
 c  
 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget  
 c  
 c    ********************************************************************  
 c     Shema  d'advection " pseudo amont " .  
 c    ********************************************************************  
 c     nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....  
 c  
 c  
 c   --------------------------------------------------------------------  
       use dimens_m  
       use paramet_m  
       use comconst  
       use disvert_m  
       use conf_gcm_m  
       use comgeom  
       IMPLICIT NONE  
 c  
 c  
 c  
 c   Arguments:  
 c   ----------  
       real pente_max  
       REAL s0(ip1jmp1,llm),sm(ip1jmp1,llm)  
       real sx(ip1jmp1,llm)  
 c  
 c      Local  
 c   ---------  
 c  
       INTEGER ij,l,j,i,iju,ijq,indu(ip1jmp1),niju  
       integer n0,iadvplus(ip1jmp1,llm),nl(llm)  
 c  
       REAL q(ip1jmp1,llm)  
       real dxq(ip1jmp1,llm)  
   
   
       REAL new_m,zm  
       real dxqu(ip1jmp1)  
       real adxqu(ip1jmp1),dxqmax(ip1jmp1)  
   
       Logical extremum,first  
       save first  
   
       REAL      SSUM,CVMGP,CVMGT  
       integer ismax,ismin  
       EXTERNAL  SSUM, convflu,ismin,ismax  
   
       data first/.true./  
   
   
        DO  l = 1,llm  
          DO  ij=1,ip1jmp1  
                q(ij,l) = s0(ij,l) / sm ( ij,l )  
                dxq(ij,l) = sx(ij,l) /sm(ij,l)  
          ENDDO  
        ENDDO  
   
 c   calcul de la pente a droite et a gauche de la maille  
   
       do l = 1, llm  
          do ij=iip2,ip1jm-1  
             dxqu(ij)=q(ij+1,l)-q(ij,l)  
          enddo  
          do ij=iip1+iip1,ip1jm,iip1  
             dxqu(ij)=dxqu(ij-iim)  
          enddo  
   
          do ij=iip2,ip1jm  
             adxqu(ij)=abs(dxqu(ij))  
          enddo  
   
 c   calcul de la pente maximum dans la maille en valeur absolue  
   
          do ij=iip2+1,ip1jm  
             dxqmax(ij)=pente_max*min(adxqu(ij-1),adxqu(ij))  
          enddo  
   
          do ij=iip1+iip1,ip1jm,iip1  
             dxqmax(ij-iim)=dxqmax(ij)  
          enddo  
   
 c   calcul de la pente avec limitation  
   
          do ij=iip2+1,ip1jm  
             if(     dxqu(ij-1)*dxqu(ij).gt.0.  
      &         .and. dxq(ij,l)*dxqu(ij).gt.0.) then  
               dxq(ij,l)=  
      &         sign(min(abs(dxq(ij,l)),dxqmax(ij)),dxq(ij,l))  
             else  
 c   extremum local  
                dxq(ij,l)=0.  
             endif  
          enddo  
          do ij=iip1+iip1,ip1jm,iip1  
             dxq(ij-iim,l)=dxq(ij,l)  
          enddo  
   
          DO  ij=1,ip1jmp1  
                sx(ij,l) = dxq(ij,l)*sm(ij,l)  
          ENDDO  
1    
2         ENDDO  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/limx.F,v 1.1.1.1 2004/05/19
3    ! 12:53:06 lmdzadmin Exp $
4    
5        RETURN  SUBROUTINE limx(s0, sx, sm, pente_max)
6        END  
7      ! Auteurs:   P.Le Van, F.Hourdin, F.Forget
8    
9      ! ********************************************************************
10      ! Shema  d'advection " pseudo amont " .
11      ! ********************************************************************
12      ! nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
13    
14    
15      ! --------------------------------------------------------------------
16      USE dimens_m
17      USE paramet_m
18      USE comconst
19      USE disvert_m
20      USE conf_gcm_m
21      USE comgeom
22      IMPLICIT NONE
23    
24    
25    
26      ! Arguments:
27      ! ----------
28      REAL pente_max
29      REAL s0(ip1jmp1, llm), sm(ip1jmp1, llm)
30      REAL sx(ip1jmp1, llm)
31    
32      ! Local
33      ! ---------
34    
35      INTEGER ij, l, j, i, iju, ijq, indu(ip1jmp1), niju
36      INTEGER n0, iadvplus(ip1jmp1, llm), nl(llm)
37    
38      REAL q(ip1jmp1, llm)
39      REAL dxq(ip1jmp1, llm)
40    
41    
42      REAL new_m, zm
43      REAL dxqu(ip1jmp1)
44      REAL adxqu(ip1jmp1), dxqmax(ip1jmp1)
45    
46      LOGICAL extremum, first
47      SAVE first
48    
49      REAL ssum, cvmgp, cvmgt
50      INTEGER ismax, ismin
51      EXTERNAL ssum, convflu, ismin, ismax
52    
53      DATA first/.TRUE./
54    
55    
56      DO l = 1, llm
57        DO ij = 1, ip1jmp1
58          q(ij, l) = s0(ij, l)/sm(ij, l)
59          dxq(ij, l) = sx(ij, l)/sm(ij, l)
60        END DO
61      END DO
62    
63      ! calcul de la pente a droite et a gauche de la maille
64    
65      DO l = 1, llm
66        DO ij = iip2, ip1jm - 1
67          dxqu(ij) = q(ij+1, l) - q(ij, l)
68        END DO
69        DO ij = iip1 + iip1, ip1jm, iip1
70          dxqu(ij) = dxqu(ij-iim)
71        END DO
72    
73        DO ij = iip2, ip1jm
74          adxqu(ij) = abs(dxqu(ij))
75        END DO
76    
77        ! calcul de la pente maximum dans la maille en valeur absolue
78    
79        DO ij = iip2 + 1, ip1jm
80          dxqmax(ij) = pente_max*min(adxqu(ij-1), adxqu(ij))
81        END DO
82    
83        DO ij = iip1 + iip1, ip1jm, iip1
84          dxqmax(ij-iim) = dxqmax(ij)
85        END DO
86    
87        ! calcul de la pente avec limitation
88    
89        DO ij = iip2 + 1, ip1jm
90          IF (dxqu(ij-1)*dxqu(ij)>0. .AND. dxq(ij,l)*dxqu(ij)>0.) THEN
91            dxq(ij, l) = sign(min(abs(dxq(ij,l)),dxqmax(ij)), dxq(ij,l))
92          ELSE
93            ! extremum local
94            dxq(ij, l) = 0.
95          END IF
96        END DO
97        DO ij = iip1 + iip1, ip1jm, iip1
98          dxq(ij-iim, l) = dxq(ij, l)
99        END DO
100    
101        DO ij = 1, ip1jmp1
102          sx(ij, l) = dxq(ij, l)*sm(ij, l)
103        END DO
104    
105      END DO
106    
107      RETURN
108    END SUBROUTINE limx

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

  ViewVC Help
Powered by ViewVC 1.1.21