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_oce.F90 in branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

source: branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90 @ 2618

Last change on this file since 2618 was 2618, checked in by gm, 13 years ago

dynamic mem: #785 ; move dyn allocation from nemogcm to module when possible (continuation)

  • Property svn:keywords set to Id
File size: 6.1 KB
Line 
1MODULE ldftra_oce
2   !!=====================================================================
3   !!                      ***  MODULE  ldftra_oce  ***
4   !! Ocean physics :  lateral tracer mixing coefficient defined in memory
5   !!=====================================================================
6   !! History :  9.0  !  2002-11  (G. Madec)  Original code
7   !!----------------------------------------------------------------------
8   USE par_oce        ! ocean parameters
9   USE in_out_manager ! I/O manager
10
11   IMPLICIT NONE
12   PRIVATE
13
14   PUBLIC ldftra_oce_alloc ! called by nemo_init->nemo_alloc, nemogcm.F90
15
16   !!----------------------------------------------------------------------
17   !! Lateral eddy diffusivity coefficients (tracers)
18   !!----------------------------------------------------------------------
19   !                                                !!* Namelist namtra_ldf : lateral mixing *
20   LOGICAL , PUBLIC ::   ln_traldf_lap   = .TRUE.    !: laplacian operator
21   LOGICAL , PUBLIC ::   ln_traldf_bilap = .FALSE.   !: bilaplacian operator
22   LOGICAL , PUBLIC ::   ln_traldf_level = .FALSE.   !: iso-level direction
23   LOGICAL , PUBLIC ::   ln_traldf_hor   = .FALSE.   !: horizontal (geopotential) direction
24   LOGICAL , PUBLIC ::   ln_traldf_iso   = .TRUE.    !: iso-neutral direction
25   LOGICAL , PUBLIC ::   ln_traldf_grif  = .FALSE.   !: griffies skew flux
26   LOGICAL , PUBLIC ::   ln_traldf_gdia  = .FALSE.   !: griffies skew flux streamfunction diagnostics
27   REAL(wp), PUBLIC ::   rn_aht_0        = 2000._wp  !: lateral eddy diffusivity (m2/s)
28   REAL(wp), PUBLIC ::   rn_ahtb_0       =    0._wp  !: lateral background eddy diffusivity (m2/s)
29   REAL(wp), PUBLIC ::   rn_aeiv_0       = 2000._wp  !: eddy induced velocity coefficient (m2/s)
30   REAL(wp), PUBLIC ::   rn_slpmax       = 0.01_wp   !: slope limit
31
32   REAL(wp), PUBLIC ::   aht0, ahtb0, aeiv0         !!: OLD namelist names
33   LOGICAL , PUBLIC ::   l_triad_iso     = .FALSE.   !: calculate triads twice
34   LOGICAL , PUBLIC ::   l_no_smooth     = .FALSE.   !: no Shapiro smoothing
35
36#if defined key_traldf_c3d
37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahtt, ahtu, ahtv, ahtw   !: ** 3D coefficients ** at T-,U-,V-,W-points
38#elif defined key_traldf_c2d
39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ahtt, ahtu, ahtv, ahtw   !: ** 2D coefficients ** at T-,U-,V-,W-points
40#elif defined key_traldf_c1d
41   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)     ::   ahtt, ahtu, ahtv, ahtw   !: ** 1D coefficients ** at T-,U-,V-,W-points
42#else
43   REAL(wp), PUBLIC                                      ::   ahtt, ahtu, ahtv, ahtw   !: ** 0D coefficients ** at T-,U-,V-,W-points
44#endif
45
46#if defined key_traldf_eiv
47   !!----------------------------------------------------------------------
48   !!   'key_traldf_eiv'                              eddy induced velocity
49   !!----------------------------------------------------------------------
50   LOGICAL, PUBLIC, PARAMETER               ::   lk_traldf_eiv   = .TRUE.   !: eddy induced velocity flag
51   
52   !                                                                              !!! eddy coefficients at U-, V-, W-points  [m2/s]
53# if defined key_traldf_c3d
54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aeiu , aeiv , aeiw   !: ** 3D coefficients **
55# elif defined key_traldf_c2d
56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   aeiu , aeiv , aeiw   !: ** 2D coefficients **
57# elif defined key_traldf_c1d
58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)     ::   aeiu , aeiv , aeiw   !: ** 1D coefficients **
59# else
60   REAL(wp), PUBLIC                                      ::   aeiu , aeiv , aeiw   !: ** 0D coefficients **
61# endif
62# if defined key_diaeiv
63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   u_eiv, v_eiv, w_eiv   !: eddy induced velocity [m/s]
64# endif
65
66#else
67   !!----------------------------------------------------------------------
68   !!   Default option :                           NO eddy induced velocity
69   !!----------------------------------------------------------------------
70   LOGICAL , PUBLIC, PARAMETER ::   lk_traldf_eiv   = .FALSE.   !: eddy induced velocity flag
71   REAL(wp), PUBLIC            ::   aeiu, aeiv, aeiw            !: eddy induced coef. (not used)
72#endif
73
74   !!----------------------------------------------------------------------
75   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
76   !! $Id$
77   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
78   !!----------------------------------------------------------------------
79CONTAINS
80
81   INTEGER FUNCTION ldftra_oce_alloc()
82     !!----------------------------------------------------------------------
83      !!                 ***  FUNCTION ldftra_oce_alloc  ***
84     !!----------------------------------------------------------------------
85     INTEGER, DIMENSION(3) :: ierr
86     !!----------------------------------------------------------------------
87     ierr(:) = 0
88
89#if defined key_traldf_c3d
90      ALLOCATE( ahtt(jpi,jpj,jpk) , ahtu(jpi,jpj,jpk) , ahtv(jpi,jpj,jpk) , ahtw(jpi,jpj,jpk) , STAT=ierr(1) )
91#elif defined key_traldf_c2d
92      ALLOCATE( ahtt(jpi,jpj     ), ahtu(jpi,jpj)     , ahtv(jpi,jpj    ) , ahtw(jpi,jpj    ) , STAT=ierr(1) )
93#elif defined key_traldf_c1d
94      ALLOCATE( ahtt(         jpk) , ahtu(       jpk) , ahtv(        jpk) , ahtw(        jpk) , STAT=ierr(1) )
95#endif
96      !
97#if defined key_traldf_eiv
98# if defined key_traldf_c3d
99      ALLOCATE( aeiu(jpi,jpj,jpk) , aeiv(jpi,jpj,jpk) , aeiw(jpi,jpj,jpk) , STAT=ierr(2) )
100# elif defined key_traldf_c2d
101      ALLOCATE( aeiu(jpi,jpj    ) , aeiv(jpi,jpj    ) , aeiw(jpi,jpj    ) , STAT=ierr(2) )
102# elif defined key_traldf_c1d
103      ALLOCATE( aeiu(        jpk) , aeiv(        jpk) , aeiw(        jpk) , STAT=ierr(2) )
104# endif
105# if defined key_diaeiv
106      ALLOCATE( u_eiv(jpi,jpj,jpk), v_eiv(jpi,jpj,jpk), w_eiv(jpi,jpj,jpk), STAT=ierr(3))
107# endif
108#endif
109      ldftra_oce_alloc = MAXVAL( ierr )
110      IF( ldftra_oce_alloc /= 0 )   CALL ctl_warn('ldftra_oce_alloc: failed to allocate arrays')
111      !
112   END FUNCTION ldftra_oce_alloc
113
114   !!=====================================================================
115END MODULE ldftra_oce
Note: See TracBrowser for help on using the repository browser.