source: LMDZ4/branches/LMDZ4_par_0/libf/dyn3dpar/integrd_p.F @ 1229

Last change on this file since 1229 was 630, checked in by Laurent Fairhead, 20 years ago

Import d'une version parallele de la dynamique YM
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE integrd_p
5     $  (  nq,vcovm1,ucovm1,tetam1,psm1,massem1,
6     $     dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis,finvmaold )
7      USE parallel
8      IMPLICIT NONE
9
10
11c=======================================================================
12c
13c   Auteur:  P. Le Van
14c   -------
15c
16c   objet:
17c   ------
18c
19c   Incrementation des tendances dynamiques
20c
21c=======================================================================
22c-----------------------------------------------------------------------
23c   Declarations:
24c   -------------
25
26#include "dimensions.h"
27#include "paramet.h"
28#include "comconst.h"
29#include "comgeom.h"
30#include "comvert.h"
31#include "logic.h"
32#include "temps.h"
33#include "serre.h"
34#include "advtrac.h"
35
36c   Arguments:
37c   ----------
38
39      INTEGER nq
40
41      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
42      REAL q(ip1jmp1,llm,nq)
43      REAL ps(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1)
44
45      REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
46      REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1),massem1(ip1jmp1,llm)
47
48      REAL dv(ip1jm,llm),du(ip1jmp1,llm)
49      REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
50      REAL dq(ip1jmp1,llm,nq), finvmaold(ip1jmp1,llm)
51
52c   Local:
53c   ------
54
55      REAL vscr( ip1jm ),uscr( ip1jmp1 ),hscr( ip1jmp1 ),pscr(ip1jmp1)
56      REAL massescr( ip1jmp1,llm ), finvmasse(ip1jmp1,llm)
57      REAL p(ip1jmp1,llmp1)
58      REAL tpn,tps,tppn(iim),tpps(iim)
59      REAL qpn,qps,qppn(iim),qpps(iim)
60      REAL deltap( ip1jmp1,llm )
61
62      INTEGER  l,ij,iq
63
64      EXTERNAL  filtreg,massdair,pression
65      EXTERNAL  SCOPY
66      REAL SSUM
67      EXTERNAL SSUM
68      INTEGER ijb,ije,jjb,jje
69c-----------------------------------------------------------------------
70      if (pole_nord) THEN
71     
72        DO  l = 1,llm
73          DO  ij = 1,iip1
74           ucov(    ij    , l) = 0.
75           uscr(     ij      ) = 0.
76           ENDDO
77        ENDDO
78     
79      ENDIF
80
81      if (pole_sud) THEN
82     
83        DO  l = 1,llm
84          DO  ij = 1,iip1
85           ucov( ij +ip1jm, l) = 0.
86           uscr( ij +ip1jm   ) = 0.
87          ENDDO
88        ENDDO
89     
90      ENDIF
91
92c    ............    integration  de       ps         ..............
93
94c      CALL SCOPY(ip1jmp1*llm, masse, 1, massescr, 1)
95
96      ijb=ij_begin
97      ije=ij_end
98      massescr(ijb:ije,:)=masse(ijb:ije,:)
99     
100      DO 2 ij = ijb,ije
101       pscr (ij)    = ps(ij)
102       ps (ij)      = psm1(ij) + dt * dp(ij)
103   2  CONTINUE
104c
105      DO ij = ijb,ije
106        IF( ps(ij).LT.0. ) THEN
107         PRINT*,' Au point ij = ',ij, ' , pression sol neg. ', ps(ij)
108         STOP' dans integrd'
109        ENDIF
110      ENDDO
111c
112      if (pole_nord) THEN
113     
114        DO  ij    = 1, iim
115         tppn(ij) = aire(   ij   ) * ps(  ij    )
116        ENDDO
117         tpn      = SSUM(iim,tppn,1)/apoln
118        DO ij   = 1, iip1
119         ps(   ij   )  = tpn
120        ENDDO
121     
122      ENDIF
123     
124      if (pole_sud) THEN
125     
126        DO  ij    = 1, iim
127         tpps(ij) = aire(ij+ip1jm) * ps(ij+ip1jm)
128        ENDDO
129         tps      = SSUM(iim,tpps,1)/apols
130        DO ij   = 1, iip1
131         ps(ij+ip1jm)  = tps
132        ENDDO
133     
134      ENDIF
135c
136c  ... Calcul  de la nouvelle masse d'air au dernier temps integre t+1 ...
137c
138      CALL pression_p ( ip1jmp1, ap, bp, ps, p )
139      CALL massdair_p (     p  , masse         )
140
141c      CALL   SCOPY( ijp1llm  , masse, 1, finvmasse,  1      )
142      ijb=ij_begin
143      ije=ij_end
144      finvmasse(ijb:ije,:)=masse(ijb:ije,:)
145
146      jjb=jj_begin
147      jje=jj_end
148      CALL filtreg_p( finvmasse,jjb,jje, jjp1, llm, -2, 2, .TRUE., 1  )
149c
150
151c    ............   integration  de  ucov, vcov,  h     ..............
152
153      DO 10 l = 1,llm
154     
155      ijb=ij_begin
156      ije=ij_end
157      if (pole_nord) ijb=ij_begin+iip1
158      if (pole_sud)  ije=ij_end-iip1
159     
160      DO 4 ij = ijb,ije
161      uscr( ij )   =  ucov( ij,l )
162      ucov( ij,l ) = ucovm1( ij,l ) + dt * du( ij,l )
163   4  CONTINUE
164
165      ijb=ij_begin
166      ije=ij_end
167      if (pole_sud)  ije=ij_end-iip1
168     
169      DO 5 ij = ijb,ije
170      vscr( ij )   =  vcov( ij,l )
171      vcov( ij,l ) = vcovm1( ij,l ) + dt * dv( ij,l )
172   5  CONTINUE
173     
174      ijb=ij_begin
175      ije=ij_end
176     
177      DO 6 ij = ijb,ije
178      hscr( ij )    =  teta(ij,l)
179      teta ( ij,l ) = tetam1(ij,l) *  massem1(ij,l) / masse(ij,l)
180     $                + dt * dteta(ij,l) / masse(ij,l)
181   6  CONTINUE
182
183c   ....  Calcul de la valeur moyenne, unique  aux poles pour  teta    ......
184c
185c
186      IF (pole_nord) THEN
187       
188        DO  ij   = 1, iim
189          tppn(ij) = aire(   ij   ) * teta(  ij    ,l)
190        ENDDO
191          tpn      = SSUM(iim,tppn,1)/apoln
192
193        DO ij   = 1, iip1
194          teta(   ij   ,l)  = tpn
195        ENDDO
196     
197      ENDIF
198     
199      IF (pole_sud) THEN
200       
201        DO  ij   = 1, iim
202          tpps(ij) = aire(ij+ip1jm) * teta(ij+ip1jm,l)
203        ENDDO
204          tps      = SSUM(iim,tpps,1)/apols
205
206        DO ij   = 1, iip1
207          teta(ij+ip1jm,l)  = tps
208        ENDDO
209     
210      ENDIF
211c
212
213      IF(leapf)  THEN
214c         CALL SCOPY ( ip1jmp1, uscr(1), 1, ucovm1(1, l), 1 )
215c         CALL SCOPY (   ip1jm, vscr(1), 1, vcovm1(1, l), 1 )
216c         CALL SCOPY ( ip1jmp1, hscr(1), 1, tetam1(1, l), 1 )
217        ijb=ij_begin
218        ije=ij_end
219        ucovm1(ijb:ije,l)=uscr(ijb:ije)
220        tetam1(ijb:ije,l)=hscr(ijb:ije)
221        if (pole_sud) ije=ij_end-iip1
222        vcovm1(ijb:ije,l)=vscr(ijb:ije)
223     
224      END IF
225
226  10  CONTINUE
227
228
229c
230c   .......  integration de   q   ......
231c
232      ijb=ij_begin
233      ije=ij_end
234     
235
236         DO l = 1, llm
237          DO ij = ijb, ije
238           deltap(ij,l) =  p(ij,l) - p(ij,l+1)
239          ENDDO
240         ENDDO
241
242         CALL qminimum_p( q, nq, deltap )
243c
244c    .....  Calcul de la valeur moyenne, unique  aux poles pour  q .....
245c
246
247      IF (pole_nord) THEN
248     
249        DO iq = 1, nq
250          DO l = 1, llm
251 
252             DO ij = 1, iim
253               qppn(ij) = aire(   ij   ) * q(   ij   ,l,iq)
254             ENDDO
255               qpn  =  SSUM(iim,qppn,1)/apoln
256     
257             DO ij = 1, iip1
258               q(   ij   ,l,iq)  = qpn
259             ENDDO   
260 
261          ENDDO
262        ENDDO
263     
264      ENDIF
265
266      IF (pole_sud) THEN
267     
268        DO iq = 1, nq
269          DO l = 1, llm
270 
271             DO ij = 1, iim
272               qpps(ij) = aire(ij+ip1jm) * q(ij+ip1jm,l,iq)
273             ENDDO
274               qps  =  SSUM(iim,qpps,1)/apols
275 
276             DO ij = 1, iip1
277               q(ij+ip1jm,l,iq)  = qps
278             ENDDO   
279 
280          ENDDO
281        ENDDO
282     
283      ENDIF
284
285c         CALL  SCOPY( ijp1llm , finvmasse, 1, finvmaold, 1 )
286     
287      finvmaold(ijb:ije,:)=finvmasse(ijb:ije,:)       
288c
289c
290c     .....   FIN  de l'integration  de   q    .......
291
29215    continue
293
294c    .................................................................
295
296
297      IF( leapf )  THEN
298c       CALL SCOPY (    ip1jmp1 ,  pscr   , 1,   psm1  , 1 )
299c       CALL SCOPY ( ip1jmp1*llm, massescr, 1,  massem1, 1 )
300        psm1(ijb:ije)=pscr(ijb:ije)
301        massem1(ijb:ije,:)=massescr(ijb:ije,:)
302      END IF
303
304      RETURN
305      END
Note: See TracBrowser for help on using the repository browser.