/[lmdze]/trunk/Sources/dyn3d/Vlsplt/vlz.f
ViewVC logotype

Annotation of /trunk/Sources/dyn3d/Vlsplt/vlz.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (hide annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 2 months ago) by guez
Original Path: trunk/dyn3d/Vlsplt/vlz.f
File size: 2874 byte(s)
Changed all ".f90" suffixes to ".f".
1 guez 31 SUBROUTINE vlz(q,pente_max,masse,w)
2     !
3     ! Auteurs: P.Le Van, F.Hourdin, F.Forget
4     !
5     ! *************************************************************
6     ! Shema d'advection " pseudo amont " .
7     ! ****************************************************************
8     ! q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg ....
9     ! dq sont des arguments de sortie pour le s-pg ....
10     !
11     !
12     ! ----------------------------------------------------------------
13     use dimens_m
14     use paramet_m
15     use comconst
16 guez 66 use disvert_m
17 guez 57 use conf_gcm_m
18 guez 31 IMPLICIT NONE
19     !
20     !
21     !
22     ! Arguments:
23     ! ----------
24     REAL masse(ip1jmp1,llm),pente_max
25     REAL q(ip1jmp1,llm)
26     REAL w(ip1jmp1,llm+1)
27     !
28     ! Local
29     ! ---------
30     !
31     INTEGER i,ij,l,j,ii
32     !
33     REAL wq(ip1jmp1,llm+1),newmasse
34    
35     REAL dzq(ip1jmp1,llm),dzqw(ip1jmp1,llm),adzqw(ip1jmp1,llm),dzqmax
36     REAL sigw
37    
38     LOGICAL testcpu
39     SAVE testcpu
40    
41     REAL temps0,temps1,temps2,temps3,temps4,temps5,second
42     SAVE temps0,temps1,temps2,temps3,temps4,temps5
43     REAL SSUM
44    
45     DATA testcpu/.false./
46     DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
47    
48     ! On oriente tout dans le sens de la pression c'est a dire dans le
49     ! sens de W
50    
51     DO l=2,llm
52     DO ij=1,ip1jmp1
53     dzqw(ij,l)=q(ij,l-1)-q(ij,l)
54     adzqw(ij,l)=abs(dzqw(ij,l))
55     ENDDO
56     ENDDO
57    
58     DO l=2,llm-1
59     DO ij=1,ip1jmp1
60     IF(dzqw(ij,l)*dzqw(ij,l+1).gt.0.) THEN
61     dzq(ij,l)=0.5*(dzqw(ij,l)+dzqw(ij,l+1))
62     ELSE
63     dzq(ij,l)=0.
64     ENDIF
65     dzqmax=pente_max*min(adzqw(ij,l),adzqw(ij,l+1))
66     dzq(ij,l)=sign(min(abs(dzq(ij,l)),dzqmax),dzq(ij,l))
67     ENDDO
68     ENDDO
69    
70     DO ij=1,ip1jmp1
71     dzq(ij,1)=0.
72     dzq(ij,llm)=0.
73     ENDDO
74    
75     ! ---------------------------------------------------------------
76     ! .... calcul des termes d'advection verticale .......
77     ! ---------------------------------------------------------------
78    
79     ! calcul de - d( q * w )/ d(sigma) qu'on ajoute a dq pour
80     ! calculer dq
81    
82     DO l = 1,llm-1
83     do ij = 1,ip1jmp1
84     IF(w(ij,l+1).gt.0.) THEN
85     sigw=w(ij,l+1)/masse(ij,l+1)
86     wq(ij,l+1)=w(ij,l+1)*(q(ij,l+1)+0.5*(1.-sigw)*dzq(ij,l+1))
87     ELSE
88     sigw=w(ij,l+1)/masse(ij,l)
89     wq(ij,l+1)=w(ij,l+1)*(q(ij,l)-0.5*(1.+sigw)*dzq(ij,l))
90     ENDIF
91     ENDDO
92     ENDDO
93    
94     DO ij=1,ip1jmp1
95     wq(ij,llm+1)=0.
96     wq(ij,1)=0.
97     ENDDO
98    
99     DO l=1,llm
100     DO ij=1,ip1jmp1
101     newmasse=masse(ij,l)+w(ij,l+1)-w(ij,l)
102     q(ij,l)=(q(ij,l)*masse(ij,l)+wq(ij,l+1)-wq(ij,l)) &
103     & /newmasse
104     masse(ij,l)=newmasse
105     ENDDO
106     ENDDO
107    
108     END

  ViewVC Help
Powered by ViewVC 1.1.21