source: LMDZ6/branches/Amaury_dev/libf/dyn3d/lmdz_dissip.f90 @ 5186

Last change on this file since 5186 was 5186, checked in by abarral, 2 months ago

Encapsulate files in 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: 3.7 KB
Line 
1MODULE lmdz_dissip
2  IMPLICIT NONE; PRIVATE
3  PUBLIC dissip
4
5CONTAINS
6
7  SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)
8    USE comconst_mod, ONLY: dtdiss
9    USE lmdz_comdissipn, ONLY: tetaudiv, tetaurot, tetah, cdivu, crot, cdivh
10    USE lmdz_comdissnew, ONLY: lstardis, nitergdiv, nitergrot, niterh, tetagdiv, &
11            tetagrot, tetatemp, coefdis, vert_prof_dissip
12    USE lmdz_comgeom
13
14    USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm
15    USE lmdz_paramet
16    IMPLICIT NONE
17
18
19    ! ..  Avec nouveaux operateurs star :  gradiv2 , divgrad2, nxgraro2  ...
20    ! (  10/01/98  )
21
22    !=======================================================================
23
24    !   Auteur:  P. Le Van
25    !   -------
26
27    !   Objet:
28    !   ------
29
30    !   Dissipation horizontale
31
32    !=======================================================================
33    !-----------------------------------------------------------------------
34    !   Declarations:
35    !   -------------
36
37
38
39
40    !   Arguments:
41    !   ----------
42
43    REAL, INTENT(IN) :: vcov(ip1jm, llm) ! covariant meridional wind
44    REAL, INTENT(IN) :: ucov(ip1jmp1, llm) ! covariant zonal wind
45    REAL, INTENT(IN) :: teta(ip1jmp1, llm) ! potential temperature
46    REAL, INTENT(IN) :: p(ip1jmp1, llmp1) ! pressure
47    ! tendencies (.../s) on covariant winds and potential temperature
48    REAL, INTENT(OUT) :: dv(ip1jm, llm)
49    REAL, INTENT(OUT) :: du(ip1jmp1, llm)
50    REAL, INTENT(OUT) :: dh(ip1jmp1, llm)
51
52    !   Local:
53    !   ------
54
55    REAL :: gdx(ip1jmp1, llm), gdy(ip1jm, llm)
56    REAL :: grx(ip1jmp1, llm), gry(ip1jm, llm)
57    REAL :: te1dt(llm), te2dt(llm), te3dt(llm)
58    REAL :: deltapres(ip1jmp1, llm)
59
60    INTEGER :: l, ij
61
62    !-----------------------------------------------------------------------
63    !   initialisations:
64    !   ----------------
65
66    DO l = 1, llm
67      te1dt(l) = tetaudiv(l) * dtdiss
68      te2dt(l) = tetaurot(l) * dtdiss
69      te3dt(l) = tetah(l) * dtdiss
70    ENDDO
71    du = 0.
72    dv = 0.
73    dh = 0.
74
75    !-----------------------------------------------------------------------
76    !   Calcul de la dissipation:
77    !   -------------------------
78
79    !   Calcul de la partie   grad  ( div ) :
80    !   -------------------------------------
81
82    IF(lstardis) THEN
83      CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)
84    ELSE
85      CALL gradiv (llm, ucov, vcov, nitergdiv, gdx, gdy)
86    ENDIF
87
88    DO l = 1, llm
89
90      DO ij = 1, iip1
91        gdx(ij, l) = 0.
92        gdx(ij + ip1jm, l) = 0.
93      ENDDO
94
95      DO ij = iip2, ip1jm
96        du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
97      ENDDO
98      DO ij = 1, ip1jm
99        dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
100      ENDDO
101
102    ENDDO
103
104    !   calcul de la partie   n X grad ( rot ):
105    !   ---------------------------------------
106
107    IF(lstardis) THEN
108      CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)
109    ELSE
110      CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)
111    ENDIF
112
113    DO l = 1, llm
114      DO ij = 1, iip1
115        grx(ij, l) = 0.
116      ENDDO
117
118      DO ij = iip2, ip1jm
119        du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
120      ENDDO
121      DO ij = 1, ip1jm
122        dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
123      ENDDO
124    ENDDO
125
126    !   calcul de la partie   div ( grad ):
127    !   -----------------------------------
128
129    IF(lstardis) THEN
130
131      DO l = 1, llm
132        DO ij = 1, ip1jmp1
133          deltapres(ij, l) = AMAX1(0., p(ij, l) - p(ij, l + 1))
134        ENDDO
135      ENDDO
136
137      CALL divgrad2(llm, teta, deltapres, niterh, gdx)
138    ELSE
139      CALL divgrad (llm, teta, niterh, gdx)
140    ENDIF
141
142    DO l = 1, llm
143      DO ij = 1, ip1jmp1
144        dh(ij, l) = dh(ij, l) - te3dt(l) * gdx(ij, l)
145      ENDDO
146    ENDDO
147
148  END SUBROUTINE dissip
149
150
151END MODULE lmdz_dissip
Note: See TracBrowser for help on using the repository browser.