LMDZ
limx.F
Go to the documentation of this file.
1 !
2 ! $Header$
3 !
4  SUBROUTINE limx(s0,sx,sm,pente_max)
5 c
6 c Auteurs: P.Le Van, F.Hourdin, F.Forget
7 c
8 c ********************************************************************
9 c Shema d'advection " pseudo amont " .
10 c ********************************************************************
11 c nq,iq,q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg ....
12 c
13 c
14 c --------------------------------------------------------------------
15  IMPLICIT NONE
16 c
17 #include "dimensions.h"
18 #include "paramet.h"
19 #include "logic.h"
20 #include "comvert.h"
21 #include "comconst.h"
22 #include "comgeom.h"
23 c
24 c
25 c Arguments:
26 c ----------
27  real pente_max
28  REAL s0(ip1jmp1,llm),sm(ip1jmp1,llm)
29  real sx(ip1jmp1,llm)
30 c
31 c Local
32 c ---------
33 c
34  INTEGER ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
35  integer n0,iadvplus(ip1jmp1,llm),nl(llm)
36 c
37  REAL q(ip1jmp1,llm)
38  real dxq(ip1jmp1,llm)
39 
40 
41  REAL new_m,zm
42  real dxqu(ip1jmp1)
43  real adxqu(ip1jmp1),dxqmax(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  dxq(ij,l) = sx(ij,l) /sm(ij,l)
59  ENDDO
60  ENDDO
61 
62 c calcul de la pente a droite et a gauche de la maille
63 
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
71 
72  do ij=iip2,ip1jm
73  adxqu(ij)=abs(dxqu(ij))
74  enddo
75 
76 c calcul de la pente maximum dans la maille en valeur absolue
77 
78  do ij=iip2+1,ip1jm
79  dxqmax(ij)=pente_max*min(adxqu(ij-1),adxqu(ij))
80  enddo
81 
82  do ij=iip1+iip1,ip1jm,iip1
83  dxqmax(ij-iim)=dxqmax(ij)
84  enddo
85 
86 c calcul de la pente avec limitation
87 
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 c 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
101 
102  DO ij=1,ip1jmp1
103  sx(ij,l) = dxq(ij,l)*sm(ij,l)
104  ENDDO
105 
106  ENDDO
107 
108  RETURN
109  END
!$Header iip2
Definition: paramet.h:14
!$Header llmm1 INTEGER ip1jmp1
Definition: paramet.h:14
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
subroutine limx(s0, sx, sm, pente_max)
Definition: limx.F:5
!$Header llmm1 INTEGER ip1jm
Definition: paramet.h:14
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
c c zjulian c cym CALL iim cym klev iim
Definition: ini_bilKP_ave.h:24