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.
ldfdyn_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/ldfdyn_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: 4.2 KB
Line 
1MODULE ldfdyn_oce
2   !!======================================================================
3   !!                  ***  MODULE  ldfdyn_oce  ***
4   !! Ocean physics:  lateral momentum mixing coefficient defined in memory
5   !!======================================================================
6   !! History :  1.0  ! 2002-11  (G. Madec)  F90: Free form and module
7   !!----------------------------------------------------------------------
8   USE par_oce        ! ocean parameters
9   USE in_out_manager ! I/O manager
10   USE lib_mpp         ! MPP library
11
12   USE yomhook, ONLY: lhook, dr_hook
13   USE parkind1, ONLY: jprb, jpim
14
15   IMPLICIT NONE
16   PUBLIC
17
18   !                                       !!* Namelist namdyn_ldf : lateral mixing *
19   LOGICAL , PUBLIC ::   ln_dynldf_lap      !: laplacian operator
20   LOGICAL , PUBLIC ::   ln_dynldf_bilap    !: bilaplacian operator
21   LOGICAL , PUBLIC ::   ln_dynldf_level    !: iso-level direction
22   LOGICAL , PUBLIC ::   ln_dynldf_hor      !: horizontal (geopotential) direction
23   LOGICAL , PUBLIC ::   ln_dynldf_iso      !: iso-neutral direction
24   REAL(wp), PUBLIC ::   rn_ahm_0_lap       !: lateral laplacian eddy viscosity (m2/s)
25   REAL(wp), PUBLIC ::   rn_ahmb_0          !: lateral laplacian background eddy viscosity (m2/s)
26   REAL(wp), PUBLIC ::   rn_ahm_0_blp       !: lateral bilaplacian eddy viscosity (m4/s)
27   REAL(wp), PUBLIC ::   ahm0, ahmb0, ahm0_blp         !: OLD namelist names
28   REAL(wp), PUBLIC ::   rn_cmsmag_1        !: constant in laplacian Smagorinsky viscosity
29   REAL(wp), PUBLIC ::   rn_cmsmag_2        !: constant in bilaplacian Smagorinsky viscosity
30   REAL(wp), PUBLIC ::   rn_cmsh            !: 1 or 0 , if 0 -use only shear for Smagorinsky viscosity
31   REAL(wp), PUBLIC ::   rn_ahm_m_blp       !: upper limit for bilap  abs(ahm) < min( dx^4/128rdt, rn_ahm_m_blp)
32   REAL(wp), PUBLIC ::   rn_ahm_m_lap       !: upper limit for lap  ahm < min(dx^2/16rdt, rn_ahm_m_lap)
33
34   INTEGER , PUBLIC ::   nkahm_smag      =  0          !:
35
36   !                                                                                  !!! eddy coeff. at U-,V-,W-pts [m2/s]
37#if defined key_dynldf_c3d
38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahm1, ahm2, ahm3, ahm4   !: ** 3D coefficients **
39#elif defined key_dynldf_c2d
40   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ahm1, ahm2, ahm3, ahm4   !: ** 2D coefficients **
41#elif defined key_dynldf_c1d
42   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)     ::   ahm1, ahm2, ahm3, ahm4   !: ** 2D coefficients **
43#else
44   REAL(wp), PUBLIC                                      ::   ahm1, ahm2, ahm3, ahm4   !: ** 0D coefficients **
45#endif
46
47   !!----------------------------------------------------------------------
48   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
49   !! $Id$
50   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
51   !!----------------------------------------------------------------------
52CONTAINS
53
54   INTEGER FUNCTION ldfdyn_oce_alloc()
55   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
56   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
57   REAL(KIND=jprb)               :: zhook_handle
58
59   CHARACTER(LEN=*), PARAMETER :: RoutineName='LDFDYN_OCE_ALLOC'
60
61   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
62
63      !!----------------------------------------------------------------------
64      !!                 ***  FUNCTION ldfdyn_oce_alloc  ***
65      !!----------------------------------------------------------------------
66      ldfdyn_oce_alloc = 0
67#if defined key_dynldf_c3d
68      ALLOCATE( ahm1(jpi,jpj,jpk) , ahm2(jpi,jpj,jpk) , ahm3(jpi,jpj,jpk) , ahm4(jpi,jpj,jpk) , STAT=ldfdyn_oce_alloc )
69#elif defined key_dynldf_c2d
70      ALLOCATE( ahm1(jpi,jpj    ) , ahm2(jpi,jpj    ) , ahm3(jpi,jpj    ) , ahm4(jpi,jpj    ) , STAT=ldfdyn_oce_alloc )
71#elif defined key_dynldf_c1d
72      ALLOCATE( ahm1(        jpk) , ahm2(        jpk) , ahm3(        jpk) , ahm4(        jpk) , STAT=ldfdyn_oce_alloc )
73#endif
74      IF( ldfdyn_oce_alloc /= 0 )   CALL ctl_warn('ldfdyn_oce_alloc: failed to allocate arrays')
75      !
76   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
77   END FUNCTION ldfdyn_oce_alloc
78
79   !!======================================================================
80END MODULE ldfdyn_oce
Note: See TracBrowser for help on using the repository browser.