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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (show annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 2 months ago) by guez
File size: 2874 byte(s)
Changed all ".f90" suffixes to ".f".
1 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 use disvert_m
17 use conf_gcm_m
18 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