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.
Changeset 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/step.F90 – NEMO

Ignore:
Timestamp:
2020-05-14T21:46:00+02:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12925 (ticket #2170)

Location:
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser

    • Property svn:externals
      •  

        old new  
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/step.F90

    r12329 r12928  
    3131   !!             -   !  2015-11  (J. Chanut) free surface simplification (remove filtered free surface) 
    3232   !!            4.0  !  2017-05  (G. Madec)  introduction of the vertical physics manager (zdfphy) 
     33   !!            4.1  !  2019-08  (A. Coward, D. Storkey) rewrite in preparation for new timestepping scheme 
    3334   !!---------------------------------------------------------------------- 
    3435 
     
    4445 
    4546   PUBLIC   stp   ! called by nemogcm.F90 
     47 
     48   !!---------------------------------------------------------------------- 
     49   !! time level indices 
     50   !!---------------------------------------------------------------------- 
     51   INTEGER, PUBLIC :: Nbb, Nnn, Naa, Nrhs          !! used by nemo_init 
    4652 
    4753   !!---------------------------------------------------------------------- 
     
    8187      !! --------------------------------------------------------------------- 
    8288#if defined key_agrif 
     89      IF( nstop > 0 ) return   ! avoid to go further if an error was detected during previous time step  
    8390      kstp = nit000 + Agrif_Nb_Step() 
     91      Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs   ! agrif_oce module copies of time level indices 
    8492      IF( lk_agrif_debug ) THEN 
    8593         IF( Agrif_Root() .and. lwp)   WRITE(*,*) '---' 
     
    95103      ! 
    96104      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     105      ! model timestep 
     106      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     107      ! 
     108      IF( l_1st_euler ) THEN   
     109         ! start or restart with Euler 1st time-step 
     110         rDt =  rn_Dt    
     111         r1_Dt = 1._wp / rDt 
     112      ENDIF 
     113      ! 
     114      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    97115      ! update I/O and calendar  
    98116      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    100118                              
    101119      IF( kstp == nit000 ) THEN                       ! initialize IOM context (must be done after nemo_init for AGRIF+XIOS+OASIS) 
    102                              CALL iom_init(      cxios_context          )  ! for model grid (including passible AGRIF zoom) 
     120                             CALL iom_init( cxios_context, ld_closedef=.FALSE. )   ! for model grid (including passible AGRIF zoom) 
     121         IF( lk_diamlr   )   CALL dia_mlr_iom_init    ! with additional setup for multiple-linear-regression analysis 
     122                             CALL iom_init_closedef 
    103123                             IF( ln_crs      )   CALL iom_init( TRIM(cxios_context)//"_crs" )  ! for coarse grid 
    104124                             CALL dia_hth_init    ! extra ML depth diagnostics, thermocline depths 
     
    109129 
    110130      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    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, kt_offset = +1 )   ! update dynamic & tracer data at open boundaries 
    116                          CALL sbc     ( kstp )                   ! Sea Boundary Condition (including sea-ice) 
     131      ! Update external forcing (tides, open boundaries, ice shelf interaction and surface boundary condition (including sea-ice) 
     132      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     133      IF( ln_tide    )   CALL tide_update( kstp )                     ! update tide potential 
     134      IF( ln_apr_dyn )   CALL sbc_apr ( kstp )                        ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib)  
     135      IF( ln_bdy     )   CALL bdy_dta ( kstp, Nnn )                   ! update dynamic & tracer data at open boundaries 
     136      IF( ln_isf     )   CALL isf_stp ( kstp, Nnn ) 
     137                         CALL sbc     ( kstp, Nbb, Nnn )              ! Sea Boundary Condition (including sea-ice) 
    117138 
    118139      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    120141      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    121142      IF( ln_sto_eos ) CALL sto_par( kstp )          ! Stochastic parameters 
    122       IF( ln_sto_eos ) CALL sto_pts( tsn  )          ! Random T/S fluctuations 
     143      IF( ln_sto_eos ) CALL sto_pts( ts(:,:,:,:,Nnn)  )          ! Random T/S fluctuations 
    123144 
    124145      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    126147      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    127148      !  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 
     149                         CALL eos_rab( ts(:,:,:,:,Nbb), rab_b, Nnn )       ! before local thermal/haline expension ratio at T-points 
     150                         CALL eos_rab( ts(:,:,:,:,Nnn), rab_n, Nnn )       ! now    local thermal/haline expension ratio at T-points 
     151                         CALL bn2    ( ts(:,:,:,:,Nbb), rab_b, rn2b, Nnn ) ! before Brunt-Vaisala frequency 
     152                         CALL bn2    ( ts(:,:,:,:,Nnn), rab_n, rn2, Nnn  ) ! now    Brunt-Vaisala frequency 
    132153 
    133154      !  VERTICAL PHYSICS 
    134                          CALL zdf_phy( kstp )         ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 
     155                         CALL zdf_phy( kstp, Nbb, Nnn, Nrhs )   ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 
    135156 
    136157      !  LATERAL  PHYSICS 
    137158      ! 
    138159      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 
     160                         CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) )               ! before in situ density 
     161 
     162         IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     163            &            CALL zps_hde    ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), 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, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
     168            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
    148169         IF( ln_traldf_triad ) THEN  
    149                          CALL ldf_slp_triad( kstp )                       ! before slope for triad operator 
     170                         CALL ldf_slp_triad( kstp, Nbb, Nnn )             ! before slope for triad operator 
    150171         ELSE      
    151                          CALL ldf_slp     ( kstp, rhd, rn2b )             ! before slope for standard operator 
     172                         CALL ldf_slp     ( kstp, rhd, rn2b, Nbb, Nnn )   ! before slope for standard operator 
    152173         ENDIF 
    153174      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.  
     175      !                                                                        ! eddy diffusivity coeff. 
     176      IF( l_ldftra_time .OR. l_ldfeiv_time )   CALL ldf_tra( kstp, Nbb, Nnn )  !       and/or eiv coeff. 
     177      IF( l_ldfdyn_time                    )   CALL ldf_dyn( kstp, Nbb )       ! eddy viscosity coeff.  
    157178 
    158179      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    160181      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    161182 
    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 
     183                            CALL ssh_nxt       ( kstp, Nbb, Nnn, ssh, Naa )    ! after ssh (includes call to div_hor) 
     184      IF( .NOT.ln_linssh )  CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn,      Naa )    ! after vertical scale factors  
     185                            CALL wzv           ( kstp, Nbb, Nnn, ww,  Naa )    ! now cross-level velocity  
     186      IF( ln_zad_Aimp )     CALL wAimp         ( kstp,      Nnn          )  ! Adaptive-implicit vertical advection partitioning 
     187                            CALL eos    ( ts(:,:,:,:,Nnn), rhd, rhop, gdept(:,:,:,Nnn) )  ! now in situ density for hpg computation 
    167188                             
    168189                             
    169                          ua(:,:,:) = 0._wp            ! set dynamics trends to zero 
    170                          va(:,:,:) = 0._wp 
     190                         uu(:,:,:,Nrhs) = 0._wp            ! set dynamics trends to zero 
     191                         vv(:,:,:,Nrhs) = 0._wp 
    171192 
    172193      IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   & 
    173                &         CALL dyn_asm_inc   ( kstp )  ! apply dynamics assimilation increment 
    174       IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp )  ! bdy damping trends 
     194               &         CALL dyn_asm_inc   ( kstp, Nbb, Nnn, uu, vv, Nrhs )  ! apply dynamics assimilation increment 
     195      IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp, Nbb,      uu, vv, Nrhs )  ! bdy damping trends 
    175196#if defined key_agrif 
    176197      IF(.NOT. Agrif_Root())  &  
    177198               &         CALL Agrif_Sponge_dyn        ! momentum sponge 
    178199#endif 
    179                          CALL dyn_adv       ( kstp )  ! advection (vector or flux form) 
    180                          CALL dyn_vor       ( kstp )  ! vorticity term including Coriolis 
    181                          CALL dyn_ldf       ( kstp )  ! lateral mixing 
    182       IF( ln_zdfosm  )   CALL dyn_osm       ( kstp )  ! OSMOSIS non-local velocity fluxes 
    183                          CALL dyn_hpg       ( kstp )  ! horizontal gradient of Hydrostatic pressure 
    184                          CALL dyn_spg       ( kstp )  ! surface pressure gradient 
    185  
    186                                                       ! With split-explicit free surface, since now transports have been updated and ssha as well 
     200                         CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
     201                         CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
     202                         CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
     203      IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
     204                         CALL dyn_hpg( kstp,      Nnn      , uu, vv, Nrhs )  ! horizontal gradient of Hydrostatic pressure 
     205                         CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa )  ! surface pressure gradient 
     206 
     207                                                      ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) as well 
    187208      IF( ln_dynspg_ts ) THEN                         ! vertical scale factors and vertical velocity need to be updated 
    188                             CALL div_hor    ( kstp )              ! Horizontal divergence  (2nd call in time-split case) 
    189          IF(.NOT.ln_linssh) CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component) 
    190       ENDIF 
    191                          CALL dyn_zdf       ( kstp )  ! vertical diffusion 
    192  
    193       IF( ln_dynspg_ts ) THEN                         
    194                             CALL wzv        ( kstp )              ! now cross-level velocity  
    195          IF( ln_zad_Aimp )  CALL wAimp      ( kstp )  ! Adaptive-implicit vertical advection partitioning 
    196       ENDIF 
     209                            CALL div_hor       ( kstp, Nbb, Nnn )                ! Horizontal divergence  (2nd call in time-split case) 
     210         IF(.NOT.ln_linssh) CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn, Naa, kcall=2 )  ! after vertical scale factors (update depth average component) 
     211      ENDIF 
     212                            CALL dyn_zdf    ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa )  ! vertical diffusion 
     213      IF( ln_dynspg_ts ) THEN                                                       ! vertical scale factors and vertical velocity need to be updated 
     214                            CALL wzv        ( kstp, Nbb, Nnn, ww, Naa )             ! now cross-level velocity  
     215         IF( ln_zad_Aimp )  CALL wAimp      ( kstp,      Nnn )                      ! Adaptive-implicit vertical advection partitioning 
     216      ENDIF 
     217       
    197218 
    198219      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    199220      ! cool skin 
    200221      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<       
    201       IF ( ln_diurnal )  CALL stp_diurnal( kstp ) 
     222      IF ( ln_diurnal )  CALL diurnal_layers( kstp ) 
    202223       
    203224      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    204225      ! diagnostics and outputs 
    205226      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    206       IF( ln_floats  )   CALL flo_stp ( kstp )        ! drifting Floats 
    207       IF( ln_diacfl  )   CALL dia_cfl ( kstp )        ! Courant number diagnostics 
    208       IF( ll_diahth  )   CALL dia_hth ( kstp )        ! Thermocline depth (20 degres isotherm depth) 
    209       IF( ln_diadct  )   CALL dia_dct ( kstp )        ! Transports 
    210                          CALL dia_ar5 ( kstp )        ! ar5 diag 
    211       IF( ln_diaharm )   CALL dia_harm( kstp )        ! Tidal harmonic analysis 
    212                          CALL dia_wri ( kstp )        ! ocean model: outputs 
    213       ! 
    214       IF( ln_crs     )   CALL crs_fld       ( kstp )  ! ocean model: online field coarsening & output 
     227      IF( ln_floats  )   CALL flo_stp   ( kstp, Nbb, Nnn )      ! drifting Floats 
     228      IF( ln_diacfl  )   CALL dia_cfl   ( kstp,      Nnn )      ! Courant number diagnostics 
     229                         CALL dia_hth   ( kstp,      Nnn )      ! Thermocline depth (20 degres isotherm depth) 
     230      IF( ln_diadct  )   CALL dia_dct   ( kstp,      Nnn )      ! Transports 
     231                         CALL dia_ar5   ( kstp,      Nnn )      ! ar5 diag 
     232                         CALL dia_ptr   ( kstp,      Nnn )      ! Poleward adv/ldf TRansports diagnostics 
     233                         CALL dia_wri   ( kstp,      Nnn )      ! ocean model: outputs 
     234      IF( ln_crs     )   CALL crs_fld   ( kstp,      Nnn )      ! ocean model: online field coarsening & output 
     235      IF( lk_diadetide ) CALL dia_detide( kstp )                ! Weights computation for daily detiding of model diagnostics 
     236      IF( lk_diamlr  )   CALL dia_mlr                           ! Update time used in multiple-linear-regression analysis 
    215237       
    216238#if defined key_top 
     
    218240      ! Passive Tracer Model 
    219241      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    220                          CALL trc_stp       ( kstp )  ! time-stepping 
     242                         CALL trc_stp       ( kstp, Nbb, Nnn, Nrhs, Naa )  ! time-stepping 
    221243#endif 
    222244 
     
    224246      ! Active tracers                               
    225247      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    226                          tsa(:,:,:,:) = 0._wp         ! set tracer trends to zero 
     248                         ts(:,:,:,:,Nrhs) = 0._wp         ! set tracer trends to zero 
    227249 
    228250      IF(  lk_asminc .AND. ln_asmiau .AND. & 
    229          & ln_trainc )   CALL tra_asm_inc   ( kstp )  ! apply tracer assimilation increment 
    230                          CALL tra_sbc       ( kstp )  ! surface boundary condition 
    231       IF( ln_traqsr  )   CALL tra_qsr       ( kstp )  ! penetrative solar radiation qsr 
    232       IF( ln_trabbc  )   CALL tra_bbc       ( kstp )  ! bottom heat flux 
    233       IF( ln_trabbl  )   CALL tra_bbl       ( kstp )  ! advective (and/or diffusive) bottom boundary layer scheme 
    234       IF( ln_tradmp  )   CALL tra_dmp       ( kstp )  ! internal damping trends 
    235       IF( ln_bdy     )   CALL bdy_tra_dmp   ( kstp )  ! bdy damping trends 
     251         & ln_trainc )   CALL tra_asm_inc( kstp, Nbb, Nnn, ts, Nrhs )  ! apply tracer assimilation increment 
     252                         CALL tra_sbc    ( kstp,      Nnn, ts, Nrhs )  ! surface boundary condition 
     253      IF( ln_traqsr  )   CALL tra_qsr    ( kstp,      Nnn, ts, Nrhs )  ! penetrative solar radiation qsr 
     254      IF( ln_isf     )   CALL tra_isf    ( kstp,      Nnn, ts, Nrhs )  ! ice shelf heat flux 
     255      IF( ln_trabbc  )   CALL tra_bbc    ( kstp,      Nnn, ts, Nrhs )  ! bottom heat flux 
     256      IF( ln_trabbl  )   CALL tra_bbl    ( kstp, Nbb, Nnn, ts, Nrhs )  ! advective (and/or diffusive) bottom boundary layer scheme 
     257      IF( ln_tradmp  )   CALL tra_dmp    ( kstp, Nbb, Nnn, ts, Nrhs )  ! internal damping trends 
     258      IF( ln_bdy     )   CALL bdy_tra_dmp( kstp, Nbb,      ts, Nrhs )  ! bdy damping trends 
    236259#if defined key_agrif 
    237260      IF(.NOT. Agrif_Root())  &  
    238261               &         CALL Agrif_Sponge_tra        ! tracers sponge 
    239262#endif 
    240                          CALL tra_adv       ( kstp )  ! horizontal & vertical advection 
    241       IF( ln_zdfosm  )   CALL tra_osm       ( kstp )  ! OSMOSIS non-local tracer fluxes 
     263                         CALL tra_adv    ( kstp, Nbb, Nnn, ts, Nrhs )  ! hor. + vert. advection ==> RHS 
     264      IF( ln_zdfosm  )   CALL tra_osm    ( kstp,      Nnn, ts, Nrhs )  ! OSMOSIS non-local tracer fluxes ==> RHS 
    242265      IF( lrst_oce .AND. ln_zdfosm ) & 
    243            &             CALL osm_rst( kstp, 'WRITE' )! write OSMOSIS outputs + wn (so must do here) to restarts 
    244                          CALL tra_ldf       ( kstp )  ! lateral mixing 
    245  
    246 !!gm : why CALL to dia_ptr has been moved here??? (use trends info?) 
    247       IF( ln_diaptr  )   CALL dia_ptr                 ! Poleward adv/ldf TRansports diagnostics 
    248 !!gm 
    249                          CALL tra_zdf       ( kstp )  ! vertical mixing and after tracer fields 
    250       IF( ln_zdfnpc  )   CALL tra_npc       ( kstp )  ! update after fields by non-penetrative convection 
    251  
    252       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    253       ! Set boundary conditions and Swap 
     266           &             CALL osm_rst    ( kstp,      Nnn, 'WRITE'  )  ! write OSMOSIS outputs + ww (so must do here) to restarts 
     267                         CALL tra_ldf    ( kstp, Nbb, Nnn, ts, Nrhs )  ! lateral mixing 
     268 
     269                         CALL tra_zdf    ( kstp, Nbb, Nnn, Nrhs, ts, Naa  )  ! vertical mixing and after tracer fields 
     270      IF( ln_zdfnpc  )   CALL tra_npc    ( kstp,      Nnn, Nrhs, ts, Naa  )  ! update after fields by non-penetrative convection 
     271 
     272      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     273      ! Set boundary conditions, time filter and swap time levels 
    254274      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    255275!!jc1: For agrif, it would be much better to finalize tracers/momentum here (e.g. bdy conditions) and move the swap  
     
    266286!!    place. 
    267287!!  
    268 !!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine 
    269                          CALL tra_nxt       ( kstp )  ! finalize (bcs) tracer fields at next time step and swap 
    270                          CALL dyn_nxt       ( kstp )  ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 
    271                          CALL ssh_swp       ( kstp )  ! swap of sea surface height 
    272       IF(.NOT.ln_linssh) CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors 
    273       ! 
    274       IF( ln_diahsb  )   CALL dia_hsb       ( kstp )  ! - ML - global conservation diagnostics 
     288!!jc2: dynnxt must be the latest call. e3t(:,:,:,Nbb) are indeed updated in that routine 
     289                         CALL tra_atf       ( kstp, Nbb, Nnn, Naa, ts )                      ! time filtering of "now" tracer arrays 
     290                         CALL dyn_atf       ( kstp, Nbb, Nnn, Naa, uu, vv, e3t, e3u, e3v  )  ! time filtering of "now" velocities and scale factors 
     291                         CALL ssh_atf       ( kstp, Nbb, Nnn, Naa, ssh )                     ! time filtering of "now" sea surface height 
     292      ! 
     293      ! Swap time levels 
     294      Nrhs = Nbb 
     295      Nbb = Nnn 
     296      Nnn = Naa 
     297      Naa = Nrhs 
     298      ! 
     299      IF(.NOT.ln_linssh) CALL dom_vvl_sf_update( kstp, Nbb, Nnn, Naa )  ! recompute vertical scale factors 
     300      ! 
     301      IF( ln_diahsb  )   CALL dia_hsb       ( kstp, Nbb, Nnn )  ! - ML - global conservation diagnostics 
    275302 
    276303!!gm : This does not only concern the dynamics ==>>> add a new title 
     
    279306!!jc: That would be better, but see comment above 
    280307!! 
    281       IF( lrst_oce   )   CALL rst_write    ( kstp )   ! write output ocean restart file 
     308      IF( lrst_oce   )   CALL rst_write    ( kstp, Nbb, Nnn )   ! write output ocean restart file 
    282309      IF( ln_sto_eos )   CALL sto_rst_write( kstp )   ! write restart file for stochastic parameters 
    283310 
    284311#if defined key_agrif 
    285312      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    286       ! AGRIF 
     313      ! AGRIF recursive integration 
    287314      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<       
    288                          CALL Agrif_Integrate_ChildGrids( stp )  ! allows to finish all the Child Grids before updating 
    289  
    290                          IF( Agrif_NbStepint() == 0 ) CALL Agrif_update_all( ) ! Update all components 
    291 #endif 
    292       IF( ln_diaobs  )   CALL dia_obs      ( kstp )      ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 
    293  
     315                         Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs      ! agrif_oce module copies of time level indices 
     316                         CALL Agrif_Integrate_ChildGrids( stp )       ! allows to finish all the Child Grids before updating 
     317#endif 
    294318      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    295319      ! Control 
    296320      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    297                          CALL stp_ctl      ( kstp, indic ) 
    298                           
     321                         CALL stp_ctl      ( kstp, Nbb, Nnn, indic ) 
     322#if defined key_agrif 
     323      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     324      ! AGRIF update 
     325      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<       
     326      IF( Agrif_NbStepint() == 0 .AND. nstop == 0 ) THEN 
     327                         CALL Agrif_update_all( )                  ! Update all components 
     328      ENDIF 
     329#endif 
     330      IF( ln_diaobs  )   CALL dia_obs      ( kstp, Nnn )      ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 
     331 
     332      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     333      ! File manipulation at the end of the first time step 
     334      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                          
    299335      IF( kstp == nit000 ) THEN                          ! 1st time step only 
    300336                                        CALL iom_close( numror )   ! close input  ocean restart file 
     
    307343      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    308344!!gm why lk_oasis and not lk_cpl ???? 
    309       IF( lk_oasis   )   CALL sbc_cpl_snd( kstp )     ! coupled mode : field exchanges 
     345      IF( lk_oasis   )   CALL sbc_cpl_snd( kstp, Nbb, Nnn )        ! coupled mode : field exchanges 
    310346      ! 
    311347#if defined key_iomput 
     348      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     349      ! Finalize contextes if end of simulation or error detected 
     350      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                          
    312351      IF( kstp == nitend .OR. indic < 0 ) THEN  
    313352                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
    314                       IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
     353         IF( lrxios ) CALL iom_context_finalize(      crxios_context         ) 
    315354         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !  
    316355      ENDIF 
    317356#endif 
    318357      ! 
     358      IF( l_1st_euler ) THEN         ! recover Leap-frog timestep 
     359         rDt = 2._wp * rn_Dt    
     360         r1_Dt = 1._wp / rDt 
     361         l_1st_euler = .FALSE.       
     362      ENDIF 
     363      ! 
    319364      IF( ln_timing )   CALL timing_stop('stp') 
    320365      ! 
    321366   END SUBROUTINE stp 
    322     
     367   ! 
    323368   !!====================================================================== 
    324369END MODULE step 
Note: See TracChangeset for help on using the changeset viewer.