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

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

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

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