New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
ldftra.F90 in branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

source: branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90 @ 2371

Last change on this file since 2371 was 2371, checked in by acc, 13 years ago

nemo_v3_3_beta. Improvement of the Griffies operator code (#680). Some aspects are still undergoing scientific assessment but the code structure is ready for release. Dynamical allocation of the large triad arrays has been introduced to reduce memory when the new operator is not in use.

  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
1MODULE ldftra
2   !!======================================================================
3   !!                       ***  MODULE  ldftra  ***
4   !! Ocean physics:  lateral diffusivity coefficient
5   !!=====================================================================
6   !! History :        ! 1997-07  (G. Madec)  from inimix.F split in 2 routines
7   !!   NEMO      1.0  ! 2002-09  (G. Madec)  F90: Free form and module
8   !!             2.0  ! 2005-11  (G. Madec) 
9   !!----------------------------------------------------------------------
10
11   !!----------------------------------------------------------------------
12   !!   ldf_tra_init : initialization, namelist read, and parameters control
13   !!   ldf_tra_c3d   : 3D eddy viscosity coefficient initialization
14   !!   ldf_tra_c2d   : 2D eddy viscosity coefficient initialization
15   !!   ldf_tra_c1d   : 1D eddy viscosity coefficient initialization
16   !!----------------------------------------------------------------------
17   USE oce             ! ocean dynamics and tracers
18   USE dom_oce         ! ocean space and time domain
19   USE phycst          ! physical constants
20   USE ldftra_oce      ! ocean tracer   lateral physics
21   USE ldfslp          ! ???
22   USE in_out_manager  ! I/O manager
23   USE ioipsl
24   USE lib_mpp         ! distribued memory computing library
25   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   ldf_tra_init   ! called by opa.F90
31
32   !! * Substitutions
33#  include "domzgr_substitute.h90"
34#  include "vectopt_loop_substitute.h90"
35   !!----------------------------------------------------------------------
36   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
37   !! $Id$
38   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
39   !!----------------------------------------------------------------------
40
41CONTAINS
42
43   SUBROUTINE ldf_tra_init
44      !!----------------------------------------------------------------------
45      !!                  ***  ROUTINE ldf_tra_init  ***
46      !!
47      !! ** Purpose :   initializations of the tracer lateral mixing coeff.
48      !!
49      !! ** Method  :   the Eddy diffusivity and eddy induced velocity ceoff.
50      !!      are defined as follows:
51      !!         default option   : constant coef. aht0, aeiv0 (namelist)
52      !!        'key_traldf_c1d': depth dependent coef. defined in
53      !!                            in ldf_tra_c1d routine
54      !!        'key_traldf_c2d': latitude and longitude dependent coef.
55      !!                            defined in ldf_tra_c2d routine
56      !!        'key_traldf_c3d': latitude, longitude, depth dependent coef.
57      !!                            defined in ldf_tra_c3d routine
58      !!
59      !!      N.B. User defined include files.  By default, 3d and 2d coef.
60      !!      are set to a constant value given in the namelist and the 1d
61      !!      coefficients are initialized to a hyperbolic tangent vertical
62      !!      profile.
63      !!----------------------------------------------------------------------
64      INTEGER ::   ioptio               ! temporary integer
65      LOGICAL ::   ll_print = .FALSE.   ! =T print eddy coef. in numout
66      !!
67      NAMELIST/namtra_ldf/ ln_traldf_lap  , ln_traldf_bilap,                  &
68         &                 ln_traldf_level, ln_traldf_hor  , ln_traldf_iso,   &
69         &                 ln_traldf_grif , ln_traldf_gdia,                   &
70         &                 rn_aht_0       , rn_ahtb_0      , rn_aeiv_0,       &
71         &                 rn_slpmax
72      !!----------------------------------------------------------------------
73
74      !  Define the lateral tracer physics parameters
75      ! =============================================
76   
77      REWIND( numnam )                  ! Read Namelist namtra_ldf : Lateral physics on tracers
78      READ  ( numnam, namtra_ldf )
79
80      IF(lwp) THEN                      ! control print
81         WRITE(numout,*)
82         WRITE(numout,*) 'ldf_tra_init : lateral tracer physics'
83         WRITE(numout,*) '~~~~~~~~~~~~ '
84         WRITE(numout,*) '   Namelist namtra_ldf : lateral mixing parameters (type, direction, coefficients)'
85         WRITE(numout,*) '      laplacian operator            ln_traldf_lap   = ', ln_traldf_lap
86         WRITE(numout,*) '      bilaplacian operator          ln_traldf_bilap = ', ln_traldf_bilap
87         WRITE(numout,*) '      iso-level                     ln_traldf_level = ', ln_traldf_level
88         WRITE(numout,*) '      horizontal (geopotential)     ln_traldf_hor   = ', ln_traldf_hor
89         WRITE(numout,*) '      iso-neutral                   ln_traldf_iso   = ', ln_traldf_iso
90         WRITE(numout,*) '      iso-neutral (Griffies)        ln_traldf_grif  = ', ln_traldf_grif
91         WRITE(numout,*) '      Griffies strmfn diagnostics   ln_traldf_gdia  = ', ln_traldf_gdia
92         WRITE(numout,*) '      lateral eddy diffusivity      rn_aht_0        = ', rn_aht_0
93         WRITE(numout,*) '      background hor. diffusivity   rn_ahtb_0       = ', rn_ahtb_0
94         WRITE(numout,*) '      eddy induced velocity coef.   rn_aeiv_0       = ', rn_aeiv_0
95         WRITE(numout,*) '      maximum isoppycnal slope      rn_slpmax       = ', rn_slpmax
96         WRITE(numout,*) '   + griffies operator internal controls not set via the namelist (experimental): '
97         WRITE(numout,*) '      calculate triads twice        l_triad_iso     = ', l_triad_iso
98         WRITE(numout,*) '      no Shapiro filter             l_no_smooth     = ', l_no_smooth
99         WRITE(numout,*)
100      ENDIF
101
102      !                                ! convert DOCTOR namelist names into OLD names
103      aht0  = rn_aht_0
104      ahtb0 = rn_ahtb_0
105      aeiv0 = rn_aeiv_0
106
107      !                                ! Parameter control
108
109      ! ... Check consistency for type and direction :
110      !           ==> will be done in traldf module
111
112      ! ... Space variation of eddy coefficients
113      ioptio = 0
114#if defined key_traldf_c3d
115      IF(lwp) WRITE(numout,*) '          tracer mixing coef. = F( latitude, longitude, depth)'
116      ioptio = ioptio + 1
117#endif
118#if defined key_traldf_c2d
119      IF(lwp) WRITE(numout,*) '          tracer mixing coef. = F( latitude, longitude)'
120      ioptio = ioptio + 1
121#endif
122#if defined key_traldf_c1d
123      IF(lwp) WRITE(numout,*) '          tracer mixing coef. = F( depth )'
124      ioptio = ioptio + 1
125      IF( .NOT. ln_zco )   CALL ctl_stop( 'key_traldf_c1d can only be used in z-coordinate - full step' )
126#endif
127      IF( ioptio == 0 ) THEN
128          IF(lwp) WRITE(numout,*) '          tracer mixing coef. = constant (default option)'
129        ELSEIF( ioptio > 1 ) THEN
130           CALL ctl_stop('          use only one of the following keys:',   &
131             &           ' key_traldf_c3d, key_traldf_c2d, key_traldf_c1d' )
132      ENDIF
133
134      IF( ln_traldf_bilap ) THEN
135         IF(lwp) WRITE(numout,*) '          biharmonic tracer diffusion'
136         IF( aht0 > 0 .AND. .NOT. lk_esopa )   CALL ctl_stop( 'The horizontal diffusivity coef. aht0 must be negative' )
137      ELSE
138         IF(lwp) WRITE(numout,*) '          harmonic tracer diffusion (default)'
139         IF( aht0 < 0 .AND. .NOT. lk_esopa )   CALL ctl_stop('The horizontal diffusivity coef. aht0 must be positive' )
140      ENDIF
141
142
143      !  Lateral eddy diffusivity and eddy induced velocity coefficients
144      ! ================================================================
145#if defined key_traldf_c3d
146      CALL ldf_tra_c3d( ll_print )      ! aht = 3D coef. = F( longitude, latitude, depth )
147#elif defined key_traldf_c2d
148      CALL ldf_tra_c2d( ll_print )      ! aht = 2D coef. = F( longitude, latitude )
149#elif defined key_traldf_c1d
150      CALL ldf_tra_c1d( ll_print )      ! aht = 1D coef. = F( depth )
151#else
152                                        ! Constant coefficients
153      IF(lwp)WRITE(numout,*)
154      IF(lwp)WRITE(numout,*) '      constant eddy diffusivity coef.   ahtu = ahtv = ahtw = aht0 = ', aht0
155      IF( lk_traldf_eiv ) THEN
156         IF(lwp)WRITE(numout,*)
157         IF(lwp)WRITE(numout,*) '      constant eddy induced velocity coef.   aeiu = aeiv = aeiw = aeiv0 = ', aeiv0
158      ENDIF
159#endif
160      !
161   END SUBROUTINE ldf_tra_init
162
163#if defined key_traldf_c3d
164#   include "ldftra_c3d.h90"
165#elif defined key_traldf_c2d
166#   include "ldftra_c2d.h90"
167#elif defined key_traldf_c1d
168#   include "ldftra_c1d.h90"
169#endif
170
171   !!======================================================================
172END MODULE ldftra
Note: See TracBrowser for help on using the repository browser.