source: trunk/LMDZ.GENERIC/libf/dyn3d/integrd.F @ 1422

Last change on this file since 1422 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

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      USE comvert_mod, ONLY: ap,bp
6      USE logic_mod, ONLY: leapf
7      USE serre_mod, ONLY: alphax
8      USE temps_mod, ONLY: dt
9
10      IMPLICIT NONE
11
12
13c=======================================================================
14cccccccccccccccccccccccccccccccccccccccccccc
15c
16!Mars       VERSION MARTIENNE de integrd.F
17c
18c   ..   modification de l'integration de  q   . 26/04/94 ..
19c   ....   Si shema Van-leer pour advection de q , on n'integre pas  q
20c      car q  a ete deja integre   dans "tracvl.F" appele par vanleer   ...
21cccccccccccccccccccccccccccccccccccccccccccc
22
23c
24c   Auteur:  P. Le Van
25c   -------
26c
27c   objet:
28c   ------
29c
30c   Incrementation des tendances dynamiques
31c
32c=======================================================================
33c-----------------------------------------------------------------------
34c   Declarations:
35c   -------------
36
37#include "dimensions.h"
38#include "paramet.h"
39#include "comgeom.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.