
\section{Basic Time-Integration Requirements}

The following is a list of basic requirements needed by most time
integrators.
\begin{enumerate}
\item General requirements

\begin{enumerate}
\item Easy to use! Keep it very simple!

\begin{enumerate}
\item Simple integrators should be simple to do! Complex integrators may
(and usually do) require complex methods.
\end{enumerate}
\end{enumerate}
\item Input specification

\begin{enumerate}
\item Simple to setup time integrators.
\item Keep number of lists and nesting to a minimum.
\item Common parameters should move up the hierarchy.
\item Separate list for time-integrator construction and runtime execution.
\end{enumerate}
\item Output specification

\begin{enumerate}
\item Have a coherent method for verbosity specification (too easy to get
too much information).
\item Ensure default output is not too verbose.
\item Needs simple clear organization.
\end{enumerate}
\item Software design (General)

\begin{enumerate}
\item Keep a simple object hierarchy.
\item Modular setup and usage.
\item Do not use too many levels of indirection.
\item Use a simple naming convention.
\item Make usage of methods clean and straight forward. (Usage of implicit
methods is clunky.)
\item Time integrators and steppers need to be well documented

\begin{enumerate}
\item Capabilities and properties of each integrator and stepper needs to
be documented.
\item Stability, order, ...
\item What is functional and what is not? Ramping, error control, ...
\item Examples demonstrating capabilities.

\begin{enumerate}
\item If a capability is not regression tested, it does not exist.
\end{enumerate}
\end{enumerate}
\item Needs to be built with

\begin{enumerate}
\item Thyra and/or adaptor interface
\item ModelEvaluator and/or adaptor interface
\item Templated on scalar types
\item Will entail using the Data Warehouse?
\end{enumerate}
\item Needs to be easy to write a time integrator

\begin{enumerate}
\item Insulate users and application developers from gory details (Thyra,
ModelEvaluator) as much as possible.
\item Have a pure virtual interface, and a default implementation (stay
away from mix-in interfaces i.e., multiple inheritance interfaces)
\end{enumerate}
\item Should not incur any additional costs to use the time-integration
package.

\begin{enumerate}
\item Obviously minor cost differences should be OK, but with explicit evaluations
any additional costs may not be acceptable.
\item Computational cost of time-integrators are very small.
\end{enumerate}
\end{enumerate}
\item Software design (Specific)

\begin{enumerate}
\item Construction from ParameterList, solution vector, initial guess, ...
\item Easy accessors to objects and parameters

\begin{enumerate}
\item Time step, preferred next time step, time step limits (max/min), ...
\item Time-integration errors
\end{enumerate}
\item Ability to set/reset functions: ramping, error control, timestep limit
functions, ...
\item Ability to take a single time step
\item Ability to advance the solution to a specific time, and get solutions
out at specific times (check pointed solutions not interpolations).
\item Ability for step/error control

\begin{enumerate}
\item For a single time step just return error estimates
\item For time advance, control step size and error to tolerances and return
vector of step sizes taken and error estimates.
\item Adjust timestep size based on stability limits (e.g., CFL limits)
for each physics.

\begin{enumerate}
\item This will require hooks for the physics to supply timestep limit functions.
\end{enumerate}
\item Adjusting timestep size based on temporal errors should be something
handled internal to the time integration.
\end{enumerate}
\item Ability to ramp the timestep size
\item Need access to previous time steps/errors
\item Ability to insert observers into the time integration

\begin{enumerate}
\item Need observers between RK stages
\end{enumerate}
\item Ability for ``out of the box'' time integration (i.e., use functionality
already available in time-integration package).

\begin{enumerate}
\item For simple time-integration schemes, the user should be able to construct
a time integrator and advance a solution ``out of the box''.
\end{enumerate}
\item Ability for ``build your own'' time integration to construct a specialized
time integration scheme

\begin{enumerate}
\item This requires a simple, clear, well-documented definition of a time
integrator.
\end{enumerate}
\item Forward and adjoint sensitivities.

\begin{enumerate}
\item Should be able to use Griewank's and Wang's method for checkpointing
\item Should be able to use reduced memory checkpointing.
\item Use Multi-Vector?
\item Get sensitivities of solution and response with respect to parameters.
\item Need an adjoint solve.
\end{enumerate}
\end{enumerate}
\end{enumerate}

