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 trunk/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

source: trunk/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90 @ 3372

Last change on this file since 3372 was 3294, checked in by rblod, 12 years ago

Merge of 3.4beta into the trunk

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