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

Last change on this file since 5105 was 5105, checked in by abarral, 8 weeks ago

Replace 1DUTILS.h by module lmdz_1dutils.f90
Replace 1DConv.h by module lmdz_old_1dconv.f90 (it's only used by old_* files)
Convert *.F to *.f90
Fix gradsdef.h formatting
Remove unnecessary "RETURN" at the end of functions/subroutines

  • 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.2 KB
Line 
1! $Id: dissip.F90 5105 2024-07-23 17:14:34Z abarral $
2
3SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)
4  !
5  USE comconst_mod, ONLY: dtdiss
6
7  IMPLICIT NONE
8
9
10  ! ..  Avec nouveaux operateurs star :  gradiv2 , divgrad2, nxgraro2  ...
11  ! (  10/01/98  )
12
13  !=======================================================================
14  !
15  !   Auteur:  P. Le Van
16  !   -------
17  !
18  !   Objet:
19  !   ------
20  !
21  !   Dissipation horizontale
22  !
23  !=======================================================================
24  !-----------------------------------------------------------------------
25  !   Declarations:
26  !   -------------
27
28  include "dimensions.h"
29  include "paramet.h"
30  include "comgeom.h"
31  include "comdissnew.h"
32  include "comdissipn.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  REAL :: SSUM
57
58  !-----------------------------------------------------------------------
59  !   initialisations:
60  !   ----------------
61
62  DO l = 1, llm
63    te1dt(l) = tetaudiv(l) * dtdiss
64    te2dt(l) = tetaurot(l) * dtdiss
65    te3dt(l) = tetah(l) * dtdiss
66  ENDDO
67  du = 0.
68  dv = 0.
69  dh = 0.
70
71  !-----------------------------------------------------------------------
72  !   Calcul de la dissipation:
73  !   -------------------------
74
75  !   Calcul de la partie   grad  ( div ) :
76  !   -------------------------------------
77
78  IF(lstardis) THEN
79    CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)
80  ELSE
81    CALL gradiv (llm, ucov, vcov, nitergdiv, gdx, gdy)
82  ENDIF
83
84  DO l = 1, llm
85
86    DO ij = 1, iip1
87      gdx(ij, l) = 0.
88      gdx(ij + ip1jm, l) = 0.
89    ENDDO
90
91    DO ij = iip2, ip1jm
92      du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
93    ENDDO
94    DO ij = 1, ip1jm
95      dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
96    ENDDO
97
98  ENDDO
99
100  !   calcul de la partie   n X grad ( rot ):
101  !   ---------------------------------------
102
103  IF(lstardis) THEN
104    CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)
105  ELSE
106    CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)
107  ENDIF
108
109  DO l = 1, llm
110    DO ij = 1, iip1
111      grx(ij, l) = 0.
112    ENDDO
113
114    DO ij = iip2, ip1jm
115      du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
116    ENDDO
117    DO ij = 1, ip1jm
118      dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
119    ENDDO
120  ENDDO
121
122  !   calcul de la partie   div ( grad ):
123  !   -----------------------------------
124
125  IF(lstardis) THEN
126
127    DO l = 1, llm
128      DO ij = 1, ip1jmp1
129        deltapres(ij, l) = AMAX1(0., p(ij, l) - p(ij, l + 1))
130      ENDDO
131    ENDDO
132
133    CALL divgrad2(llm, teta, deltapres, niterh, gdx)
134  ELSE
135    CALL divgrad (llm, teta, niterh, gdx)
136  ENDIF
137
138  DO l = 1, llm
139    DO ij = 1, ip1jmp1
140      dh(ij, l) = dh(ij, l) - te3dt(l) * gdx(ij, l)
141    ENDDO
142  ENDDO
143
144
145END SUBROUTINE dissip
Note: See TracBrowser for help on using the repository browser.