Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus: Time Integration and Sensitivity Analysis Package


Tempus is a Latin word meaning time as in “tempus fugit” -> “time flies”.

The Tempus package is a time-integration framework for advanced transient analysis, including various time integrators and embedded sensitivity analysis for next-generation code architectures. This framework provides “out-of-the-box” time-integration capabilities, which allows users to supply governing equations and easily switch between various time integrators. Additionally Tempus provides “build-your-own” capabilities, which allows applications to incorporate various Tempus components to augment or replace application transient capabilities. Other capabilities include embedded error analysis, sensitivity analysis, transient optimization with ROL.

Tempus provides a general infrastructure for the time evolution of solutions through a variety of general integration schemes, and can be used from small systems of equations (e.g., single ODEs for the time evolution of plasticity models, and multiple ODEs for coupled chemical reactions) to large-scale transient simulations requiring exascale computing (e.g., flow fields around reentry vehicles and magneto-hydrodynamics).


Tempus provides time-integration methods for first and second-order ODEs in their explicit and implicit forms,

\begin{eqnarray*} \mbox{Explicit:} & \dot{x} = \mathbf{f}(x,t) & \ddot{x} = \mathbf{f}(\dot{x},x,t) \\ \mbox{Implicit:} & \mathcal{F}(\dot{x},x,t) = 0 & \mathcal{F}(\ddot{x},\dot{x},x,t) = 0 \end{eqnarray*}


Tempus Integrators (e.g., Tempus::IntegratorBasic) are the time loop structure for time integration and provide several features, e.g.,

Time Steppers

Some features of Tempus::Stepper are

A variety of time steppers are available (also see Tempus::Stepper).

Solution State and Solution History

Solutions in Tempus are maintained in Tempus::SolutionState and incapsulate the complete state of the solution for a particular time. The primary requirement for SolutionState is that it contains all the information needed to restart the solution from scratch, e.g., check-pointing and recover from a failed timestep. The four primary components of the Tempus::SolutionState are

Tempus::SolutionState are stored in a Tempus::SolutionHistory, which is simply a container of SolutionStates, and

Timestep Control and Strategies

Tempus::TimeStepControl is used by the Tempus::IntegratorBasic to select the next timestep size, and has several basic capabilities:

Additionally, Tempus provides timestep control strategies (e.g., Tempus::TimeStepControlStrategy) for various variable-timestepping capabilities, and include


Here are some basic tutorials to illustrate how convert an application use Tempus, and some of the features available.

Title Description
Example 0: Basic Problem Introduces the problem used in following examples.
Example 1: Utilize Thyra Utilize Thyra Vectors instead of C++ arrays.
Example 2: Use ModelEvaluator Use ModelEvaluator for the problem description.
Example 3: Introduce SolutionState Introduce SolutionState to manage the solution evoluation. Covers: solution vectors ( $x$, $\dot{x}$, and $\ddot{x}$) and metadata.
Adding SolutionHistory Adding SolutionHistory to store and interpolate solutions. (under construction).
Use Steppers Use Steppers to enable various time steppers. Covers: explicit and implicit ODE time steppers, consistent initial conditions, and AppActions.
Introduce Time-step Controllers Introduce TimeStepControllers to change the timestep size for variable timestepping. Covers: time step strategies and TimeEvents.
Utilize IntegratorBasic utilize IntegratorBasic to provide all the basic features for Tempus time integrators. Covers: IntegratorBasic and IntegratorObservers.

Also, one can look at the tests and unit tests for examples of usage, but these may not show standard usage or context as they are meant for testing.