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.
step.F90 in trunk/NEMOGCM/NEMO/OPA_SRC – NEMO

source: trunk/NEMOGCM/NEMO/OPA_SRC/step.F90 @ 5510

Last change on this file since 5510 was 5510, checked in by clem, 9 years ago

enable the use of BDY with ice (LIM3) in case of SAS. Calls to bdy had to be added in SAS eventhough it is not very clean. This is something that needs to be rethought in the future but it does the job for now

  • Property svn:keywords set to Id
File size: 23.6 KB
Line 
1MODULE step
2   !!======================================================================
3   !!                       ***  MODULE step  ***
4   !! Time-stepping    : manager of the ocean, tracer and ice time stepping
5   !!======================================================================
6   !! History :  OPA  !  1991-03  (G. Madec)  Original code
7   !!             -   !  1991-11  (G. Madec)
8   !!             -   !  1992-06  (M. Imbard)  add a first output record
9   !!             -   !  1996-04  (G. Madec)  introduction of dynspg
10   !!             -   !  1996-04  (M.A. Foujols)  introduction of passive tracer
11   !!            8.0  !  1997-06  (G. Madec)  new architecture of call
12   !!            8.2  !  1997-06  (G. Madec, M. Imbard, G. Roullet)  free surface
13   !!             -   !  1999-02  (G. Madec, N. Grima)  hpg implicit
14   !!             -   !  2000-07  (J-M Molines, M. Imbard)  Open Bondary Conditions
15   !!   NEMO     1.0  !  2002-06  (G. Madec)  free form, suppress macro-tasking
16   !!             -   !  2004-08  (C. Talandier) New trends organization
17   !!             -   !  2005-01  (C. Ethe) Add the KPP closure scheme
18   !!             -   !  2005-11  (G. Madec)  Reorganisation of tra and dyn calls
19   !!             -   !  2006-01  (L. Debreu, C. Mazauric)  Agrif implementation
20   !!             -   !  2006-07  (S. Masson)  restart using iom
21   !!            3.2  !  2009-02  (G. Madec, R. Benshila)  reintroduicing z*-coordinate
22   !!             -   !  2009-06  (S. Masson, G. Madec)  TKE restart compatible with key_cpl
23   !!            3.3  !  2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface
24   !!             -   !  2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA
25   !!            3.4  !  2011-04  (G. Madec, C. Ethe) Merge of dtatem and dtasal
26   !!                 !  2012-07  (J. Simeon, G. Madec, C. Ethe) Online coarsening of outputs
27   !!            3.7  !  2014-04  (F. Roquet, G. Madec) New equations of state
28   !!----------------------------------------------------------------------
29
30   !!----------------------------------------------------------------------
31   !!   stp             : OPA system time-stepping
32   !!----------------------------------------------------------------------
33   USE step_oce         ! time stepping definition modules
34   USE iom
35
36   IMPLICIT NONE
37   PRIVATE
38
39   PUBLIC   stp   ! called by opa.F90
40
41   !! * Substitutions
42#  include "domzgr_substitute.h90"
43!!gm   #  include "zdfddm_substitute.h90"
44   !!----------------------------------------------------------------------
45   !! NEMO/OPA 3.7 , NEMO Consortium (2014)
46   !! $Id$
47   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
48   !!----------------------------------------------------------------------
49CONTAINS
50
51#if defined key_agrif
52   SUBROUTINE stp( )
53      INTEGER             ::   kstp   ! ocean time-step index
54#else
55   SUBROUTINE stp( kstp )
56      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
57#endif
58      !!----------------------------------------------------------------------
59      !!                     ***  ROUTINE stp  ***
60      !!
61      !! ** Purpose : - Time stepping of OPA (momentum and active tracer eqs.)
62      !!              - Time stepping of LIM (dynamic and thermodynamic eqs.)
63      !!              - Tme stepping  of TRC (passive tracer eqs.)
64      !!
65      !! ** Method  : -1- Update forcings and data
66      !!              -2- Update ocean physics
67      !!              -3- Compute the t and s trends
68      !!              -4- Update t and s
69      !!              -5- Compute the momentum trends
70      !!              -6- Update the horizontal velocity
71      !!              -7- Compute the diagnostics variables (rd,N2, div,cur,w)
72      !!              -8- Outputs and diagnostics
73      !!----------------------------------------------------------------------
74      INTEGER ::   jk       ! dummy loop indice
75      INTEGER ::   indic    ! error indicator if < 0
76      INTEGER ::   kcall    ! optional integer argument (dom_vvl_sf_nxt)
77      !! ---------------------------------------------------------------------
78
79#if defined key_agrif
80      kstp = nit000 + Agrif_Nb_Step()
81!      IF ( Agrif_Root() .and. lwp) Write(*,*) '---'
82!      IF (lwp) Write(*,*) 'Grid Number',Agrif_Fixed(),' time step ',kstp
83      IF ( kstp == (nit000 + 1) ) lk_agrif_fstep = .FALSE.
84# if defined key_iomput
85      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( cxios_context )
86# endif
87#endif
88                             indic = 0           ! reset to no error condition
89      IF( kstp == nit000 ) THEN
90         ! must be done after nemo_init for AGRIF+XIOS+OASIS
91                      CALL iom_init(      cxios_context          )  ! iom_put initialization
92         IF( ln_crs ) CALL iom_init( TRIM(cxios_context)//"_crs" )  ! initialize context for coarse grid
93      ENDIF
94
95      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
96                             CALL iom_setkt( kstp - nit000 + 1,      cxios_context          )   ! tell iom we are at time step kstp
97      IF( ln_crs     )       CALL iom_setkt( kstp - nit000 + 1, TRIM(cxios_context)//"_crs" )   ! tell iom we are at time step kstp
98
99      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
100      ! Update data, open boundaries, surface boundary condition (including sea-ice)
101      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
102      IF( lk_tide    )   CALL sbc_tide( kstp )
103      IF( lk_bdy     )  THEN
104         IF( ln_apr_dyn) CALL sbc_apr( kstp )   ! bdy_dta needs ssh_ib
105                         CALL bdy_dta ( kstp, time_offset=+1 )   ! update dynamic & tracer data at open boundaries
106      ENDIF
107                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice)
108                                                      ! clem: moved here for bdy ice purpose
109      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
110      ! Update stochastic parameters and random T/S fluctuations
111      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112                        CALL sto_par( kstp )          ! Stochastic parameters
113
114      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
115      ! Ocean physics update                (ua, va, tsa used as workspace)
116      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
117      !  THERMODYNAMICS
118                         CALL eos_rab( tsb, rab_b )       ! before local thermal/haline expension ratio at T-points
119                         CALL eos_rab( tsn, rab_n )       ! now    local thermal/haline expension ratio at T-points
120                         CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
121                         CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
122      !
123      !  VERTICAL PHYSICS
124                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic)
125      !                                               ! Vertical eddy viscosity and diffusivity coefficients
126      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz
127      IF( lk_zdftke  )   CALL zdf_tke( kstp )            ! TKE closure scheme for Kz
128      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz
129      IF( lk_zdfkpp  )   CALL zdf_kpp( kstp )            ! KPP closure scheme for Kz
130      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value)
131         avt (:,:,:) = rn_avt0 * wmask (:,:,:)
132         avmu(:,:,:) = rn_avm0 * wumask(:,:,:)
133         avmv(:,:,:) = rn_avm0 * wvmask(:,:,:)
134      ENDIF
135      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
136         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO
137      ENDIF
138      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
139
140      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
141
142      IF( lk_zdfddm .AND. .NOT. lk_zdfkpp )   &
143         &               CALL zdf_ddm( kstp )         ! double diffusive mixing
144
145                         CALL zdf_mxl( kstp )         ! mixed layer depth
146
147                                                      ! write TKE or GLS information in the restart file
148      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
149      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
150      !
151      !  LATERAL  PHYSICS
152      !
153      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing
154         IF(ln_sto_eos ) CALL sto_pts( tsn )          ! Random T/S fluctuations
155                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density
156         IF( ln_zps .AND. .NOT. ln_isfcav)                               &
157            &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient
158            &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
159         IF( ln_zps .AND.       ln_isfcav)                               &
160            &            CALL zps_hde_isf( kstp, jpts, tsb, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
161            &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
162            &                                   gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the first ocean level
163         IF( ln_traldf_grif ) THEN                           ! before slope for Griffies operator
164                         CALL ldf_slp_grif( kstp )
165         ELSE
166                         CALL ldf_slp( kstp, rhd, rn2b )     ! before slope for Madec operator
167         ENDIF
168      ENDIF
169#if defined key_traldf_c2d
170      IF( lk_traldf_eiv )   CALL ldf_eiv( kstp )      ! eddy induced velocity coefficient
171#endif
172#if defined key_traldf_c3d && defined key_traldf_smag
173                          CALL ldf_tra_smag( kstp )      ! eddy induced velocity coefficient
174#  endif
175#if defined key_dynldf_c3d && defined key_dynldf_smag
176                          CALL ldf_dyn_smag( kstp )      ! eddy induced velocity coefficient
177#  endif
178
179      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
180      !  Ocean dynamics : hdiv, rot, ssh, e3, wn
181      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
182                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur)
183      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors
184                         CALL wzv           ( kstp )  ! now cross-level velocity
185
186      IF( lk_dynspg_ts ) THEN 
187          ! In case the time splitting case, update almost all momentum trends here:
188          ! Note that the computation of vertical velocity above, hence "after" sea level
189          ! is necessary to compute momentum advection for the rhs of barotropic loop:
190            IF(ln_sto_eos ) CALL sto_pts( tsn )                             ! Random T/S fluctuations
191                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation
192            IF( ln_zps .AND. .NOT. ln_isfcav)                               &
193               &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
194               &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
195            IF( ln_zps .AND.       ln_isfcav)                               &
196               &            CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
197               &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
198               &                                   gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
199
200                                  ua(:,:,:) = 0.e0             ! set dynamics trends to zero
201                                  va(:,:,:) = 0.e0
202          IF(  ln_asmiau .AND. &
203             & ln_dyninc       )  CALL dyn_asm_inc  ( kstp )   ! apply dynamics assimilation increment
204          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! subtract Neptune velocities (simplified)
205          IF( lk_bdy           )  CALL bdy_dyn3d_dmp( kstp )   ! bdy damping trends
206                                  CALL dyn_adv      ( kstp )   ! advection (vector or flux form)
207                                  CALL dyn_vor      ( kstp )   ! vorticity term including Coriolis
208                                  CALL dyn_ldf      ( kstp )   ! lateral mixing
209          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! add Neptune velocities (simplified)
210#if defined key_agrif
211          IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momentum sponge
212#endif
213                                  CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure
214                                  CALL dyn_spg( kstp, indic )  ! surface pressure gradient
215
216                                  ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated at this stage)
217                                  va_sv(:,:,:) = va(:,:,:)
218
219                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case)
220          IF( lk_vvl     )        CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component)
221                                  CALL wzv           ( kstp )  ! now cross-level velocity
222      ENDIF
223
224      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
225      ! diagnostics and outputs             (ua, va, tsa used as workspace)
226      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
227      IF( lk_floats  )      CALL flo_stp( kstp )         ! drifting Floats
228      IF( lk_diahth  )      CALL dia_hth( kstp )         ! Thermocline depth (20 degres isotherm depth)
229      IF( .NOT. ln_cpl )    CALL dia_fwb( kstp )         ! Fresh water budget diagnostics
230      IF( lk_diadct  )      CALL dia_dct( kstp )         ! Transports
231      IF( lk_diaar5  )      CALL dia_ar5( kstp )         ! ar5 diag
232      IF( lk_diaharm )      CALL dia_harm( kstp )        ! Tidal harmonic analysis
233                            CALL dia_wri( kstp )         ! ocean model: outputs
234      !
235      IF( ln_crs     )      CALL crs_fld( kstp )         ! ocean model: online field coarsening & output
236
237#if defined key_top
238      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
239      ! Passive Tracer Model
240      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
241                         CALL trc_stp( kstp )         ! time-stepping
242#endif
243
244
245      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
246      ! Active tracers                              (ua, va used as workspace)
247      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
248                             tsa(:,:,:,:) = 0.e0            ! set tracer trends to zero
249
250      IF(  ln_asmiau .AND. &
251         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment
252                             CALL tra_sbc    ( kstp )       ! surface boundary condition
253      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr
254      IF( ln_trabbc      )   CALL tra_bbc    ( kstp )       ! bottom heat flux
255      IF( lk_trabbl      )   CALL tra_bbl    ( kstp )       ! advective (and/or diffusive) bottom boundary layer scheme
256      IF( ln_tradmp      )   CALL tra_dmp    ( kstp )       ! internal damping trends
257      IF( lk_bdy         )   CALL bdy_tra_dmp( kstp )       ! bdy damping trends
258                             CALL tra_adv    ( kstp )       ! horizontal & vertical advection
259      IF( lk_zdfkpp      )   CALL tra_kpp    ( kstp )       ! KPP non-local tracer fluxes
260                             CALL tra_ldf    ( kstp )       ! lateral mixing
261
262      IF( ln_diaptr      )   CALL dia_ptr                   ! Poleward adv/ldf TRansports diagnostics
263
264#if defined key_agrif
265      IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra          ! tracers sponge
266#endif
267                             CALL tra_zdf    ( kstp )       ! vertical mixing and after tracer fields
268
269      IF( ln_dynhpg_imp  ) THEN                             ! semi-implicit hpg (time stepping then eos)
270         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection
271                             CALL tra_nxt( kstp )                ! tracer fields at next time step
272            IF( ln_sto_eos ) CALL sto_pts( tsn )                 ! Random T/S fluctuations
273                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation
274            IF( ln_zps .AND. .NOT. ln_isfcav)                                &
275               &             CALL zps_hde    ( kstp, jpts, tsa, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
276               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level
277            IF( ln_zps .AND.       ln_isfcav)                                &
278               &             CALL zps_hde_isf( kstp, jpts, tsa, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
279               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
280               &                                    gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
281      ELSE                                                  ! centered hpg  (eos then time stepping)
282         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case
283            IF( ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations
284                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation
285         IF( ln_zps .AND. .NOT. ln_isfcav)                                   &
286               &             CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
287               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level
288         IF( ln_zps .AND.       ln_isfcav)                                   & 
289               &             CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
290               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
291               &                                    gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
292         ENDIF
293         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection
294                             CALL tra_nxt( kstp )                ! tracer fields at next time step
295      ENDIF
296
297      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
298      ! Dynamics                                    (tsa used as workspace)
299      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
300      IF( lk_dynspg_ts   )  THEN
301                                                             ! revert to previously computed momentum tendencies
302                                                             ! (not using ua, va as temporary arrays during tracers' update could avoid that)
303                               ua(:,:,:) = ua_sv(:,:,:)
304                               va(:,:,:) = va_sv(:,:,:)
305                                                             ! Revert now divergence and rotational to previously computed ones
306                                                             !(needed because of the time swap in div_cur, at the beginning of each time step)
307                               hdivn(:,:,:) = hdivb(:,:,:)
308                               rotn(:,:,:)  = rotb(:,:,:) 
309
310                               CALL dyn_bfr( kstp )         ! bottom friction
311                               CALL dyn_zdf( kstp )         ! vertical diffusion
312      ELSE
313                               ua(:,:,:) = 0.e0             ! set dynamics trends to zero
314                               va(:,:,:) = 0.e0
315
316        IF(  ln_asmiau .AND. &
317           & ln_dyninc      )  CALL dyn_asm_inc( kstp )     ! apply dynamics assimilation increment
318        IF( ln_bkgwri )        CALL asm_bkg_wri( kstp )     ! output background fields
319        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! subtract Neptune velocities (simplified)
320        IF( lk_bdy          )  CALL bdy_dyn3d_dmp(kstp )    ! bdy damping trends
321                               CALL dyn_adv( kstp )         ! advection (vector or flux form)
322                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis
323                               CALL dyn_ldf( kstp )         ! lateral mixing
324        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified)
325#if defined key_agrif
326        IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn        ! momemtum sponge
327#endif
328                               CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure
329                               CALL dyn_bfr( kstp )         ! bottom friction
330                               CALL dyn_zdf( kstp )         ! vertical diffusion
331                               CALL dyn_spg( kstp, indic )  ! surface pressure gradient
332      ENDIF
333                               CALL dyn_nxt( kstp )         ! lateral velocity at next time step
334
335                               CALL ssh_swp( kstp )         ! swap of sea surface height
336      IF( lk_vvl           )   CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors
337
338      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics
339      IF( lk_diaobs  )         CALL dia_obs( kstp )         ! obs-minus-model (assimilation) diagnostics (call after dynamics update)
340
341      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
342      ! Control and restarts
343      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
344                               CALL stp_ctl( kstp, indic )
345      IF( indic < 0        )   THEN
346                               CALL ctl_stop( 'step: indic < 0' )
347                               CALL dia_wri_state( 'output.abort', kstp )
348      ENDIF
349      IF( kstp == nit000   )   THEN
350                 CALL iom_close( numror )     ! close input  ocean restart file
351         IF(lwm) CALL FLUSH    ( numond )     ! flush output namelist oce
352         IF( lwm.AND.numoni /= -1 ) CALL FLUSH    ( numoni )     ! flush output namelist ice
353      ENDIF
354      IF( lrst_oce         )   CALL rst_write    ( kstp )   ! write output ocean restart file
355
356      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
357      ! Coupled mode
358      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
359      IF( lk_oasis         )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges
360      !
361#if defined key_iomput
362      IF( kstp == nitend .OR. indic < 0 ) THEN
363                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF
364         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !
365      ENDIF
366#endif
367      !
368      IF( nn_timing == 1 .AND.  kstp == nit000  )   CALL timing_reset
369      !
370   END SUBROUTINE stp
371
372   !!======================================================================
373END MODULE step
Note: See TracBrowser for help on using the repository browser.