source: trunk/LMDZ.GENERIC/libf/dyn3d/amont.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: 3.3 KB
Line 
1      SUBROUTINE amont (nq,iq,q,w, pbaru, pbarv,dq)
2
3      USE logic_mod, ONLY: forward,leapf
4
5      IMPLICIT NONE
6
7c=======================================================================
8c
9c   Auteur:  P. Le Van / F.Forget
10c   -------
11c
12c   ********************************************************************
13c   Transport d'un traceur q par shema amont 3D
14c   ********************************************************************
15c     nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
16c     dq               sont des arguments de sortie pour le s-pg ....
17c
18c=======================================================================
19
20
21#include "dimensions.h"
22#include "paramet.h"
23
24c   Arguments:
25c   ----------
26      INTEGER nq,iq 
27      REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm)
28      REAL q(ip1jmp1,llm,nq), dq( ip1jmp1,llm,nq )
29      REAL w(ip1jmp1,llm)
30
31c   Local:
32c   ------
33
34      INTEGER   l,ij
35
36      REAL qbyv( ip1jm,llm ), qbxu( ip1jmp1,llm )
37      REAL ww
38      REAL dqh( ip1jmp1,llm)
39
40      EXTERNAL     convflu
41
42c     ----------------------------------------------------------------
43c     --        calcul transport horiz. pour  dq                    --
44c     -                                                              -
45c     -         shema ' amont '                                      -
46c     ----------------------------------------------------------------
47c
48      IF( iq.GT.2 )   THEN
49       DO   l = 1, llm
50        DO ij = 1, ip1jmp1
51          dq(ij,l,iq) = 0.
52        ENDDO
53       ENDDO
54            RETURN
55      ENDIF
56 
57c
58      IF( forward.OR.leapf )   THEN
59 
60        DO 10 l = 1, llm
61 
62        DO 6  ij     = iip2, ip1jm - 1
63           IF( pbaru(ij,l).GT.0.  )   THEN
64            qbxu( ij,l ) =  pbaru( ij,l )  * q(  ij  ,l,iq)
65           ELSE
66            qbxu( ij,l ) =  pbaru( ij,l )  * q(ij +1 ,l,iq)
67           ENDIF
68   6    CONTINUE
69 
70c     ..... correction  pour  qbxu(iip1,j,l)   .....
71c     ...   qbxu(iip1,j,l)= qbxu(1,j,l)  ...
72 
73CDIR$ IVDEP
74        DO  7   ij   = iip1 +iip1, ip1jm, iip1
75        qbxu( ij,l ) = qbxu( ij - iim, l )
76   7    CONTINUE
77 
78        DO  8  ij     = 1, ip1jm
79           IF( pbarv(ij,l).GT.0.  )   THEN
80            qbyv( ij,l ) =  pbarv( ij,l )  * q(ij+iip1, l,iq)
81           ELSE
82            qbyv( ij,l ) =  pbarv( ij,l )  * q(   ij  , l,iq)
83           ENDIF
84   8    CONTINUE
85c
86  10    CONTINUE
87 
88c     stockage dans  dqh de la convergence horiz.du flux d'humidite  .
89c     -------------------------------------------------------------
90c
91                  CALL convflu(qbxu, qbyv, llm, dqh )
92
93
94c ---------------------------------------------------------------
95c   .... calcul des termes d'advection vertic.pour q. Shema amont
96c ---------------------------------------------------------------
97
98c     calcul de  - d( q   * w )    qu'on ajoute a  dqh pour calculer dq
99c
100
101       DO 20 l = 1,llmm1
102c
103         DO 11 ij = 1,ip1jmp1
104           IF( w(ij,l+1).LT.0.  )   THEN
105            ww  =   - w( ij,l+1 ) * q( ij,  l  ,iq)
106           ELSE
107            ww  =   - w( ij,l+1 ) * q( ij, l +1,iq)
108           ENDIF
109
110          dq (ij, l ,iq ) = dqh(ij, l )   -  ww
111          dqh(ij,l+1    ) = dqh(ij,l+1)   +  ww
112  11     CONTINUE
113c
114  20   CONTINUE
115
116c
117c       special dq (ij,llm) (qui n'a pas ete rempli ! )
118c
119        DO  ij = 1,ip1jmp1
120          dq( ij,llm,iq ) = dqh( ij,llm )
121        END DO
122           
123      END IF
124
125      RETURN
126      END
Note: See TracBrowser for help on using the repository browser.