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

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90 @ 11738

Last change on this file since 11738 was 11738, checked in by marc, 5 years ago

The Dr Hook changes from my perl code.

File size: 7.1 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
[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   !!----------------------------------------------------------------------
92CONTAINS
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]138END MODULE ldftra_oce
Note: See TracBrowser for help on using the repository browser.