source: NEMO/trunk/src/SAS/step.F90 @ 12377

Last change on this file since 12377 was 12377, checked in by acc, 10 months ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge —ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The —ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

  • Property svn:keywords set to Id
File size: 7.1 KB
Line 
1MODULE step
2   !!======================================================================
3   !!                       ***  MODULE step  ***
4   !! Time-stepping    : manager of the ocean, tracer and ice time stepping
5   !!                    version for standalone surface scheme
6   !!======================================================================
7   !! History :  OPA  !  1991-03  (G. Madec)  Original code
8   !!             .   !    .                                                     
9   !!             .   !    .                                                     
10   !!   NEMO     3.5  !  2012-03  (S. Alderson)
11   !!----------------------------------------------------------------------
12
13   !!----------------------------------------------------------------------
14   !!   stp             : OPA system time-stepping
15   !!----------------------------------------------------------------------
16   USE oce              ! ocean dynamics and tracers variables
17   USE dom_oce          ! ocean space and time domain variables
18   USE daymod           ! calendar                         (day     routine)
19   USE sbc_oce          ! surface boundary condition: fields
20   USE sbcmod           ! surface boundary condition       (sbc     routine)
21   USE sbcrnf           ! surface boundary condition: runoff variables
22   USE sbccpl           ! surface boundary condition: coupled interface
23   USE eosbn2           ! equation of state                (eos_bn2 routine)
24   USE diawri           ! Standard run outputs             (dia_wri routine)
25   USE bdy_oce   , ONLY: ln_bdy
26   USE bdydta           ! mandatory for sea-ice
27   USE stpctl           ! time stepping control            (stp_ctl routine)
28   !
29   USE in_out_manager   ! I/O manager
30   USE prtctl           ! Print control                    (prt_ctl routine)
31   USE iom              !
32   USE lbclnk           !
33   USE timing           ! Timing           
34#if defined key_iomput
35   USE xios
36#endif
37
38#if defined key_agrif
39   USE agrif_oce, ONLY: lk_agrif_debug
40#if defined key_si3
41   USE agrif_ice_update
42#endif
43#endif
44   
45   IMPLICIT NONE
46   PRIVATE
47
48   PUBLIC   stp   ! called by nemogcm.F90
49
50   !!----------------------------------------------------------------------
51   !! time level indices
52   !!----------------------------------------------------------------------
53   INTEGER, PUBLIC :: Nbb, Nnn, Naa, Nrhs          !! used by nemo_init
54   !!----------------------------------------------------------------------
55   !! NEMO/SAS 4.0 , NEMO Consortium (2018)
56   !! $Id$
57   !! Software governed by the CeCILL license (see ./LICENSE)
58   !!----------------------------------------------------------------------
59CONTAINS
60
61#if defined key_agrif
62   RECURSIVE SUBROUTINE stp( )
63      INTEGER             ::   kstp   ! ocean time-step index
64#else
65   SUBROUTINE stp( kstp )
66      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
67#endif
68      !!----------------------------------------------------------------------
69      !!                     ***  ROUTINE stp  ***
70      !!                     
71      !! ** Purpose : - Time stepping of SBC (surface boundary)
72      !!
73      !! ** Method  : -1- Update forcings and data 
74      !!              -2- Outputs and diagnostics
75      !!----------------------------------------------------------------------
76      INTEGER ::   indic    ! error indicator if < 0
77      !! ---------------------------------------------------------------------
78
79#if defined key_agrif
80      kstp = nit000 + Agrif_Nb_Step()
81      Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs   ! agrif_oce module copies of time level indices
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
87      IF ( kstp == (nit000 + 1) ) lk_agrif_fstep = .FALSE.
88
89# if defined key_iomput
90      IF( Agrif_Nbstepint() == 0 )   CALL iom_swap( cxios_context )
91# endif   
92#endif   
93                             indic = 0                    ! although indic is not changed in stp_ctl
94                                                          ! need to keep the same interface
95      IF( kstp == nit000 )   CALL iom_init( cxios_context ) ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS)
96      IF( kstp /= nit000 )   CALL day( kstp )             ! Calendar (day was already called at nit000 in day_init)
97                             CALL iom_setkt( kstp - nit000 + 1, cxios_context )   ! tell iom we are at time step kstp
98
99      ! ==> clem: open boundaries is mandatory for sea-ice because ice BDY is not decoupled from 
100      !           the environment of ocean BDY. Therefore bdy is called in both OPA and SAS modules.
101      !           From SAS: ocean bdy data are wrong  (but we do not care) and ice bdy data are OK. 
102      !           This is not clean and should be changed in the future.
103      ! ==>
104      IF( ln_bdy     )       CALL bdy_dta( kstp,      Nnn )                   ! update dynamic & tracer data at open boundaries
105                             CALL sbc    ( kstp, Nbb, Nnn )                   ! Sea Boundary Condition (including sea-ice)
106
107                             CALL dia_wri( kstp,      Nnn )                   ! ocean model: outputs
108
109#if defined key_agrif
110      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
111      ! AGRIF
112      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     
113                             CALL Agrif_Integrate_ChildGrids( stp ) 
114
115      IF( Agrif_NbStepint() == 0 ) THEN               ! AGRIF Update from zoom N to zoom 1 then to Parent
116#if defined key_si3
117                             CALL Agrif_Update_ice( )   ! update sea-ice
118#endif
119      ENDIF
120#endif
121                             
122      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
123      ! Control
124      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
125                             CALL stp_ctl( kstp, indic )
126      IF( indic < 0  )  THEN
127                             CALL ctl_stop( 'step: indic < 0' )
128                             CALL dia_wri_state( 'output.abort', Nnn )
129      ENDIF
130      IF( kstp == nit000   ) CALL iom_close( numror )           ! close input  ocean restart file
131     
132      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
133      ! Coupled mode
134      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
135      IF( lk_oasis    )  CALL sbc_cpl_snd( kstp, Nbb, Nnn )     ! coupled mode : field exchanges if OASIS-coupled ice
136
137#if defined key_iomput
138      IF( kstp == nitrst ) THEN
139         IF(.NOT.lwxios) THEN
140            CALL iom_close( numrow )     
141         ELSE
142            CALL iom_context_finalize( cwxios_context )
143         ENDIF
144         lrst_oce = .FALSE.
145      ENDIF
146      IF( kstp == nitend .OR. indic < 0 ) THEN
147                             CALL iom_context_finalize( cxios_context ) ! needed for XIOS+AGRIF
148      ENDIF
149#endif
150      !
151      IF( ln_timing .AND.  kstp == nit000  )   CALL timing_reset
152      !
153   END SUBROUTINE stp
154
155   !!======================================================================
156END MODULE step
Note: See TracBrowser for help on using the repository browser.