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 10001 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/nemogcm.F90 – NEMO

Ignore:
Timestamp:
2018-07-26T09:50:51+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): RK3 branch - step I.1 and I.2 (see wiki page)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/nemogcm.F90

    r9939 r10001  
    3636   !!---------------------------------------------------------------------- 
    3737   !!   nemo_gcm      : solve ocean dynamics, tracer, biogeochemistry and/or sea-ice 
     38   !!   nemo_MLF      : Modified Leap-Frog time stepping loop 
     39   !!   nemo_RK3      : 3rd order Runge-Kutta time stepping loop 
    3840   !!   nemo_init     : initialization of the NEMO system 
    3941   !!   nemo_ctl      : initialisation of the contol print 
     
    6062   USE diacfl         ! CFL diagnostics               (dia_cfl_init routine) 
    6163   USE step           ! NEMO time-stepping                 (stp     routine) 
     64   USE stpRK3         ! NEMO time-stepping                 (stp     routine) 
    6265   USE icbini         ! handle bergs, initialisation 
    6366   USE icbstp         ! handle bergs, calving, themodynamics and transport 
     
    123126      !!              Madec, 2008, internal report, IPSL. 
    124127      !!---------------------------------------------------------------------- 
    125       INTEGER ::   istp   ! time step index 
    126       !!---------------------------------------------------------------------- 
    127128      ! 
    128129#if defined key_agrif 
     
    152153      !                            !-----------------------! 
    153154      ! 
    154       !                                               !== set the model time-step  ==! 
     155      IF( ln_MLF )   CALL nemo_MLF        ! Modified Leap-Frog 
     156      ! 
     157      IF( ln_RK3 )   CALL nemo_RK3        ! 3rd order Runge-Kutta 
     158      ! 
     159      ! 
     160      IF( ln_diaobs   )   CALL dia_obs_wri 
     161      ! 
     162      IF( ln_icebergs )   CALL icb_end( nitend ) 
     163 
     164      !                            !------------------------! 
     165      !                            !==  finalize the run  ==! 
     166      !                            !------------------------! 
     167      IF(lwp) WRITE(numout,cform_aaa)        ! Flag AAAAAAA 
     168      ! 
     169      IF( nstop /= 0 .AND. lwp ) THEN        ! error print 
     170         WRITE(numout,cform_err) 
     171         WRITE(numout,*) '   ==>>>   nemo_gcm: a total of ', nstop, ' errors have been found' 
     172         WRITE(numout,*) 
     173      ENDIF 
     174      ! 
     175      IF( ln_timing )   CALL timing_finalize 
     176      ! 
     177      CALL nemo_closefile 
     178      ! 
     179#if defined key_iomput 
     180                                    CALL xios_finalize  ! end mpp communications with xios 
     181      IF( lk_oasis     )            CALL cpl_finalize   ! end coupling and mpp communications with OASIS 
     182#else 
     183      IF    ( lk_oasis ) THEN   ;   CALL cpl_finalize   ! end coupling and mpp communications with OASIS 
     184      ELSEIF( lk_mpp   ) THEN   ;   CALL mppstop        ! end mpp communications 
     185      ENDIF 
     186#endif 
     187      ! 
     188   END SUBROUTINE nemo_gcm 
     189 
     190 
     191   SUBROUTINE nemo_MLF 
     192      !!---------------------------------------------------------------------- 
     193      !!                     ***  ROUTINE nemo_MLF  *** 
     194      !! 
     195      !! ** Purpose :   Modified Leap-Frog time stepping loop 
     196      !!---------------------------------------------------------------------- 
     197      INTEGER ::   istp   ! time step index 
     198      !!---------------------------------------------------------------------- 
     199      !                                               !== set the MLF time-step  ==! 
    155200      ! 
    156201      IF( l_1st_euler ) THEN   ;   rDt =         rn_Dt   ;   l_1st_euler = .TRUE.    ! start or restart with Euler 1st time-step 
     
    212257#endif 
    213258      ! 
    214       IF( ln_diaobs   )   CALL dia_obs_wri 
    215       ! 
    216       IF( ln_icebergs )   CALL icb_end( nitend ) 
    217  
    218       !                            !------------------------! 
    219       !                            !==  finalize the run  ==! 
    220       !                            !------------------------! 
    221       IF(lwp) WRITE(numout,cform_aaa)        ! Flag AAAAAAA 
    222       ! 
    223       IF( nstop /= 0 .AND. lwp ) THEN        ! error print 
    224          WRITE(numout,cform_err) 
    225          WRITE(numout,*) '   ==>>>   nemo_gcm: a total of ', nstop, ' errors have been found' 
    226          WRITE(numout,*) 
    227       ENDIF 
    228       ! 
    229       IF( ln_timing )   CALL timing_finalize 
    230       ! 
    231       CALL nemo_closefile 
    232       ! 
    233 #if defined key_iomput 
    234                                     CALL xios_finalize  ! end mpp communications with xios 
    235       IF( lk_oasis     )            CALL cpl_finalize   ! end coupling and mpp communications with OASIS 
     259   END SUBROUTINE nemo_MLF 
     260 
     261 
     262   SUBROUTINE nemo_RK3 
     263      !!---------------------------------------------------------------------- 
     264      !!                     ***  ROUTINE nemo_RK3  *** 
     265      !! 
     266      !! ** Purpose :   3rd order Runge-Kutta time stepping loop 
     267      !!---------------------------------------------------------------------- 
     268      INTEGER ::   istp   ! time step index 
     269      !!---------------------------------------------------------------------- 
     270      ! 
     271      !                                         !== set the model time-step  ==! 
     272      rDt = rn_Dt 
     273      r1_Dt = 1._wp / rDt 
     274      istp = nit000 
     275      ! 
     276#if defined key_agrif 
     277      !                                         !==  AGRIF time-stepping  ==! 
     278      CALL Agrif_Regrid() 
     279      ! 
     280      CALL Agrif_step_child_adj(Agrif_Update_All)        ! Recursive update from highest to lowest nested levels 
     281      ! 
     282      DO WHILE( istp <= nitend .AND. nstop == 0 ) 
     283         CALL stp_RK3 
     284         istp = istp + 1 
     285      END DO 
     286      ! 
     287      IF( .NOT. Agrif_Root() ) THEN 
     288         CALL Agrif_ParentGrid_To_ChildGrid() 
     289         IF( ln_diaobs )   CALL dia_obs_wri 
     290         IF( ln_timing )   CALL timing_finalize 
     291         CALL Agrif_ChildGrid_To_ParentGrid() 
     292      ENDIF 
     293      ! 
    236294#else 
    237       IF    ( lk_oasis ) THEN   ;   CALL cpl_finalize   ! end coupling and mpp communications with OASIS 
    238       ELSEIF( lk_mpp   ) THEN   ;   CALL mppstop        ! end mpp communications 
    239       ENDIF 
    240 #endif 
    241       ! 
    242    END SUBROUTINE nemo_gcm 
     295      !                                         !==  Standard time-stepping  ==! 
     296      ! 
     297      DO WHILE( istp <= nitend .AND. nstop == 0 ) 
     298         CALL stp_RK3( istp )  
     299         istp = istp + 1 
     300      END DO 
     301      ! 
     302#endif 
     303      ! 
     304   END SUBROUTINE nemo_RK3 
    243305 
    244306 
     
    459521 
    460522      !                                      ! Assimilation increments 
    461       IF( lk_asminc    )   CALL asm_inc_init    ! Initialize assimilation increments 
     523      IF( lk_asminc    ) THEN 
     524                           CALL asm_inc_init    ! Initialize assimilation increments 
     525                           l_dynasm = ln_asmiau .AND. ln_dyninc 
     526                           l_traasm = ln_asmiau .AND. ln_trainc 
     527      ELSE 
     528                           l_dynasm = .FALSE. 
     529                           l_traasm = .FALSE. 
     530      ENDIF 
    462531      ! 
    463532      IF(lwp) WRITE(numout,cform_aaa)           ! Flag AAAAAAA 
Note: See TracChangeset for help on using the changeset viewer.