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

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