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 @ 5487

Last change on this file since 5487 was 5456, checked in by deazer, 9 years ago

Trunk Bug Fix see: forge.ipsl.jussieu.fr/nemo/ticket/1521
Corrects order of statements in step.f90 to allow atmospheric pressure to be read in
before it is applied to the bdys.

Passes sette. But AMM12 required a new set of fluxes which are now generated but not on the ftp site yet.
Thus retain the namelist
without the apr option on until the fluxes are added to the ftp site, otherwise sette will fail.

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