source: LMDZ6/branches/Amaury_dev/libf/dyn3d/dissip.F90 @ 5158

Last change on this file since 5158 was 5136, checked in by abarral, 4 months ago

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