source: LMDZ6/branches/Amaury_dev/libf/dyn3d_common/enercin.F90 @ 5185

Last change on this file since 5185 was 5159, checked in by abarral, 5 months ago

Put dimensions.h and paramet.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.5 KB
Line 
1SUBROUTINE enercin(vcov, ucov, vcont, ucont, ecin)
2
3  !-------------------------------------------------------------------------------
4  ! Authors: P. Le Van.
5  !-------------------------------------------------------------------------------
6  ! Purpose: Compute kinetic energy at sigma levels.
7  USE lmdz_comgeom
8
9USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm
10  USE lmdz_paramet
11  IMPLICIT NONE
12
13
14  !===============================================================================
15  ! Arguments:
16  REAL, INTENT(IN) :: vcov    (ip1jm, llm)
17  REAL, INTENT(IN) :: ucov    (ip1jmp1, llm)
18  REAL, INTENT(IN) :: vcont   (ip1jm, llm)
19  REAL, INTENT(IN) :: ucont   (ip1jmp1, llm)
20  REAL, INTENT(OUT) :: ecin    (ip1jmp1, llm)
21  !===============================================================================
22  ! Notes:
23  !                 . V
24  !                i,j-1
25
26  !      alpha4 .       . alpha1
27
28
29  !        U .      . P     . U
30  !       i-1,j    i,j      i,j
31
32  !      alpha3 .       . alpha2
33
34
35  !                 . V
36  !                i,j
37
38  ! Kinetic energy at scalar point P(i,j) (excluding poles) is:
39  !       Ecin = 0.5 * U(i-1,j)**2 *( alpha3 + alpha4 )  +
40  !              0.5 * U(i  ,j)**2 *( alpha1 + alpha2 )  +
41  !              0.5 * V(i,j-1)**2 *( alpha1 + alpha4 )  +
42  !              0.5 * V(i,  j)**2 *( alpha2 + alpha3 )
43  !===============================================================================
44  ! Local variables:
45  INTEGER :: l, ij, i
46  REAL :: ecinni(iip1), ecinsi(iip1), ecinpn, ecinps
47  !===============================================================================
48  DO l = 1, llm
49    DO ij = iip2, ip1jm - 1
50      ecin(ij + 1, l) = 0.5 * (ucov(ij, l) * ucont(ij, l) * alpha3p4(ij + 1)          &
51              + ucov(ij + 1, l) * ucont(ij + 1, l) * alpha1p2(ij + 1)          &
52              + vcov(ij - iim, l) * vcont(ij - iim, l) * alpha1p4(ij + 1)          &
53              + vcov(ij + 1, l) * vcont(ij + 1, l) * alpha2p3(ij + 1))
54    END DO
55    !--- Correction: ecin(1,j,l)= ecin(iip1,j,l)
56    DO ij = iip2, ip1jm, iip1; ecin(ij, l) = ecin(ij + iim, l);
57    END DO
58
59    !--- North pole
60    DO i = 1, iim
61      ecinni(i) = vcov(i, l) * vcont(i, l) * aire(i)
62    END DO
63    ecinpn = 0.5 * SUM(ecinni(1:iim)) / apoln
64    DO ij = 1, iip1; ecin(ij, l) = ecinpn;
65    END DO
66
67    !--- South pole
68    DO i = 1, iim
69      ecinsi(i) = vcov(i + ip1jmi1, l) * vcont(i + ip1jmi1, l) * aire(i + ip1jm)
70    END DO
71    ecinps = 0.5 * SUM(ecinsi(1:iim)) / apols
72    DO ij = 1, iip1; ecin(ij + ip1jm, l) = ecinps;
73    END DO
74  END DO
75
76END SUBROUTINE enercin
77
Note: See TracBrowser for help on using the repository browser.