source: LMDZ6/branches/Amaury_dev/libf/dyn3d_common/limx.f90 @ 5295

Last change on this file since 5295 was 5159, checked in by abarral, 3 months ago

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