/[lmdze]/trunk/libf/dyn3d/integrd.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/integrd.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (show annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/dyn3d/integrd.f
File size: 5908 byte(s)
Initial import
1 !
2 ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/integrd.F,v 1.1.1.1 2004/05/19 12:53:05 lmdzadmin Exp $
3 !
4 SUBROUTINE integrd
5 $ ( nq,vcovm1,ucovm1,tetam1,psm1,massem1,
6 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis,finvmaold )
7
8 use dimens_m
9 use paramet_m
10 use comconst
11 use comvert
12 use logic
13 use comgeom
14 use serre
15 use temps
16 use advtrac_m
17 use pression_m, only: pression
18
19 IMPLICIT NONE
20
21
22 c=======================================================================
23 c
24 c Auteur: P. Le Van
25 c -------
26 c
27 c objet:
28 c ------
29 c
30 c Incrementation des tendances dynamiques
31 c
32 c=======================================================================
33 c-----------------------------------------------------------------------
34 c Declarations:
35 c -------------
36
37
38 c Arguments:
39 c ----------
40
41 INTEGER nq
42
43 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
44 REAL q(ip1jmp1,llm,nq)
45 REAL ps(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1)
46
47 REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
48 REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1),massem1(ip1jmp1,llm)
49
50 REAL dv(ip1jm,llm),du(ip1jmp1,llm)
51 REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
52 REAL dq(ip1jmp1,llm,nq), finvmaold(ip1jmp1,llm)
53
54 c Local:
55 c ------
56
57 REAL vscr( ip1jm ),uscr( ip1jmp1 ),hscr( ip1jmp1 ),pscr(ip1jmp1)
58 REAL massescr( ip1jmp1,llm ), finvmasse(ip1jmp1,llm)
59 REAL p(ip1jmp1,llmp1)
60 REAL tpn,tps,tppn(iim),tpps(iim)
61 REAL qpn,qps,qppn(iim),qpps(iim)
62 REAL deltap( ip1jmp1,llm )
63
64 INTEGER l,ij,iq
65
66 REAL SSUM
67
68 c-----------------------------------------------------------------------
69
70 DO l = 1,llm
71 DO ij = 1,iip1
72 ucov( ij , l) = 0.
73 ucov( ij +ip1jm, l) = 0.
74 uscr( ij ) = 0.
75 uscr( ij +ip1jm ) = 0.
76 ENDDO
77 ENDDO
78
79
80 c ............ integration de ps ..............
81
82 CALL SCOPY(ip1jmp1*llm, masse, 1, massescr, 1)
83
84 DO 2 ij = 1,ip1jmp1
85 pscr (ij) = ps(ij)
86 ps (ij) = psm1(ij) + dt * dp(ij)
87 2 CONTINUE
88 c
89 DO ij = 1,ip1jmp1
90 IF( ps(ij).LT.0. ) THEN
91 PRINT *,' Au point ij = ',ij, ' , pression sol neg. ', ps(ij)
92 STOP 'integrd'
93 ENDIF
94 ENDDO
95 c
96 DO ij = 1, iim
97 tppn(ij) = aire( ij ) * ps( ij )
98 tpps(ij) = aire(ij+ip1jm) * ps(ij+ip1jm)
99 ENDDO
100 tpn = SSUM(iim,tppn,1)/apoln
101 tps = SSUM(iim,tpps,1)/apols
102 DO ij = 1, iip1
103 ps( ij ) = tpn
104 ps(ij+ip1jm) = tps
105 ENDDO
106 c
107 c ... Calcul de la nouvelle masse d'air au dernier temps integre t+1 ...
108 c
109 CALL pression ( ip1jmp1, ap, bp, ps, p )
110 CALL massdair ( p , masse )
111
112 CALL SCOPY( ijp1llm , masse, 1, finvmasse, 1 )
113 CALL filtreg( finvmasse, jjp1, llm, -2, 2, .TRUE., 1 )
114 c
115
116 c ............ integration de ucov, vcov, h ..............
117
118 DO 10 l = 1,llm
119
120 DO 4 ij = iip2,ip1jm
121 uscr( ij ) = ucov( ij,l )
122 ucov( ij,l ) = ucovm1( ij,l ) + dt * du( ij,l )
123 4 CONTINUE
124
125 DO 5 ij = 1,ip1jm
126 vscr( ij ) = vcov( ij,l )
127 vcov( ij,l ) = vcovm1( ij,l ) + dt * dv( ij,l )
128 5 CONTINUE
129
130 DO 6 ij = 1,ip1jmp1
131 hscr( ij ) = teta(ij,l)
132 teta ( ij,l ) = tetam1(ij,l) * massem1(ij,l) / masse(ij,l)
133 $ + dt * dteta(ij,l) / masse(ij,l)
134 6 CONTINUE
135
136 c .... Calcul de la valeur moyenne, unique aux poles pour teta ......
137 c
138 c
139 DO ij = 1, iim
140 tppn(ij) = aire( ij ) * teta( ij ,l)
141 tpps(ij) = aire(ij+ip1jm) * teta(ij+ip1jm,l)
142 ENDDO
143 tpn = SSUM(iim,tppn,1)/apoln
144 tps = SSUM(iim,tpps,1)/apols
145
146 DO ij = 1, iip1
147 teta( ij ,l) = tpn
148 teta(ij+ip1jm,l) = tps
149 ENDDO
150 c
151
152 IF(leapf) THEN
153 CALL SCOPY ( ip1jmp1, uscr(1), 1, ucovm1(1, l), 1 )
154 CALL SCOPY ( ip1jm, vscr(1), 1, vcovm1(1, l), 1 )
155 CALL SCOPY ( ip1jmp1, hscr(1), 1, tetam1(1, l), 1 )
156 END IF
157
158 10 CONTINUE
159
160
161 c
162 c ....... integration de q ......
163 c
164 c$$$ IF( iadv(1).NE.3.AND.iadv(2).NE.3 ) THEN
165 c$$$c
166 c$$$ IF( forward. OR . leapf ) THEN
167 c$$$ DO iq = 1,2
168 c$$$ DO l = 1,llm
169 c$$$ DO ij = 1,ip1jmp1
170 c$$$ q(ij,l,iq) = ( q(ij,l,iq)*finvmaold(ij,l) + dtvr *dq(ij,l,iq) )/
171 c$$$ $ finvmasse(ij,l)
172 c$$$ ENDDO
173 c$$$ ENDDO
174 c$$$ ENDDO
175 c$$$ ELSE
176 c$$$ DO iq = 1,2
177 c$$$ DO l = 1,llm
178 c$$$ DO ij = 1,ip1jmp1
179 c$$$ q( ij,l,iq ) = q( ij,l,iq ) * finvmaold(ij,l) / finvmasse(ij,l)
180 c$$$ ENDDO
181 c$$$ ENDDO
182 c$$$ ENDDO
183 c$$$
184 c$$$ END IF
185 c$$$c
186 c$$$ ENDIF
187
188 DO l = 1, llm
189 DO ij = 1, ip1jmp1
190 deltap(ij,l) = p(ij,l) - p(ij,l+1)
191 ENDDO
192 ENDDO
193
194 CALL qminimum( q, nq, deltap )
195 c
196 c ..... Calcul de la valeur moyenne, unique aux poles pour q .....
197 c
198
199 DO iq = 1, nq
200 DO l = 1, llm
201
202 DO ij = 1, iim
203 qppn(ij) = aire( ij ) * q( ij ,l,iq)
204 qpps(ij) = aire(ij+ip1jm) * q(ij+ip1jm,l,iq)
205 ENDDO
206 qpn = SSUM(iim,qppn,1)/apoln
207 qps = SSUM(iim,qpps,1)/apols
208
209 DO ij = 1, iip1
210 q( ij ,l,iq) = qpn
211 q(ij+ip1jm,l,iq) = qps
212 ENDDO
213
214 ENDDO
215 ENDDO
216
217
218 CALL SCOPY( ijp1llm , finvmasse, 1, finvmaold, 1 )
219 c
220 c
221 c ..... FIN de l'integration de q .......
222
223 15 continue
224
225 c .................................................................
226
227
228 IF( leapf ) THEN
229 CALL SCOPY ( ip1jmp1 , pscr , 1, psm1 , 1 )
230 CALL SCOPY ( ip1jmp1*llm, massescr, 1, massem1, 1 )
231 END IF
232
233 RETURN
234 END

  ViewVC Help
Powered by ViewVC 1.1.21