source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/dyn/massdair_p.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 8.4 KB
Line 
1      SUBROUTINE massdair_p( p, masse )
2      USE parallel_lmdz
3c
4c *********************************************************************
5c       ....  Calcule la masse d'air  dans chaque maille   ....
6c *********************************************************************
7c
8c    Auteurs : P. Le Van , Fr. Hourdin  .
9c   ..........
10c
11c  ..    p                      est  un argum. d'entree pour le s-pg ...
12c  ..  masse                    est un  argum.de sortie pour le s-pg ...
13c     
14c  ....  p est defini aux interfaces des llm couches   .....
15c
16      IMPLICIT NONE
17c
18!-----------------------------------------------------------------------
19!   INCLUDE 'dimensions.h'
20!
21!   dimensions.h contient les dimensions du modele
22!   ndm est tel que iim=2**ndm
23!-----------------------------------------------------------------------
24
25      INTEGER iim,jjm,llm,ndm
26
27      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
28
29!-----------------------------------------------------------------------
30!
31! $Header$
32!
33!
34!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
35!                 veillez  n'utiliser que des ! pour les commentaires
36!                 et  bien positionner les & des lignes de continuation
37!                 (les placer en colonne 6 et en colonne 73)
38!
39!
40!-----------------------------------------------------------------------
41!   INCLUDE 'paramet.h'
42
43      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
44      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
45      INTEGER  ijmllm,mvar
46      INTEGER jcfil,jcfllm
47
48      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
49     &    ,jjp1=jjm+1-1/jjm)
50      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
51      PARAMETER( kftd  = iim/2 -ndm )
52      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
53      PARAMETER( ip1jmi1= ip1jm - iip1 )
54      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
55      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
56      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
57
58!-----------------------------------------------------------------------
59!
60! $Id: comconst.h 1437 2010-09-30 08:29:10Z emillour $
61!
62!-----------------------------------------------------------------------
63! INCLUDE comconst.h
64
65      COMMON/comconsti/im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl,          &
66     &                 iflag_top_bound,mode_top_bound
67      COMMON/comconstr/dtvr,daysec,                                     &
68     & pi,dtphys,dtdiss,rad,r,kappa,cotot,unsim,g,omeg                  &
69     & ,dissip_fac_mid,dissip_fac_up,dissip_deltaz,dissip_hdelta        &
70     & ,dissip_pupstart  ,tau_top_bound,                                &
71     & daylen,molmass, ihf
72      COMMON/cpdetvenus/cpp,nu_venus,t0_venus
73
74      INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl
75      REAL dtvr ! dynamical time step (in s)
76      REAL daysec !length (in s) of a standard day
77      REAL pi    ! something like 3.14159....
78      REAL dtphys ! (s) time step for the physics
79      REAL dtdiss ! (s) time step for the dissipation
80      REAL rad ! (m) radius of the planet
81      REAL r ! Reduced Gas constant r=R/mu
82             ! with R=8.31.. J.K-1.mol-1, mu: mol mass of atmosphere (kg/mol)
83      REAL cpp   ! Cp
84      REAL kappa ! kappa=R/Cp
85      REAL cotot
86      REAL unsim ! = 1./iim
87      REAL g ! (m/s2) gravity
88      REAL omeg ! (rad/s) rotation rate of the planet
89! Dissipation factors, for Earth model:
90      REAL dissip_factz,dissip_zref !dissip_deltaz
91! Dissipation factors, for other planets:
92      REAL dissip_fac_mid,dissip_fac_up,dissip_deltaz,dissip_hdelta
93      REAL dissip_pupstart
94      INTEGER iflag_top_bound,mode_top_bound
95      REAL tau_top_bound
96      REAL daylen ! length of solar day, in 'standard' day length
97      REAL molmass ! (g/mol) molar mass of the atmosphere
98
99      REAL nu_venus,t0_venus ! coeffs needed for Cp(T), Venus atmosphere
100      REAL ihf  ! (W/m2) intrinsic heat flux for giant planets
101
102
103!-----------------------------------------------------------------------
104!
105! $Header$
106!
107!CDK comgeom
108      COMMON/comgeom/                                                   &
109     & cu(ip1jmp1),cv(ip1jm),unscu2(ip1jmp1),unscv2(ip1jm),             &
110     & aire(ip1jmp1),airesurg(ip1jmp1),aireu(ip1jmp1),                  &
111     & airev(ip1jm),unsaire(ip1jmp1),apoln,apols,                       &
112     & unsairez(ip1jm),airuscv2(ip1jm),airvscu2(ip1jm),                 &
113     & aireij1(ip1jmp1),aireij2(ip1jmp1),aireij3(ip1jmp1),              &
114     & aireij4(ip1jmp1),alpha1(ip1jmp1),alpha2(ip1jmp1),                &
115     & alpha3(ip1jmp1),alpha4(ip1jmp1),alpha1p2(ip1jmp1),               &
116     & alpha1p4(ip1jmp1),alpha2p3(ip1jmp1),alpha3p4(ip1jmp1),           &
117     & fext(ip1jm),constang(ip1jmp1),rlatu(jjp1),rlatv(jjm),            &
118     & rlonu(iip1),rlonv(iip1),cuvsurcv(ip1jm),cvsurcuv(ip1jm),         &
119     & cvusurcu(ip1jmp1),cusurcvu(ip1jmp1),cuvscvgam1(ip1jm),           &
120     & cuvscvgam2(ip1jm),cvuscugam1(ip1jmp1),                           &
121     & cvuscugam2(ip1jmp1),cvscuvgam(ip1jm),cuscvugam(ip1jmp1),         &
122     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2,                 &
123     & unsair_gam1(ip1jmp1),unsair_gam2(ip1jmp1),unsairz_gam(ip1jm),    &
124     & aivscu2gam(ip1jm),aiuscv2gam(ip1jm),xprimu(iip1),xprimv(iip1)
125
126!
127        REAL                                                            &
128     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,unsaire,apoln     ,&
129     & apols,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4,&
130     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 ,&
131     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     ,&
132     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1,unsapolnga2&
133     & ,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2,unsairz_gam    ,&
134     & aivscu2gam ,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu,cusurcvu,xprimu&
135     & , xprimv
136!
137c
138c  .....   arguments  ....
139c
140      REAL p(ip1jmp1,llmp1), masse(ip1jmp1,llm)
141
142c   ....  Variables locales  .....
143
144      INTEGER l,ij
145      INTEGER ijb,ije
146      REAL massemoyn, massemoys
147
148      REAL SSUM
149      EXTERNAL SSUM
150c
151c
152c   Methode pour calculer massebx et masseby .
153c   ----------------------------------------
154c
155c    A chaque point scalaire P (i,j) est affecte 4 coefficients d'aires
156c       alpha1(i,j)  calcule  au point ( i+1/4,j-1/4 )
157c       alpha2(i,j)  calcule  au point ( i+1/4,j+1/4 )
158c       alpha3(i,j)  calcule  au point ( i-1/4,j+1/4 )
159c       alpha4(i,j)  calcule  au point ( i-1/4,j-1/4 )
160c
161c    Avec  alpha1(i,j) = aire(i+1/4,j-1/4)/ aire(i,j)       
162c
163c    N.B .  Pour plus de details, voir s-pg  ...  iniconst ...
164c
165c
166c
167c   alpha4 .         . alpha1    . alpha4
168c    (i,j)             (i,j)       (i+1,j)
169c
170c             P .        U .          . P
171c           (i,j)       (i,j)         (i+1,j)
172c
173c   alpha3 .         . alpha2    .alpha3 
174c    (i,j)              (i,j)     (i+1,j)
175c
176c             V .        Z .          . V
177c           (i,j)
178c
179c   alpha4 .         . alpha1    .alpha4
180c   (i,j+1)            (i,j+1)   (i+1,j+1) 
181c
182c             P .        U .          . P
183c          (i,j+1)                    (i+1,j+1)
184c
185c
186c
187c                       On  a :
188c
189c    massebx(i,j) = masse(i  ,j) * ( alpha1(i  ,j) + alpha2(i,j))   +
190c                   masse(i+1,j) * ( alpha3(i+1,j) + alpha4(i+1,j) )
191c     localise  au point  ... U (i,j) ...
192c
193c    masseby(i,j) = masse(i,j  ) * ( alpha2(i,j  ) + alpha3(i,j  )  +
194c                   masse(i,j+1) * ( alpha1(i,j+1) + alpha4(i,j+1) 
195c     localise  au point  ... V (i,j) ...
196c
197c
198c=======================================================================
199
200     
201
202     
203      ijb=ij_begin-iip1
204      ije=ij_end+2*iip1
205     
206      if (pole_nord) ijb=ij_begin
207      if (pole_sud)  ije=ij_end
208
209c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
210      DO   100    l = 1 , llm
211c
212        DO    ij     = ijb, ije
213         masse(ij,l) = airesurg(ij) * ( p(ij,l) - p(ij,l+1) )
214        ENDDO
215c
216        DO   ij = ijb, ije,iip1
217         masse(ij+ iim,l) = masse(ij,l)
218        ENDDO
219c
220c       DO    ij     = 1,  iim
221c        masse(   ij   ,l) = masse(   ij   ,l) * aire(  ij    )
222c        masse(ij+ip1jm,l) = masse(ij+ip1jm,l) * aire(ij+ip1jm) 
223c       ENDDO
224c        massemoyn         = SSUM(iim,masse(   1   ,l),1)/ apoln
225c        massemoys         = SSUM(iim,masse(ip1jm+1,l),1)/ apols
226c       DO    ij     = 1, iip1
227c        masse(   ij   ,l )    = massemoyn
228c        masse(ij+ip1jm,l )    = massemoys
229c       ENDDO
230       
231100   CONTINUE
232c$OMP END DO NOWAIT
233c
234      RETURN
235      END
Note: See TracBrowser for help on using the repository browser.