source: branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_exp.F90 @ 4328

Last change on this file since 4328 was 4328, checked in by davestorkey, 7 years ago

Remove OBC module at NEMO 3.6. See ticket #1189.

  • Property svn:keywords set to Id
File size: 5.0 KB
Line 
1MODULE dynspg_exp
2   !!======================================================================
3   !!                   ***  MODULE  dynspg_exp  ***
4   !! Ocean dynamics:  surface pressure gradient trend
5   !!======================================================================
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
8   !!----------------------------------------------------------------------
9#if defined key_dynspg_exp   ||   defined key_esopa
10   !!----------------------------------------------------------------------
11   !!   'key_dynspg_exp'                              explicit free surface
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
19   USE sbc_oce         ! surface boundary condition: ocean
20   USE phycst          ! physical constants
21   USE in_out_manager  ! I/O manager
22   USE lib_mpp         ! distributed memory computing library
23   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
24   USE prtctl          ! Print control
25   USE iom             ! I/O library
26   USE timing          ! Timing
27
28
29   IMPLICIT NONE
30   PRIVATE
31
32   PUBLIC   dyn_spg_exp   ! routine called by step.F90
33
34   !! * Substitutions
35#  include "domzgr_substitute.h90"
36#  include "vectopt_loop_substitute.h90"
37   !!----------------------------------------------------------------------
38   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
39   !! $Id$
40   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
41   !!----------------------------------------------------------------------
42CONTAINS
43
44   SUBROUTINE dyn_spg_exp( kt )
45      !!----------------------------------------------------------------------
46      !!                  ***  routine dyn_spg_exp  ***
47      !!
48      !! ** Purpose :   Compute the now trend due to the surface pressure
49      !!              gradient in case of explicit free surface formulation and
50      !!              add it to the general trend of momentum equation.
51      !!
52      !! ** Method  :   Explicit free surface formulation. Add to the general
53      !!              momentum trend the surface pressure gradient :
54      !!                      (ua,va) = (ua,va) + (spgu,spgv)
55      !!              where spgu = -1/rau0 d/dx(ps) = -g/e1u di( sshn )
56      !!                    spgv = -1/rau0 d/dy(ps) = -g/e2v dj( sshn )
57      !!
58      !! ** Action :   (ua,va)   trend of horizontal velocity increased by
59      !!                         the surf. pressure gradient trend
60      !!---------------------------------------------------------------------
61      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index
62      !!
63      INTEGER ::   ji, jj, jk   ! dummy loop indices
64      !!----------------------------------------------------------------------
65      !
66      IF( nn_timing == 1 )  CALL timing_start('dyn_spg_exp')
67      !
68      IF( kt == nit000 ) THEN
69         IF(lwp) WRITE(numout,*)
70         IF(lwp) WRITE(numout,*) 'dyn_spg_exp : surface pressure gradient trend'
71         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   (explicit free surface)'
72         !
73         spgu(:,:) = 0._wp   ;   spgv(:,:) = 0._wp
74         !
75         IF( lk_vvl .AND. lwp ) WRITE(numout,*) '              lk_vvl=T : spg is included in dynhpg'
76      ENDIF
77
78      IF( .NOT. lk_vvl ) THEN          !* fixed volume : add the surface pressure gradient trend
79         !
80         DO jj = 2, jpjm1                    ! now surface pressure gradient
81            DO ji = fs_2, fs_jpim1   ! vector opt.
82               spgu(ji,jj) = - grav * ( sshn(ji+1,jj) - sshn(ji,jj) ) / e1u(ji,jj)
83               spgv(ji,jj) = - grav * ( sshn(ji,jj+1) - sshn(ji,jj) ) / e2v(ji,jj)
84            END DO
85         END DO
86         !
87         DO jk = 1, jpkm1                    ! Add it to the general trend
88            DO jj = 2, jpjm1
89               DO ji = fs_2, fs_jpim1   ! vector opt.
90                  ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj)
91                  va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj)
92               END DO
93            END DO
94         END DO
95         !
96      ENDIF
97      !
98      IF( nn_timing == 1 )  CALL timing_stop('dyn_spg_exp')
99      !
100   END SUBROUTINE dyn_spg_exp
101
102#else
103   !!----------------------------------------------------------------------
104   !!   Default case :   Empty module   No standart explicit free surface
105   !!----------------------------------------------------------------------
106CONTAINS
107   SUBROUTINE dyn_spg_exp( kt )       ! Empty routine
108      WRITE(*,*) 'dyn_spg_exp: You should not have seen this print! error?', kt
109   END SUBROUTINE dyn_spg_exp
110#endif
111
112   !!======================================================================
113END MODULE dynspg_exp
Note: See TracBrowser for help on using the repository browser.