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

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 6.2 KB
Line 
1      SUBROUTINE enercin_p ( vcov, ucov, vcont, ucont, ecin )
2      USE parallel_lmdz
3      IMPLICIT NONE
4
5c=======================================================================
6c
7c   Auteur: P. Le Van
8c   -------
9c
10c   Objet:
11c   ------
12c
13c *********************************************************************
14c .. calcul de l'energie cinetique aux niveaux s  ......
15c *********************************************************************
16c  vcov, vcont, ucov et ucont sont des arguments d'entree pour le s-pg .
17c  ecin         est  un  argument de sortie pour le s-pg
18c
19c=======================================================================
20
21!-----------------------------------------------------------------------
22!   INCLUDE 'dimensions.h'
23!
24!   dimensions.h contient les dimensions du modele
25!   ndm est tel que iim=2**ndm
26!-----------------------------------------------------------------------
27
28      INTEGER iim,jjm,llm,ndm
29
30      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
31
32!-----------------------------------------------------------------------
33!
34! $Header$
35!
36!
37!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
38!                 veillez  n'utiliser que des ! pour les commentaires
39!                 et  bien positionner les & des lignes de continuation
40!                 (les placer en colonne 6 et en colonne 73)
41!
42!
43!-----------------------------------------------------------------------
44!   INCLUDE 'paramet.h'
45
46      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
47      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
48      INTEGER  ijmllm,mvar
49      INTEGER jcfil,jcfllm
50
51      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
52     &    ,jjp1=jjm+1-1/jjm)
53      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
54      PARAMETER( kftd  = iim/2 -ndm )
55      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
56      PARAMETER( ip1jmi1= ip1jm - iip1 )
57      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
58      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
59      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
60
61!-----------------------------------------------------------------------
62!
63! $Header$
64!
65!CDK comgeom
66      COMMON/comgeom/                                                   &
67     & cu(ip1jmp1),cv(ip1jm),unscu2(ip1jmp1),unscv2(ip1jm),             &
68     & aire(ip1jmp1),airesurg(ip1jmp1),aireu(ip1jmp1),                  &
69     & airev(ip1jm),unsaire(ip1jmp1),apoln,apols,                       &
70     & unsairez(ip1jm),airuscv2(ip1jm),airvscu2(ip1jm),                 &
71     & aireij1(ip1jmp1),aireij2(ip1jmp1),aireij3(ip1jmp1),              &
72     & aireij4(ip1jmp1),alpha1(ip1jmp1),alpha2(ip1jmp1),                &
73     & alpha3(ip1jmp1),alpha4(ip1jmp1),alpha1p2(ip1jmp1),               &
74     & alpha1p4(ip1jmp1),alpha2p3(ip1jmp1),alpha3p4(ip1jmp1),           &
75     & fext(ip1jm),constang(ip1jmp1),rlatu(jjp1),rlatv(jjm),            &
76     & rlonu(iip1),rlonv(iip1),cuvsurcv(ip1jm),cvsurcuv(ip1jm),         &
77     & cvusurcu(ip1jmp1),cusurcvu(ip1jmp1),cuvscvgam1(ip1jm),           &
78     & cuvscvgam2(ip1jm),cvuscugam1(ip1jmp1),                           &
79     & cvuscugam2(ip1jmp1),cvscuvgam(ip1jm),cuscvugam(ip1jmp1),         &
80     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2,                 &
81     & unsair_gam1(ip1jmp1),unsair_gam2(ip1jmp1),unsairz_gam(ip1jm),    &
82     & aivscu2gam(ip1jm),aiuscv2gam(ip1jm),xprimu(iip1),xprimv(iip1)
83
84!
85        REAL                                                            &
86     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,unsaire,apoln     ,&
87     & apols,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4,&
88     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 ,&
89     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     ,&
90     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1,unsapolnga2&
91     & ,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2,unsairz_gam    ,&
92     & aivscu2gam ,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu,cusurcvu,xprimu&
93     & , xprimv
94!
95
96      REAL vcov( ip1jm,llm ),vcont( ip1jm,llm ),
97     * ucov( ip1jmp1,llm ),ucont( ip1jmp1,llm ),ecin( ip1jmp1,llm )
98
99      REAL ecinni( iip1 ),ecinsi( iip1 )
100
101      REAL ecinpn, ecinps
102      INTEGER     l,ij,i,ijb,ije
103
104      EXTERNAL    SSUM
105      REAL        SSUM
106
107
108
109c                 . V
110c                i,j-1
111
112c      alpha4 .       . alpha1
113
114
115c        U .      . P     . U
116c       i-1,j    i,j      i,j
117
118c      alpha3 .       . alpha2
119
120
121c                 . V
122c                i,j
123
124c   
125c  L'energie cinetique au point scalaire P(i,j) ,autre que les poles, est :
126c       Ecin = 0.5 * U(i-1,j)**2 *( alpha3 + alpha4 )  +
127c              0.5 * U(i  ,j)**2 *( alpha1 + alpha2 )  +
128c              0.5 * V(i,j-1)**2 *( alpha1 + alpha4 )  +
129c              0.5 * V(i,  j)**2 *( alpha2 + alpha3 )
130
131c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
132      DO 5 l = 1,llm
133     
134      ijb=ij_begin
135      ije=ij_end+iip1
136     
137      IF (pole_nord) ijb=ij_begin+iip1
138      IF (pole_sud)  ije=ij_end-iip1
139     
140      DO 1  ij = ijb, ije -1
141      ecin( ij+1, l )  =    0.5  *
142     * (   ucov( ij   ,l ) * ucont( ij   ,l ) * alpha3p4( ij +1 )   +
143     *     ucov( ij+1 ,l ) * ucont( ij+1 ,l ) * alpha1p2( ij +1 )   +
144     *     vcov(ij-iim,l ) * vcont(ij-iim,l ) * alpha1p4( ij +1 )   +
145     *     vcov( ij+ 1,l ) * vcont( ij+ 1,l ) * alpha2p3( ij +1 )   )
146   1  CONTINUE
147
148c    ... correction pour  ecin(1,j,l)  ....
149c    ...   ecin(1,j,l)= ecin(iip1,j,l) ...
150
151CDIR$ IVDEP
152      DO 2 ij = ijb, ije, iip1
153      ecin( ij,l ) = ecin( ij + iim, l )
154   2  CONTINUE
155
156c     calcul aux poles  .......
157
158      IF (pole_nord) THEN
159   
160        DO  i = 1, iim
161         ecinni(i) = vcov(    i  ,  l) * 
162     *               vcont(    i    ,l) * aire(   i   )
163        ENDDO
164
165        ecinpn = 0.5 * SSUM( iim,ecinni,1 ) / apoln
166
167        DO ij = 1,iip1
168          ecin(   ij     , l ) = ecinpn
169        ENDDO
170   
171      ENDIF
172
173      IF (pole_sud) THEN
174   
175        DO  i = 1, iim
176         ecinsi(i) = vcov(i+ip1jmi1,l)* 
177     *               vcont(i+ip1jmi1,l) * aire(i+ip1jm)
178        ENDDO
179
180        ecinps = 0.5 * SSUM( iim,ecinsi,1 ) / apols
181
182        DO ij = 1,iip1
183          ecin( ij+ ip1jm, l ) = ecinps
184        ENDDO
185   
186      ENDIF
187
188     
189   5  CONTINUE
190c$OMP END DO NOWAIT
191      RETURN
192      END
Note: See TracBrowser for help on using the repository browser.