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

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90 @ 11738

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

The Dr Hook changes from my perl code.

File size: 4.2 KB
Line 
1MODULE dynspg_oce
2   !!======================================================================
3   !!                       ***  MODULE dynspg_oce  ***
4   !!       
5   !! Ocean dynamics: Define in memory some surface pressure gradient variables
6   !!======================================================================
7   !! History :  1.0  ! 2005-12  (C. Talandier, G. Madec)  Original code
8   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option
9   !!----------------------------------------------------------------------
10   USE par_oce        ! ocean parameters
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   PUBLIC           
18
19   PUBLIC   dynspg_oce_alloc   ! called in dynspg.F90
20   
21   !                                                       !!! Surface pressure gradient logicals
22#if   defined key_dynspg_exp  ||  defined key_esopa
23   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_exp = .TRUE.   !: Explicit free surface flag
24#else
25   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_exp = .FALSE.  !: Explicit free surface flag
26#endif
27#if   defined key_dynspg_ts   ||  defined key_esopa
28   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_ts  = .TRUE.   !: Free surface with time splitting flag
29#else
30   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_ts  = .FALSE.  !: Free surface with time splitting flag
31#endif
32#if   defined key_dynspg_flt  ||  defined key_esopa
33   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_flt = .TRUE.   !: Filtered free surface cst volume flag
34#else
35   LOGICAL, PUBLIC, PARAMETER ::   lk_dynspg_flt = .FALSE.  !: Filtered free surface cst volume flag
36#endif
37
38  !                                                                         !!! Time splitting scheme (key_dynspg_ts)
39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshn_e, ssha_e   ! sea surface heigth (now, after)
40   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ua_e  , va_e     ! barotropic velocities (after)
41   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu_e  , hv_e     ! now ocean depth ( = Ho+sshn_e )
42   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hur_e , hvr_e    ! inverse of hu_e and hv_e
43   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv, vn_adv   ! Advection vel. at "now" barocl. step
44   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_b,  vb2_b    ! Half step fluxes (ln_bt_fw=T)
45#if defined key_agrif
46   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b,  vb2_i_b! Half step time integrated fluxes
47#endif
48
49   !!----------------------------------------------------------------------
50   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
51   !! $Id$
52   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
53   !!----------------------------------------------------------------------
54CONTAINS
55
56   INTEGER FUNCTION dynspg_oce_alloc()
57   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
58   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
59   REAL(KIND=jprb)               :: zhook_handle
60
61   CHARACTER(LEN=*), PARAMETER :: RoutineName='DYNSPG_OCE_ALLOC'
62
63   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
64
65      !!----------------------------------------------------------------------
66      !!                  ***  routine dynspg_oce_alloc  ***
67      !!----------------------------------------------------------------------
68      ALLOCATE( sshn_e(jpi,jpj) , ua_e(jpi,jpj) , hu_e(jpi,jpj) , hur_e(jpi,jpj) ,      &
69         &      ssha_e(jpi,jpj) , va_e(jpi,jpj) , hv_e(jpi,jpj) , hvr_e(jpi,jpj) ,      &
70         &      ub2_b(jpi,jpj)  , vb2_b(jpi,jpj)                                 ,      &
71#if defined key_agrif
72         &      ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj)                               ,      &
73#endif
74         &      un_adv(jpi,jpj) , vn_adv(jpi,jpj)                                , STAT = dynspg_oce_alloc )
75         !
76      IF( lk_mpp                )   CALL mpp_sum ( dynspg_oce_alloc )
77      IF( dynspg_oce_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays')
78      !
79   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
80   END FUNCTION dynspg_oce_alloc
81
82   !!======================================================================
83END MODULE dynspg_oce
Note: See TracBrowser for help on using the repository browser.