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

Last change on this file since 5549 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
RevLine 
[3]1MODULE step
2   !!======================================================================
3   !!                       ***  MODULE step  ***
4   !! Time-stepping    : manager of the ocean, tracer and ice time stepping
5   !!======================================================================
[1438]6   !! History :  OPA  !  1991-03  (G. Madec)  Original code
[1492]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
[1438]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
[1492]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
[1438]21   !!            3.2  !  2009-02  (G. Madec, R. Benshila)  reintroduicing z*-coordinate
[1533]22   !!             -   !  2009-06  (S. Masson, G. Madec)  TKE restart compatible with key_cpl
[2528]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
[3294]25   !!            3.4  !  2011-04  (G. Madec, C. Ethe) Merge of dtatem and dtasal
[4990]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
[3]28   !!----------------------------------------------------------------------
[888]29
30   !!----------------------------------------------------------------------
[2528]31   !!   stp             : OPA system time-stepping
[3]32   !!----------------------------------------------------------------------
[3764]33   USE step_oce         ! time stepping definition modules
[4990]34   USE iom
[389]35
[3]36   IMPLICIT NONE
37   PRIVATE
38
[2528]39   PUBLIC   stp   ! called by opa.F90
[3]40
41   !! * Substitutions
42#  include "domzgr_substitute.h90"
[4990]43!!gm   #  include "zdfddm_substitute.h90"
[3]44   !!----------------------------------------------------------------------
[4990]45   !! NEMO/OPA 3.7 , NEMO Consortium (2014)
[888]46   !! $Id$
[2528]47   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
[3]48   !!----------------------------------------------------------------------
49CONTAINS
50
[508]51#if defined key_agrif
52   SUBROUTINE stp( )
[1438]53      INTEGER             ::   kstp   ! ocean time-step index
[508]54#else
[467]55   SUBROUTINE stp( kstp )
[1438]56      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
[467]57#endif
58      !!----------------------------------------------------------------------
[3]59      !!                     ***  ROUTINE stp  ***
[3764]60      !!
[3]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.)
[3764]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
[3]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      !!----------------------------------------------------------------------
[888]74      INTEGER ::   jk       ! dummy loop indice
[3]75      INTEGER ::   indic    ! error indicator if < 0
[4338]76      INTEGER ::   kcall    ! optional integer argument (dom_vvl_sf_nxt)
[3]77      !! ---------------------------------------------------------------------
78
[392]79#if defined key_agrif
[389]80      kstp = nit000 + Agrif_Nb_Step()
[2715]81!      IF ( Agrif_Root() .and. lwp) Write(*,*) '---'
82!      IF (lwp) Write(*,*) 'Grid Number',Agrif_Fixed(),' time step ',kstp
[4491]83      IF ( kstp == (nit000 + 1) ) lk_agrif_fstep = .FALSE.
[1793]84# if defined key_iomput
[5407]85      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( cxios_context )
[3764]86# endif
87#endif
[4152]88                             indic = 0           ! reset to no error condition
89      IF( kstp == nit000 ) THEN
[5407]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
[4152]93      ENDIF
[4147]94
[1725]95      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
[5407]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
[3]98
99      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[888]100      ! Update data, open boundaries, surface boundary condition (including sea-ice)
[3]101      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[3294]102      IF( lk_tide    )   CALL sbc_tide( kstp )
[5501]103      IF( lk_bdy     )  THEN
[5510]104         IF( ln_apr_dyn) CALL sbc_apr( kstp )   ! bdy_dta needs ssh_ib
[5501]105                         CALL bdy_dta ( kstp, time_offset=+1 )   ! update dynamic & tracer data at open boundaries
106      ENDIF
[4292]107                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice)
108                                                      ! clem: moved here for bdy ice purpose
[3]109      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[5329]110      ! Update stochastic parameters and random T/S fluctuations
111      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112                        CALL sto_par( kstp )          ! Stochastic parameters
113
114      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[3294]115      ! Ocean physics update                (ua, va, tsa used as workspace)
[3]116      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4990]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
[1492]122      !
[3764]123      !  VERTICAL PHYSICS
[4369]124                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic)
[1492]125      !                                               ! Vertical eddy viscosity and diffusivity coefficients
[2528]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
[4292]130      IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value)
[5120]131         avt (:,:,:) = rn_avt0 * wmask (:,:,:)
132         avmu(:,:,:) = rn_avm0 * wumask(:,:,:)
133         avmv(:,:,:) = rn_avm0 * wvmask(:,:,:)
[677]134      ENDIF
[1492]135      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
[1246]136         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO
[3]137      ENDIF
[1492]138      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
[3]139
[1492]140      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
[3]141
[888]142      IF( lk_zdfddm .AND. .NOT. lk_zdfkpp )   &
[1492]143         &               CALL zdf_ddm( kstp )         ! double diffusive mixing
[3764]144
[1492]145                         CALL zdf_mxl( kstp )         ! mixed layer depth
[3]146
[2528]147                                                      ! write TKE or GLS information in the restart file
[1531]148      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
[2528]149      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
[1492]150      !
[3764]151      !  LATERAL  PHYSICS
[1492]152      !
153      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing
[5329]154         IF(ln_sto_eos ) CALL sto_pts( tsn )          ! Random T/S fluctuations
[5120]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
[2528]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
[1481]168      ENDIF
[3]169#if defined key_traldf_c2d
[1492]170      IF( lk_traldf_eiv )   CALL ldf_eiv( kstp )      ! eddy induced velocity coefficient
[2528]171#endif
[5407]172#if defined key_traldf_c3d && defined key_traldf_smag
[3634]173                          CALL ldf_tra_smag( kstp )      ! eddy induced velocity coefficient
174#  endif
[5407]175#if defined key_dynldf_c3d && defined key_dynldf_smag
[3634]176                          CALL ldf_dyn_smag( kstp )      ! eddy induced velocity coefficient
177#  endif
[3]178
[4369]179      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
180      !  Ocean dynamics : hdiv, rot, ssh, e3, wn
181      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
182                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur)
[4387]183      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors
184                         CALL wzv           ( kstp )  ! now cross-level velocity
[3634]185
[4387]186      IF( lk_dynspg_ts ) THEN 
[4369]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:
[5329]190            IF(ln_sto_eos ) CALL sto_pts( tsn )                             ! Random T/S fluctuations
[4990]191                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation
[5120]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
[4369]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)
[4387]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
[4369]222      ENDIF
223
[1482]224      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[3294]225      ! diagnostics and outputs             (ua, va, tsa used as workspace)
[1482]226      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[5147]227      IF( lk_floats  )      CALL flo_stp( kstp )         ! drifting Floats
228      IF( lk_diahth  )      CALL dia_hth( kstp )         ! Thermocline depth (20 degres isotherm depth)
[5407]229      IF( .NOT. ln_cpl )    CALL dia_fwb( kstp )         ! Fresh water budget diagnostics
[5147]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
[4152]234      !
[5147]235      IF( ln_crs     )      CALL crs_fld( kstp )         ! ocean model: online field coarsening & output
[1482]236
[923]237#if defined key_top
[3]238      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
239      ! Passive Tracer Model
240      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[1492]241                         CALL trc_stp( kstp )         ! time-stepping
[3]242#endif
243
[4990]244
[3]245      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1492]246      ! Active tracers                              (ua, va used as workspace)
[3]247      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[2528]248                             tsa(:,:,:,:) = 0.e0            ! set tracer trends to zero
[3]249
[2528]250      IF(  ln_asmiau .AND. &
251         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment
[467]252                             CALL tra_sbc    ( kstp )       ! surface boundary condition
253      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr
[2528]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
[3294]256      IF( ln_tradmp      )   CALL tra_dmp    ( kstp )       ! internal damping trends
[3651]257      IF( lk_bdy         )   CALL bdy_tra_dmp( kstp )       ! bdy damping trends
[467]258                             CALL tra_adv    ( kstp )       ! horizontal & vertical advection
[2528]259      IF( lk_zdfkpp      )   CALL tra_kpp    ( kstp )       ! KPP non-local tracer fluxes
[467]260                             CALL tra_ldf    ( kstp )       ! lateral mixing
[5147]261
262      IF( ln_diaptr      )   CALL dia_ptr                   ! Poleward adv/ldf TRansports diagnostics
263
[392]264#if defined key_agrif
[782]265      IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra          ! tracers sponge
[389]266#endif
[1111]267                             CALL tra_zdf    ( kstp )       ! vertical mixing and after tracer fields
[1239]268
[1492]269      IF( ln_dynhpg_imp  ) THEN                             ! semi-implicit hpg (time stepping then eos)
[2528]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
[5329]272            IF( ln_sto_eos ) CALL sto_pts( tsn )                 ! Random T/S fluctuations
[4292]273                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation
[5120]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
[4215]281      ELSE                                                  ! centered hpg  (eos then time stepping)
[4292]282         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case
[5329]283            IF( ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations
[4990]284                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation
[5120]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
[4292]292         ENDIF
[2528]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
[3764]295      ENDIF
[1481]296
[3]297      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[3294]298      ! Dynamics                                    (tsa used as workspace)
[3]299      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4292]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
[1492]313                               ua(:,:,:) = 0.e0             ! set dynamics trends to zero
[75]314                               va(:,:,:) = 0.e0
[3]315
[4292]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
[1492]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
[4292]324        IF( ln_neptsimp )      CALL dyn_nept_cor( kstp )    ! add Neptune velocities (simplified)
[392]325#if defined key_agrif
[4292]326        IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn        ! momemtum sponge
[389]327#endif
[1492]328                               CALL dyn_hpg( kstp )         ! horizontal gradient of Hydrostatic pressure
[3764]329                               CALL dyn_bfr( kstp )         ! bottom friction
[1492]330                               CALL dyn_zdf( kstp )         ! vertical diffusion
331                               CALL dyn_spg( kstp, indic )  ! surface pressure gradient
[4292]332      ENDIF
[1492]333                               CALL dyn_nxt( kstp )         ! lateral velocity at next time step
[3]334
[4292]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
[593]337
[2528]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
[3]341      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[888]342      ! Control and restarts
[3]343      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[1492]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 )
[1482]348      ENDIF
[4147]349      IF( kstp == nit000   )   THEN
[4624]350                 CALL iom_close( numror )     ! close input  ocean restart file
351         IF(lwm) CALL FLUSH    ( numond )     ! flush output namelist oce
[5147]352         IF( lwm.AND.numoni /= -1 ) CALL FLUSH    ( numoni )     ! flush output namelist ice
[4147]353      ENDIF
[1492]354      IF( lrst_oce         )   CALL rst_write    ( kstp )   ! write output ocean restart file
[3]355
[508]356      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[75]357      ! Coupled mode
358      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[5407]359      IF( lk_oasis         )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges
[508]360      !
[4153]361#if defined key_iomput
362      IF( kstp == nitend .OR. indic < 0 ) THEN
[5407]363                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF
364         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !
[4152]365      ENDIF
[4153]366#endif
[3769]367      !
[3294]368      IF( nn_timing == 1 .AND.  kstp == nit000  )   CALL timing_reset
[1481]369      !
[3]370   END SUBROUTINE stp
371
372   !!======================================================================
373END MODULE step
Note: See TracBrowser for help on using the repository browser.