version 3.10-dev
Dumux::CheckPointTimeLoop< Scalar > Class Template Reference

A time loop with a check point mechanism.

#include <dumux/common/timeloop.hh>

Inheritance diagram for Dumux::CheckPointTimeLoop< Scalar >:

Public Types

using Scalar = Scalar
 

Public Member Functions

template<class... Args>
 CheckPointTimeLoop (Args &&... args)
 
void advanceTimeStep () override
 Advance time step. More...
 
Scalar maxTimeStepSize () const override
 The current maximum time step size. More...
 
template<class ScalarOrDuration1 , class ScalarOrDuration2 = Scalar>
void setPeriodicCheckPoint (ScalarOrDuration1 interval, ScalarOrDuration2 offset=0.0)
 Set a periodic check point. More...
 
void disablePeriodicCheckPoints ()
 disable periodic check points More...
 
void removeAllCheckPoints ()
 remove all check points More...
 
bool isCheckPoint () const
 Whether now is a time checkpoint. More...
 
template<class ScalarOrDuration >
void setCheckPoint (ScalarOrDuration t)
 add a checkpoint to the queue More...
 
template<class ScalarOrDuration >
void setCheckPoint (const std::initializer_list< ScalarOrDuration > &checkPoints)
 add checkpoints to the queue from a list of time points More...
 
template<class ScalarOrDuration >
void setCheckPoint (const std::vector< ScalarOrDuration > &checkPoints)
 
template<class ForwardIterator >
void setCheckPoint (ForwardIterator first, ForwardIterator last)
 add checkpoints to the queue from a container from the first iterator to the last iterator More...
 
Scalar timeStepSizeToNextCheckPoint () const
 Return the time step size to exactly reach the next check point In case there is no check point in the future, the largest representable scalar is returned. More...
 
void setTimeStepSize (std::chrono::duration< Rep, Period > dt)
 Set the current time step size to a given value. More...
 

Simulated time and time step management

void start ()
 Tells the time loop to start tracking the time. More...
 
double stop ()
 Tells the time loop to stop tracking the time. More...
 
void resetTimer ()
 Reset the timer. More...
 
template<class Rep1 , class Period1 , class Rep2 , class Period2 , class Rep3 , class Period3 >
void reset (std::chrono::duration< Rep1, Period1 > startTime, std::chrono::duration< Rep2, Period2 > dt, std::chrono::duration< Rep3, Period3 > tEnd, bool verbose=true)
 Reset the time loop. More...
 
void reset (Scalar startTime, Scalar dt, Scalar tEnd, bool verbose=true)
 Reset the time loop. More...
 
template<class ScalarOrDuration >
void setTime (ScalarOrDuration t)
 Set the current simulated time, don't change the current time step index. More...
 
template<class ScalarOrDuration >
void setTime (ScalarOrDuration t, int stepIdx)
 Set the current simulated time and the time step index. More...
 
Scalar time () const final
 Return the time \(\mathrm{[s]}\) before the time integration. To get the time after the time integration you have to add timeStepSize() to time(). More...
 
Scalar endTime () const
 Returns the number of (simulated) seconds which the simulation runs. More...
 
void setEndTime (Scalar t)
 Set the time of simulated seconds at which the simulation runs. More...
 
double wallClockTime () const
 Returns the current wall clock time (cpu time) spend in this time loop. More...
 
void setTimeStepSize (Scalar dt) final
 Set the current time step size to a given value. More...
 
template<class ScalarOrDuration >
void setMaxTimeStepSize (ScalarOrDuration maxDt)
 Set the maximum time step size to a given value. More...
 
Scalar timeStepSize () const final
 Returns the suggested time step length \(\mathrm{[s]}\) so that we don't miss the beginning of the next episode or cross the end of the simulation. More...
 
int timeStepIndex () const
 Returns number of time steps which have been executed since the beginning of the simulation. More...
 
Scalar previousTimeStepSize () const
 The previous time step size. More...
 
void setFinished (bool finished=true)
 Specify whether the simulation is finished. More...
 
bool finished () const override
 Returns true if the simulation is finished. More...
 
bool willBeFinished () const
 Returns true if the simulation is finished after the time level is incremented by the current time step size. More...
 
void reportTimeStep () const
 State info on cpu time. More...
 
template<class Communicator = Dune::Communication<typename Dune::MPIHelper::MPICommunicator>>
void finalize (const Communicator &comm=Dune::MPIHelper::getCommunication())
 Print final status and stops tracking the time. More...
 
bool verbose () const
 If the time loop has verbose output. More...
 
void setVerbose (bool verbose=true)
 Sets time loop verbosity. More...
 
static constexpr Scalar baseEps_ = 1e-10
 
Dune::Timer timer_
 
Scalar time_
 
Scalar endTime_
 
Scalar startTime_
 
Scalar timeStepSize_
 
Scalar previousTimeStepSize_
 
Scalar userSetMaxTimeStepSize_
 
Scalar timeAfterLastTimeStep_
 
Scalar timeStepWallClockTime_
 
