source: trunk/LMDZ.MARS/libf/dyn3d/integrd.F @ 937

Last change on this file since 937 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 4.9 KB
Line 
1      SUBROUTINE integrd
2     $  (  nq,vcovm1,ucovm1,tetam1,psm1,massem1,
3     $     dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis,finvmaold )
4
5      IMPLICIT NONE
6
7
8c=======================================================================
9cccccccccccccccccccccccccccccccccccccccccccc
10c
11!Mars       VERSION MARTIENNE de integrd.F
12c
13c   ..   modification de l'integration de  q   . 26/04/94 ..
14c   ....   Si shema Van-leer pour advection de q , on n'integre pas  q
15c      car q  a ete deja integre   dans "tracvl.F" appele par vanleer   ...
16cccccccccccccccccccccccccccccccccccccccccccc
17
18c
19c   Auteur:  P. Le Van
20c   -------
21c
22c   objet:
23c   ------
24c
25c   Incrementation des tendances dynamiques
26c
27c=======================================================================
28c-----------------------------------------------------------------------
29c   Declarations:
30c   -------------
31
32#include "dimensions.h"
33#include "paramet.h"
34#include "comconst.h"
35#include "comgeom.h"
36#include "comvert.h"
37#include "logic.h"
38#include "temps.h"
39#include "serre.h"
40
41c   Arguments:
42c   ----------
43
44      INTEGER nq
45
46      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
47      REAL q(ip1jmp1,llm,nq)
48      REAL ps(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1)
49
50      REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
51      REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1),massem1(ip1jmp1,llm)
52
53      REAL dv(ip1jm,llm),du(ip1jmp1,llm)
54      REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
55      REAL dq(ip1jmp1,llm,nq), finvmaold(ip1jmp1,llm)
56
57c   Local:
58c   ------
59
60      REAL vscr( ip1jm ),uscr( ip1jmp1 ),hscr( ip1jmp1 ),pscr(ip1jmp1)
61      REAL massescr( ip1jmp1,llm ), finvmasse(ip1jmp1,llm)
62      REAL p(ip1jmp1,llmp1)
63      REAL tpn,tps,tppn(iim),tpps(iim)
64      REAL qpn,qps,qppn(iim),qpps(iim)
65      REAL deltap( ip1jmp1,llm )
66
67      INTEGER  l,ij,iq
68
69      EXTERNAL  filtreg,massdair,pression
70      EXTERNAL  SCOPY
71      REAL SSUM
72      EXTERNAL SSUM
73
74c-----------------------------------------------------------------------
75
76      DO  l = 1,llm
77        DO  ij = 1,iip1
78         ucov(    ij    , l) = 0.
79         ucov( ij +ip1jm, l) = 0.
80         uscr(     ij      ) = 0.
81         uscr( ij +ip1jm   ) = 0.
82        ENDDO
83      ENDDO
84
85
86c    ............    integration  de       ps         ..............
87
88      CALL SCOPY(ip1jmp1*llm, masse, 1, massescr, 1)
89
90      DO 2 ij = 1,ip1jmp1
91       pscr (ij)    = ps(ij)
92       ps (ij)      = psm1(ij) + dt * dp(ij)
93
94   2  CONTINUE
95c
96      DO ij = 1,ip1jmp1
97        IF( ps(ij).LT.0. ) THEN
98         PRINT*,' Au point ij = ',ij, ' , pression sol neg. ', ps(ij)
99         write(*,*)'psm1(ij)=',psm1(ij),' dp(ij)=',dp(ij),
100     &             'dp(ij)*dt=',dp(ij)*dt
101         STOP' dans integrd'
102        ENDIF
103      ENDDO
104c
105      IF( alphax.NE.0. )   THEN
106         DO  ij    = 1, iim
107          tppn(ij) = aire(   ij   ) * ps(  ij    )
108          tpps(ij) = aire(ij+ip1jm) * ps(ij+ip1jm)
109         ENDDO
110          tpn      = SSUM(iim,tppn,1)/apoln
111          tps      = SSUM(iim,tpps,1)/apols
112         DO ij   = 1, iip1
113          ps(   ij   )  = tpn
114          ps(ij+ip1jm)  = tps
115         ENDDO
116      ENDIF
117c
118c  ... Calcul  de la nouvelle masse d'air au dernier temps integre t+1 ...
119c
120      CALL pression ( ip1jmp1, ap, bp, ps, p )
121      CALL massdair (     p  , masse         )
122
123      CALL SCOPY( ijp1llm  , masse, 1, finvmasse,  1      )
124      CALL filtreg( finvmasse, jjp1, llm, -2, 2, .TRUE., 1  )
125c
126
127c    ............   integration  de  ucov, vcov,  h     ..............
128
129      DO 10 l = 1,llm
130
131      DO 4 ij = iip2,ip1jm
132      uscr( ij )   =  ucov( ij,l )
133      ucov( ij,l ) = ucovm1( ij,l ) + dt * du( ij,l )
134   4  CONTINUE
135
136      DO 5 ij = 1,ip1jm
137      vscr( ij )   =  vcov( ij,l )
138      vcov( ij,l ) = vcovm1( ij,l ) + dt * dv( ij,l )
139   5  CONTINUE
140
141      DO 6 ij = 1,ip1jmp1
142      hscr( ij )    =  teta(ij,l)
143      teta ( ij,l ) = tetam1(ij,l) *  massem1(ij,l) / masse(ij,l)
144     $                + dt * dteta(ij,l) / masse(ij,l)
145   6  CONTINUE
146
147c   ....  Calcul de la valeur moyenne, unique  aux poles pour  teta    ......
148c
149c
150      DO  ij   = 1, iim
151        tppn(ij) = aire(   ij   ) * teta(  ij    ,l)
152        tpps(ij) = aire(ij+ip1jm) * teta(ij+ip1jm,l)
153      ENDDO
154        tpn      = SSUM(iim,tppn,1)/apoln
155        tps      = SSUM(iim,tpps,1)/apols
156
157      DO ij   = 1, iip1
158        teta(   ij   ,l)  = tpn
159        teta(ij+ip1jm,l)  = tps
160      ENDDO
161c
162
163      IF(leapf)  THEN
164         CALL SCOPY ( ip1jmp1, uscr(1), 1, ucovm1(1, l), 1 )
165         CALL SCOPY (   ip1jm, vscr(1), 1, vcovm1(1, l), 1 )
166         CALL SCOPY ( ip1jmp1, hscr(1), 1, tetam1(1, l), 1 )
167      END IF
168
169  10  CONTINUE
170
171
172c
173c   .......  integration de   q   ......
174c
175c
176c     .....   FIN  de l'integration  de   q    .......
177
178c    .................................................................
179
180
181      IF( leapf )  THEN
182         CALL SCOPY (    ip1jmp1 ,  pscr   , 1,   psm1  , 1 )
183         CALL SCOPY ( ip1jmp1*llm, massescr, 1,  massem1, 1 )
184      END IF
185
186      RETURN
187      END
Note: See TracBrowser for help on using the repository browser.