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