source: LMDZ6/trunk/libf/dyn3d/dissip.f90 @ 5272

Last change on this file since 5272 was 5272, checked in by abarral, 2 days ago

Turn paramet.h into a module

  • 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!
2! $Id: dissip.f90 5272 2024-10-24 15:53:15Z abarral $
3!
4SUBROUTINE dissip( vcov,ucov,teta,p, dv,du,dh )
5  !
6  USE comconst_mod, ONLY: dtdiss
7
8  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
9USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
10          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
11IMPLICIT NONE
12
13
14  ! ..  Avec nouveaux operateurs star :  gradiv2 , divgrad2, nxgraro2  ...
15                              ! (  10/01/98  )
16
17  !=======================================================================
18  !
19  !   Auteur:  P. Le Van
20  !   -------
21  !
22  !   Objet:
23  !   ------
24  !
25  !   Dissipation horizontale
26  !
27  !=======================================================================
28  !-----------------------------------------------------------------------
29  !   Declarations:
30  !   -------------
31
32
33
34  include "comgeom.h"
35  include "comdissnew.h"
36  include "comdissipn.h"
37
38  !   Arguments:
39  !   ----------
40
41  REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind
42  REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind
43  REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potential temperature
44  REAL,INTENT(IN) :: p(ip1jmp1,llmp1) ! pressure
45  ! ! tendencies (.../s) on covariant winds and potential temperature
46  REAL,INTENT(OUT) :: dv(ip1jm,llm)
47  REAL,INTENT(OUT) :: du(ip1jmp1,llm)
48  REAL,INTENT(OUT) :: dh(ip1jmp1,llm)
49
50  !   Local:
51  !   ------
52
53  REAL :: gdx(ip1jmp1,llm),gdy(ip1jm,llm)
54  REAL :: grx(ip1jmp1,llm),gry(ip1jm,llm)
55  REAL :: te1dt(llm),te2dt(llm),te3dt(llm)
56  REAL :: deltapres(ip1jmp1,llm)
57
58  INTEGER :: l,ij
59
60  REAL :: SSUM
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
83  IF(lstardis) THEN
84     CALL gradiv2( llm,ucov,vcov,nitergdiv,gdx,gdy )
85  ELSE
86     CALL gradiv ( llm,ucov,vcov,nitergdiv,gdx,gdy )
87  ENDIF
88
89  DO l=1,llm
90
91     DO ij = 1, iip1
92        gdx(     ij ,l) = 0.
93        gdx(ij+ip1jm,l) = 0.
94     ENDDO
95
96     DO ij = iip2,ip1jm
97        du(ij,l) = du(ij,l) - te1dt(l) *gdx(ij,l)
98     ENDDO
99     DO ij = 1,ip1jm
100        dv(ij,l) = dv(ij,l) - te1dt(l) *gdy(ij,l)
101     ENDDO
102
103   ENDDO
104
105  !   calcul de la partie   n X grad ( rot ):
106  !   ---------------------------------------
107
108  IF(lstardis) THEN
109     CALL nxgraro2( llm,ucov, vcov, nitergrot,grx,gry )
110  ELSE
111     CALL nxgrarot( llm,ucov, vcov, nitergrot,grx,gry )
112  ENDIF
113
114
115  DO l=1,llm
116     DO ij = 1, iip1
117        grx(ij,l) = 0.
118     ENDDO
119
120     DO ij = iip2,ip1jm
121        du(ij,l) = du(ij,l) - te2dt(l) * grx(ij,l)
122     ENDDO
123     DO ij =  1, ip1jm
124        dv(ij,l) = dv(ij,l) - te2dt(l) * gry(ij,l)
125     ENDDO
126  ENDDO
127
128  !   calcul de la partie   div ( grad ):
129  !   -----------------------------------
130
131
132  IF(lstardis) THEN
133
134   DO l = 1, llm
135      DO ij = 1, ip1jmp1
136        deltapres(ij,l) = AMAX1( 0.,  p(ij,l) - p(ij,l+1) )
137      ENDDO
138   ENDDO
139
140     CALL divgrad2( llm,teta, deltapres  ,niterh, gdx )
141  ELSE
142     CALL divgrad ( llm,teta, niterh, gdx        )
143  ENDIF
144
145  DO l = 1,llm
146     DO ij = 1,ip1jmp1
147        dh( ij,l ) = dh( ij,l ) - te3dt(l) * gdx( ij,l )
148     ENDDO
149  ENDDO
150
151  RETURN
152END SUBROUTINE dissip
Note: See TracBrowser for help on using the repository browser.