source: LMDZ6/trunk/libf/dyn3d_common/limx.f90 @ 5281

Last change on this file since 5281 was 5281, checked in by abarral, 4 days ago

Turn comgeom.h comgeom2.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.4 KB
RevLine 
[524]1!
2! $Header$
3!
[5246]4SUBROUTINE limx(s0,sx,sm,pente_max)
5  !
6  ! Auteurs:   P.Le Van, F.Hourdin, F.Forget
7  !
8  !    ********************************************************************
9  ! Shema  d'advection " pseudo amont " .
10  !    ********************************************************************
11  ! nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
12  !
13  !
14  !   --------------------------------------------------------------------
[5281]15  USE comgeom_mod_h
[5271]16  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
[5272]17USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
18          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
[5271]19IMPLICIT NONE
[5246]20  !
[5271]21
[5272]22
[5246]23  !
24  !
25  !   Arguments:
26  !   ----------
27  real :: pente_max
28  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
29  real :: sx(ip1jmp1,llm)
30  !
31  !  Local
32  !   ---------
33  !
34  INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
35  integer :: n0,iadvplus(ip1jmp1,llm),nl(llm)
36  !
37  REAL :: q(ip1jmp1,llm)
38  real :: dxq(ip1jmp1,llm)
[524]39
40
[5246]41  REAL :: new_m,zm
42  real :: dxqu(ip1jmp1)
43  real :: adxqu(ip1jmp1),dxqmax(ip1jmp1)
[524]44
[5246]45  Logical :: extremum,first
46  save first
[524]47
[5246]48  REAL :: SSUM,CVMGP,CVMGT
49  integer :: ismax,ismin
50  EXTERNAL  SSUM, ismin,ismax
[524]51
[5246]52  data first/.true./
[524]53
54
[5246]55   DO  l = 1,llm
56     DO  ij=1,ip1jmp1
57           q(ij,l) = s0(ij,l) / sm ( ij,l )
58           dxq(ij,l) = sx(ij,l) /sm(ij,l)
59     ENDDO
60   ENDDO
[524]61
[5246]62  !   calcul de la pente a droite et a gauche de la maille
[524]63
[5246]64  do l = 1, llm
65     do ij=iip2,ip1jm-1
66        dxqu(ij)=q(ij+1,l)-q(ij,l)
67     enddo
68     do ij=iip1+iip1,ip1jm,iip1
69        dxqu(ij)=dxqu(ij-iim)
70     enddo
[524]71
[5246]72     do ij=iip2,ip1jm
73        adxqu(ij)=abs(dxqu(ij))
74     enddo
[524]75
[5246]76  !   calcul de la pente maximum dans la maille en valeur absolue
[524]77
[5246]78     do ij=iip2+1,ip1jm
79        dxqmax(ij)=pente_max*min(adxqu(ij-1),adxqu(ij))
80     enddo
[524]81
[5246]82     do ij=iip1+iip1,ip1jm,iip1
83        dxqmax(ij-iim)=dxqmax(ij)
84     enddo
[524]85
[5246]86  !   calcul de la pente avec limitation
[524]87
[5246]88     do ij=iip2+1,ip1jm
89        if(     dxqu(ij-1)*dxqu(ij).gt.0. &
90              .and. dxq(ij,l)*dxqu(ij).gt.0.) then
91          dxq(ij,l)= &
92                sign(min(abs(dxq(ij,l)),dxqmax(ij)),dxq(ij,l))
93        else
94  !   extremum local
95           dxq(ij,l)=0.
96        endif
97     enddo
98     do ij=iip1+iip1,ip1jm,iip1
99        dxq(ij-iim,l)=dxq(ij,l)
100     enddo
[524]101
[5246]102     DO  ij=1,ip1jmp1
103           sx(ij,l) = dxq(ij,l)*sm(ij,l)
104     ENDDO
[524]105
[5246]106   ENDDO
[524]107
[5246]108  RETURN
109END SUBROUTINE limx
Note: See TracBrowser for help on using the repository browser.