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_exp.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_exp.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: 6.0 KB
RevLine 
[358]1MODULE dynspg_exp
2   !!======================================================================
3   !!                   ***  MODULE  dynspg_exp  ***
4   !! Ocean dynamics:  surface pressure gradient trend
5   !!======================================================================
[1505]6   !! History :  2.0  !  2005-11  (V. Garnier, G. Madec, L. Bessieres) Original code
7   !!            3.2  !  2009-06  (G. Madec, M. Leclair, R. Benshila) introduce sshwzv module
[1438]8   !!----------------------------------------------------------------------
[575]9#if defined key_dynspg_exp   ||   defined key_esopa
[358]10   !!----------------------------------------------------------------------
[1505]11   !!   'key_dynspg_exp'                              explicit free surface
[358]12   !!----------------------------------------------------------------------
13   !!   dyn_spg_exp  : update the momentum trend with the surface
14   !!                      pressure gradient in the free surface constant 
15   !!                      volume case with vector optimization
16   !!----------------------------------------------------------------------
17   USE oce             ! ocean dynamics and tracers
18   USE dom_oce         ! ocean space and time domain
[888]19   USE sbc_oce         ! surface boundary condition: ocean
[719]20   USE phycst          ! physical constants
[4990]21   !
[888]22   USE in_out_manager  ! I/O manager
[358]23   USE lib_mpp         ! distributed memory computing library
24   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
25   USE prtctl          ! Print control
[575]26   USE iom             ! I/O library
[3294]27   USE timing          ! Timing
[358]28
[3294]29
[11738]30   USE yomhook, ONLY: lhook, dr_hook
31   USE parkind1, ONLY: jprb, jpim
32
[358]33   IMPLICIT NONE
34   PRIVATE
35
[1438]36   PUBLIC   dyn_spg_exp   ! routine called by step.F90
[358]37
38   !! * Substitutions
39#  include "domzgr_substitute.h90"
40#  include "vectopt_loop_substitute.h90"
41   !!----------------------------------------------------------------------
[2528]42   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
[888]43   !! $Id$
[2715]44   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
[358]45   !!----------------------------------------------------------------------
46CONTAINS
47
48   SUBROUTINE dyn_spg_exp( kt )
49      !!----------------------------------------------------------------------
50      !!                  ***  routine dyn_spg_exp  ***
51      !!
52      !! ** Purpose :   Compute the now trend due to the surface pressure
[1505]53      !!              gradient in case of explicit free surface formulation and
54      !!              add it to the general trend of momentum equation.
[358]55      !!
[1505]56      !! ** Method  :   Explicit free surface formulation. Add to the general
57      !!              momentum trend the surface pressure gradient :
58      !!                      (ua,va) = (ua,va) + (spgu,spgv)
59      !!              where spgu = -1/rau0 d/dx(ps) = -g/e1u di( sshn )
60      !!                    spgv = -1/rau0 d/dy(ps) = -g/e2v dj( sshn )
[358]61      !!
[1505]62      !! ** Action :   (ua,va)   trend of horizontal velocity increased by
63      !!                         the surf. pressure gradient trend
[358]64      !!---------------------------------------------------------------------
[2715]65      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index
[1438]66      !!
[2715]67      INTEGER ::   ji, jj, jk   ! dummy loop indices
[11738]68      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
69      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
70      REAL(KIND=jprb)               :: zhook_handle
71
72      CHARACTER(LEN=*), PARAMETER :: RoutineName='DYN_SPG_EXP'
73
74      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
75
[358]76      !!----------------------------------------------------------------------
[3294]77      !
78      IF( nn_timing == 1 )  CALL timing_start('dyn_spg_exp')
79      !
[358]80      IF( kt == nit000 ) THEN
81         IF(lwp) WRITE(numout,*)
82         IF(lwp) WRITE(numout,*) 'dyn_spg_exp : surface pressure gradient trend'
83         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   (explicit free surface)'
[1505]84         !
[2715]85         spgu(:,:) = 0._wp   ;   spgv(:,:) = 0._wp
[1505]86         !
87         IF( lk_vvl .AND. lwp ) WRITE(numout,*) '              lk_vvl=T : spg is included in dynhpg'
[358]88      ENDIF
89
[1505]90      IF( .NOT. lk_vvl ) THEN          !* fixed volume : add the surface pressure gradient trend
91         !
92         DO jj = 2, jpjm1                    ! now surface pressure gradient
[358]93            DO ji = fs_2, fs_jpim1   ! vector opt.
[1505]94               spgu(ji,jj) = - grav * ( sshn(ji+1,jj) - sshn(ji,jj) ) / e1u(ji,jj)
95               spgv(ji,jj) = - grav * ( sshn(ji,jj+1) - sshn(ji,jj) ) / e2v(ji,jj)
96            END DO
[4292]97         END DO
98         !
[1505]99         DO jk = 1, jpkm1                    ! Add it to the general trend
100            DO jj = 2, jpjm1
101               DO ji = fs_2, fs_jpim1   ! vector opt.
102                  ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj)
103                  va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj)
104               END DO
[358]105            END DO
106         END DO
[1505]107         !
108      ENDIF
109      !
[3294]110      IF( nn_timing == 1 )  CALL timing_stop('dyn_spg_exp')
111      !
[11738]112      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
[358]113   END SUBROUTINE dyn_spg_exp
114
115#else
116   !!----------------------------------------------------------------------
117   !!   Default case :   Empty module   No standart explicit free surface
118   !!----------------------------------------------------------------------
119CONTAINS
120   SUBROUTINE dyn_spg_exp( kt )       ! Empty routine
[11738]121   USE yomhook, ONLY: lhook, dr_hook
122   USE parkind1, ONLY: jprb, jpim
123
[10047]124   IMPLICIT NONE
125      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
[11738]126      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
127      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
128      REAL(KIND=jprb)               :: zhook_handle
129
130      CHARACTER(LEN=*), PARAMETER :: RoutineName='DYN_SPG_EXP'
131
132      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
133
[358]134      WRITE(*,*) 'dyn_spg_exp: You should not have seen this print! error?', kt
[11738]135      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
[358]136   END SUBROUTINE dyn_spg_exp
137#endif
[1438]138
[358]139   !!======================================================================
140END MODULE dynspg_exp
Note: See TracBrowser for help on using the repository browser.