source: trunk/LMDZ.GENERIC/libf/dyn3d/tracvl.F @ 773

Last change on this file since 773 was 253, checked in by emillour, 13 years ago

Generic GCM

  • Massive update to version 0.7

EM+RW

File size: 3.3 KB
Line 
1      SUBROUTINE tracvl(numvanle,iapp_tracvl,nq,pbaru,pbarv ,
2     *                    p, masse , q, iapptrac, iadv1, teta, pk  )
3c
4c     Auteur :  F. Hourdin
5c
6c
7ccc   ..   Modif. P. Le Van  ( 20/12/97 )  ...
8c                 F. Codron     (10/99)
9
10c
11      IMPLICIT NONE
12c
13#include "dimensions.h"
14#include "paramet.h"
15#include "comconst.h"
16#include "comvert.h"
17#include "comgeom.h"
18
19c     .... Arguments  ....
20c
21      INTEGER numvanle, nq, iapp_tracvl, iapptrac, iadv1
22
23      REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
24      REAL q(ip1jmp1,llm,nq),masse(ip1jmp1,llm)
25      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
26      REAL pk(ip1jmp1,llm)
27
28c     ....  var. locales  .....
29c
30      REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm)
31      REAL massem(ip1jmp1,llm),zdp(ip1jmp1)
32
33      REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
34
35
36      INTEGER iadvtr, numvan
37      INTEGER ij,l,iq
38      REAL zdpmin, zdpmax
39      EXTERNAL  minmax
40      SAVE iadvtr, massem, pbaruc, pbarvc, numvan
41      DATA iadvtr/0/
42
43      numvan = numvanle
44
45      IF(iadvtr.EQ.0) THEN
46         CALL initial0(ijp1llm,pbaruc)
47         CALL initial0(ijmllm,pbarvc)
48      ENDIF
49
50c   accumulation des flux de masse horizontaux
51      DO l=1,llm
52         DO ij = 1,ip1jmp1
53            pbaruc(ij,l) = pbaruc(ij,l) + pbaru(ij,l)
54         ENDDO
55         DO ij = 1,ip1jm
56            pbarvc(ij,l) = pbarvc(ij,l) + pbarv(ij,l)
57         ENDDO
58      ENDDO
59
60c   selection de la masse instantannee des mailles avant le transport.
61      IF(iadvtr.EQ.0) THEN
62
63         CALL SCOPY(ip1jmp1*llm,masse,1,massem,1)
64ccc         CALL filtreg ( massem ,jjp1, llm,-2, 2, .TRUE., 1 )
65c
66      ENDIF
67
68      iadvtr   = iadvtr+1
69      iapptrac = iadvtr
70
71
72c   Test pour savoir si on advecte a ce pas de temps
73      IF ( iadvtr.EQ.iapp_tracvl ) THEN
74!      print*,'WARNING: ALL TRACER ADVECTION HALTED IN TRACVL.F'
75!         if(2.eq.1)then
76
77
78cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
79cc
80
81c   traitement des flux de masse avant advection.
82c     1. calcul de w
83c     2. groupement des mailles pres du pole.
84
85        CALL groupe( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
86
87
88c  test sur l'eventuelle creation de valeurs negatives de la masse
89         DO l=1,llm-1
90            DO ij = iip2+1,ip1jm
91              zdp(ij) = pbarug(ij-1,l) - pbarug(ij,l)
92     s                  - pbarvg(ij-iip1,l) + pbarvg(ij,l)
93     s                  + wg(ij,l+1) - wg(ij,l)
94            ENDDO
95            CALL SCOPY( jjm -1 ,zdp(iip1+iip1),iip1,zdp(iip2),iip1 )
96            DO ij = iip2,ip1jm
97               zdp(ij)= zdp(ij)*dtvr/ massem(ij,l)
98            ENDDO
99
100
101            CALL minmax ( ip1jm-iip1, zdp(iip2), zdpmin,zdpmax )
102
103            IF(MAX(ABS(zdpmin),ABS(zdpmax)).GT.0.5) THEN
104            PRINT*,'WARNING DP/P l=',l,'  MIN:',zdpmin,
105     s        '   MAX:', zdpmax
106            ENDIF
107
108         ENDDO
109
110c   Advection proprement dite.
111c
112c   test sur iadv1 pour le schema de vapeur d'eau
113c
114         IF (numvanle.EQ.1.AND.iadv1.EQ.4) THEN
115           CALL vlspltqs( q(1,1,1), 2., massem, wg ,
116     *                 pbarug,pbarvg,dtvr,p,pk,teta )
117           numvan = 2
118         ENDIF
119
120         DO iq = numvan, nq
121          CALL vlsplt( q(1,1,iq), 2. ,massem,wg,pbarug,pbarvg,dtvr )
122         ENDDO
123         iadvtr=0
124
125c   on reinitialise a zero les flux de masse cumules.
126
127      ENDIF ! if iadvtr.EQ.iapp_tracvl
128
129      RETURN
130      END
Note: See TracBrowser for help on using the repository browser.