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.
zdf_oce.F90 in branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_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.7 KB
Line 
1MODULE zdf_oce
2   !!======================================================================
3   !!              ***  MODULE  zdf_oce  ***
4   !! Ocean physics : define vertical mixing variables
5   !!=====================================================================
6   !! history :  1.0  !  2002-06  (G. Madec) Original code
7   !!            3.2  !  2009-07  (G.Madec) addition of avm
8   !!----------------------------------------------------------------------
9   USE par_oce        ! ocean parameters
10   USE in_out_manager ! I/O manager
11   USE lib_mpp        ! MPP library
12
13   USE yomhook, ONLY: lhook, dr_hook
14   USE parkind1, ONLY: jprb, jpim
15
16   IMPLICIT NONE
17   PRIVATE
18
19   PUBLIC  zdf_oce_alloc    ! Called in nemogcm.F90
20
21#if defined key_zdfcst   ||   defined key_esopa
22   LOGICAL, PARAMETER, PUBLIC ::   lk_zdfcst        = .TRUE.         !: constant vertical mixing flag
23#else
24   LOGICAL, PARAMETER, PUBLIC ::   lk_zdfcst        = .FALSE.        !: constant vertical mixing flag
25#endif
26
27   !                                 !!* namelist namzdf: vertical diffusion *
28   REAL(wp), PUBLIC ::   rn_avm0     !: vertical eddy viscosity (m2/s)
29   REAL(wp), PUBLIC ::   rn_avt0     !: vertical eddy diffusivity (m2/s)
30   INTEGER , PUBLIC ::   nn_avb      !: constant or profile background on avt (=0/1)
31   INTEGER , PUBLIC ::   nn_havtb    !: horizontal shape or not for avtb (=0/1)
32   LOGICAL , PUBLIC ::   ln_zdfexp   !: explicit vertical diffusion scheme flag
33   INTEGER , PUBLIC ::   nn_zdfexp   !: number of sub-time step (explicit time stepping)
34   LOGICAL , PUBLIC ::   ln_zdfevd   !: convection: enhanced vertical diffusion flag
35   INTEGER , PUBLIC ::   nn_evdm     !: =0/1 flag to apply enhanced avm or not
36   REAL(wp), PUBLIC ::   rn_avevd    !: vertical eddy coeff. for enhanced vert. diff. (m2/s)
37   LOGICAL , PUBLIC ::   ln_zdfnpc   !: convection: non-penetrative convection flag
38   INTEGER , PUBLIC ::   nn_npc      !: non penetrative convective scheme call  frequency
39   INTEGER , PUBLIC ::   nn_npcp     !: non penetrative convective scheme print frequency
40
41
42   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:)     ::   avmb , avtb    !: background profile of avm and avt
43   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   avtb_2d        !: horizontal shape of background Kz profile
44   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   bfrua, bfrva   !: Bottom friction coefficients set in zdfbfr
45   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   tfrua, tfrva   !: top friction coefficients set in zdfbfr
46   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avmu , avmv    !: vertical viscosity coef at uw- & vw-pts       [m2/s]
47   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm  , avt     !: vertical viscosity & diffusivity coef at w-pt [m2/s]
48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avt_k , avm_k  ! not enhanced Kz
49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avmu_k, avmv_k ! not enhanced Kz
50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en              !: now turbulent kinetic energy   [m2/s2]
51 
52   !!----------------------------------------------------------------------
53   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
54   !! $Id$
55   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
56   !!----------------------------------------------------------------------
57CONTAINS
58
59   INTEGER FUNCTION zdf_oce_alloc()
60   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
61   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
62   REAL(KIND=jprb)               :: zhook_handle
63
64   CHARACTER(LEN=*), PARAMETER :: RoutineName='ZDF_OCE_ALLOC'
65
66   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
67
68      !!----------------------------------------------------------------------
69      !!            *** FUNCTION zdf_oce_alloc ***
70      !!----------------------------------------------------------------------
71      !
72      ALLOCATE(avmb(jpk) , bfrua(jpi,jpj) ,                         &
73         &     avtb(jpk) , bfrva(jpi,jpj) , avtb_2d(jpi,jpj) ,      &
74         &     tfrua(jpi, jpj), tfrva(jpi, jpj)              ,      &
75         &     avmu(jpi,jpj,jpk), avm(jpi,jpj,jpk)           ,      &
76         &     avmv  (jpi,jpj,jpk), avt   (jpi,jpj,jpk)      ,      &
77         &     avt_k (jpi,jpj,jpk), avm_k (jpi,jpj,jpk)      ,      & 
78         &     avmu_k(jpi,jpj,jpk), avmv_k(jpi,jpj,jpk)      ,      &
79         &     en    (jpi,jpj,jpk), STAT = zdf_oce_alloc )
80         !
81      IF( zdf_oce_alloc /= 0 )   CALL ctl_warn('zdf_oce_alloc: failed to allocate arrays')
82      !
83   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
84   END FUNCTION zdf_oce_alloc
85
86   !!======================================================================
87END MODULE zdf_oce
Note: See TracBrowser for help on using the repository browser.