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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 254 - (hide annotations)
Mon Feb 5 10:39:38 2018 UTC (6 years, 3 months ago) by guez
File size: 2614 byte(s)
Move Sources/* to root directory.
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 guez 157 REAL masse(ip1jmp1,llm)
25     real, intent(in):: pente_max
26 guez 31 REAL q(ip1jmp1,llm)
27     REAL w(ip1jmp1,llm+1)
28     !
29     ! Local
30     ! ---------
31     !
32 guez 157 INTEGER ij,l
33 guez 31 !
34     REAL wq(ip1jmp1,llm+1),newmasse
35    
36     REAL dzq(ip1jmp1,llm),dzqw(ip1jmp1,llm),adzqw(ip1jmp1,llm),dzqmax
37     REAL sigw
38    
39     ! On oriente tout dans le sens de la pression c'est a dire dans le
40     ! sens de W
41    
42     DO l=2,llm
43     DO ij=1,ip1jmp1
44     dzqw(ij,l)=q(ij,l-1)-q(ij,l)
45     adzqw(ij,l)=abs(dzqw(ij,l))
46     ENDDO
47     ENDDO
48    
49     DO l=2,llm-1
50     DO ij=1,ip1jmp1
51     IF(dzqw(ij,l)*dzqw(ij,l+1).gt.0.) THEN
52     dzq(ij,l)=0.5*(dzqw(ij,l)+dzqw(ij,l+1))
53     ELSE
54     dzq(ij,l)=0.
55     ENDIF
56     dzqmax=pente_max*min(adzqw(ij,l),adzqw(ij,l+1))
57     dzq(ij,l)=sign(min(abs(dzq(ij,l)),dzqmax),dzq(ij,l))
58     ENDDO
59     ENDDO
60    
61     DO ij=1,ip1jmp1
62     dzq(ij,1)=0.
63     dzq(ij,llm)=0.
64     ENDDO
65    
66     ! ---------------------------------------------------------------
67     ! .... calcul des termes d'advection verticale .......
68     ! ---------------------------------------------------------------
69    
70     ! calcul de - d( q * w )/ d(sigma) qu'on ajoute a dq pour
71     ! calculer dq
72    
73     DO l = 1,llm-1
74     do ij = 1,ip1jmp1
75     IF(w(ij,l+1).gt.0.) THEN
76     sigw=w(ij,l+1)/masse(ij,l+1)
77     wq(ij,l+1)=w(ij,l+1)*(q(ij,l+1)+0.5*(1.-sigw)*dzq(ij,l+1))
78     ELSE
79     sigw=w(ij,l+1)/masse(ij,l)
80     wq(ij,l+1)=w(ij,l+1)*(q(ij,l)-0.5*(1.+sigw)*dzq(ij,l))
81     ENDIF
82     ENDDO
83     ENDDO
84    
85     DO ij=1,ip1jmp1
86     wq(ij,llm+1)=0.
87     wq(ij,1)=0.
88     ENDDO
89    
90     DO l=1,llm
91     DO ij=1,ip1jmp1
92     newmasse=masse(ij,l)+w(ij,l+1)-w(ij,l)
93     q(ij,l)=(q(ij,l)*masse(ij,l)+wq(ij,l+1)-wq(ij,l)) &
94     & /newmasse
95     masse(ij,l)=newmasse
96     ENDDO
97     ENDDO
98    
99     END

  ViewVC Help
Powered by ViewVC 1.1.21