16#include "libmesh/nonlinear_solver.h"
37 _solution_intermediate_stage(addVector(
"solution_intermediate_stage", false,
GHOSTED)),
38 _tmp_solution(addVector(
"tmp_solution", false,
GHOSTED)),
39 _tmp_mass_solution_product(addVector(
"tmp_mass_solution_product", false,
GHOSTED))
52 _a = {{1.0, 0.0}, {0.5, 0.5}};
58 _a = {{1.0, 0.0, 0.0}, {0.75, 0.25, 0.0}, {1.0 / 3.0, 0.0, 2.0 / 3.0}};
59 _b = {1.0, 0.25, 2.0 / 3.0};
84 for (
unsigned int k = 0; k <=
_stage; k++)
95 ad_u_dot = std::numeric_limits<typename ADReal::value_type>::quiet_NaN();
110 bool converged =
false;
193 for (
unsigned int k = 0; k <=
_stage; k++)
DualNumber< Real, DNDerivativeType, true > ADReal
registerMooseObject("MooseApp", ExplicitSSPRungeKutta)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Explicit strong stability preserving Runge-Kutta methods.
ExplicitSSPRungeKutta(const InputParameters ¶meters)
unsigned int _n_stages
Number of stages.
virtual void solve() override
Solves the time step and sets the number of nonlinear and linear iterations.
NumericVector< Number > * _tmp_solution
Temporary solution vector.
virtual Real duDotDuCoeff() const override
virtual void computeADTimeDerivatives(ADReal &ad_u_dot, const dof_id_type &dof, ADReal &ad_u_dotdot) const override
method for computing local automatic differentiation time derivatives
virtual void postResidual(NumericVector< Number > &residual) override
Callback to the NonLinearTimeIntegratorInterface called immediately after the residuals are computed ...
std::vector< std::vector< Real > > _a
Runge-Kutta "a" coefficient matrix.
NumericVector< Number > * _solution_intermediate_stage
Solution vector for intermediate stage.
std::vector< Real > _b
Runge-Kutta "b" coefficient vector.
std::vector< Real > _c
Runge-Kutta "c" coefficient vector.
NumericVector< Number > * _tmp_mass_solution_product
Temporary mass-matrix/solution vector product.
unsigned int _stage
Current stage.
bool solveStage()
Solves a stage of the time integrator.
std::vector< const NumericVector< Number > * > _solution_stage
Pointer to solution vector for each stage.
static InputParameters validParams()
virtual void computeTimeDerivatives() override
Computes the time derivative and the Jacobian of the time derivative.
const MooseEnum & _order
Order of time integration.
Base class for explicit time integrators that are implemented without using a nonlinear solver.
virtual bool performExplicitSolve(SparseMatrix< Number > &mass_matrix)
Solves a linear system using the chosen solve type.
Real _current_time
Save off current time to reset it back and forth.
static InputParameters validParams()
TagID _Ke_time_tag
For computing the mass matrix.
NumericVector< Real > * _solution_update
Solution vector for the linear solve.
NumericVector< Real > * _explicit_residual
Residual used for the RHS.
void computeResidual(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
virtual Real & timeOld() const
virtual Real & time() const
virtual void computeJacobianTag(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, TagID tag)
Form a Jacobian matrix for a given tag.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
NonlinearSystemBase * _nl
Pointer to the nonlinear system, can happen that we dont have any.
NumericVector< Number > * _Re_non_time
residual vector for non-time contributions
libMesh::NonlinearImplicitSystem * _nonlinear_implicit_system
libMesh nonlinear implicit system, if applicable; otherwise, nullptr
void setSolution(const NumericVector< Number > &soln)
Set the solution to a given vector.
unsigned int number() const
Gets the number of this system.
const Real & dt() const
Returns the time step size.
void computeDuDotDu()
Compute _du_dot_du.
const NumericVector< Number > *const & _solution
unsigned int _n_linear_iterations
Total number of linear iterations over all stages of the time step.
unsigned int _n_nonlinear_iterations
Total number of nonlinear iterations over all stages of the time step.
FEProblemBase & _fe_problem
Reference to the problem.
Real & _dt
The current time step size.
const NumericVector< Number > & _solution_old
void enforce_constraints_exactly(const System &system, NumericVector< Number > *v=nullptr, bool homogeneous=false) const
const SparseMatrix< Number > & get_system_matrix() const
std::unique_ptr< NonlinearSolver< Number > > nonlinear_solver
virtual void add(const numeric_index_type i, const T value)=0
void vector_mult(NumericVector< T > &dest, const NumericVector< T > &arg) const
std::unique_ptr< NumericVector< Number > > current_local_solution
std::unique_ptr< NumericVector< Number > > solution
const DofMap & get_dof_map() const
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real