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_ts.F90 in branches/2011/dev_r2787_MERCATOR3_tidalpot/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

source: branches/2011/dev_r2787_MERCATOR3_tidalpot/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90 @ 2920

Last change on this file since 2920 was 2920, checked in by cbricaud, 13 years ago

add tidal potential

  • Property svn:keywords set to Id
File size: 37.7 KB
RevLine 
[358]1MODULE dynspg_ts
2   !!======================================================================
[1502]3   !! History :   1.0  ! 2004-12  (L. Bessieres, G. Madec)  Original code
4   !!              -   ! 2005-11  (V. Garnier, G. Madec)  optimization
5   !!              -   ! 2006-08  (S. Masson)  distributed restart using iom
6   !!             2.0  ! 2007-07  (D. Storkey) calls to BDY routines
7   !!              -   ! 2008-01  (R. Benshila)  change averaging method
8   !!             3.2  ! 2009-07  (R. Benshila, G. Madec) Complete revisit associated to vvl reactivation
[2528]9   !!             3.3  ! 2010-09  (D. Storkey, E. O'Dea) update for BDY for Shelf configurations
[2724]10   !!             3.3  ! 2011-03  (R. Benshila, R. Hordoir, P. Oddo) update calculation of ub_b
11   !!---------------------------------------------------------------------
[575]12#if defined key_dynspg_ts   ||   defined key_esopa
[358]13   !!----------------------------------------------------------------------
[455]14   !!   'key_dynspg_ts'         free surface cst volume with time splitting
[358]15   !!----------------------------------------------------------------------
16   !!   dyn_spg_ts  : compute surface pressure gradient trend using a time-
17   !!                 splitting scheme and add to the general trend
[508]18   !!   ts_rst      : read/write the time-splitting restart fields in the ocean restart file
[358]19   !!----------------------------------------------------------------------
20   USE oce             ! ocean dynamics and tracers
21   USE dom_oce         ! ocean space and time domain
[888]22   USE sbc_oce         ! surface boundary condition: ocean
23   USE dynspg_oce      ! surface pressure gradient variables
[358]24   USE phycst          ! physical constants
[888]25   USE domvvl          ! variable volume
[1662]26   USE zdfbfr          ! bottom friction
[367]27   USE obcdta          ! open boundary condition data     
28   USE obcfla          ! Flather open boundary condition 
[358]29   USE dynvor          ! vorticity term
30   USE obc_oce         ! Lateral open boundary condition
[371]31   USE obc_par         ! open boundary condition parameters
[911]32   USE bdy_oce         ! unstructured open boundaries
33   USE bdy_par         ! unstructured open boundaries
34   USE bdydta          ! unstructured open boundaries
35   USE bdydyn          ! unstructured open boundaries
36   USE bdytides        ! tidal forcing at unstructured open boundaries.
[2920]37   USE tideini
38   USE updtide
[358]39   USE lib_mpp         ! distributed memory computing library
40   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
41   USE prtctl          ! Print control
42   USE in_out_manager  ! I/O manager
[2715]43   USE iom             ! IOM library
[508]44   USE restart         ! only for lrst_oce
[2564]45   USE zdf_oce
[358]46
47   IMPLICIT NONE
48   PRIVATE
49
[2715]50   PUBLIC dyn_spg_ts        ! routine called by step.F90
51   PUBLIC ts_rst            ! routine called by istate.F90
52   PUBLIC dyn_spg_ts_alloc  ! routine called by dynspg.F90
[358]53
[1502]54
[2715]55   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   ! triad of coriolis parameter
56   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme)
[508]57
[2715]58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_b, vn_b   ! now    averaged velocity
59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub_b, vb_b   ! before averaged velocity
[1502]60
[358]61   !! * Substitutions
62#  include "domzgr_substitute.h90"
63#  include "vectopt_loop_substitute.h90"
[2715]64   !!----------------------------------------------------------------------
65   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
[888]66   !! $Id$
[2715]67   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
68   !!----------------------------------------------------------------------
[358]69CONTAINS
70
[2715]71   INTEGER FUNCTION dyn_spg_ts_alloc()
72      !!----------------------------------------------------------------------
73      !!                  ***  routine dyn_spg_ts_alloc  ***
74      !!----------------------------------------------------------------------
75      ALLOCATE( ftnw  (jpi,jpj) , ftne(jpi,jpj) , un_b(jpi,jpj) , vn_b(jpi,jpj) ,     &
76         &      ftsw  (jpi,jpj) , ftse(jpi,jpj) , ub_b(jpi,jpj) , vb_b(jpi,jpj) , STAT= dyn_spg_ts_alloc )
77         !
78      IF( lk_mpp                )   CALL mpp_sum( dyn_spg_ts_alloc )
79      IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays')
80      !
81   END FUNCTION dyn_spg_ts_alloc
82
83
[358]84   SUBROUTINE dyn_spg_ts( kt )
85      !!----------------------------------------------------------------------
86      !!                  ***  routine dyn_spg_ts  ***
87      !!
88      !! ** Purpose :   Compute the now trend due to the surface pressure
89      !!      gradient in case of free surface formulation with time-splitting.
90      !!      Add it to the general trend of momentum equation.
91      !!
92      !! ** Method  :   Free surface formulation with time-splitting
93      !!      -1- Save the vertically integrated trend. This general trend is
94      !!          held constant over the barotropic integration.
95      !!          The Coriolis force is removed from the general trend as the
96      !!          surface gradient and the Coriolis force are updated within
97      !!          the barotropic integration.
[367]98      !!      -2- Barotropic loop : updates of sea surface height (ssha_e) and
[1502]99      !!          barotropic velocity (ua_e and va_e) through barotropic
[358]100      !!          momentum and continuity integration. Barotropic former
101      !!          variables are time averaging over the full barotropic cycle
[2528]102      !!          (= 2 * baroclinic time step) and saved in uX_b
103      !!          and vX_b (X specifying after, now or before).
[1438]104      !!      -3- The new general trend becomes :
[2528]105      !!          ua = ua - sum_k(ua)/H + ( un_b - ub_b )
[358]106      !!
107      !! ** Action : - Update (ua,va) with the surf. pressure gradient trend
108      !!
[508]109      !! References : Griffies et al., (2003): A technical guide to MOM4. NOAA/GFDL
[358]110      !!---------------------------------------------------------------------
[2715]111      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released
112      USE wrk_nemo, ONLY:   zsshun_e => wrk_2d_1 , zsshb_e  => wrk_2d_2  , zhdiv => wrk_2d_3
113      USE wrk_nemo, ONLY:   zsshvn_e => wrk_2d_4 , zssh_sum => wrk_2d_5
114      USE wrk_nemo, ONLY:   zcu => wrk_2d_6  , zwx   => wrk_2d_7  , zua   => wrk_2d_8  , zbfru  => wrk_2d_9
115      USE wrk_nemo, ONLY:   zcv => wrk_2d_10 , zwy   => wrk_2d_11 , zva   => wrk_2d_12 , zbfrv  => wrk_2d_13
116      USE wrk_nemo, ONLY:   zun => wrk_2d_14 , zun_e => wrk_2d_15 , zub_e => wrk_2d_16 , zu_sum => wrk_2d_17
117      USE wrk_nemo, ONLY:   zvn => wrk_2d_18 , zvn_e => wrk_2d_19 , zvb_e => wrk_2d_20 , zv_sum => wrk_2d_21
118      !
[1502]119      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index
[2715]120      !
[1662]121      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices
[2715]122      INTEGER  ::   icycle           ! local scalar
123      REAL(wp) ::   zraur, zcoef, z2dt_e, z2dt_b     ! local scalars
124      REAL(wp) ::   z1_8, zx1, zy1                   !   -      -
125      REAL(wp) ::   z1_4, zx2, zy2                   !   -      -
126      REAL(wp) ::   zu_spg, zu_cor, zu_sld, zu_asp   !   -      -
127      REAL(wp) ::   zv_spg, zv_cor, zv_sld, zv_asp   !   -      -
[358]128      !!----------------------------------------------------------------------
129
[2715]130      IF( wrk_in_use(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,     &
131         &              11,12,13,14,15,16,17,18,19,20,21 ) ) THEN
132         CALL ctl_stop( 'dyn_spg_ts: requested workspace arrays unavailable' )   ;   RETURN
133      ENDIF
134
[1502]135      IF( kt == nit000 ) THEN             !* initialisation
[508]136         !
[358]137         IF(lwp) WRITE(numout,*)
138         IF(lwp) WRITE(numout,*) 'dyn_spg_ts : surface pressure gradient trend'
139         IF(lwp) WRITE(numout,*) '~~~~~~~~~~   free surface with time splitting'
[1241]140         IF(lwp) WRITE(numout,*) ' Number of sub cycle in 1 time-step (2 rdt) : icycle = ',  2*nn_baro
[1502]141         !
[1708]142         CALL ts_rst( nit000, 'READ' )   ! read or initialize the following fields: un_b, vn_b 
[1502]143         !
144         ua_e  (:,:) = un_b (:,:)
145         va_e  (:,:) = vn_b (:,:)
146         hu_e  (:,:) = hu   (:,:)
147         hv_e  (:,:) = hv   (:,:)
148         hur_e (:,:) = hur  (:,:)
149         hvr_e (:,:) = hvr  (:,:)
[358]150         IF( ln_dynvor_een ) THEN
[508]151            ftne(1,:) = 0.e0   ;   ftnw(1,:) = 0.e0   ;   ftse(1,:) = 0.e0   ;   ftsw(1,:) = 0.e0
[358]152            DO jj = 2, jpj
[1708]153               DO ji = fs_2, jpi   ! vector opt.
[508]154                  ftne(ji,jj) = ( ff(ji-1,jj  ) + ff(ji  ,jj  ) + ff(ji  ,jj-1) ) / 3.
155                  ftnw(ji,jj) = ( ff(ji-1,jj-1) + ff(ji-1,jj  ) + ff(ji  ,jj  ) ) / 3.
156                  ftse(ji,jj) = ( ff(ji  ,jj  ) + ff(ji  ,jj-1) + ff(ji-1,jj-1) ) / 3.
157                  ftsw(ji,jj) = ( ff(ji  ,jj-1) + ff(ji-1,jj-1) + ff(ji-1,jj  ) ) / 3.
[358]158               END DO
159            END DO
160         ENDIF
[508]161         !
162      ENDIF
[358]163
[1502]164      !                                   !* Local constant initialization
[358]165      z2dt_b = 2.0 * rdt                                    ! baroclinic time step
[1502]166      z1_8 = 0.5 * 0.25                                     ! coefficient for vorticity estimates
167      z1_4 = 0.5 * 0.5
[1739]168      zraur  = 1. / rau0                                    ! 1 / volumic mass
[1502]169      !
170      zhdiv(:,:) = 0.e0                                     ! barotropic divergence
[1662]171      zu_sld = 0.e0   ;   zu_asp = 0.e0                     ! tides trends (lk_tide=F)
172      zv_sld = 0.e0   ;   zv_asp = 0.e0
[1438]173
[358]174      ! -----------------------------------------------------------------------------
175      !  Phase 1 : Coupling between general trend and barotropic estimates (1st step)
176      ! -----------------------------------------------------------------------------
[1502]177      !     
178      !                                   !* e3*d/dt(Ua), e3*Ub, e3*Vn (Vertically integrated)
179      !                                   ! --------------------------
[2724]180      zua(:,:) = 0.e0   ;   zun(:,:) = 0.e0   ;   ub_b(:,:) = 0.e0
181      zva(:,:) = 0.e0   ;   zvn(:,:) = 0.e0   ;   vb_b(:,:) = 0.e0
[1502]182      !
183      DO jk = 1, jpkm1
184#if defined key_vectopt_loop
185         DO jj = 1, 1         !Vector opt. => forced unrolling
[358]186            DO ji = 1, jpij
[1502]187#else
188         DO jj = 1, jpj
189            DO ji = 1, jpi
190#endif
191               !                                                                              ! now trend
192               zua(ji,jj) = zua(ji,jj) + fse3u  (ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk)
193               zva(ji,jj) = zva(ji,jj) + fse3v  (ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk)
194               !                                                                              ! now velocity
195               zun(ji,jj) = zun(ji,jj) + fse3u  (ji,jj,jk) * un(ji,jj,jk)
196               zvn(ji,jj) = zvn(ji,jj) + fse3v  (ji,jj,jk) * vn(ji,jj,jk)               
[2724]197               !
198#if defined key_vvl
199               ub_b(ji,jj) = ub_b(ji,jj) + (fse3u_0(ji,jj,jk)*(1.+sshu_b(ji,jj)*muu(ji,jj,jk)))* ub(ji,jj,jk) 
200               vb_b(ji,jj) = vb_b(ji,jj) + (fse3v_0(ji,jj,jk)*(1.+sshv_b(ji,jj)*muv(ji,jj,jk)))* vb(ji,jj,jk)   
201#else
202               ub_b(ji,jj) = ub_b(ji,jj) + fse3u_0(ji,jj,jk) * ub(ji,jj,jk)  * umask(ji,jj,jk)
203               vb_b(ji,jj) = vb_b(ji,jj) + fse3v_0(ji,jj,jk) * vb(ji,jj,jk)  * vmask(ji,jj,jk)
204#endif
[358]205            END DO
206         END DO
[1502]207      END DO
208
209      !                                   !* baroclinic momentum trend (remove the vertical mean trend)
210      DO jk = 1, jpkm1                    ! --------------------------
211         DO jj = 2, jpjm1
212            DO ji = fs_2, fs_jpim1   ! vector opt.
213               ua(ji,jj,jk) = ua(ji,jj,jk) - zua(ji,jj) * hur(ji,jj)
214               va(ji,jj,jk) = va(ji,jj,jk) - zva(ji,jj) * hvr(ji,jj)
215            END DO
[358]216         END DO
[1502]217      END DO
[358]218
[1502]219      !                                   !* barotropic Coriolis trends * H (vorticity scheme dependent)
220      !                                   ! ---------------------------====
221      zwx(:,:) = zun(:,:) * e2u(:,:)                   ! now transport
222      zwy(:,:) = zvn(:,:) * e1v(:,:)
223      !
[358]224      IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN      ! energy conserving or mixed scheme
225         DO jj = 2, jpjm1
226            DO ji = fs_2, fs_jpim1   ! vector opt.
227               zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj)
228               zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj)
229               zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj)
230               zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj)
231               ! energy conserving formulation for planetary vorticity term
[1502]232               zcu(ji,jj) = z1_4 * ( ff(ji  ,jj-1) * zy1 + ff(ji,jj) * zy2 )
233               zcv(ji,jj) =-z1_4 * ( ff(ji-1,jj  ) * zx1 + ff(ji,jj) * zx2 )
[358]234            END DO
235         END DO
[508]236         !
[358]237      ELSEIF ( ln_dynvor_ens ) THEN                    ! enstrophy conserving scheme
238         DO jj = 2, jpjm1
239            DO ji = fs_2, fs_jpim1   ! vector opt.
[1502]240               zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) + zwy(ji,jj) + zwy(ji+1,jj  ) ) / e1u(ji,jj)
241               zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) + zwx(ji,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj)
[358]242               zcu(ji,jj)  = zy1 * ( ff(ji  ,jj-1) + ff(ji,jj) )
243               zcv(ji,jj)  = zx1 * ( ff(ji-1,jj  ) + ff(ji,jj) )
244            END DO
245         END DO
[508]246         !
[358]247      ELSEIF ( ln_dynvor_een ) THEN                    ! enstrophy and energy conserving scheme
248         DO jj = 2, jpjm1
249            DO ji = fs_2, fs_jpim1   ! vector opt.
[1502]250               zcu(ji,jj) = + z1_4 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) + ftnw(ji+1,jj) * zwy(ji+1,jj  )   &
251                  &                                + ftse(ji,jj  ) * zwy(ji  ,jj-1) + ftsw(ji+1,jj) * zwy(ji+1,jj-1) )
252               zcv(ji,jj) = - z1_4 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) + ftse(ji,jj+1) * zwx(ji  ,jj+1)   &
253                  &                                + ftnw(ji,jj  ) * zwx(ji-1,jj  ) + ftne(ji,jj  ) * zwx(ji  ,jj  ) )
[358]254            END DO
255         END DO
[508]256         !
[358]257      ENDIF
258
[1502]259      !                                   !* Right-Hand-Side of the barotropic momentum equation
260      !                                   ! ----------------------------------------------------
261      IF( lk_vvl ) THEN                         ! Variable volume : remove both Coriolis and Surface pressure gradient
262         DO jj = 2, jpjm1 
[358]263            DO ji = fs_2, fs_jpim1   ! vector opt.
[1502]264               zcu(ji,jj) = zcu(ji,jj) - grav * (  ( rhd(ji+1,jj  ,1) + 1 ) * sshn(ji+1,jj  )    &
265                  &                              - ( rhd(ji  ,jj  ,1) + 1 ) * sshn(ji  ,jj  )  ) * hu(ji,jj) / e1u(ji,jj)
266               zcv(ji,jj) = zcv(ji,jj) - grav * (  ( rhd(ji  ,jj+1,1) + 1 ) * sshn(ji  ,jj+1)    &
267                  &                              - ( rhd(ji  ,jj  ,1) + 1 ) * sshn(ji  ,jj  )  ) * hv(ji,jj) / e2v(ji,jj)
[358]268            END DO
269         END DO
[1502]270      ENDIF
[358]271
[1502]272      DO jj = 2, jpjm1                             ! Remove coriolis term (and possibly spg) from barotropic trend
[358]273         DO ji = fs_2, fs_jpim1
274            zua(ji,jj) = zua(ji,jj) - zcu(ji,jj)
275            zva(ji,jj) = zva(ji,jj) - zcv(ji,jj)
276         END DO
277      END DO
278
[1708]279                   
280      !                                             ! Remove barotropic contribution of bottom friction
281      !                                             ! from the barotropic transport trend
282      zcoef = -1. / z2dt_b
283# if defined key_vectopt_loop
284      DO jj = 1, 1
[1779]285         DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
[1708]286# else
287      DO jj = 2, jpjm1
288         DO ji = 2, jpim1
289# endif
290            ! Apply stability criteria for bottom friction
[2528]291            !RBbug for vvl and external mode we may need to use varying fse3
292            !!gm  Rq: the bottom e3 present the smallest variation, the use of e3u_0 is not a big approx.
293            zbfru(ji,jj) = MAX(  bfrua(ji,jj) , fse3u(ji,jj,mbku(ji,jj)) * zcoef  )
294            zbfrv(ji,jj) = MAX(  bfrva(ji,jj) , fse3v(ji,jj,mbkv(ji,jj)) * zcoef  )
[1708]295         END DO
296      END DO
297
[1662]298      IF( lk_vvl ) THEN
[1708]299         DO jj = 2, jpjm1
300            DO ji = fs_2, fs_jpim1   ! vector opt.
[2528]301               zua(ji,jj) = zua(ji,jj) - zbfru(ji,jj) * ub_b(ji,jj)   &
[1708]302                  &       / ( hu_0(ji,jj) + sshu_b(ji,jj) + 1.e0 - umask(ji,jj,1) )
[2528]303               zva(ji,jj) = zva(ji,jj) - zbfrv(ji,jj) * vb_b(ji,jj)   &
[1708]304                  &       / ( hv_0(ji,jj) + sshv_b(ji,jj) + 1.e0 - vmask(ji,jj,1) )
305            END DO
306         END DO
[1662]307      ELSE
[1708]308         DO jj = 2, jpjm1
309            DO ji = fs_2, fs_jpim1   ! vector opt.
[2528]310               zua(ji,jj) = zua(ji,jj) - zbfru(ji,jj) * ub_b(ji,jj) * hur(ji,jj)
311               zva(ji,jj) = zva(ji,jj) - zbfrv(ji,jj) * vb_b(ji,jj) * hvr(ji,jj)
[1708]312            END DO
313         END DO
[1662]314      ENDIF
315
[1502]316      !                                   !* d/dt(Ua), Ub, Vn (Vertical mean velocity)
317      !                                   ! --------------------------
318      zua(:,:) = zua(:,:) * hur(:,:)
319      zva(:,:) = zva(:,:) * hvr(:,:)
320      !
[2724]321      IF( lk_vvl ) THEN
322         ub_b(:,:) = ub_b(:,:) * umask(:,:,1) / ( hu_0(:,:) + sshu_b(:,:) + 1.e0 - umask(:,:,1) )
323         vb_b(:,:) = vb_b(:,:) * vmask(:,:,1) / ( hv_0(:,:) + sshv_b(:,:) + 1.e0 - vmask(:,:,1) )
324      ELSE
325         ub_b(:,:) = ub_b(:,:) * hur(:,:)
326         vb_b(:,:) = vb_b(:,:) * hvr(:,:)
327      ENDIF
[1502]328
[358]329      ! -----------------------------------------------------------------------
330      !  Phase 2 : Integration of the barotropic equations with time splitting
331      ! -----------------------------------------------------------------------
[1502]332      !
333      !                                             ! ==================== !
334      !                                             !    Initialisations   !
335      !                                             ! ==================== !
336      icycle = 2  * nn_baro            ! Number of barotropic sub time-step
337     
338      !                                ! Start from NOW field
339      hu_e   (:,:) = hu   (:,:)            ! ocean depth at u- and v-points
340      hv_e   (:,:) = hv   (:,:) 
341      hur_e  (:,:) = hur  (:,:)            ! ocean depth inverted at u- and v-points
342      hvr_e  (:,:) = hvr  (:,:)
[1662]343!RBbug     zsshb_e(:,:) = sshn (:,:) 
344      zsshb_e(:,:) = sshn_b(:,:)           ! sea surface height (before and now)
[1502]345      sshn_e (:,:) = sshn (:,:)
346     
347      zun_e  (:,:) = un_b (:,:)            ! barotropic velocity (external)
348      zvn_e  (:,:) = vn_b (:,:)
349      zub_e  (:,:) = un_b (:,:)
350      zvb_e  (:,:) = vn_b (:,:)
[358]351
[1502]352      zu_sum  (:,:) = un_b (:,:)           ! summation
353      zv_sum  (:,:) = vn_b (:,:)
354      zssh_sum(:,:) = sshn (:,:)
[358]355
[1502]356#if defined key_obc
[367]357      ! set ssh corrections to 0
358      ! ssh corrections are applied to normal velocities (Flather's algorithm) and averaged over the barotropic loop
359      IF( lp_obc_east  )   sshfoe_b(:,:) = 0.e0
360      IF( lp_obc_west  )   sshfow_b(:,:) = 0.e0
361      IF( lp_obc_south )   sshfos_b(:,:) = 0.e0
362      IF( lp_obc_north )   sshfon_b(:,:) = 0.e0
363#endif
364
[1502]365      !                                             ! ==================== !
366      DO jn = 1, icycle                             !  sub-time-step loop  ! (from NOW to AFTER+1)
367         !                                          ! ==================== !
[1241]368         z2dt_e = 2. * ( rdt / nn_baro )
[1502]369         IF( jn == 1 )   z2dt_e = rdt / nn_baro
[358]370
[1502]371         !                                                !* Update the forcing (OBC, BDY and tides)
372         !                                                !  ------------------
[2528]373         IF( lk_obc )   CALL obc_dta_bt ( kt, jn   )
374         IF( lk_bdy )   CALL bdy_dta_fla( kt, jn+1, icycle )
[2920]375         IF ((lk_tide).AND.(ln_tide_pot)) CALL upd_tide( kt, jn )
[367]376
[1502]377         !                                                !* after ssh_e
378         !                                                !  -----------
379         DO jj = 2, jpjm1                                      ! Horizontal divergence of barotropic transports
[358]380            DO ji = fs_2, fs_jpim1   ! vector opt.
[1502]381               zhdiv(ji,jj) = (   e2u(ji  ,jj) * zun_e(ji  ,jj) * hu_e(ji  ,jj)     &
382                  &             - e2u(ji-1,jj) * zun_e(ji-1,jj) * hu_e(ji-1,jj)     &
383                  &             + e1v(ji,jj  ) * zvn_e(ji,jj  ) * hv_e(ji,jj  )     &
384                  &             - e1v(ji,jj-1) * zvn_e(ji,jj-1) * hv_e(ji,jj-1)   ) / ( e1t(ji,jj) * e2t(ji,jj) )
[358]385            END DO
386         END DO
[1502]387         !
[358]388#if defined key_obc
[1502]389         !                                                     ! OBC : zhdiv must be zero behind the open boundary
390!!  mpp remark: The zeroing of hdiv can probably be extended to 1->jpi/jpj for the correct row/column
391         IF( lp_obc_east  )   zhdiv(nie0p1:nie1p1,nje0  :nje1  ) = 0.e0      ! east
392         IF( lp_obc_west  )   zhdiv(niw0  :niw1  ,njw0  :njw1  ) = 0.e0      ! west
[367]393         IF( lp_obc_north )   zhdiv(nin0  :nin1  ,njn0p1:njn1p1) = 0.e0      ! north
[1502]394         IF( lp_obc_south )   zhdiv(nis0  :nis1  ,njs0  :njs1  ) = 0.e0      ! south
[358]395#endif
[1170]396#if defined key_bdy
[1502]397         zhdiv(:,:) = zhdiv(:,:) * bdytmask(:,:)               ! BDY mask
[1170]398#endif
[1502]399         !
400         DO jj = 2, jpjm1                                      ! leap-frog on ssh_e
[358]401            DO ji = fs_2, fs_jpim1   ! vector opt.
[2528]402               ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * ( emp(ji,jj)-rnf(ji,jj) ) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1) 
[358]403            END DO
404         END DO
405
[1502]406         !                                                !* after barotropic velocities (vorticity scheme dependent)
407         !                                                !  --------------------------- 
408         zwx(:,:) = e2u(:,:) * zun_e(:,:) * hu_e(:,:)           ! now_e transport
409         zwy(:,:) = e1v(:,:) * zvn_e(:,:) * hv_e(:,:)
410         !
411         IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN      !==  energy conserving or mixed scheme  ==!
[358]412            DO jj = 2, jpjm1
413               DO ji = fs_2, fs_jpim1   ! vector opt.
414                  ! surface pressure gradient
[592]415                  IF( lk_vvl) THEN
[1662]416                     zu_spg = -grav * (  ( rhd(ji+1,jj ,1) + 1 ) * sshn_e(ji+1,jj  )    &
417                        &              - ( rhd(ji  ,jj ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e1u(ji,jj)
418                     zv_spg = -grav * (  ( rhd(ji ,jj+1,1) + 1 ) * sshn_e(ji  ,jj+1)    &
419                        &              - ( rhd(ji ,jj  ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e2v(ji,jj)
[592]420                  ELSE
[1662]421                     zu_spg = -grav * ( sshn_e(ji+1,jj) - sshn_e(ji,jj) ) / e1u(ji,jj)
422                     zv_spg = -grav * ( sshn_e(ji,jj+1) - sshn_e(ji,jj) ) / e2v(ji,jj)
[592]423                  ENDIF
[2920]424                  ! add tidal astronomical forcing
425                  IF ( lk_tide ) THEN
426                  zu_spg = zu_spg + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) / e1u(ji,jj)
427                  zv_spg = zv_spg + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) / e2v(ji,jj)
428                  ENDIF
[358]429                  ! energy conserving formulation for planetary vorticity term
430                  zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj)
431                  zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj)
432                  zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) / e2v(ji,jj)
433                  zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) / e2v(ji,jj)
[1662]434                  zu_cor = z1_4 * ( ff(ji  ,jj-1) * zy1 + ff(ji,jj) * zy2 ) * hur_e(ji,jj)
435                  zv_cor =-z1_4 * ( ff(ji-1,jj  ) * zx1 + ff(ji,jj) * zx2 ) * hvr_e(ji,jj)
436                  ! after velocities with implicit bottom friction
437                  ua_e(ji,jj) = ( zub_e(ji,jj) + z2dt_e * ( zu_cor + zu_spg + zu_sld + zu_asp + zua(ji,jj) ) ) * umask(ji,jj,1)   &
438                     &         / ( 1.e0         - z2dt_e * bfrua(ji,jj) * hur_e(ji,jj) )
439                  va_e(ji,jj) = ( zvb_e(ji,jj) + z2dt_e * ( zv_cor + zv_spg + zv_sld + zv_asp + zva(ji,jj) ) ) * vmask(ji,jj,1)   &
440                     &         / ( 1.e0         - z2dt_e * bfrva(ji,jj) * hvr_e(ji,jj) )
[358]441               END DO
442            END DO
[508]443            !
[1502]444         ELSEIF ( ln_dynvor_ens ) THEN                    !==  enstrophy conserving scheme  ==!
[358]445            DO jj = 2, jpjm1
446               DO ji = fs_2, fs_jpim1   ! vector opt.
[1502]447                   ! surface pressure gradient
[592]448                  IF( lk_vvl) THEN
[1662]449                     zu_spg = -grav * (  ( rhd(ji+1,jj ,1) + 1 ) * sshn_e(ji+1,jj  )    &
450                        &              - ( rhd(ji  ,jj ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e1u(ji,jj)
451                     zv_spg = -grav * (  ( rhd(ji ,jj+1,1) + 1 ) * sshn_e(ji  ,jj+1)    &
452                        &              - ( rhd(ji ,jj  ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e2v(ji,jj)
[592]453                  ELSE
[1662]454                     zu_spg = -grav * ( sshn_e(ji+1,jj) - sshn_e(ji,jj) ) / e1u(ji,jj)
455                     zv_spg = -grav * ( sshn_e(ji,jj+1) - sshn_e(ji,jj) ) / e2v(ji,jj)
[592]456                  ENDIF
[2920]457                  ! add tidal astronomical forcing
458                  IF ( lk_tide ) THEN
459                  zu_spg = zu_spg + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) / e1u(ji,jj)
460                  zv_spg = zv_spg + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) / e2v(ji,jj)
461                  ENDIF
[358]462                  ! enstrophy conserving formulation for planetary vorticity term
[1502]463                  zy1 =   z1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) + zwy(ji,jj) + zwy(ji+1,jj  ) ) / e1u(ji,jj)
464                  zx1 = - z1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) + zwx(ji,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj)
[1662]465                  zu_cor  = zy1 * ( ff(ji  ,jj-1) + ff(ji,jj) ) * hur_e(ji,jj)
466                  zv_cor  = zx1 * ( ff(ji-1,jj  ) + ff(ji,jj) ) * hvr_e(ji,jj)
467                  ! after velocities with implicit bottom friction
468                  ua_e(ji,jj) = ( zub_e(ji,jj) + z2dt_e * ( zu_cor + zu_spg + zu_sld + zu_asp + zua(ji,jj) ) ) * umask(ji,jj,1)   &
469                     &         / ( 1.e0         - z2dt_e * bfrua(ji,jj) * hur_e(ji,jj) )
470                  va_e(ji,jj) = ( zvb_e(ji,jj) + z2dt_e * ( zv_cor + zv_spg + zv_sld + zv_asp + zva(ji,jj) ) ) * vmask(ji,jj,1)   &
471                     &         / ( 1.e0         - z2dt_e * bfrva(ji,jj) * hvr_e(ji,jj) )
[358]472               END DO
473            END DO
[508]474            !
[1502]475         ELSEIF ( ln_dynvor_een ) THEN                    !==  energy and enstrophy conserving scheme  ==!
[358]476            DO jj = 2, jpjm1
477               DO ji = fs_2, fs_jpim1   ! vector opt.
478                  ! surface pressure gradient
[592]479                  IF( lk_vvl) THEN
[1662]480                     zu_spg = -grav * (  ( rhd(ji+1,jj  ,1) + 1 ) * sshn_e(ji+1,jj  )    &
481                        &              - ( rhd(ji  ,jj  ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e1u(ji,jj)
482                     zv_spg = -grav * (  ( rhd(ji  ,jj+1,1) + 1 ) * sshn_e(ji  ,jj+1)    &
483                        &              - ( rhd(ji  ,jj  ,1) + 1 ) * sshn_e(ji  ,jj  )  ) / e2v(ji,jj)
[592]484                  ELSE
[1662]485                     zu_spg = -grav * ( sshn_e(ji+1,jj) - sshn_e(ji,jj) ) / e1u(ji,jj)
486                     zv_spg = -grav * ( sshn_e(ji,jj+1) - sshn_e(ji,jj) ) / e2v(ji,jj)
[592]487                  ENDIF
[2920]488                  ! add tidal astronomical forcing
489                  IF ( lk_tide ) THEN
490                  zu_spg = zu_spg + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) / e1u(ji,jj)
491                  zv_spg = zv_spg + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) / e2v(ji,jj)
492                  ENDIF
[358]493                  ! energy/enstrophy conserving formulation for planetary vorticity term
[1662]494                  zu_cor = + z1_4 / e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) + ftnw(ji+1,jj) * zwy(ji+1,jj  )   &
[1502]495                     &                           + ftse(ji,jj  ) * zwy(ji  ,jj-1) + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) * hur_e(ji,jj)
[1662]496                  zv_cor = - z1_4 / e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) + ftse(ji,jj+1) * zwx(ji  ,jj+1)   &
[1502]497                     &                           + ftnw(ji,jj  ) * zwx(ji-1,jj  ) + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) * hvr_e(ji,jj)
[1662]498                  ! after velocities with implicit bottom friction
499                  ua_e(ji,jj) = ( zub_e(ji,jj) + z2dt_e * ( zu_cor + zu_spg + zu_sld + zu_asp + zua(ji,jj) ) ) * umask(ji,jj,1)   &
500                     &         / ( 1.e0         - z2dt_e * bfrua(ji,jj) * hur_e(ji,jj) )
501                  va_e(ji,jj) = ( zvb_e(ji,jj) + z2dt_e * ( zv_cor + zv_spg + zv_sld + zv_asp + zva(ji,jj) ) ) * vmask(ji,jj,1)   &
502                     &         / ( 1.e0         - z2dt_e * bfrva(ji,jj) * hvr_e(ji,jj) )
[358]503               END DO
504            END DO
[508]505            !
[358]506         ENDIF
[1502]507         !                                                !* domain lateral boundary
508         !                                                !  -----------------------
509         !                                                      ! Flather's boundary condition for the barotropic loop :
510         !                                                      !         - Update sea surface height on each open boundary
511         !                                                      !         - Correct the velocity
[358]512
[2715]513         IF( lk_obc               )   CALL obc_fla_ts ( ua_e, va_e, sshn_e, ssha_e )
[2528]514         IF( lk_bdy .OR. ln_tides )   CALL bdy_dyn_fla( sshn_e ) 
[1502]515         !
516         CALL lbc_lnk( ua_e  , 'U', -1. )                      ! local domain boundaries
517         CALL lbc_lnk( va_e  , 'V', -1. )
518         CALL lbc_lnk( ssha_e, 'T',  1. )
[358]519
[1502]520         zu_sum  (:,:) = zu_sum  (:,:) + ua_e  (:,:)           ! Sum over sub-time-steps
521         zv_sum  (:,:) = zv_sum  (:,:) + va_e  (:,:) 
522         zssh_sum(:,:) = zssh_sum(:,:) + ssha_e(:,:) 
[367]523
[1502]524         !                                                !* Time filter and swap
525         !                                                !  --------------------
526         IF( jn == 1 ) THEN                                     ! Swap only (1st Euler time step)
527            zsshb_e(:,:) = sshn_e(:,:)
528            zub_e  (:,:) = zun_e (:,:)
529            zvb_e  (:,:) = zvn_e (:,:)
530            sshn_e (:,:) = ssha_e(:,:)
531            zun_e  (:,:) = ua_e  (:,:)
532            zvn_e  (:,:) = va_e  (:,:)
533         ELSE                                                   ! Swap + Filter
534            zsshb_e(:,:) = atfp * ( zsshb_e(:,:) + ssha_e(:,:) ) + atfp1 * sshn_e(:,:)
535            zub_e  (:,:) = atfp * ( zub_e  (:,:) + ua_e  (:,:) ) + atfp1 * zun_e (:,:)
536            zvb_e  (:,:) = atfp * ( zvb_e  (:,:) + va_e  (:,:) ) + atfp1 * zvn_e (:,:)
537            sshn_e (:,:) = ssha_e(:,:)
538            zun_e  (:,:) = ua_e  (:,:)
539            zvn_e  (:,:) = va_e  (:,:)
[358]540         ENDIF
541
[1502]542         IF( lk_vvl ) THEN                                !* Update ocean depth (variable volume case only)
543            !                                             !  ------------------
544            DO jj = 1, jpjm1                                    ! Sea Surface Height at u- & v-points
545               DO ji = 1, fs_jpim1   ! Vector opt.
546                  zsshun_e(ji,jj) = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) )       &
547                     &                  * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshn_e(ji  ,jj)    &
548                     &                    + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn_e(ji+1,jj) )
549                  zsshvn_e(ji,jj) = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) )       &
550                     &                  * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshn_e(ji,jj  )    &
551                     &                    + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn_e(ji,jj+1) )
[592]552               END DO
553            END DO
[1502]554            CALL lbc_lnk( zsshun_e, 'U', 1. )                   ! lateral boundaries conditions
555            CALL lbc_lnk( zsshvn_e, 'V', 1. ) 
[1438]556            !
[1502]557            hu_e (:,:) = hu_0(:,:) + zsshun_e(:,:)              ! Ocean depth at U- and V-points
558            hv_e (:,:) = hv_0(:,:) + zsshvn_e(:,:)
559            hur_e(:,:) = umask(:,:,1) / ( hu_e(:,:) + 1.e0 - umask(:,:,1) )
560            hvr_e(:,:) = vmask(:,:,1) / ( hv_e(:,:) + 1.e0 - vmask(:,:,1) )
561            !
[1438]562         ENDIF
[358]563         !                                                 ! ==================== !
564      END DO                                               !        end loop      !
565      !                                                    ! ==================== !
566
[367]567#if defined key_obc
[1502]568      IF( lp_obc_east  )   sshfoe_b(:,:) = zcoef * sshfoe_b(:,:)     !!gm totally useless ?????
[1241]569      IF( lp_obc_west  )   sshfow_b(:,:) = zcoef * sshfow_b(:,:)
570      IF( lp_obc_north )   sshfon_b(:,:) = zcoef * sshfon_b(:,:)
571      IF( lp_obc_south )   sshfos_b(:,:) = zcoef * sshfos_b(:,:)
[367]572#endif
[358]573
[1438]574      ! -----------------------------------------------------------------------------
[1502]575      ! Phase 3. update the general trend with the barotropic trend
[1438]576      ! -----------------------------------------------------------------------------
[1502]577      !
578      !                                   !* Time average ==> after barotropic u, v, ssh
579      zcoef =  1.e0 / ( 2 * nn_baro  + 1 ) 
[2528]580      zu_sum(:,:) = zcoef * zu_sum  (:,:) 
581      zv_sum(:,:) = zcoef * zv_sum  (:,:) 
[1502]582      !
583      !                                   !* update the general momentum trend
[358]584      DO jk=1,jpkm1
[2528]585         ua(:,:,jk) = ua(:,:,jk) + ( zu_sum(:,:) - ub_b(:,:) ) / z2dt_b
586         va(:,:,jk) = va(:,:,jk) + ( zv_sum(:,:) - vb_b(:,:) ) / z2dt_b
[358]587      END DO
[2528]588      un_b  (:,:) =  zu_sum(:,:) 
589      vn_b  (:,:) =  zv_sum(:,:) 
590      sshn_b(:,:) = zcoef * zssh_sum(:,:) 
[1502]591      !
592      !                                   !* write time-spliting arrays in the restart
[508]593      IF( lrst_oce )   CALL ts_rst( kt, 'WRITE' )
594      !
[1662]595      !
[2715]596      IF( wrk_not_released(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,         &
597         &                    11,12,13,14,15,16,17,18,19,20,21) )    &
598         CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays')
599      !
[508]600   END SUBROUTINE dyn_spg_ts
601
602
603   SUBROUTINE ts_rst( kt, cdrw )
604      !!---------------------------------------------------------------------
605      !!                   ***  ROUTINE ts_rst  ***
606      !!
607      !! ** Purpose : Read or write time-splitting arrays in restart file
608      !!----------------------------------------------------------------------
609      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
610      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
611      !
612      INTEGER ::  ji, jk        ! dummy loop indices
613      !!----------------------------------------------------------------------
614      !
615      IF( TRIM(cdrw) == 'READ' ) THEN
[1502]616         IF( iom_varid( numror, 'un_b', ldstop = .FALSE. ) > 0 ) THEN
617            CALL iom_get( numror, jpdom_autoglo, 'un_b'  , un_b  (:,:) )   ! external velocity issued
618            CALL iom_get( numror, jpdom_autoglo, 'vn_b'  , vn_b  (:,:) )   ! from barotropic loop
[508]619         ELSE
[1502]620            un_b (:,:) = 0.e0
621            vn_b (:,:) = 0.e0
[508]622            ! vertical sum
623            IF( lk_vopt_loop ) THEN          ! vector opt., forced unroll
624               DO jk = 1, jpkm1
625                  DO ji = 1, jpij
[1502]626                     un_b(ji,1) = un_b(ji,1) + fse3u(ji,1,jk) * un(ji,1,jk)
627                     vn_b(ji,1) = vn_b(ji,1) + fse3v(ji,1,jk) * vn(ji,1,jk)
[508]628                  END DO
629               END DO
630            ELSE                             ! No  vector opt.
631               DO jk = 1, jpkm1
[1502]632                  un_b(:,:) = un_b(:,:) + fse3u(:,:,jk) * un(:,:,jk)
633                  vn_b(:,:) = vn_b(:,:) + fse3v(:,:,jk) * vn(:,:,jk)
[508]634               END DO
635            ENDIF
[1502]636            un_b (:,:) = un_b(:,:) * hur(:,:)
637            vn_b (:,:) = vn_b(:,:) * hvr(:,:)
[508]638         ENDIF
[2528]639
640         ! Vertically integrated velocity (before)
641         IF (neuler/=0) THEN
642            ub_b (:,:) = 0.e0
643            vb_b (:,:) = 0.e0
644
645            ! vertical sum
646            IF( lk_vopt_loop ) THEN          ! vector opt., forced unroll
647               DO jk = 1, jpkm1
648                  DO ji = 1, jpij
649                     ub_b(ji,1) = ub_b(ji,1) + fse3u_b(ji,1,jk) * ub(ji,1,jk)
650                     vb_b(ji,1) = vb_b(ji,1) + fse3v_b(ji,1,jk) * vb(ji,1,jk)
651                  END DO
652               END DO
653            ELSE                             ! No  vector opt.
654               DO jk = 1, jpkm1
655                  ub_b(:,:) = ub_b(:,:) + fse3u_b(:,:,jk) * ub(:,:,jk)
656                  vb_b(:,:) = vb_b(:,:) + fse3v_b(:,:,jk) * vb(:,:,jk)
657               END DO
658            ENDIF
659
660            IF( lk_vvl ) THEN
661               ub_b (:,:) = ub_b(:,:) * umask(:,:,1) / ( hu_0(:,:) + sshu_b(:,:) + 1.e0 - umask(:,:,1) )
662               vb_b (:,:) = vb_b(:,:) * vmask(:,:,1) / ( hv_0(:,:) + sshv_b(:,:) + 1.e0 - vmask(:,:,1) )
663            ELSE
664               ub_b(:,:) = ub_b(:,:) * hur(:,:)
665               vb_b(:,:) = vb_b(:,:) * hvr(:,:)
666            ENDIF
667         ELSE                                 ! neuler==0
668            ub_b (:,:) = un_b (:,:)
669            vb_b (:,:) = vn_b (:,:)
670         ENDIF
671
[2145]672         IF( iom_varid( numror, 'sshn_b', ldstop = .FALSE. ) > 0 ) THEN
[2715]673            CALL iom_get( numror, jpdom_autoglo, 'sshn_b' , sshn_b (:,:) )   ! filtered ssh
[2145]674         ELSE
[2715]675            sshn_b(:,:) = sshb(:,:)   ! if not in restart set previous time mean to current baroclinic before value   
[2145]676         ENDIF
[508]677      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN
[2145]678         CALL iom_rstput( kt, nitrst, numrow, 'un_b'   , un_b  (:,:) )   ! external velocity and ssh
679         CALL iom_rstput( kt, nitrst, numrow, 'vn_b'   , vn_b  (:,:) )   ! issued from barotropic loop
680         CALL iom_rstput( kt, nitrst, numrow, 'sshn_b' , sshn_b(:,:) )   !
[358]681      ENDIF
[508]682      !
683   END SUBROUTINE ts_rst
684
[358]685#else
686   !!----------------------------------------------------------------------
687   !!   Default case :   Empty module   No standart free surface cst volume
688   !!----------------------------------------------------------------------
689CONTAINS
[2715]690   INTEGER FUNCTION dyn_spg_ts_alloc()    ! Dummy function
691      dyn_spg_ts_alloc = 0
692   END FUNCTION dyn_spg_ts_alloc
693   SUBROUTINE dyn_spg_ts( kt )            ! Empty routine
694      INTEGER, INTENT(in) :: kt
[358]695      WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt
696   END SUBROUTINE dyn_spg_ts
[2715]697   SUBROUTINE ts_rst( kt, cdrw )          ! Empty routine
[657]698      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
699      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
700      WRITE(*,*) 'ts_rst    : You should not have seen this print! error?', kt, cdrw
701   END SUBROUTINE ts_rst   
[358]702#endif
703   
704   !!======================================================================
705END MODULE dynspg_ts
Note: See TracBrowser for help on using the repository browser.