/[lmdze]/trunk/dyn3d/advect.f
ViewVC logotype

Annotation of /trunk/dyn3d/advect.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 3 months ago) by guez
Original Path: trunk/libf/dyn3d/advect.f
File size: 4709 byte(s)
Initial import
1 guez 3 !
2     ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/advect.F,v 1.1.1.1 2004/05/19 12:53:06 lmdzadmin Exp $
3     !
4     SUBROUTINE advect(ucov,vcov,teta,w,massebx,masseby,du,dv,dteta)
5    
6     use dimens_m
7     use paramet_m
8     use comconst
9     use comvert
10     use logic
11     use comgeom
12     use ener
13     IMPLICIT NONE
14     c=======================================================================
15     c
16     c Auteurs: P. Le Van , Fr. Hourdin .
17     c -------
18     c
19     c Objet:
20     c ------
21     c
22     c *************************************************************
23     c .... calcul des termes d'advection vertic.pour u,v,teta,q ...
24     c *************************************************************
25     c ces termes sont ajoutes a du,dv,dteta et dq .
26     c Modif F.Forget 03/94 : on retire q de advect
27     c
28     c=======================================================================
29     c-----------------------------------------------------------------------
30     c Declarations:
31     c -------------
32    
33    
34     c Arguments:
35     c ----------
36    
37     REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
38     REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),w(ip1jmp1,llm)
39     REAL dv(ip1jm,llm),du(ip1jmp1,llm),dteta(ip1jmp1,llm)
40    
41     c Local:
42     c ------
43    
44     REAL uav(ip1jmp1,llm),vav(ip1jm,llm),wsur2(ip1jmp1)
45     REAL unsaire2(ip1jmp1), ge(ip1jmp1)
46     REAL deuxjour, ww, gt, uu, vv
47    
48     INTEGER ij,l
49    
50     REAL SSUM
51    
52     c-----------------------------------------------------------------------
53     c 2. Calculs preliminaires:
54     c -------------------------
55    
56     IF (conser) THEN
57     deuxjour = 2. * daysec
58    
59     DO 1 ij = 1, ip1jmp1
60     unsaire2(ij) = unsaire(ij) * unsaire(ij)
61     1 CONTINUE
62     END IF
63    
64    
65     c------------------ -yy ----------------------------------------------
66     c . Calcul de u
67    
68     DO l=1,llm
69     DO ij = iip2, ip1jmp1
70     uav(ij,l) = 0.25 * ( ucov(ij,l) + ucov(ij-iip1,l) )
71     ENDDO
72     DO ij = iip2, ip1jm
73     uav(ij,l) = uav(ij,l) + uav(ij+iip1,l)
74     ENDDO
75     DO ij = 1, iip1
76     uav(ij ,l) = 0.
77     uav(ip1jm+ij,l) = 0.
78     ENDDO
79     ENDDO
80    
81     c------------------ -xx ----------------------------------------------
82     c . Calcul de v
83    
84     DO l=1,llm
85     DO ij = 2, ip1jm
86     vav(ij,l) = 0.25 * ( vcov(ij,l) + vcov(ij-1,l) )
87     ENDDO
88     DO ij = 1,ip1jm,iip1
89     vav(ij,l) = vav(ij+iim,l)
90     ENDDO
91     DO ij = 1, ip1jm-1
92     vav(ij,l) = vav(ij,l) + vav(ij+1,l)
93     ENDDO
94     DO ij = 1, ip1jm, iip1
95     vav(ij+iim,l) = vav(ij,l)
96     ENDDO
97     ENDDO
98    
99     c-----------------------------------------------------------------------
100    
101     c
102     DO 20 l = 1, llmm1
103    
104    
105     c ...... calcul de - w/2. au niveau l+1 .......
106    
107     DO 5 ij = 1, ip1jmp1
108     wsur2( ij ) = - 0.5 * w( ij,l+1 )
109     5 CONTINUE
110    
111    
112     c ..................... calcul pour du ..................
113    
114     DO 6 ij = iip2 ,ip1jm-1
115     ww = wsur2 ( ij ) + wsur2( ij+1 )
116     uu = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) )
117     du(ij,l) = du(ij,l) - ww * ( uu - uav(ij, l ) )/massebx(ij, l )
118     du(ij,l+1)= du(ij,l+1) + ww * ( uu - uav(ij,l+1) )/massebx(ij,l+1)
119     6 CONTINUE
120    
121     c ..... correction pour du(iip1,j,l) ........
122     c ..... du(iip1,j,l)= du(1,j,l) .....
123    
124     CDIR$ IVDEP
125     DO 7 ij = iip1 +iip1, ip1jm, iip1
126     du( ij, l ) = du( ij -iim, l )
127     du( ij,l+1 ) = du( ij -iim,l+1 )
128     7 CONTINUE
129    
130     c ................. calcul pour dv .....................
131    
132     DO 8 ij = 1, ip1jm
133     ww = wsur2( ij+iip1 ) + wsur2( ij )
134     vv = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) )
135     dv(ij,l) = dv(ij, l ) - ww * (vv - vav(ij, l ) )/masseby(ij, l )
136     dv(ij,l+1)= dv(ij,l+1) + ww * (vv - vav(ij,l+1) )/masseby(ij,l+1)
137     8 CONTINUE
138    
139     c
140    
141     c ............................................................
142     c ............... calcul pour dh ...................
143     c ............................................................
144    
145     c ---z
146     c calcul de - d( teta * w ) qu'on ajoute a dh
147     c ...............
148    
149     DO 15 ij = 1, ip1jmp1
150     ww = wsur2(ij) * (teta(ij,l) + teta(ij,l+1) )
151     dteta(ij, l ) = dteta(ij, l ) - ww
152     dteta(ij,l+1) = dteta(ij,l+1) + ww
153     15 CONTINUE
154    
155     IF( conser) THEN
156     DO 17 ij = 1,ip1jmp1
157     ge(ij) = wsur2(ij) * wsur2(ij) * unsaire2(ij)
158     17 CONTINUE
159     gt = SSUM( ip1jmp1,ge,1 )
160     gtot(l) = deuxjour * SQRT( gt/ip1jmp1 )
161     END IF
162    
163     20 CONTINUE
164    
165     RETURN
166     END

  ViewVC Help
Powered by ViewVC 1.1.21