source: LMDZ.3.3/tags/IPSL-CM4_LJ29/libf/dyn3d/vanleer.F @ 494

Last change on this file since 494 was 494, checked in by (none), 20 years ago

This commit was manufactured by cvs2svn to create tag
'IPSL-CM4_LJ29'.

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