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

Last change on this file since 5248 was 5246, checked in by abarral, 23 hours ago

Convert fixed-form to free-form sources .F -> .{f,F}90
(WIP: some .F remain, will be handled in subsequent commits)

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