\section{ATDM Specific Time-Integration Requirements}
\begin{enumerate}
\item Build the time-integrator package from the ATDM applications, and
generalize from there.
\item Time-integration package needs to handle

\begin{enumerate}
\item Multi-physics, Multi-scale
\item Inter-node Asynchronous Multi-Task (AMT)

\begin{enumerate}
\item New physics startup (ex: ablation needing new physics, PIC particle
hitting boundary creating new particle/physics?)

\begin{itemize}
\item Does this mean just terms in the equations and/or new equations?
\end{itemize}
\item New work distributions
\end{enumerate}
\end{enumerate}
\item Steppers

\begin{enumerate}
\item First-order PDEs

\begin{enumerate}
\item Forward and Backward Euler
\item Runge-Kutta
\item Implicit and Explicit (IMEX) schemes

\begin{enumerate}
\item Currently working through Piro, but has some issues. (EM)
\item Need to be able to solve for explicit variables, and eliminate them
from the implicit solve.
\item Need to be able to handle the cases of Lagrangian and ALE formulation
(mass matrix).
\end{enumerate}
\end{enumerate}
\item Operator-Splitting

\begin{enumerate}
\item First-Order split
\item Strang/Marchuk splitting
\item Subcycling?
\item Can re-solve the current time step

\begin{enumerate}
\item In multi-physics black-box mode coupling, 

\begin{itemize}
\item User queries each physics for preferred timestep size, and timestep
limits.
\item Next timestep is negotiated between the preferred timestep sizes.
\item Each physics takes the negotiated timestep size.
\item If any of the physics fails the timestep, tell ALL physics to reject
the current solution and re-solve using a new negotiated (smaller)
timestep.
\item The PIKE black-box ModelEvaluator is an example of this.
\end{itemize}
\end{enumerate}
\end{enumerate}
\item L-stable methods
\item SSP methods
\item Second-order PDEs

\begin{enumerate}
\item Trapezoidal Rule 
\item Newmark-$\beta$
\item Generalized-$\alpha$ Method (Emphasis, Charon 2)
\item Leap-Frog, Velocity-Verlet (PIC)
\end{enumerate}
\item BDF (predictor-corrector)

\begin{enumerate}
\item For multi-step time integrators, ability to reset the history and
restart with new time integrator

\begin{enumerate}
\item Solve to steady state, throw away history, restart with new time integrator
\end{enumerate}
\end{enumerate}
\end{enumerate}
\item Need to be able to re-calculate the state/residual from scratch, and
when only part of the state has changed.

\begin{enumerate}
\item Example: in a Lagrangian calculation, you might need to recalculate
but the mesh coordinates have not changed.
\end{enumerate}
\end{enumerate}

\section{Additional Time-Integration Requirements}
\begin{enumerate}
\item Ability to switch between time integrators
\item Ability to input user-defined Butcher Tableaus
\item Ability to do Matrix-Free implicit methods
\item Uncertainty Quantification

\begin{enumerate}
\item Embedded Ensemble Propagation
\item Embedded Stochastic Galerkin (SG) - Polynomial chaos approximation
\end{enumerate}
\item Get the time derivatives of auxiliary variables that are not part
of the solution vector

\begin{enumerate}
\item Analytic (chain rule)

\begin{enumerate}
\item (+) Provides a conservative (as in conservation of energy) value.

\begin{enumerate}
\item Maintain divergence-free properties.
\end{enumerate}
\item (-) As the number of dependent variables of the auxiliary variable
changes, you need to recode the chain rule.
\end{enumerate}
\item Finite-difference/polynomial interpolation

\begin{enumerate}
\item (-) Does not necessarily provide a conservative (as in conversation
of energy) value.
\item (+) Insensitive to the number of dependent variables.
\item (-) Need a stateless function evaluation for the auxiliary variable.
\end{enumerate}
\item Can we use the DAE index ``evaluation'' to get the time derivative
of the auxiliary ``algebraic'' variable? This is probably very similar
to the analytic and chain rule method.
\item This should include time integrated values (e.g., some adjoint and
optimization quantities).
\end{enumerate}
\item Steppers

