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/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

source: branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_exp.F90 @ 4147

Last change on this file since 4147 was 3680, checked in by rblod, 11 years ago

First commit of the final branch for 2012 (future nemo_3_5), see ticket #1028

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