int timeStepIdx_
 
bool finished_
 
bool verbose_
 

Member Typedef Documentation

◆ Scalar

using Dumux::TimeLoopBase< Scalar >::Scalar = Scalar
inherited

Constructor & Destructor Documentation

◆ CheckPointTimeLoop()

template<class Scalar >
template<class... Args>
Dumux::CheckPointTimeLoop< Scalar >::CheckPointTimeLoop ( Args &&...  args)
inline

Member Function Documentation

◆ advanceTimeStep()

template<class Scalar >
void Dumux::CheckPointTimeLoop< Scalar >::advanceTimeStep ( )
inlineoverridevirtual

Check point management, TimeLoop::isCheckPoint() has to be called after this!

Reimplemented from Dumux::TimeLoop< Scalar >.

◆ disablePeriodicCheckPoints()

template<class Scalar >
void Dumux::CheckPointTimeLoop< Scalar >::disablePeriodicCheckPoints ( )
inline

◆ endTime()

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::endTime ( ) const
inlineinherited

◆ finalize()

template<class Scalar >
template<class Communicator = Dune::Communication<typename Dune::MPIHelper::MPICommunicator>>
void Dumux::TimeLoop< Scalar >::finalize ( const Communicator &  comm = Dune::MPIHelper::getCommunication())
inlineinherited

◆ finished()

template<class Scalar >
bool Dumux::TimeLoop< Scalar >::finished ( ) const
inlineoverridevirtualinherited

This is the case if either setFinished(true) has been called or if the end time is reached.

Implements Dumux::TimeLoopBase< Scalar >.

◆ isCheckPoint()

template<class Scalar >
bool Dumux::CheckPointTimeLoop< Scalar >::isCheckPoint ( ) const
inline
Note
has to be called after TimeLoop::advanceTimeStep()

◆ maxTimeStepSize()

template<class Scalar >
Scalar Dumux::CheckPointTimeLoop< Scalar >::maxTimeStepSize ( ) const
inlineoverridevirtual
Note
This gets aligned on every setTimeStepSize call to end time and other possible check points

Reimplemented from Dumux::TimeLoop< Scalar >.

◆ previousTimeStepSize()

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::previousTimeStepSize ( ) const
inlineinherited

◆ removeAllCheckPoints()

template<class Scalar >
void Dumux::CheckPointTimeLoop< Scalar >::removeAllCheckPoints ( )
inline

◆ reportTimeStep()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::reportTimeStep ( ) const
inlineinherited
Note
Always call this after TimeLoop::advanceTimeStep()

◆ reset() [1/2]

template<class Scalar >
void Dumux::TimeLoop< Scalar >::reset ( Scalar  startTime,
Scalar  dt,
Scalar  tEnd,
bool  verbose = true 
)
inlineinherited

◆ reset() [2/2]

template<class Scalar >
template<class Rep1 , class Period1 , class Rep2 , class Period2 , class Rep3 , class Period3 >
void Dumux::TimeLoop< Scalar >::reset ( std::chrono::duration< Rep1, Period1 >  startTime,
std::chrono::duration< Rep2, Period2 >  dt,
std::chrono::duration< Rep3, Period3 >  tEnd,
bool  verbose = true 
)
inlineinherited

◆ resetTimer()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::resetTimer ( )
inlineinherited

◆ setCheckPoint() [1/4]

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::CheckPointTimeLoop< Scalar >::setCheckPoint ( const std::initializer_list< ScalarOrDuration > &  checkPoints)
inline
Note
checkpoints have to be provided in ascending order
Parameters
checkPointsthe list of check points
Note
This also updates the time step size and potentially reduces the time step size to meet the next check point

◆ setCheckPoint() [2/4]

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::CheckPointTimeLoop< Scalar >::setCheckPoint ( const std::vector< ScalarOrDuration > &  checkPoints)
inline

◆ setCheckPoint() [3/4]

template<class Scalar >
template<class ForwardIterator >
void Dumux::CheckPointTimeLoop< Scalar >::setCheckPoint ( ForwardIterator  first,
ForwardIterator  last 
)
inline
Note
checkpoints have to be provided in ascending order
Parameters
firstiterator to the first element to be inserted
lastiterator to the one-after-last element to be inserted
Note
This also updates the time step size and potentially reduces the time step size to meet the next check point

◆ setCheckPoint() [4/4]

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::CheckPointTimeLoop< Scalar >::setCheckPoint ( ScalarOrDuration  t)
inline
Note
checkpoints have to be provided in ascending order
Parameters
tthe check point (in seconds)
Note
This also updates the time step size and potentially reduces the time step size to meet the next check point

◆ setEndTime()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::setEndTime ( Scalar  t)
inlineinherited
Parameters
tThe time \(\mathrm{[s]}\) at which the simulation is finished

◆ setFinished()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::setFinished ( bool  finished = true)
inlineinherited
Parameters
finishedIf true the simulation is considered finished before the end time is reached, else it is only considered finished if the end time is reached.