\begin{enumerate}
\item Explicit time integrator

\begin{enumerate}
\item Central difference (transient dynamics, CompSim User's Manual Salinas)
\end{enumerate}
\end{enumerate}
\item Support Hessian information for forward sensitivities (i.e., second
derivatives wrt parameters).
\item Support Space-Time formulation
\item Support for full-space optimization methods

\begin{enumerate}
\item Full KKT system
\end{enumerate}
\item Provide time-integration interface for third-party libraries

\begin{enumerate}
\item This could provide comparisons for verification and performance assessment.
\item SUNDIALS (Carol Woodward, LLNL, and Dan Reynolds, SMU) is a candidate
for this.
\end{enumerate}
\end{enumerate}

\section{Interoperability}

Other packages that the time integrator needs to interact with.


\subsection{Thyra}


\subsection{ModelEvaluator}
\begin{enumerate}
\item Motivation for MEs

\begin{enumerate}
\item Provide single interface from nonlinear ANAs (NOX, Rythmos, LOCA,
MOOCHO) to applications (for numerical algorithms. Still need a ``usage''
interface to each ANA.).
\item Provides shared, uniform access to linear solver capabilities 
\item Once an application implements support for one ANA, support for other
ANAs can quickly follow (Incremental support for sensitivities, optimization,
and UQ)
\item Mixed problem types will become more and more common and must be easy
to support

\begin{enumerate}
\item Transient optimization
\item Uncertainty in transient simulations 
\item Stability of an optimum under uncertainty of a transient problem 
\end{enumerate}
\end{enumerate}
\item MEs are stateless!

\begin{enumerate}
\item State values are passed in as a parameter.

\begin{enumerate}
\item This requires complete recompute of the ME.
\item What if some compute extensive pieces of the state do not need to
be recomputed? Wasted cycles!
\item Can we have a ``stateful'' ME, which could keep track the of state
through the InArgs?
\end{enumerate}
\end{enumerate}
\item InArgs and OutArgs

\begin{enumerate}
\item Are confusing - ``not intuitive''
\item Eric Cyr proposed alternative methods using templating?
\end{enumerate}
\item Need MEs for time integration

\begin{enumerate}
\item This will inherently cause any new design of the numerical algorithms
to look similar to Rythmos.
\item Can we improve the situation?

\begin{enumerate}
\item Refactor of the current ME classes.
\item Create an adapter from the ME to the new time integrator.

\begin{itemize}
\item Some packages are already doing this (Piro (Opt), Drekar (SimOpt),
ROL, ...)
\item Abstract operator and vector
\end{itemize}
\end{enumerate}
\end{enumerate}
\item Material Models have state!

\begin{enumerate}
\item Linear Visco-elastic
\item Joints and hysteresis.
\end{enumerate}
\end{enumerate}

\subsection{PIRO}
\begin{enumerate}
\item PIRO (Parameters In, Response Out)

\begin{enumerate}
\item Collection of steps of the common usage for NOX, Rythmos, LOCA, ...
\item Takes in a ME and ParameterList

\begin{enumerate}
\item Constructor of Rythmos time integrator
\item Passes ParameterList to Rythmos -- Solve
\item Sensitivity Analysis
\end{enumerate}
\item ROME for ROL and Dakota
\item PIRO has functioning second-order PDE time integrator

\begin{enumerate}
\item Methods

\begin{enumerate}
\item Newmark-$\beta$
\item Trapezoidal rule?
\item Velocity-Verlet
\end{enumerate}
\item Constant time step
\item No sensitivity analysis
\item EpetraEXT versions only (Ross is putting in Thyra capabilities shortly?)
\item Material model state through observe\_solution
\item Can integrate energy though may still have some bugs.
\item Ability to invert mass matrix for explicit methods (IMMD - Invert
Mass Matrix Decorator)
\begin{eqnarray*}
\mbox{Albany sees}\qquad M\dot{x} & = & F(x)\\
\mbox{Rythmos sees}\qquad\dot{x} & = & M^{-1}F(x)
\end{eqnarray*}

\item Ability to lump
\end{enumerate}
\end{enumerate}
\end{enumerate}

\subsection{Sacado}
