ldftra_oce.F90 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. MODULE 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. USE lib_mpp ! MPP library
  11. IMPLICIT NONE
  12. PRIVATE
  13. PUBLIC ldftra_oce_alloc ! called by nemo_init->nemo_alloc, nemogcm.F90
  14. !!----------------------------------------------------------------------
  15. !! Lateral eddy diffusivity coefficients (tracers)
  16. !!----------------------------------------------------------------------
  17. ! !!* Namelist namtra_ldf : lateral mixing *
  18. LOGICAL , PUBLIC :: ln_traldf_lap !: laplacian operator
  19. LOGICAL , PUBLIC :: ln_traldf_bilap !: bilaplacian operator
  20. LOGICAL , PUBLIC :: ln_traldf_level !: iso-level direction
  21. LOGICAL , PUBLIC :: ln_traldf_hor !: horizontal (geopotential) direction
  22. LOGICAL , PUBLIC :: ln_traldf_iso !: iso-neutral direction
  23. LOGICAL , PUBLIC :: ln_traldf_grif !: griffies skew flux
  24. LOGICAL , PUBLIC :: ln_traldf_gdia !: griffies skew flux streamfunction diagnostics
  25. REAL(wp), PUBLIC :: rn_aht_0 !: lateral eddy diffusivity (m2/s)
  26. REAL(wp), PUBLIC :: rn_ahtb_0 !: lateral background eddy diffusivity (m2/s)
  27. REAL(wp), PUBLIC :: rn_aeiv_0 !: eddy induced velocity coefficient (m2/s)
  28. REAL(wp), PUBLIC :: rn_slpmax !: slope limit
  29. REAL(wp), PUBLIC :: rn_chsmag !: multiplicative factor in Smagorinsky diffusivity
  30. REAL(wp), PUBLIC :: rn_smsh !: Smagorinsky diffusivity: = 0 - use only sheer
  31. REAL(wp), PUBLIC :: rn_aht_m !: upper limit or stability criteria for lateral eddy diffusivity (m2/s)
  32. REAL(wp), PUBLIC :: aht0, ahtb0, aeiv0 !!: OLD namelist names
  33. LOGICAL , PUBLIC :: ln_triad_iso !: calculate triads twice
  34. LOGICAL , PUBLIC :: ln_botmix_grif !: mixing on bottom
  35. LOGICAL , PUBLIC :: l_grad_zps = .FALSE. !: special treatment for Horz Tgradients w partial steps
  36. REAL(wp), PUBLIC :: rldf !: multiplicative factor of diffusive coefficient
  37. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: r_fact_lap
  38. !: Needed to define the ratio between passive and active tracer diffusion coef.
  39. #if defined key_traldf_c3d
  40. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 3D coefficients ** at T-,U-,V-,W-points
  41. #elif defined key_traldf_c2d
  42. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 2D coefficients ** at T-,U-,V-,W-points
  43. #elif defined key_traldf_c1d
  44. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ahtt, ahtu, ahtv, ahtw !: ** 1D coefficients ** at T-,U-,V-,W-points
  45. #else
  46. REAL(wp), PUBLIC :: ahtt, ahtu, ahtv, ahtw !: ** 0D coefficients ** at T-,U-,V-,W-points
  47. #endif
  48. #if defined key_traldf_eiv
  49. !!----------------------------------------------------------------------
  50. !! 'key_traldf_eiv' eddy induced velocity
  51. !!----------------------------------------------------------------------
  52. LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. !: eddy induced velocity flag
  53. ! !!! eddy coefficients at U-, V-, W-points [m2/s]
  54. # if defined key_traldf_c3d
  55. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aeiu , aeiv , aeiw !: ** 3D coefficients **
  56. # elif defined key_traldf_c2d
  57. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: aeiu , aeiv , aeiw !: ** 2D coefficients **
  58. # elif defined key_traldf_c1d
  59. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: aeiu , aeiv , aeiw !: ** 1D coefficients **
  60. # else
  61. REAL(wp), PUBLIC :: aeiu , aeiv , aeiw !: ** 0D coefficients **
  62. # endif
  63. # if defined key_diaeiv
  64. REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: u_eiv, v_eiv, w_eiv !: eddy induced velocity [m/s]
  65. # endif
  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. !! NEMO/OPA 3.3 , NEMO Consortium (2010)
  75. !! $Id: ldftra_oce.F90 4147 2013-11-04 11:51:55Z cetlod $
  76. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  77. !!----------------------------------------------------------------------
  78. CONTAINS
  79. INTEGER FUNCTION ldftra_oce_alloc()
  80. !!----------------------------------------------------------------------
  81. !! *** FUNCTION ldftra_oce_alloc ***
  82. !!----------------------------------------------------------------------
  83. INTEGER, DIMENSION(4) :: ierr
  84. !!----------------------------------------------------------------------
  85. ierr(:) = 0
  86. #if defined key_traldf_c3d
  87. ALLOCATE( ahtt(jpi,jpj,jpk) , ahtu(jpi,jpj,jpk) , ahtv(jpi,jpj,jpk) , ahtw(jpi,jpj,jpk) , STAT=ierr(1) )
  88. #elif defined key_traldf_c2d
  89. ALLOCATE( ahtt(jpi,jpj ) , ahtu(jpi,jpj ) , ahtv(jpi,jpj ) , ahtw(jpi,jpj ) , STAT=ierr(1) )
  90. #elif defined key_traldf_c1d
  91. ALLOCATE( ahtt( jpk) , ahtu( jpk) , ahtv( jpk) , ahtw( jpk) , STAT=ierr(1) )
  92. #endif
  93. !
  94. #if defined key_traldf_eiv
  95. # if defined key_traldf_c3d
  96. ALLOCATE( aeiu(jpi,jpj,jpk) , aeiv(jpi,jpj,jpk) , aeiw(jpi,jpj,jpk) , STAT=ierr(2) )
  97. # elif defined key_traldf_c2d
  98. ALLOCATE( aeiu(jpi,jpj ) , aeiv(jpi,jpj ) , aeiw(jpi,jpj ) , STAT=ierr(2) )
  99. # elif defined key_traldf_c1d
  100. ALLOCATE( aeiu( jpk) , aeiv( jpk) , aeiw( jpk) , STAT=ierr(2) )
  101. # endif
  102. # if defined key_diaeiv
  103. ALLOCATE( u_eiv(jpi,jpj,jpk), v_eiv(jpi,jpj,jpk), w_eiv(jpi,jpj,jpk), STAT=ierr(3))
  104. # endif
  105. #endif
  106. ALLOCATE( r_fact_lap(jpi,jpj,jpk), STAT=ierr(4) )
  107. ldftra_oce_alloc = MAXVAL( ierr )
  108. IF( ldftra_oce_alloc /= 0 ) CALL ctl_warn('ldftra_oce_alloc: failed to allocate arrays')
  109. !
  110. END FUNCTION ldftra_oce_alloc
  111. !!=====================================================================
  112. END MODULE ldftra_oce