◆ setMaxTimeStepSize()

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::TimeLoop< Scalar >::setMaxTimeStepSize ( ScalarOrDuration  maxDt)
inlineinherited
Parameters
maxDtThe new value for the maximum time step size \(\mathrm{[s]}\)
Note
This may also reduce the currently set timestep size if needed to comply with the set maximum

◆ setPeriodicCheckPoint()

template<class Scalar >
template<class ScalarOrDuration1 , class ScalarOrDuration2 = Scalar>
void Dumux::CheckPointTimeLoop< Scalar >::setPeriodicCheckPoint ( ScalarOrDuration1  interval,
ScalarOrDuration2  offset = 0.0 
)
inline
Note
You can query if we are at a time check point with isCheckPoint()
Parameters
intervalSet a periodic checkout every [interval] seconds
offsettime from which the periodic check points are supposed to start (simulation time) the first checkpoint will be at time = offset.
Note
If offset is in the past the first check point will be at the next periodic check point greater or equal than time
This also updates the time step size and potentially reduces the time step size to meet the next check point

◆ setTime() [1/2]

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::TimeLoop< Scalar >::setTime ( ScalarOrDuration  t)
inlineinherited
Parameters
tThe time \(\mathrm{[s]}\) which should be jumped to

◆ setTime() [2/2]

template<class Scalar >
template<class ScalarOrDuration >
void Dumux::TimeLoop< Scalar >::setTime ( ScalarOrDuration  t,
int  stepIdx 
)
inlineinherited
Parameters
tThe time \(\mathrm{[s]}\) which should be jumped to
stepIdxThe new time step index

◆ setTimeStepSize() [1/2]

template<class Scalar >
void Dumux::TimeLoop< Scalar >::setTimeStepSize ( Scalar  dt)
inlinefinalvirtualinherited

If the step size would exceed the length of the current episode, the timeStep() method will take care that the step size won't exceed the episode or the end of the simulation, though.

Parameters
dtThe new value for the time step size \(\mathrm{[s]}\)

Implements Dumux::TimeLoopBase< Scalar >.

◆ setTimeStepSize() [2/2]

void Dumux::TimeLoopBase< Scalar >::setTimeStepSize ( std::chrono::duration< Rep, Period >  dt)
inlineinherited
Parameters
dtThe new value for the time step size \(\mathrm{[s]}\)

◆ setVerbose()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::setVerbose ( bool  verbose = true)
inlineinherited

◆ start()

template<class Scalar >
void Dumux::TimeLoop< Scalar >::start ( )
inlineinherited

◆ stop()

template<class Scalar >
double Dumux::TimeLoop< Scalar >::stop ( )
inlineinherited
Returns
the wall clock time (CPU time) spent until now

◆ time()

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::time ( ) const
inlinefinalvirtualinherited

◆ timeStepIndex()

template<class Scalar >
int Dumux::TimeLoop< Scalar >::timeStepIndex ( ) const
inlineinherited

◆ timeStepSize()

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::timeStepSize ( ) const
inlinefinalvirtualinherited

◆ timeStepSizeToNextCheckPoint()

template<class Scalar >
Scalar Dumux::CheckPointTimeLoop< Scalar >::timeStepSizeToNextCheckPoint ( ) const
inline

◆ verbose()

template<class Scalar >
bool Dumux::TimeLoop< Scalar >::verbose ( ) const
inlineinherited

◆ wallClockTime()

template<class Scalar >
double Dumux::TimeLoop< Scalar >::wallClockTime ( ) const
inlineinherited

◆ willBeFinished()

template<class Scalar >
bool Dumux::TimeLoop< Scalar >::willBeFinished ( ) const
inlineinherited

Member Data Documentation

◆ baseEps_

template<class Scalar >
constexpr Scalar Dumux::TimeLoop< Scalar >::baseEps_ = 1e-10
staticconstexprprotectedinherited

◆ endTime_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::endTime_
protectedinherited

◆ finished_

template<class Scalar >
bool Dumux::TimeLoop< Scalar >::finished_
protectedinherited

◆ previousTimeStepSize_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::previousTimeStepSize_
protectedinherited

◆ startTime_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::startTime_
protectedinherited

◆ time_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::time_
protectedinherited

◆ timeAfterLastTimeStep_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::timeAfterLastTimeStep_
protectedinherited

◆ timer_

template<class Scalar >
Dune::Timer Dumux::TimeLoop< Scalar >::timer_
protectedinherited

◆ timeStepIdx_

template<class Scalar >
int Dumux::TimeLoop< Scalar >::timeStepIdx_
protectedinherited

◆ timeStepSize_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::timeStepSize_
protectedinherited

◆ timeStepWallClockTime_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::timeStepWallClockTime_
protectedinherited

◆ userSetMaxTimeStepSize_

template<class Scalar >
Scalar Dumux::TimeLoop< Scalar >::userSetMaxTimeStepSize_
protectedinherited

◆ verbose_

template<class Scalar >
bool Dumux::TimeLoop< Scalar >::verbose_
protectedinherited

The documentation for this class was generated from the following file: