source: branches/UKMO/dev_r5518_GO6_package_asm_surf_bgc/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90 @ 8485

Last change on this file since 8485 was 6498, checked in by timgraham, 5 years ago

Merge head of nemo_v3_6_STABLE into package branch

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