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 branches/UKMO/dev_r5518_ciceiau/NEMOGCM/NEMO/OPA_SRC – NEMO

source: branches/UKMO/dev_r5518_ciceiau/NEMOGCM/NEMO/OPA_SRC/step.F90 @ 11251

Last change on this file since 11251 was 6902, checked in by drew, 8 years ago

UKMO CICE Ticket#68. Fix bug in delivery of sea ice increments to CICE code due to assignment of sea ice increments after call to SBC. May require additional changes to CICE code to have seaice iau code called after thermodynamics.

File size: 23.7 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      IF( ln_seaiceinc ) &
108         &               CALL seaice_asm_inc ( kstp ) ! setup sea ice concentration increment
109                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice)
110                                                      ! clem: moved here for bdy ice purpose
111      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112      ! Update stochastic parameters and random T/S fluctuations
113      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
114                        CALL sto_par( kstp )          ! Stochastic parameters
115
116      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
117      ! Ocean physics update                (ua, va, tsa used as workspace)
118      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
119      !  THERMODYNAMICS
120                         CALL eos_rab( tsb, rab_b )       ! before local thermal/haline expension ratio at T-points
121                         CALL eos_rab( tsn, rab_n )       ! now    local thermal/haline expension ratio at T-points
122                         CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
123                         CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
124      !
125      !  VERTICAL PHYSICS
126                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic)
127      !                                               ! Vertical eddy viscosity and diffusivity coefficients
128      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz
129      IF( lk_zdftke  )   CALL zdf_tke( kstp )            ! TKE closure scheme for Kz
130      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz
131      IF( lk_zdfkpp  )   CALL zdf_kpp( kstp )            ! KPP closure scheme for Kz
132      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value)
133         avt (:,:,:) = rn_avt0 * wmask (:,:,:)
134         avmu(:,:,:) = rn_avm0 * wumask(:,:,:)
135         avmv(:,:,:) = rn_avm0 * wvmask(:,:,:)
136      ENDIF
137      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
138         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO
139      ENDIF
140      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
141
142      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
143
144      IF( lk_zdfddm .AND. .NOT. lk_zdfkpp )   &
145         &               CALL zdf_ddm( kstp )         ! double diffusive mixing
146
147                         CALL zdf_mxl( kstp )         ! mixed layer depth
148
149                                                      ! write TKE or GLS information in the restart file
150      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
151      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
152      !
153      !  LATERAL  PHYSICS
154      !
155      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing
156         IF(ln_sto_eos ) CALL sto_pts( tsn )          ! Random T/S fluctuations
157                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density
158         IF( ln_zps .AND. .NOT. ln_isfcav)                               &
159            &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient
160            &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
161         IF( ln_zps .AND.       ln_isfcav)                               &
162            &            CALL zps_hde_isf( kstp, jpts, tsb, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
163            &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
164            &                                   gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the first ocean level
165         IF( ln_traldf_grif ) THEN                           ! before slope for Griffies operator
166                         CALL ldf_slp_grif( kstp )
167         ELSE
168                         CALL ldf_slp( kstp, rhd, rn2b )     ! before slope for Madec operator
169         ENDIF
170      ENDIF
171#if defined key_traldf_c2d
172      IF( lk_traldf_eiv )   CALL ldf_eiv( kstp )      ! eddy induced velocity coefficient
173#endif
174#if defined key_traldf_c3d && defined key_traldf_smag
175                          CALL ldf_tra_smag( kstp )      ! eddy induced velocity coefficient
176#  endif
177#if defined key_dynldf_c3d && defined key_dynldf_smag
178                          CALL ldf_dyn_smag( kstp )      ! eddy induced velocity coefficient
179#  endif
180
181      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
182      !  Ocean dynamics : hdiv, rot, ssh, e3, wn
183      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
184                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur)
185      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors
186                         CALL wzv           ( kstp )  ! now cross-level velocity
187
188      IF( lk_dynspg_ts ) THEN 
189          ! In case the time splitting case, update almost all momentum trends here:
190          ! Note that the computation of vertical velocity above, hence "after" sea level
191          ! is necessary to compute momentum advection for the rhs of barotropic loop:
192            IF(ln_sto_eos ) CALL sto_pts( tsn )                             ! Random T/S fluctuations
193                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation
194            IF( ln_zps .AND. .NOT. ln_isfcav)                               &
195               &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
196               &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
197            IF( ln_zps .AND.       ln_isfcav)                               &
198               &            CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
199               &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
200               &                                   gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
201
202                                  ua(:,:,:) = 0.e0             ! set dynamics trends to zero
203                                  va(:,:,:) = 0.e0
204          IF(  ln_asmiau .AND. &
205             & ln_dyninc       )  CALL dyn_asm_inc  ( kstp )   ! apply dynamics assimilation increment
206          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! subtract Neptune velocities (simplified)
207          IF( lk_bdy           )  CALL bdy_dyn3d_dmp( kstp )   ! bdy damping trends
208                                  CALL dyn_adv      ( kstp )   ! advection (vector or flux form)
209                                  CALL dyn_vor      ( kstp )   ! vorticity term including Coriolis
210                                  CALL dyn_ldf      ( kstp )   ! lateral mixing
211          IF( ln_neptsimp )       CALL dyn_nept_cor ( kstp )   ! add Neptune velocities (simplified)
212#if defined key_agrif
213          IF(.NOT. Agrif_Root())  CALL Agrif_Sponge_dyn        ! momentum sponge
214#endif
215                                  CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure
216                                  CALL dyn_spg( kstp, indic )  ! surface pressure gradient
217
218                                  ua_sv(:,:,:) = ua(:,:,:)     ! Save trends (barotropic trend has been fully updated at this stage)
219                                  va_sv(:,:,:) = va(:,:,:)
220
221                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case)
222          IF( lk_vvl     )        CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component)
223                                  CALL wzv           ( kstp )  ! now cross-level velocity
224      ENDIF
225
226      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
227      ! diagnostics and outputs             (ua, va, tsa used as workspace)
228      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
229      IF( lk_floats  )      CALL flo_stp( kstp )         ! drifting Floats
230      IF( lk_diahth  )      CALL dia_hth( kstp )         ! Thermocline depth (20 degres isotherm depth)
231      IF( .NOT. ln_cpl )    CALL dia_fwb( kstp )         ! Fresh water budget diagnostics
232      IF( lk_diadct  )      CALL dia_dct( kstp )         ! Transports
233      IF( lk_diaar5  )      CALL dia_ar5( kstp )         ! ar5 diag
234      IF( lk_diaharm )      CALL dia_harm( kstp )        ! Tidal harmonic analysis
235                            CALL dia_wri( kstp )         ! ocean model: outputs
236      !
237      IF( ln_crs     )      CALL crs_fld( kstp )         ! ocean model: online field coarsening & output
238
239#if defined key_top
240      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
241      ! Passive Tracer Model
242      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
243                         CALL trc_stp( kstp )         ! time-stepping
244#endif
245
246
247      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
248      ! Active tracers                              (ua, va used as workspace)
249      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
250                             tsa(:,:,:,:) = 0.e0            ! set tracer trends to zero
251
252      IF(  ln_asmiau .AND. &
253         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment
254                             CALL tra_sbc    ( kstp )       ! surface boundary condition
255      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr
256      IF( ln_trabbc      )   CALL tra_bbc    ( kstp )       ! bottom heat flux
257      IF( lk_trabbl      )   CALL tra_bbl    ( kstp )       ! advective (and/or diffusive) bottom boundary layer scheme
258      IF( ln_tradmp      )   CALL tra_dmp    ( kstp )       ! internal damping trends
259      IF( lk_bdy         )   CALL bdy_tra_dmp( kstp )       ! bdy damping trends
260                             CALL tra_adv    ( kstp )       ! horizontal & vertical advection
261      IF( lk_zdfkpp      )   CALL tra_kpp    ( kstp )       ! KPP non-local tracer fluxes
262                             CALL tra_ldf    ( kstp )       ! lateral mixing
263
264      IF( ln_diaptr      )   CALL dia_ptr                   ! Poleward adv/ldf TRansports diagnostics
265
266#if defined key_agrif
267      IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra          ! tracers sponge
268#endif
269                             CALL tra_zdf    ( kstp )       ! vertical mixing and after tracer fields
270
271      IF( ln_dynhpg_imp  ) THEN                             ! semi-implicit hpg (time stepping then eos)
272         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection
273                             CALL tra_nxt( kstp )                ! tracer fields at next time step
274            IF( ln_sto_eos ) CALL sto_pts( tsn )                 ! Random T/S fluctuations
275                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation
276            IF( ln_zps .AND. .NOT. ln_isfcav)                                &
277               &             CALL zps_hde    ( kstp, jpts, tsa, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
278               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level
279            IF( ln_zps .AND.       ln_isfcav)                                &
280               &             CALL zps_hde_isf( kstp, jpts, tsa, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
281               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
282               &                                    gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
283      ELSE                                                  ! centered hpg  (eos then time stepping)
284         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case
285            IF( ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations
286                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation
287         IF( ln_zps .AND. .NOT. ln_isfcav)                                   &
288               &             CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
289               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level
290         IF( ln_zps .AND.       ln_isfcav)                                   & 
291               &             CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF)
292               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
293               &                                    gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
294         ENDIF
295         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection
296                             CALL tra_nxt( kstp )                ! tracer fields at next time step
297      ENDIF
298
299      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
300      ! Dynamics                                    (tsa used as workspace)
301      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
302      IF( lk_dynspg_ts   )  THEN
303                                                             ! revert to previously computed momentum tendencies
304                                                             ! (not using ua, va as temporary arrays during tracers' update could avoid that)
305                               ua(:,:,:) = ua_sv(:,:,:)
306                               va(:,:,:) = va_sv(:,:,:)
307                                                             ! Revert now divergence and rotational to previously computed ones
308                                                             !(needed because of the time swap in div_cur, at the beginning of each time step)
309                               hdivn(:,:,:) = hdivb(:,:,:)
310                               rotn(:,:,:)  = rotb(:,:,:) 
311
312                               CALL dyn_bfr( kstp )         ! bottom friction
313                               CALL dyn_zdf( kstp )         ! vertical diffusion
314      ELSE
315                               ua(:,:,:) = 0.e0             ! set dynamics trends to zero
316                               va(:,:,:) = 0.e0
317
318        IF(  ln_asmiau .AND. &
319           & ln_dyninc      )  CALL dyn_asm_inc( kstp )     ! apply dynamics assimilation increment
320        IF( ln_bkgwri )        CALL asm_bkg_wri( kstp )     ! output background fields
321        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! subtract Neptune velocities (simplified)
322        IF( lk_bdy          )  CALL bdy_dyn3d_dmp(kstp )    ! bdy damping trends
323                               CALL dyn_adv( kstp )         ! advection (vector or flux form)
324                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis
325                               CALL dyn_ldf( kstp )         ! lateral mixing
326        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified)
327#if defined key_agrif
328        IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn        ! momemtum sponge
329#endif
330                               CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure
331                               CALL dyn_bfr( kstp )         ! bottom friction
332                               CALL dyn_zdf( kstp )         ! vertical diffusion
333                               CALL dyn_spg( kstp, indic )  ! surface pressure gradient
334      ENDIF
335                               CALL dyn_nxt( kstp )         ! lateral velocity at next time step
336
337                               CALL ssh_swp( kstp )         ! swap of sea surface height
338      IF( lk_vvl           )   CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors
339
340      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics
341      IF( lk_diaobs  )         CALL dia_obs( kstp )         ! obs-minus-model (assimilation) diagnostics (call after dynamics update)
342
343      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
344      ! Control and restarts
345      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
346                               CALL stp_ctl( kstp, indic )
347      IF( indic < 0        )   THEN
348                               CALL ctl_stop( 'step: indic < 0' )
349                               CALL dia_wri_state( 'output.abort', kstp )
350      ENDIF
351      IF( kstp == nit000   )   THEN
352                 CALL iom_close( numror )     ! close input  ocean restart file
353         IF(lwm) CALL FLUSH    ( numond )     ! flush output namelist oce
354         IF( lwm.AND.numoni /= -1 ) CALL FLUSH    ( numoni )     ! flush output namelist ice
355      ENDIF
356      IF( lrst_oce         )   CALL rst_write    ( kstp )   ! write output ocean restart file
357
358      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
359      ! Coupled mode
360      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
361      IF( lk_oasis         )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges
362      !
363#if defined key_iomput
364      IF( kstp == nitend .OR. indic < 0 ) THEN
365                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF
366         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !
367      ENDIF
368#endif
369      !
370      IF( nn_timing == 1 .AND.  kstp == nit000  )   CALL timing_reset
371      !
372   END SUBROUTINE stp
373
374   !!======================================================================
375END MODULE step
Note: See TracBrowser for help on using the repository browser.