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/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC – NEMO

source: branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/step.F90 @ 5870

Last change on this file since 5870 was 5870, checked in by acc, 8 years ago

Branch 2015/dev_r5803_NOC_WAD. Merge in trunk changes from 5803 to 5869 in preparation for merge. Also tidied and reorganised some wetting and drying code. Renamed wadlmt.F90 to wetdry.F90. Wetting drying code changes restricted to domzgr.F90, domvvl.F90 nemogcm.F90 sshwzv.F90, dynspg_ts.F90, wetdry.F90 and dynhpg.F90. Code passes full SETTE tests with ln_wd=.false.. Still awaiting test case for checking with ln_wd=.false.

  • Property svn:keywords set to Id
File size: 23.8 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   !!            3.6  !  2012-07  (J. Simeon, G. Madec. C. Ethe)  Online coarsening of outputs
27   !!            3.6  !  2014-04  (F. Roquet, G. Madec) New equations of state
28   !!            3.7  !  2014-10  (G. Madec)  LDF simplication
29   !!             -   !  2014-12  (G. Madec) remove KPP scheme
30   !!----------------------------------------------------------------------
31
32   !!----------------------------------------------------------------------
33   !!   stp             : OPA system time-stepping
34   !!----------------------------------------------------------------------
35   USE step_oce         ! time stepping definition modules
36   USE iom
37
38   IMPLICIT NONE
39   PRIVATE
40
41   PUBLIC   stp   ! called by nemogcm.F90
42
43   !! * Substitutions
44#  include "domzgr_substitute.h90"
45!!gm   #  include "zdfddm_substitute.h90"
46   !!----------------------------------------------------------------------
47   !! NEMO/OPA 3.7 , NEMO Consortium (2015)
48   !! $Id$
49   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
50   !!----------------------------------------------------------------------
51CONTAINS
52
53#if defined key_agrif
54   RECURSIVE SUBROUTINE stp( )
55      INTEGER             ::   kstp   ! ocean time-step index
56#else
57   SUBROUTINE stp( kstp )
58      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
59#endif
60      !!----------------------------------------------------------------------
61      !!                     ***  ROUTINE stp  ***
62      !!
63      !! ** Purpose : - Time stepping of OPA (momentum and active tracer eqs.)
64      !!              - Time stepping of LIM (dynamic and thermodynamic eqs.)
65      !!              - Tme stepping  of TRC (passive tracer eqs.)
66      !!
67      !! ** Method  : -1- Update forcings and data
68      !!              -2- Update ocean physics
69      !!              -3- Compute the t and s trends
70      !!              -4- Update t and s
71      !!              -5- Compute the momentum trends
72      !!              -6- Update the horizontal velocity
73      !!              -7- Compute the diagnostics variables (rd,N2, hdiv,w)
74      !!              -8- Outputs and diagnostics
75      !!----------------------------------------------------------------------
76      INTEGER ::   jk       ! dummy loop indice
77      INTEGER ::   indic    ! error indicator if < 0
78      INTEGER ::   kcall    ! optional integer argument (dom_vvl_sf_nxt)
79      !! ---------------------------------------------------------------------
80#if defined key_agrif
81      kstp = nit000 + Agrif_Nb_Step()
82      IF( lk_agrif_debug ) THEN
83         IF( Agrif_Root() .and. lwp)   WRITE(*,*) '---'
84         IF(lwp)   WRITE(*,*) 'Grid Number', Agrif_Fixed(),' time step ', kstp, 'int tstep', Agrif_NbStepint()
85      ENDIF
86      IF( kstp == nit000 + 1 )   lk_agrif_fstep = .FALSE.
87# if defined key_iomput
88      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( cxios_context )
89# endif
90#endif
91      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
92      ! update I/O and calendar
93      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
94                             indic = 0                ! reset to no error condition
95                             
96      IF( kstp == nit000 ) THEN                       ! initialize IOM context (must be done after nemo_init for AGRIF+XIOS+OASIS)
97                             CALL iom_init(      cxios_context          )  ! for model grid (including passible AGRIF zoom)
98         IF( ln_crs      )   CALL iom_init( TRIM(cxios_context)//"_crs" )  ! for coarse grid
99      ENDIF
100      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
101                             CALL iom_setkt( kstp - nit000 + 1,      cxios_context          )   ! tell IOM we are at time step kstp
102      IF( ln_crs         )   CALL iom_setkt( kstp - nit000 + 1, TRIM(cxios_context)//"_crs" )   ! tell IOM we are at time step kstp
103
104      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
105      ! Update external forcing (tides, open boundaries, and surface boundary condition (including sea-ice)
106      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
107      IF( lk_tide    )   CALL sbc_tide( kstp )                   ! update tide potential
108      IF( ln_apr_dyn )   CALL sbc_apr ( kstp )                   ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib)
109      IF( lk_bdy     )   CALL bdy_dta ( kstp, time_offset=+1 )   ! update dynamic & tracer data at open boundaries
110                         CALL sbc     ( kstp )                   ! Sea Boundary Condition (including sea-ice)
111
112      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
113      ! Update stochastic parameters and random T/S fluctuations
114      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
115                         CALL sto_par( kstp )          ! Stochastic parameters
116
117      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
118      ! Ocean physics update                (ua, va, tsa used as workspace)
119      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
120      !  THERMODYNAMICS
121                         CALL eos_rab( tsb, rab_b )       ! before local thermal/haline expension ratio at T-points
122                         CALL eos_rab( tsn, rab_n )       ! now    local thermal/haline expension ratio at T-points
123                         CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
124                         CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
125
126      !
127      !  VERTICAL PHYSICS
128                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic)
129      !                                               ! Vertical eddy viscosity and diffusivity coefficients
130      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz
131      IF( lk_zdftke  )   CALL zdf_tke( kstp )            ! TKE closure scheme for Kz
132      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz
133      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value)
134         avt (:,:,:) = rn_avt0 * wmask (:,:,:)
135         avmu(:,:,:) = rn_avm0 * wumask(:,:,:)
136         avmv(:,:,:) = rn_avm0 * wvmask(:,:,:)
137      ENDIF
138
139      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
140         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2._wp * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO
141      ENDIF
142      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
143
144      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
145
146      IF( lk_zdfddm  )   CALL zdf_ddm( kstp )         ! double diffusive mixing
147
148                         CALL zdf_mxl( kstp )         ! mixed layer depth
149
150                                                      ! write TKE or GLS information in the restart file
151      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
152      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
153      !
154      !  LATERAL  PHYSICS
155      !
156      IF( l_ldfslp ) THEN                             ! slope of lateral mixing
157!!gm : why this here ????
158         IF(ln_sto_eos ) CALL sto_pts( tsn )          ! Random T/S fluctuations
159!!gm
160                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density
161
162         IF( ln_zps .AND. .NOT. ln_isfcav)                               &
163            &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient
164            &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
165
166         IF( ln_zps .AND.       ln_isfcav)                               &
167            &            CALL zps_hde_isf( kstp, jpts, tsb, gtsu, gtsv, gtui, gtvi,   &    ! Partial steps for top cell (ISF)
168            &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
169            &                                   grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the first ocean level
170
171         IF( ln_traldf_triad ) THEN
172                         CALL ldf_slp_triad( kstp )                       ! before slope for triad operator
173         ELSE     
174                         CALL ldf_slp     ( kstp, rhd, rn2b )             ! before slope for standard operator
175         ENDIF
176      ENDIF
177      !                                               ! eddy diffusivity coeff. and/or eiv coeff.
178      IF( l_ldftra_time .OR. l_ldfeiv_time )   CALL ldf_tra( kstp ) 
179
180      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
181      !  Ocean dynamics : hdiv, ssh, e3, wn
182      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
183                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_hor)
184      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors
185                         CALL wzv           ( kstp )  ! now cross-level velocity
186
187      IF( lk_dynspg_ts ) THEN 
188          ! In case the time splitting case, update almost all momentum trends here:
189          ! Note that the computation of vertical velocity above, hence "after" sea level
190          ! is necessary to compute momentum advection for the rhs of barotropic loop:
191!!gm : why also here ????
192            IF(ln_sto_eos ) CALL sto_pts( tsn )                             ! Random T/S fluctuations
193!!gm
194                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation
195                           
196            IF( ln_zps .AND. .NOT. ln_isfcav)   &                           ! Partial steps: bottom before horizontal gradient
197               &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &  ! of t, s, rd at the last ocean level
198               &                                          rhd, gru , grv    )
199            IF( ln_zps .AND.       ln_isfcav)   &                           ! Partial steps: top & bottom before horizontal gradient
200               &            CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv, gtui, gtvi,   & 
201               &                                          rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
202               &                                               grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    )
203
204                                  ua(:,:,:) = 0._wp            ! set dynamics trends to zero
205                                  va(:,:,:) = 0._wp
206          IF(  lk_asminc .AND. ln_asmiau .AND. &
207             & ln_dyninc       )  CALL dyn_asm_inc  ( kstp )   ! apply dynamics assimilation increment
208          IF( lk_bdy           )  CALL bdy_dyn3d_dmp( kstp )   ! bdy damping trends
209                                  CALL dyn_adv      ( kstp )   ! advection (vector or flux form)
210                                  CALL dyn_vor      ( kstp )   ! vorticity term including Coriolis
211                                  CALL dyn_ldf      ( kstp )   ! lateral mixing
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_hor( kstp )         ! Horizontal divergence  (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      ! Active tracers                              (ua, va used as workspace)
248      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
249                             tsa(:,:,:,:) = 0._wp           ! set tracer trends to zero
250
251      IF(  lk_asminc .AND. ln_asmiau .AND. &
252         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment
253                             CALL tra_sbc    ( kstp )       ! surface boundary condition
254      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr
255      IF( ln_trabbc      )   CALL tra_bbc    ( kstp )       ! bottom heat flux
256      IF( lk_trabbl      )   CALL tra_bbl    ( kstp )       ! advective (and/or diffusive) bottom boundary layer scheme
257      IF( ln_tradmp      )   CALL tra_dmp    ( kstp )       ! internal damping trends
258      IF( lk_bdy         )   CALL bdy_tra_dmp( kstp )       ! bdy damping trends
259                             CALL tra_adv    ( kstp )       ! horizontal & vertical advection
260                             CALL tra_ldf    ( kstp )       ! lateral mixing
261
262!!gm : why CALL to dia_ptr has been moved here??? (use trends info?)
263      IF( ln_diaptr      )   CALL dia_ptr                   ! Poleward adv/ldf TRansports diagnostics
264!!gm
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!!gm : why again a call to sto_pts ???
275            IF( ln_sto_eos ) CALL sto_pts( tsn )                 ! Random T/S fluctuations
276!!gm
277                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation
278            IF( ln_zps .AND. .NOT. ln_isfcav)                                &
279               &             CALL zps_hde    ( kstp, jpts, tsa, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient
280               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level
281            IF( ln_zps .AND.       ln_isfcav)                                &
282               &             CALL zps_hde_isf( kstp, jpts, tsa, gtsu, gtsv, gtui, gtvi,  &    ! Partial steps for top/bottom cells
283               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
284               &                                                grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    )
285      ELSE                                                  ! centered hpg  (eos then time stepping)
286         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case
287!!gm : why again a call to sto_pts ???
288            IF( ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations
289!!gm
290                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation
291         IF( ln_zps .AND. .NOT. ln_isfcav)                                   &
292               &             CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: bottom before horizontal gradient
293               &                                           rhd, gru , grv    )    ! of t, s, rd at the last ocean level
294         IF( ln_zps .AND.       ln_isfcav)                                   & 
295               &             CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv, gtui, gtvi,   &    ! Partial steps for top/bottom cells
296               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &
297               &                                    grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    ) ! of t, s, rd at the last ocean level
298         ENDIF
299         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection
300                             CALL tra_nxt( kstp )                ! tracer fields at next time step
301      ENDIF
302
303      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
304      ! Dynamics                                    (tsa used as workspace)
305      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
306      IF( lk_dynspg_ts   )  THEN
307                                                             ! revert to previously computed momentum tendencies
308                                                             ! (not using ua, va as temporary arrays during tracers' update could avoid that)
309                               ua(:,:,:) = ua_sv(:,:,:)
310                               va(:,:,:) = va_sv(:,:,:)
311
312                               CALL dyn_bfr( kstp )         ! bottom friction
313                               CALL dyn_zdf( kstp )         ! vertical diffusion
314      ELSE
315                               ua(:,:,:) = 0._wp            ! set dynamics trends to zero
316                               va(:,:,:) = 0._wp
317
318        IF(  lk_asminc .AND. 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( lk_bdy          )  CALL bdy_dyn3d_dmp(kstp )    ! bdy damping trends
322                               CALL dyn_adv( kstp )         ! advection (vector or flux form)
323                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis
324                               CALL dyn_ldf( kstp )         ! lateral mixing
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
339!!gm : This does not only concern the dynamics ==>>> add a new title
340!!gm2: why ouput restart before AGRIF update?
341      IF( lrst_oce         )   CALL rst_write( kstp )       ! write output ocean restart file
342
343#if defined key_agrif
344      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
345      ! AGRIF
346      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     
347                               CALL Agrif_Integrate_ChildGrids( stp ) 
348
349      IF ( Agrif_NbStepint().EQ.0 ) THEN
350                               CALL Agrif_Update_Tra()      ! Update active tracers
351                               CALL Agrif_Update_Dyn()      ! Update momentum
352      ENDIF
353#endif
354      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics
355      IF( lk_diaobs  )         CALL dia_obs( kstp )         ! obs-minus-model (assimilation) diagnostics (call after dynamics update)
356
357      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
358      ! Control
359      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
360                               CALL stp_ctl( kstp, indic )
361      IF( indic < 0        )   THEN
362                               CALL ctl_stop( 'step: indic < 0' )
363                               CALL dia_wri_state( 'output.abort', kstp )
364      ENDIF
365      IF( kstp == nit000   )   THEN
366                 CALL iom_close( numror )     ! close input  ocean restart file
367         IF(lwm) CALL FLUSH    ( numond )     ! flush output namelist oce
368         IF(lwm.AND.numoni /= -1 )   &
369            &    CALL FLUSH    ( numoni )     ! flush output namelist ice (if exist)
370      ENDIF
371
372      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
373      ! Coupled mode
374      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
375!!gm why lk_oasis and not lk_cpl ????
376      IF( lk_oasis         )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges
377      !
378#if defined key_iomput
379      IF( kstp == nitend .OR. indic < 0 ) THEN
380                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF
381         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !
382      ENDIF
383#endif
384      !
385      IF( nn_timing == 1 .AND.  kstp == nit000  )   CALL timing_reset
386      !
387   END SUBROUTINE stp
388
389   !!======================================================================
390END MODULE step
Note: See TracBrowser for help on using the repository browser.