source: LMDZ6/trunk/libf/dyn3d_common/limz.f90 @ 5272

Last change on this file since 5272 was 5272, checked in by abarral, 23 hours ago

Turn paramet.h into a module

  • 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.1 KB
Line 
1!
2! $Header$
3!
4SUBROUTINE limz(s0,sz,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  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
16USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
17          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
18IMPLICIT NONE
19  !
20
21
22  include "comgeom.h"
23  !
24  !
25  !   Arguments:
26  !   ----------
27  real :: pente_max
28  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
29  real :: sz(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 :: dzq(ip1jmp1,llm)
39
40
41  REAL :: new_m,zm
42  real :: dzqw(ip1jmp1)
43  real :: adzqw(ip1jmp1),dzqmax(ip1jmp1)
44
45  Logical :: extremum,first
46  save first
47
48  REAL :: SSUM,CVMGP,CVMGT
49  integer :: ismax,ismin
50  EXTERNAL  SSUM, ismin,ismax
51
52  data first/.true./
53
54
55   DO  l = 1,llm
56     DO  ij=1,ip1jmp1
57           q(ij,l) = s0(ij,l) / sm ( ij,l )
58           dzq(ij,l) = sz(ij,l) /sm(ij,l)
59     ENDDO
60   ENDDO
61
62  !   calcul de la pente en haut et en bas de la maille
63   do ij=1,ip1jmp1
64   do l = 1, llm-1
65        dzqw(l)=q(ij,l+1)-q(ij,l)
66     enddo
67        dzqw(llm)=0.
68
69     do  l=1,llm
70        adzqw(l)=abs(dzqw(l))
71     enddo
72
73  !   calcul de la pente maximum dans la maille en valeur absolue
74
75     do l=2,llm-1
76        dzqmax(l)=pente_max*min(adzqw(l-1),adzqw(l))
77     enddo
78
79  !   calcul de la pente avec limitation
80
81     do l=2,llm-1
82        if(     dzqw(l-1)*dzqw(l).gt.0. &
83              .and. dzq(ij,l)*dzqw(l).gt.0.) then
84          dzq(ij,l)= &
85                sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l))
86        else
87  !   extremum local
88           dzq(ij,l)=0.
89        endif
90     enddo
91
92     DO  l=1,llm
93           sz(ij,l) = dzq(ij,l)*sm(ij,l)
94     ENDDO
95
96   ENDDO
97
98  RETURN
99END SUBROUTINE limz
Note: See TracBrowser for help on using the repository browser.