1 |
! |
module enercin_m |
|
! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/enercin.F,v 1.1.1.1 2004/05/19 12:53:06 lmdzadmin Exp $ |
|
|
! |
|
|
SUBROUTINE enercin ( vcov, ucov, vcont, ucont, ecin ) |
|
|
use dimens_m |
|
|
use paramet_m |
|
|
use comgeom |
|
|
IMPLICIT NONE |
|
2 |
|
|
3 |
c======================================================================= |
IMPLICIT NONE |
|
c |
|
|
c Auteur: P. Le Van |
|
|
c ------- |
|
|
c |
|
|
c Objet: |
|
|
c ------ |
|
|
c |
|
|
c ********************************************************************* |
|
|
c .. calcul de l'energie cinetique aux niveaux s ...... |
|
|
c ********************************************************************* |
|
|
c vcov, vcont, ucov et ucont sont des arguments d'entree pour le s-pg . |
|
|
c ecin est un argument de sortie pour le s-pg |
|
|
c |
|
|
c======================================================================= |
|
4 |
|
|
5 |
|
contains |
6 |
|
|
7 |
REAL, intent(in):: vcov( ip1jm,llm ), ucov( ip1jmp1,llm ) |
SUBROUTINE enercin(vcov, ucov, vcont, ucont, ecin) |
|
real vcont( ip1jm,llm ) ,ucont( ip1jmp1,llm ),ecin( ip1jmp1,llm ) |
|
8 |
|
|
9 |
REAL ecinni( iip1 ),ecinsi( iip1 ) |
! From LMDZ4/libf/dyn3d/enercin.F, version 1.1.1.1 2004/05/19 12:53:06 |
10 |
|
|
11 |
REAL ecinpn, ecinps |
USE dimens_m |
12 |
INTEGER l,ij,i |
USE paramet_m |
13 |
|
USE comgeom |
14 |
|
|
15 |
REAL SSUM |
! ======================================================================= |
16 |
|
|
17 |
|
! Auteur: P. Le Van |
18 |
|
! ------- |
19 |
|
|
20 |
|
! Objet: |
21 |
|
! ------ |
22 |
|
|
23 |
c . V |
! ********************************************************************* |
24 |
c i,j-1 |
! .. calcul de l'energie cinetique aux niveaux s ...... |
25 |
|
! ********************************************************************* |
26 |
|
! vcov, vcont, ucov et ucont sont des arguments d'entree pour le s-pg . |
27 |
|
! ecin est un argument de sortie pour le s-pg |
28 |
|
|
29 |
c alpha4 . . alpha1 |
! ======================================================================= |
30 |
|
|
31 |
|
|
32 |
c U . . P . U |
REAL, INTENT (IN) :: vcov(ip1jm, llm), ucov(ip1jmp1, llm) |
33 |
c i-1,j i,j i,j |
REAL vcont(ip1jm, llm), ucont(ip1jmp1, llm), ecin(ip1jmp1, llm) |
34 |
|
|
35 |
c alpha3 . . alpha2 |
REAL ecinni(iip1), ecinsi(iip1) |
36 |
|
|
37 |
|
REAL ecinpn, ecinps |
38 |
|
INTEGER l, ij, i |
39 |
|
|
40 |
c . V |
REAL ssum |
|
c i,j |
|
41 |
|
|
|
c |
|
|
c L'energie cinetique au point scalaire P(i,j) ,autre que les poles, est : |
|
|
c Ecin = 0.5 * U(i-1,j)**2 *( alpha3 + alpha4 ) + |
|
|
c 0.5 * U(i ,j)**2 *( alpha1 + alpha2 ) + |
|
|
c 0.5 * V(i,j-1)**2 *( alpha1 + alpha4 ) + |
|
|
c 0.5 * V(i, j)**2 *( alpha2 + alpha3 ) |
|
42 |
|
|
43 |
|
|
44 |
DO 5 l = 1,llm |
! . V |
45 |
|
! i,j-1 |
46 |
|
|
47 |
DO 1 ij = iip2, ip1jm -1 |
! alpha4 . . alpha1 |
|
ecin( ij+1, l ) = 0.5 * |
|
|
* ( ucov( ij ,l ) * ucont( ij ,l ) * alpha3p4( ij +1 ) + |
|
|
* ucov( ij+1 ,l ) * ucont( ij+1 ,l ) * alpha1p2( ij +1 ) + |
|
|
* vcov(ij-iim,l ) * vcont(ij-iim,l ) * alpha1p4( ij +1 ) + |
|
|
* vcov( ij+ 1,l ) * vcont( ij+ 1,l ) * alpha2p3( ij +1 ) ) |
|
|
1 CONTINUE |
|
48 |
|
|
|
c ... correction pour ecin(1,j,l) .... |
|
|
c ... ecin(1,j,l)= ecin(iip1,j,l) ... |
|
49 |
|
|
50 |
CDIR$ IVDEP |
! U . . P . U |
51 |
DO 2 ij = iip2, ip1jm, iip1 |
! i-1,j i,j i,j |
|
ecin( ij,l ) = ecin( ij + iim, l ) |
|
|
2 CONTINUE |
|
52 |
|
|
53 |
c calcul aux poles ....... |
! alpha3 . . alpha2 |
54 |
|
|
55 |
|
|
56 |
DO 3 i = 1, iim |
! . V |
57 |
ecinni(i) = vcov( i , l) * vcont( i ,l) * aire( i ) |
! i,j |
|
ecinsi(i) = vcov(i+ip1jmi1,l) * vcont(i+ip1jmi1,l) * aire(i+ip1jm) |
|
|
3 CONTINUE |
|
58 |
|
|
|
ecinpn = 0.5 * SSUM( iim,ecinni,1 ) / apoln |
|
|
ecinps = 0.5 * SSUM( iim,ecinsi,1 ) / apols |
|
59 |
|
|
60 |
DO 4 ij = 1,iip1 |
! L'energie cinetique au point scalaire P(i,j) ,autre que les poles, est : |
61 |
ecin( ij , l ) = ecinpn |
! Ecin = 0.5 * U(i-1,j)**2 *( alpha3 + alpha4 ) + |
62 |
ecin( ij+ ip1jm, l ) = ecinps |
! 0.5 * U(i ,j)**2 *( alpha1 + alpha2 ) + |
63 |
4 CONTINUE |
! 0.5 * V(i,j-1)**2 *( alpha1 + alpha4 ) + |
64 |
|
! 0.5 * V(i, j)**2 *( alpha2 + alpha3 ) |
65 |
|
|
66 |
5 CONTINUE |
|
67 |
RETURN |
DO l = 1, llm |
68 |
END |
|
69 |
|
DO ij = iip2, ip1jm - 1 |
70 |
|
ecin(ij+1, l) = 0.5*(ucov(ij,l)*ucont(ij,l)*alpha3p4(ij+1)+ucov(ij+1,l) & |
71 |
|
*ucont(ij+1,l)*alpha1p2(ij+1)+vcov(ij-iim,l)*vcont(ij-iim,l)*alpha1p4 & |
72 |
|
(ij+1)+vcov(ij+1,l)*vcont(ij+1,l)*alpha2p3(ij+1)) |
73 |
|
END DO |
74 |
|
|
75 |
|
! ... correction pour ecin(1,j,l) .... |
76 |
|
! ... ecin(1,j,l)= ecin(iip1,j,l) ... |
77 |
|
|
78 |
|
! DIR$ IVDEP |
79 |
|
DO ij = iip2, ip1jm, iip1 |
80 |
|
ecin(ij, l) = ecin(ij+iim, l) |
81 |
|
END DO |
82 |
|
|
83 |
|
! calcul aux poles ....... |
84 |
|
|
85 |
|
|
86 |
|
DO i = 1, iim |
87 |
|
ecinni(i) = vcov(i, l)*vcont(i, l)*aire(i) |
88 |
|
ecinsi(i) = vcov(i+ip1jmi1, l)*vcont(i+ip1jmi1, l)*aire(i+ip1jm) |
89 |
|
END DO |
90 |
|
|
91 |
|
ecinpn = 0.5*ssum(iim, ecinni, 1)/apoln |
92 |
|
ecinps = 0.5*ssum(iim, ecinsi, 1)/apols |
93 |
|
|
94 |
|
DO ij = 1, iip1 |
95 |
|
ecin(ij, l) = ecinpn |
96 |
|
ecin(ij+ip1jm, l) = ecinps |
97 |
|
END DO |
98 |
|
|
99 |
|
END DO |
100 |
|
|
101 |
|
END SUBROUTINE enercin |
102 |
|
|
103 |
|
end module enercin_m |