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 NEMO/trunk/src/OCE/DYN – NEMO

source: NEMO/trunk/src/OCE/DYN/dynspg_exp.F90 @ 13286

Last change on this file since 13286 was 12489, checked in by davestorkey, 4 years ago

Preparation for new timestepping scheme #2390.
Main changes:

  1. Initial euler timestep now handled in stp and not in TRA/DYN routines.
  2. Renaming of all timestep parameters. In summary, the namelist parameter is now rn_Dt and the current timestep is rDt (and rDt_ice, rDt_trc etc).
  3. Renaming of a few miscellaneous parameters, eg. atfp -> rn_atfp (namelist parameter used everywhere) and rau0 -> rho0.

This version gives bit-comparable results to the previous version of the trunk.

  • Property svn:keywords set to Id
File size: 4.3 KB
RevLine 
[358]1MODULE dynspg_exp
2   !!======================================================================
3   !!                   ***  MODULE  dynspg_exp  ***
[6140]4   !! Ocean dynamics:  surface pressure gradient trend, explicit scheme
[358]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   !!----------------------------------------------------------------------
[6140]9
[358]10   !!----------------------------------------------------------------------
11   !!   dyn_spg_exp  : update the momentum trend with the surface
12   !!                      pressure gradient in the free surface constant 
13   !!                      volume case with vector optimization
14   !!----------------------------------------------------------------------
15   USE oce             ! ocean dynamics and tracers
16   USE dom_oce         ! ocean space and time domain
[888]17   USE sbc_oce         ! surface boundary condition: ocean
[719]18   USE phycst          ! physical constants
[4990]19   !
[888]20   USE in_out_manager  ! I/O manager
[358]21   USE lib_mpp         ! distributed memory computing library
22   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
23   USE prtctl          ! Print control
[575]24   USE iom             ! I/O library
[358]25
26   IMPLICIT NONE
27   PRIVATE
28
[9124]29   PUBLIC   dyn_spg_exp   ! called in dynspg.F90
[358]30
31   !! * Substitutions
[12377]32#  include "do_loop_substitute.h90"
[358]33   !!----------------------------------------------------------------------
[9598]34   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
[888]35   !! $Id$
[10068]36   !! Software governed by the CeCILL license (see ./LICENSE)
[358]37   !!----------------------------------------------------------------------
38CONTAINS
39
[12377]40   SUBROUTINE dyn_spg_exp( kt, Kmm, puu, pvv, Krhs )
[358]41      !!----------------------------------------------------------------------
42      !!                  ***  routine dyn_spg_exp  ***
43      !!
44      !! ** Purpose :   Compute the now trend due to the surface pressure
[1505]45      !!              gradient in case of explicit free surface formulation and
46      !!              add it to the general trend of momentum equation.
[358]47      !!
[1505]48      !! ** Method  :   Explicit free surface formulation. Add to the general
49      !!              momentum trend the surface pressure gradient :
[12377]50      !!                      (uu(rhs),vv(rhs)) = (uu(rhs),vv(rhs)) + (spgu,spgv)
[12489]51      !!              where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh(now) )
52      !!                    spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh(now) )
[358]53      !!
[12377]54      !! ** Action :   (puu(:,:,:,Krhs),pvv(:,:,:,Krhs))   trend of horizontal velocity increased by
[1505]55      !!                         the surf. pressure gradient trend
[358]56      !!---------------------------------------------------------------------
[12377]57      INTEGER                             , INTENT( in )  ::  kt        ! ocean time-step index
58      INTEGER                             , INTENT( in )  ::  Kmm, Krhs ! ocean time level indices
59      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::  puu, pvv  ! ocean velocities and RHS of momentum equation
[1438]60      !!
[2715]61      INTEGER ::   ji, jj, jk   ! dummy loop indices
[358]62      !!----------------------------------------------------------------------
[3294]63      !
[358]64      IF( kt == nit000 ) THEN
65         IF(lwp) WRITE(numout,*)
66         IF(lwp) WRITE(numout,*) 'dyn_spg_exp : surface pressure gradient trend'
67         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   (explicit free surface)'
[1505]68         !
[2715]69         spgu(:,:) = 0._wp   ;   spgv(:,:) = 0._wp
[1505]70         !
[6140]71         IF( .NOT.ln_linssh .AND. lwp ) WRITE(numout,*) '      non linear free surface: spg is included in dynhpg'
[358]72      ENDIF
73
[6140]74      IF( ln_linssh ) THEN          !* linear free surface : add the surface pressure gradient trend
[1505]75         !
[12377]76         DO_2D_00_00
77            spgu(ji,jj) = - grav * ( ssh(ji+1,jj,Kmm) - ssh(ji,jj,Kmm) ) * r1_e1u(ji,jj)
78            spgv(ji,jj) = - grav * ( ssh(ji,jj+1,Kmm) - ssh(ji,jj,Kmm) ) * r1_e2v(ji,jj)
79         END_2D
[4292]80         !
[12377]81         DO_3D_00_00( 1, jpkm1 )
82            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + spgu(ji,jj)
83            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + spgv(ji,jj)
84         END_3D
[1505]85         !
86      ENDIF
87      !
[358]88   END SUBROUTINE dyn_spg_exp
89
90   !!======================================================================
91END MODULE dynspg_exp
Note: See TracBrowser for help on using the repository browser.