123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- MODULE ldftra_oce
- !!=====================================================================
- !! *** MODULE ldftra_oce ***
- !! Ocean physics : lateral tracer mixing coefficient defined in memory
- !!=====================================================================
- !! History : 9.0 ! 2002-11 (G. Madec) Original code
- !!----------------------------------------------------------------------
- USE par_oce ! ocean parameters
- USE in_out_manager ! I/O manager
- USE lib_mpp ! MPP library
- IMPLICIT NONE
- PRIVATE
- PUBLIC ldftra_oce_alloc ! called by nemo_init->nemo_alloc, nemogcm.F90
- !!----------------------------------------------------------------------
- !! Lateral eddy diffusivity coefficients (tracers)
- !!----------------------------------------------------------------------
- ! !!* Namelist namtra_ldf : lateral mixing *
- LOGICAL , PUBLIC :: ln_traldf_lap !: laplacian operator
- LOGICAL , PUBLIC :: ln_traldf_bilap !: bilaplacian operator
- LOGICAL , PUBLIC :: ln_traldf_level !: iso-level direction
- LOGICAL , PUBLIC :: ln_traldf_hor !: horizontal (geopotential) direction
- LOGICAL , PUBLIC :: ln_traldf_iso !: iso-neutral direction
- LOGICAL , PUBLIC :: ln_traldf_grif !: griffies skew flux
- LOGICAL , PUBLIC :: ln_traldf_gdia !: griffies skew flux streamfunction diagnostics
- REAL(wp), PUBLIC :: rn_aht_0 !: lateral eddy diffusivity (m2/s)
- REAL(wp), PUBLIC :: rn_ahtb_0 !: lateral background eddy diffusivity (m2/s)
- REAL(wp), PUBLIC :: rn_aeiv_0 !: eddy induced velocity coefficient (m2/s)
- REAL(wp), PUBLIC :: rn_slpmax !: slope limit
- REAL(wp), PUBLIC :: rn_chsmag !: multiplicative factor in Smagorinsky diffusivity
- REAL(wp), PUBLIC :: rn_smsh !: Smagorinsky diffusivity: = 0 - use only sheer
- REAL(wp), PUBLIC :: rn_aht_m !: upper limit or stability criteria for lateral eddy diffusivity (m2/s)
- REAL(wp), PUBLIC :: aht0, ahtb0, aeiv0 !!: OLD namelist names
- LOGICAL , PUBLIC :: ln_triad_iso !: calculate triads twice
- LOGICAL , PUBLIC :: ln_botmix_grif !: mixing on bottom
- LOGICAL , PUBLIC :: l_grad_zps = .FALSE. !: special treatment for Horz Tgradients w partial steps
- REAL(wp), PUBLIC :: rldf !: multiplicative factor of diffusive coefficient
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: r_fact_lap
- !: Needed to define the ratio between passive and active tracer diffusion coef.
- #if defined key_traldf_c3d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 3D coefficients ** at T-,U-,V-,W-points
- #elif defined key_traldf_c2d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 2D coefficients ** at T-,U-,V-,W-points
- #elif defined key_traldf_c1d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ahtt, ahtu, ahtv, ahtw !: ** 1D coefficients ** at T-,U-,V-,W-points
- #else
- REAL(wp), PUBLIC :: ahtt, ahtu, ahtv, ahtw !: ** 0D coefficients ** at T-,U-,V-,W-points
- #endif
- #if defined key_traldf_eiv
- !!----------------------------------------------------------------------
- !! 'key_traldf_eiv' eddy induced velocity
- !!----------------------------------------------------------------------
- LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. !: eddy induced velocity flag
-
- ! !!! eddy coefficients at U-, V-, W-points [m2/s]
- # if defined key_traldf_c3d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aeiu , aeiv , aeiw !: ** 3D coefficients **
- # elif defined key_traldf_c2d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: aeiu , aeiv , aeiw !: ** 2D coefficients **
- # elif defined key_traldf_c1d
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: aeiu , aeiv , aeiw !: ** 1D coefficients **
- # else
- REAL(wp), PUBLIC :: aeiu , aeiv , aeiw !: ** 0D coefficients **
- # endif
- # if defined key_diaeiv
- REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: u_eiv, v_eiv, w_eiv !: eddy induced velocity [m/s]
- # endif
- #else
- !!----------------------------------------------------------------------
- !! Default option : NO eddy induced velocity
- !!----------------------------------------------------------------------
- LOGICAL , PUBLIC, PARAMETER :: lk_traldf_eiv = .FALSE. !: eddy induced velocity flag
- REAL(wp), PUBLIC :: aeiu, aeiv, aeiw !: eddy induced coef. (not used)
- #endif
- !!----------------------------------------------------------------------
- !! NEMO/OPA 3.3 , NEMO Consortium (2010)
- !! $Id: ldftra_oce.F90 4147 2013-11-04 11:51:55Z cetlod $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!----------------------------------------------------------------------
- CONTAINS
- INTEGER FUNCTION ldftra_oce_alloc()
- !!----------------------------------------------------------------------
- !! *** FUNCTION ldftra_oce_alloc ***
- !!----------------------------------------------------------------------
- INTEGER, DIMENSION(4) :: ierr
- !!----------------------------------------------------------------------
- ierr(:) = 0
- #if defined key_traldf_c3d
- ALLOCATE( ahtt(jpi,jpj,jpk) , ahtu(jpi,jpj,jpk) , ahtv(jpi,jpj,jpk) , ahtw(jpi,jpj,jpk) , STAT=ierr(1) )
- #elif defined key_traldf_c2d
- ALLOCATE( ahtt(jpi,jpj ) , ahtu(jpi,jpj ) , ahtv(jpi,jpj ) , ahtw(jpi,jpj ) , STAT=ierr(1) )
- #elif defined key_traldf_c1d
- ALLOCATE( ahtt( jpk) , ahtu( jpk) , ahtv( jpk) , ahtw( jpk) , STAT=ierr(1) )
- #endif
- !
- #if defined key_traldf_eiv
- # if defined key_traldf_c3d
- ALLOCATE( aeiu(jpi,jpj,jpk) , aeiv(jpi,jpj,jpk) , aeiw(jpi,jpj,jpk) , STAT=ierr(2) )
- # elif defined key_traldf_c2d
- ALLOCATE( aeiu(jpi,jpj ) , aeiv(jpi,jpj ) , aeiw(jpi,jpj ) , STAT=ierr(2) )
- # elif defined key_traldf_c1d
- ALLOCATE( aeiu( jpk) , aeiv( jpk) , aeiw( jpk) , STAT=ierr(2) )
- # endif
- # if defined key_diaeiv
- ALLOCATE( u_eiv(jpi,jpj,jpk), v_eiv(jpi,jpj,jpk), w_eiv(jpi,jpj,jpk), STAT=ierr(3))
- # endif
- #endif
- ALLOCATE( r_fact_lap(jpi,jpj,jpk), STAT=ierr(4) )
- ldftra_oce_alloc = MAXVAL( ierr )
- IF( ldftra_oce_alloc /= 0 ) CALL ctl_warn('ldftra_oce_alloc: failed to allocate arrays')
- !
- END FUNCTION ldftra_oce_alloc
- !!=====================================================================
- END MODULE ldftra_oce
|