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 NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/step.F90 @ 10768

Last change on this file since 10768 was 10768, checked in by acc, 5 years ago

Branch 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. Fixes to dynnxt.F90 and step.F90 to recover identical results to source trunk version with all SETTE tests. This excludes AGRIF tests which are currently broken by the presence of the temporary pointers which will be removed once all routines have been refactored. Still to be confirmed with eORCA1

  • Property svn:keywords set to Id
File size: 21.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   !!            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.6  !  2014-10  (E. Clementi, P. Oddo) Add Qiao vertical mixing in case of waves
29   !!            3.7  !  2014-10  (G. Madec)  LDF simplication
30   !!             -   !  2014-12  (G. Madec) remove KPP scheme
31   !!             -   !  2015-11  (J. Chanut) free surface simplification (remove filtered free surface)
32   !!            4.0  !  2017-05  (G. Madec)  introduction of the vertical physics manager (zdfphy)
33   !!----------------------------------------------------------------------
34
35   !!----------------------------------------------------------------------
36   !!   stp             : OPA system time-stepping
37   !!----------------------------------------------------------------------
38   USE step_oce         ! time stepping definition modules
39   !
40   USE iom              ! xIOs server
41
42   IMPLICIT NONE
43   PRIVATE
44
45   PUBLIC   stp   ! called by nemogcm.F90
46   PUBLIC   update_pointers ! called by nemo_init
47
48   !!----------------------------------------------------------------------
49   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
50   !! $Id$
51   !! Software governed by the CeCILL license (see ./LICENSE)
52   !!----------------------------------------------------------------------
53CONTAINS
54
55#if defined key_agrif
56   RECURSIVE SUBROUTINE stp( )
57      INTEGER             ::   kstp   ! ocean time-step index
58#else
59   SUBROUTINE stp( kstp )
60      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
61#endif
62      !!----------------------------------------------------------------------
63      !!                     ***  ROUTINE stp  ***
64      !!
65      !! ** Purpose : - Time stepping of OPA  (momentum and active tracer eqs.)
66      !!              - Time stepping of SI3 (dynamic and thermodynamic eqs.)
67      !!              - Time stepping of TRC  (passive tracer eqs.)
68      !!
69      !! ** Method  : -1- Update forcings and data
70      !!              -2- Update ocean physics
71      !!              -3- Compute the t and s trends
72      !!              -4- Update t and s
73      !!              -5- Compute the momentum trends
74      !!              -6- Update the horizontal velocity
75      !!              -7- Compute the diagnostics variables (rd,N2, hdiv,w)
76      !!              -8- Outputs and diagnostics
77      !!----------------------------------------------------------------------
78      INTEGER ::   ji, jj, jk   ! dummy loop indice
79      INTEGER ::   indic        ! error indicator if < 0
80!!gm kcall can be removed, I guess
81      INTEGER ::   kcall        ! optional integer argument (dom_vvl_sf_nxt)
82      !! ---------------------------------------------------------------------
83#if defined key_agrif
84      kstp = nit000 + Agrif_Nb_Step()
85      IF( lk_agrif_debug ) THEN
86         IF( Agrif_Root() .and. lwp)   WRITE(*,*) '---'
87         IF(lwp)   WRITE(*,*) 'Grid Number', Agrif_Fixed(),' time step ', kstp, 'int tstep', Agrif_NbStepint()
88      ENDIF
89      IF( kstp == nit000 + 1 )   lk_agrif_fstep = .FALSE.
90# if defined key_iomput
91      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( cxios_context )
92# endif
93#endif
94      !
95      IF( ln_timing )   CALL timing_start('stp')
96      !
97      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
98      ! update I/O and calendar
99      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
100                             indic = 0                ! reset to no error condition
101                             
102      IF( kstp == nit000 ) THEN                       ! initialize IOM context (must be done after nemo_init for AGRIF+XIOS+OASIS)
103                             CALL iom_init(      cxios_context          )  ! for model grid (including passible AGRIF zoom)
104         IF( ln_crs      )   CALL iom_init( TRIM(cxios_context)//"_crs" )  ! for coarse grid
105      ENDIF
106      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
107                             CALL iom_setkt( kstp - nit000 + 1,      cxios_context          )   ! tell IOM we are at time step kstp
108      IF( ln_crs         )   CALL iom_setkt( kstp - nit000 + 1, TRIM(cxios_context)//"_crs" )   ! tell IOM we are at time step kstp
109
110      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
111      ! Update external forcing (tides, open boundaries, and surface boundary condition (including sea-ice)
112      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
113      IF( ln_tide    )   CALL sbc_tide( kstp )                   ! update tide potential
114      IF( ln_apr_dyn )   CALL sbc_apr ( kstp )                   ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib)
115      IF( ln_bdy     )   CALL bdy_dta ( kstp, time_offset=+1 )   ! update dynamic & tracer data at open boundaries
116                         CALL sbc     ( kstp )                   ! Sea Boundary Condition (including sea-ice)
117
118      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
119      ! Update stochastic parameters and random T/S fluctuations
120      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
121      IF( ln_sto_eos ) CALL sto_par( kstp )          ! Stochastic parameters
122      IF( ln_sto_eos ) CALL sto_pts( tsn  )          ! Random T/S fluctuations
123
124      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
125      ! Ocean physics update
126      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
127      !  THERMODYNAMICS
128                         CALL eos_rab( tsb, rab_b )       ! before local thermal/haline expension ratio at T-points
129                         CALL eos_rab( tsn, rab_n )       ! now    local thermal/haline expension ratio at T-points
130                         CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
131                         CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
132
133      !  VERTICAL PHYSICS
134                         CALL zdf_phy( kstp )         ! vertical physics update (top/bot drag, avt, avs, avm + MLD)
135
136      !  LATERAL  PHYSICS
137      !
138      IF( l_ldfslp ) THEN                             ! slope of lateral mixing
139                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density
140
141         IF( ln_zps .AND. .NOT. ln_isfcav)                               &
142            &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient
143            &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level
144
145         IF( ln_zps .AND.       ln_isfcav)                               &
146            &            CALL zps_hde_isf( kstp, jpts, tsb, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF)
147            &                                          rhd, gru , grv , grui, grvi   )  ! of t, s, rd at the first ocean level
148         IF( ln_traldf_triad ) THEN
149                         CALL ldf_slp_triad( kstp )                       ! before slope for triad operator
150         ELSE     
151                         CALL ldf_slp     ( kstp, rhd, rn2b )             ! before slope for standard operator
152         ENDIF
153      ENDIF
154      !                                                                   ! eddy diffusivity coeff.
155      IF( l_ldftra_time .OR. l_ldfeiv_time )   CALL ldf_tra( kstp )       !       and/or eiv coeff.
156      IF( l_ldfdyn_time                    )   CALL ldf_dyn( kstp )       ! eddy viscosity coeff.
157
158      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
159      !  Ocean dynamics : hdiv, ssh, e3, u, v, w
160      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
161
162                            CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_hor)
163      IF( .NOT.ln_linssh )  CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors
164                            CALL wzv           ( kstp )  ! now cross-level velocity
165      IF( ln_zad_Aimp )     CALL wAimp         ( kstp )  ! Adaptive-implicit vertical advection partitioning
166                            CALL eos    ( tsn, rhd, rhop, gdept_n(:,:,:) )  ! now in situ density for hpg computation
167                           
168!!jc: fs simplification
169!!jc: lines below are useless if ln_linssh=F. Keep them here (which maintains a bug if ln_linssh=T and ln_zps=T, cf ticket #1636)
170!!                                         but ensures reproductible results
171!!                                         with previous versions using split-explicit free surface         
172            IF( ln_zps .AND. .NOT. ln_isfcav )                               &
173               &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,   &  ! Partial steps: before horizontal gradient
174               &                                          rhd, gru , grv     )  ! of t, s, rd at the last ocean level
175            IF( ln_zps .AND.       ln_isfcav )                                          &
176               &            CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF)
177               &                                          rhd, gru , grv , grui, grvi   )  ! of t, s, rd at the first ocean level
178!!jc: fs simplification
179                           
180                         ua(:,:,:) = 0._wp            ! set dynamics trends to zero
181                         va(:,:,:) = 0._wp
182
183      IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   &
184               &         CALL dyn_asm_inc   ( kstp )  ! apply dynamics assimilation increment
185      IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp )  ! bdy damping trends
186#if defined key_agrif
187      IF(.NOT. Agrif_Root())  & 
188               &         CALL Agrif_Sponge_dyn        ! momentum sponge
189#endif
190                         CALL dyn_adv       ( kstp )  ! advection (vector or flux form)
191                         CALL dyn_vor       ( kstp )  ! vorticity term including Coriolis
192                         CALL dyn_ldf       ( kstp )  ! lateral mixing
193      IF( ln_zdfosm  )   CALL dyn_osm       ( kstp )  ! OSMOSIS non-local velocity fluxes
194                         CALL dyn_hpg       ( kstp )  ! horizontal gradient of Hydrostatic pressure
195                         CALL dyn_spg       ( kstp )  ! surface pressure gradient
196
197                                                      ! With split-explicit free surface, since now transports have been updated and ssha as well
198      IF( ln_dynspg_ts ) THEN                         ! vertical scale factors and vertical velocity need to be updated
199                            CALL div_hor    ( kstp )              ! Horizontal divergence  (2nd call in time-split case)
200         IF(.NOT.ln_linssh) CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component)
201                            CALL wzv        ( kstp )              ! now cross-level velocity
202         IF( ln_zad_Aimp )  CALL wAimp      ( kstp )  ! Adaptive-implicit vertical advection partitioning
203      ENDIF
204     
205                         CALL dyn_zdf       ( kstp )  ! vertical diffusion
206
207      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
208      ! cool skin
209      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     
210      IF ( ln_diurnal )  CALL stp_diurnal( kstp )
211     
212      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
213      ! diagnostics and outputs
214      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
215      IF( lk_floats  )   CALL flo_stp ( kstp )        ! drifting Floats
216      IF( ln_diacfl  )   CALL dia_cfl ( kstp )        ! Courant number diagnostics
217      IF( lk_diahth  )   CALL dia_hth ( kstp )        ! Thermocline depth (20 degres isotherm depth)
218      IF( lk_diadct  )   CALL dia_dct ( kstp )        ! Transports
219                         CALL dia_ar5 ( kstp )        ! ar5 diag
220      IF( lk_diaharm )   CALL dia_harm( kstp )        ! Tidal harmonic analysis
221                         CALL dia_wri ( kstp )        ! ocean model: outputs
222      !
223      IF( ln_crs     )   CALL crs_fld       ( kstp )  ! ocean model: online field coarsening & output
224     
225#if defined key_top
226      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
227      ! Passive Tracer Model
228      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
229                         CALL trc_stp       ( kstp )  ! time-stepping
230#endif
231
232      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
233      ! Active tracers                             
234      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
235                         tsa(:,:,:,:) = 0._wp         ! set tracer trends to zero
236
237      IF(  lk_asminc .AND. ln_asmiau .AND. &
238         & ln_trainc )   CALL tra_asm_inc   ( kstp )  ! apply tracer assimilation increment
239                         CALL tra_sbc       ( kstp )  ! surface boundary condition
240      IF( ln_traqsr  )   CALL tra_qsr       ( kstp )  ! penetrative solar radiation qsr
241      IF( ln_trabbc  )   CALL tra_bbc       ( kstp )  ! bottom heat flux
242      IF( ln_trabbl  )   CALL tra_bbl       ( kstp )  ! advective (and/or diffusive) bottom boundary layer scheme
243      IF( ln_tradmp  )   CALL tra_dmp       ( kstp )  ! internal damping trends
244      IF( ln_bdy     )   CALL bdy_tra_dmp   ( kstp )  ! bdy damping trends
245#if defined key_agrif
246      IF(.NOT. Agrif_Root())  & 
247               &         CALL Agrif_Sponge_tra        ! tracers sponge
248#endif
249                         CALL tra_adv       ( kstp )  ! horizontal & vertical advection
250      IF( ln_zdfosm  )   CALL tra_osm       ( kstp )  ! OSMOSIS non-local tracer fluxes
251      IF( lrst_oce .AND. ln_zdfosm ) &
252           &             CALL osm_rst( kstp, 'WRITE' )! write OSMOSIS outputs + wn (so must do here) to restarts
253                         CALL tra_ldf       ( kstp )  ! lateral mixing
254
255!!gm : why CALL to dia_ptr has been moved here??? (use trends info?)
256      IF( ln_diaptr  )   CALL dia_ptr                 ! Poleward adv/ldf TRansports diagnostics
257!!gm
258                         CALL tra_zdf       ( kstp )  ! vertical mixing and after tracer fields
259      IF( ln_zdfnpc  )   CALL tra_npc       ( kstp )  ! update after fields by non-penetrative convection
260
261      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
262      ! Set boundary conditions and Swap
263      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
264!!jc1: For agrif, it would be much better to finalize tracers/momentum here (e.g. bdy conditions) and move the swap
265!!    (and time filtering) after Agrif update. Then restart would be done after and would contain updated fields.
266!!    If so:
267!!    (i) no need to call agrif update at initialization time
268!!    (ii) no need to update "before" fields
269!!
270!!    Apart from creating new tra_swp/dyn_swp routines, this however:
271!!    (i) makes boundary conditions at initialization time computed from updated fields which is not the case between
272!!    two restarts => restartability issue. One can circumvent this, maybe, by assuming "interface separation",
273!!    e.g. a shift of the feedback interface inside child domain.
274!!    (ii) requires that all restart outputs of updated variables by agrif (e.g. passive tracers/tke/barotropic arrays) are done at the same
275!!    place.
276!!
277!!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine
278                         CALL tra_nxt       ( kstp )  ! finalize (bcs) tracer fields at next time step and swap
279                         CALL dyn_nxt       ( kstp, Nm1, Np1, uu(:,:,:,Nnn), vv(:,:,:,Nnn), e3t(:,:,:,Nnn), e3u(:,:,:,Nnn), e3v(:,:,:,Nnn) )  !
280                         CALL ssh_swp       ( kstp )  ! swap of sea surface height
281      !
282      ! Swap time levels
283      IF( .NOT. (neuler == 0 .AND. kstp == nit000)  ) THEN
284         Nrhs = Nm1
285         Nm1 = Nnn
286         Nnn = Np1
287         Np1 = Nrhs
288      ENDIF
289      !
290      ! Update temporary pointers
291      CALL update_pointers()
292      !
293      ! Note that 2-time-level indices don't need to be swapped because both "before" and "now" fields are derived in dom_vvl_sf_swp
294      IF(.NOT.ln_linssh) CALL dom_vvl_sf_swp( kstp, Nm1, Nnn, Nm1_2lev, Nnn_2lev )  ! interpolate vertical scale factors for Nnn time level
295      !
296      IF( ln_diahsb  )   CALL dia_hsb       ( kstp )  ! - ML - global conservation diagnostics
297
298!!gm : This does not only concern the dynamics ==>>> add a new title
299!!gm2: why ouput restart before AGRIF update?
300!!
301!!jc: That would be better, but see comment above
302!!
303      IF( lrst_oce   )   CALL rst_write    ( kstp )   ! write output ocean restart file
304      IF( ln_sto_eos )   CALL sto_rst_write( kstp )   ! write restart file for stochastic parameters
305
306#if defined key_agrif
307      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
308      ! AGRIF
309      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     
310                         CALL Agrif_Integrate_ChildGrids( stp )  ! allows to finish all the Child Grids before updating
311
312                         IF( Agrif_NbStepint() == 0 ) CALL Agrif_update_all( ) ! Update all components
313#endif
314      IF( ln_diaobs  )   CALL dia_obs      ( kstp )      ! obs-minus-model (assimilation) diagnostics (call after dynamics update)
315
316      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
317      ! Control
318      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
319                         CALL stp_ctl      ( kstp, indic )
320                         
321      IF( kstp == nit000 ) THEN                          ! 1st time step only
322                                        CALL iom_close( numror )   ! close input  ocean restart file
323         IF(lwm)                        CALL FLUSH    ( numond )   ! flush output namelist oce
324         IF(lwm .AND. numoni /= -1 )    CALL FLUSH    ( numoni )   ! flush output namelist ice (if exist)
325      ENDIF
326
327      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
328      ! Coupled mode
329      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
330!!gm why lk_oasis and not lk_cpl ????
331      IF( lk_oasis   )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges
332      !
333#if defined key_iomput
334      IF( kstp == nitend .OR. indic < 0 ) THEN
335                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF
336                      IF(lrxios) CALL iom_context_finalize(      crxios_context          )
337         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !
338      ENDIF
339#endif
340      !
341      IF( ln_timing )   CALL timing_stop('stp')
342      !
343   END SUBROUTINE stp
344   
345   SUBROUTINE update_pointers
346      !!----------------------------------------------------------------------
347      !!                     ***  ROUTINE update_pointers  ***
348      !!
349      !! ** Purpose :   Associate temporary pointer arrays.
350      !!                For IMMERSE development phase only - to be deleted
351      !!
352      !! ** Method  :
353      !!----------------------------------------------------------------------
354
355      ub => uu(:,:,:,Nm1); un => uu(:,:,:,Nnn); ua => uu(:,:,:,Np1)
356      vb => vv(:,:,:,Nm1); vn => vv(:,:,:,Nnn); va => vv(:,:,:,Np1)
357
358      e3t_b => e3t(:,:,:,Nm1); e3t_n => e3t(:,:,:,Nnn); e3t_a => e3t(:,:,:,Np1)
359      e3u_b => e3u(:,:,:,Nm1); e3u_n => e3u(:,:,:,Nnn); e3u_a => e3u(:,:,:,Np1)
360      e3v_b => e3v(:,:,:,Nm1); e3v_n => e3v(:,:,:,Nnn); e3v_a => e3v(:,:,:,Np1)
361
362      e3f_n => e3f(:,:,:)
363
364      e3w_b  => e3w (:,:,:,Nm1_2lev); e3w_n  => e3w (:,:,:,Nnn_2lev)
365      e3uw_b => e3uw(:,:,:,Nm1_2lev); e3uw_n => e3uw(:,:,:,Nnn_2lev)
366      e3vw_b => e3vw(:,:,:,Nm1_2lev); e3vw_n => e3vw(:,:,:,Nnn_2lev)
367
368   END SUBROUTINE update_pointers
369
370   !!======================================================================
371END MODULE step
Note: See TracBrowser for help on using the repository browser.