source: LMDZ.3.3/trunk/libf/dyn3d/vanleer.F @ 346

Last change on this file since 346 was 344, checked in by lmdz, 23 years ago

Inclusion des modifs de D. Hauglustaine pour la version 1 de INCA
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.2 KB
Line 
1      SUBROUTINE vanleer(numvanle,
2     *                   iapp_tracvl,
3     *                   nq,
4     *                   q,
5     *                   pbaru,
6     *                   pbarv,
7     *                   p,
8     *                   masse,
9     *                   dq,
10     *                   iadv1,
11     *                   teta,
12#ifdef INCA_CH4
13     *                   flxw,
14     *                   pk,
15     *                   mmt_adj,
16     *                   adv_flg)
17#else
18     *                   pk)
19#endif
20c
21      IMPLICIT NONE
22c
23c     Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron 
24c
25c     F.Codron (10/99) : ajout humidite specifique pour eau vapeur
26c=======================================================================
27c
28c       Shema de  Van Leer
29c
30c=======================================================================
31
32
33#include "dimensions.h"
34#include "paramet.h"
35#include "comconst.h"
36
37c   Arguments:
38c   ----------
39      INTEGER nq, numvanle, iapp_tracvl, iadv1
40      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm),masse(ip1jmp1,llm)
41      REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nq),dq( ip1jmp1,llm,nq )
42      REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm)
43#ifdef INCA_CH4
44      INTEGER, PARAMETER :: nprath=1
45      INTEGER            :: adv_flg(nq)
46      REAL               :: mmt_adj(iip1,jjp1,llm,nprath)
47      REAL               :: flxw(ip1jmp1,llm)
48#endif
49c  ..................................................................
50c
51c  .. dq n'est utilise et dimensionne que pour l'eau  vapeur et liqu.
52c
53c     numvanle est le numero du premier traceur qui appelle le
54c       shema de Van-Leer  (  1<=  numvanle <=  nqmx )  .
55c     si numvanle=1, iadv1=3 si Van-Leer seul, iadv1=4 si
56c     Van-Leer+humidite specifique.
57c  ..................................................................
58c
59c   Local:
60c   ------
61
62      EXTERNAL  tracvl,minmaxq, qminimum
63      INTEGER ij,l, iq, iapptrac
64      REAL finmasse(ip1jmp1,llm), dtvrtrac
65cc
66
67
68c .. Si numvanle = 1 , l'eau vapeur et l'eau liq. ont le shema Van-Leer .
69c
70      IF( numvanle.EQ.1 ) THEN
71
72        DO iq = 1, nq
73          DO l = 1, llm
74            DO ij = 1, ip1jmp1
75             dq(ij,l,iq ) = 0.
76            ENDDO
77          ENDDO
78        ENDDO
79
80        CALL SCOPY( 2 * ijp1llm, q, 1, dq, 1 )
81
82c  test des valeurs minmax
83cc        CALL minmaxq(q(1,1,1),1.e33,-1.e33,'Eau vapeur (a) ')
84cc        CALL minmaxq(q(1,1,2),1.e33,-1.e33,'Eau liquide(a) ')
85      ENDIF
86
87c   advection
88
89      CALL tracvl( numvanle,
90     .             iapp_tracvl,
91     .             nq,
92     .             pbaru,
93     .             pbarv,
94     .             p,
95     .             masse,
96     .             q,
97     .             iapptrac,
98     .             iadv1,
99     .             teta,
100#ifdef INCA_CH4
101     .             flxw,
102     .             pk,
103     .             mmt_adj,
104     .             adv_flg)
105#else
106     .             pk)
107#endif
108
109      IF( numvanle.EQ.1 ) THEN
110c
111
112         IF( iapptrac.EQ.iapp_tracvl ) THEN
113c
114cc          CALL minmaxq(q(1,1,1),1.e33,-1.e33,'Eau vapeur     ')
115cc          CALL minmaxq(q(1,1,2),1.e33,-1.e33,'Eau liquide    ')
116
117cc     ....  Calcul  de deltap  qu'on stocke dans finmasse   ...
118c
119          DO l = 1, llm
120           DO ij = 1, ip1jmp1
121             finmasse(ij,l) =  p(ij,l) - p(ij,l+1)
122           ENDDO
123          ENDDO
124
125          CALL qminimum( q, 2, finmasse )
126
127          CALL SCOPY   ( ip1jmp1*llm, masse, 1, finmasse,       1 )
128          CALL filtreg ( finmasse ,  jjp1,  llm, -2, 2, .TRUE., 1 )
129c
130c   *****  Calcul de dq pour l'eau , pour le passer a la physique ******
131c   ********************************************************************
132c
133          dtvrtrac = iapp_tracvl * dtvr
134c
135           DO iq = 1 , 2
136            DO l = 1 , llm
137             DO ij = 1,ip1jmp1
138             dq(ij,l,iq) = ( q(ij,l,iq) - dq(ij,l,iq) ) * finmasse(ij,l)
139     *                               /  dtvrtrac
140             ENDDO
141            ENDDO
142           ENDDO
143c
144         ELSE
145           DO iq = 1 , 2
146           DO l  = 1, llm
147             DO ij = 1,ip1jmp1
148              dq(ij,l,iq)  = 0.
149             ENDDO
150           ENDDO
151           ENDDO
152
153         ENDIF
154c
155
156      ENDIF
157
158c
159c  ... On appelle  qminimum uniquement  pour l'eau vapeur et liquide  ..
160 
161      RETURN
162      END
Note: See TracBrowser for help on using the repository browser.