source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/dyn3d_common/flumass.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 6.7 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE flumass (massebx,masseby, vcont, ucont, pbaru, pbarv )
5
6      IMPLICIT NONE
7
8c=======================================================================
9c
10c   Auteurs:  P. Le Van, F. Hourdin  .
11c   -------
12c
13c   Objet:
14c   ------
15c
16c *********************************************************************
17c     .... calcul du flux de masse  aux niveaux s ......
18c *********************************************************************
19c   massebx,masseby,vcont et ucont sont des argum. d'entree pour le s-pg .
20c       pbaru  et pbarv            sont des argum.de sortie pour le s-pg .
21c
22c=======================================================================
23
24
25!-----------------------------------------------------------------------
26!   INCLUDE 'dimensions.h'
27!
28!   dimensions.h contient les dimensions du modele
29!   ndm est tel que iim=2**ndm
30!-----------------------------------------------------------------------
31
32      INTEGER iim,jjm,llm,ndm
33
34      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
35
36!-----------------------------------------------------------------------
37!
38! $Header$
39!
40!
41!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
42!                 veillez  n'utiliser que des ! pour les commentaires
43!                 et  bien positionner les & des lignes de continuation
44!                 (les placer en colonne 6 et en colonne 73)
45!
46!
47!-----------------------------------------------------------------------
48!   INCLUDE 'paramet.h'
49
50      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
51      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
52      INTEGER  ijmllm,mvar
53      INTEGER jcfil,jcfllm
54
55      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
56     &    ,jjp1=jjm+1-1/jjm)
57      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
58      PARAMETER( kftd  = iim/2 -ndm )
59      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
60      PARAMETER( ip1jmi1= ip1jm - iip1 )
61      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
62      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
63      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
64
65!-----------------------------------------------------------------------
66!
67! $Header$
68!
69!CDK comgeom
70      COMMON/comgeom/                                                   &
71     & cu(ip1jmp1),cv(ip1jm),unscu2(ip1jmp1),unscv2(ip1jm),             &
72     & aire(ip1jmp1),airesurg(ip1jmp1),aireu(ip1jmp1),                  &
73     & airev(ip1jm),unsaire(ip1jmp1),apoln,apols,                       &
74     & unsairez(ip1jm),airuscv2(ip1jm),airvscu2(ip1jm),                 &
75     & aireij1(ip1jmp1),aireij2(ip1jmp1),aireij3(ip1jmp1),              &
76     & aireij4(ip1jmp1),alpha1(ip1jmp1),alpha2(ip1jmp1),                &
77     & alpha3(ip1jmp1),alpha4(ip1jmp1),alpha1p2(ip1jmp1),               &
78     & alpha1p4(ip1jmp1),alpha2p3(ip1jmp1),alpha3p4(ip1jmp1),           &
79     & fext(ip1jm),constang(ip1jmp1),rlatu(jjp1),rlatv(jjm),            &
80     & rlonu(iip1),rlonv(iip1),cuvsurcv(ip1jm),cvsurcuv(ip1jm),         &
81     & cvusurcu(ip1jmp1),cusurcvu(ip1jmp1),cuvscvgam1(ip1jm),           &
82     & cuvscvgam2(ip1jm),cvuscugam1(ip1jmp1),                           &
83     & cvuscugam2(ip1jmp1),cvscuvgam(ip1jm),cuscvugam(ip1jmp1),         &
84     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2,                 &
85     & unsair_gam1(ip1jmp1),unsair_gam2(ip1jmp1),unsairz_gam(ip1jm),    &
86     & aivscu2gam(ip1jm),aiuscv2gam(ip1jm),xprimu(iip1),xprimv(iip1)
87
88!
89        REAL                                                            &
90     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,unsaire,apoln     ,&
91     & apols,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4,&
92     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 ,&
93     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     ,&
94     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1,unsapolnga2&
95     & ,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2,unsairz_gam    ,&
96     & aivscu2gam ,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu,cusurcvu,xprimu&
97     & , xprimv
98!
99
100      REAL massebx( ip1jmp1,llm ),masseby( ip1jm,llm ) ,
101     * vcont( ip1jm,llm ),ucont( ip1jmp1,llm ),pbaru( ip1jmp1,llm ),
102     * pbarv( ip1jm,llm )
103
104      REAL apbarun( iip1 ),apbarus( iip1 )
105
106      REAL sairen,saireun,saires,saireus,ctn,cts,ctn0,cts0
107      INTEGER  l,ij,i
108
109      REAL       SSUM
110
111
112      DO  5 l = 1,llm
113
114      DO  1 ij = iip2,ip1jm
115      pbaru( ij,l ) = massebx( ij,l ) * ucont( ij,l )
116   1  CONTINUE
117
118      DO 3 ij = 1,ip1jm
119      pbarv( ij,l ) = masseby( ij,l ) * vcont( ij,l )
120   3  CONTINUE
121
122   5  CONTINUE
123
124c    ................................................................
125c     calcul de la composante du flux de masse en x aux poles .......
126c    ................................................................
127c     par la resolution d'1 systeme de 2 equations .
128
129c     la premiere equat.decrivant le calcul de la divergence en 1 point i
130c     du pole,ce calcul etant itere de i=1 a i=im .
131c                 c.a.d   ,
132c     ( ( 0.5*pbaru(i)-0.5*pbaru(i-1) - pbarv(i))/aire(i)   =
133c                                           - somme de ( pbarv(n) )/aire pole
134
135c     l'autre equat.specifiant que la moyenne du flux de masse au pole est =0.
136c     c.a.d    somme de pbaru(n)*aire locale(n) = 0.
137
138c     on en revient ainsi a determiner la constante additive commune aux pbaru
139c     qui representait pbaru(0,j,l) dans l'equat.du calcul de la diverg.au pt
140c     i=1 .
141c     i variant de 1 a im
142c     n variant de 1 a im
143
144      sairen = SSUM( iim,  aire(   1     ), 1 )
145      saireun= SSUM( iim, aireu(   1     ), 1 )
146      saires = SSUM( iim,  aire( ip1jm+1 ), 1 )
147      saireus= SSUM( iim, aireu( ip1jm+1 ), 1 )
148
149      DO 20 l = 1,llm
150
151      ctn =  SSUM( iim, pbarv(    1     ,l),  1 )/ sairen
152      cts =  SSUM( iim, pbarv(ip1jmi1+ 1,l),  1 )/ saires
153
154      pbaru(    1   ,l )=   pbarv(    1     ,l ) - ctn * aire(    1    )
155      pbaru( ip1jm+1,l )= - pbarv( ip1jmi1+1,l ) + cts * aire( ip1jm+1 )
156
157      DO 11 i = 2,iim
158      pbaru(    i    ,l ) = pbaru(   i - 1   ,l )    +
159     *                      pbarv(    i      ,l ) - ctn * aire(   i    )
160
161      pbaru( i+ ip1jm,l ) = pbaru( i+ ip1jm-1,l )    -
162     *                      pbarv( i+ ip1jmi1,l ) + cts * aire(i+ ip1jm)
163  11  CONTINUE
164      DO 12 i = 1,iim
165      apbarun(i) = aireu(    i   ) * pbaru(   i    , l)
166      apbarus(i) = aireu(i +ip1jm) * pbaru(i +ip1jm, l)
167  12  CONTINUE
168      ctn0 = -SSUM( iim,apbarun,1 )/saireun
169      cts0 = -SSUM( iim,apbarus,1 )/saireus
170      DO 14 i = 1,iim
171      pbaru(   i    , l) = 2. * ( pbaru(   i    , l) + ctn0 )
172      pbaru(i+ ip1jm, l) = 2. * ( pbaru(i +ip1jm, l) + cts0 )
173  14  CONTINUE
174
175      pbaru(   iip1 ,l ) = pbaru(    1    ,l )
176      pbaru( ip1jmp1,l ) = pbaru( ip1jm +1,l )
177  20  CONTINUE
178
179      RETURN
180      END
Note: See TracBrowser for help on using the repository browser.