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

Last change on this file since 5246 was 5246, checked in by abarral, 24 hours ago

Convert fixed-form to free-form sources .F -> .{f,F}90
(WIP: some .F remain, will be handled in subsequent commits)

  • 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.2 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  !   --------------------------------------------------------------------
15  IMPLICIT NONE
16  !
17  include "dimensions.h"
18  include "paramet.h"
19  include "comgeom.h"
20  !
21  !
22  !   Arguments:
23  !   ----------
24  real :: pente_max
25  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
26  real :: sx(ip1jmp1,llm)
27  !
28  !  Local
29  !   ---------
30  !
31  INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
32  integer :: n0,iadvplus(ip1jmp1,llm),nl(llm)
33  !
34  REAL :: q(ip1jmp1,llm)
35  real :: dxq(ip1jmp1,llm)
[524]36
37
[5246]38  REAL :: new_m,zm
39  real :: dxqu(ip1jmp1)
40  real :: adxqu(ip1jmp1),dxqmax(ip1jmp1)
[524]41
[5246]42  Logical :: extremum,first
43  save first
[524]44
[5246]45  REAL :: SSUM,CVMGP,CVMGT
46  integer :: ismax,ismin
47  EXTERNAL  SSUM, ismin,ismax
[524]48
[5246]49  data first/.true./
[524]50
51
[5246]52   DO  l = 1,llm
53     DO  ij=1,ip1jmp1
54           q(ij,l) = s0(ij,l) / sm ( ij,l )
55           dxq(ij,l) = sx(ij,l) /sm(ij,l)
56     ENDDO
57   ENDDO
[524]58
[5246]59  !   calcul de la pente a droite et a gauche de la maille
[524]60
[5246]61  do l = 1, llm
62     do ij=iip2,ip1jm-1
63        dxqu(ij)=q(ij+1,l)-q(ij,l)
64     enddo
65     do ij=iip1+iip1,ip1jm,iip1
66        dxqu(ij)=dxqu(ij-iim)
67     enddo
[524]68
[5246]69     do ij=iip2,ip1jm
70        adxqu(ij)=abs(dxqu(ij))
71     enddo
[524]72
[5246]73  !   calcul de la pente maximum dans la maille en valeur absolue
[524]74
[5246]75     do ij=iip2+1,ip1jm
76        dxqmax(ij)=pente_max*min(adxqu(ij-1),adxqu(ij))
77     enddo
[524]78
[5246]79     do ij=iip1+iip1,ip1jm,iip1
80        dxqmax(ij-iim)=dxqmax(ij)
81     enddo
[524]82
[5246]83  !   calcul de la pente avec limitation
[524]84
[5246]85     do ij=iip2+1,ip1jm
86        if(     dxqu(ij-1)*dxqu(ij).gt.0. &
87              .and. dxq(ij,l)*dxqu(ij).gt.0.) then
88          dxq(ij,l)= &
89                sign(min(abs(dxq(ij,l)),dxqmax(ij)),dxq(ij,l))
90        else
91  !   extremum local
92           dxq(ij,l)=0.
93        endif
94     enddo
95     do ij=iip1+iip1,ip1jm,iip1
96        dxq(ij-iim,l)=dxq(ij,l)
97     enddo
[524]98
[5246]99     DO  ij=1,ip1jmp1
100           sx(ij,l) = dxq(ij,l)*sm(ij,l)
101     ENDDO
[524]102
[5246]103   ENDDO
[524]104
[5246]105  RETURN
106END SUBROUTINE limx
Note: See TracBrowser for help on using the repository browser.