23 "Third order diagonally implicit Runge Kutta method (Dirk) with three stages.");
33 mooseInfo(
"LStableDirk3 and other multistage TimeIntegrators are known not to work with " 34 "Materials/AuxKernels that accumulate 'state' and should be used with caution.");
37 for (
unsigned int stage = 0; stage < 3; ++stage)
39 std::ostringstream oss;
40 oss <<
"residual_stage" << stage + 1;
64 mooseError(
"LStableDirk3: Time derivative of solution (`u_dot`) is not stored. Please set " 65 "uDotRequested() to true in FEProblemBase befor requesting `u_dot`.");
94 for (
unsigned int current_stage = 1; current_stage < 4; ++current_stage)
135 "LStableDirk3::postResidual(): Member variable _stage can only have values 1, 2, or 3.");
154 for (
unsigned int j = 0; j <
_stage; ++j)
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sin(_arg) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tan
virtual Real & time() const
virtual void postResidual(NumericVector< Number > &residual) override
Callback to the NonLinearTimeIntegratorInterface called immediately after the residuals are computed ...
FEProblemBase & _fe_problem
Reference to the problem.
void mooseInfo(Args &&... args) const
NumericVector< Number > * _stage_residuals[3]
virtual void solve() override
Solves the time step and sets the number of nonlinear and linear iterations.
NonlinearSystemBase * _nl
Pointer to the nonlinear system, can happen that we dont have any.
SystemBase & _sys
Reference to the system this time integrator operates on.
Third order diagonally implicit Runge Kutta method (Dirk) with three stages.
static InputParameters validParams()
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
DualNumber< Real, DNDerivativeType, true > ADReal
Real & _dt
The current time step size.
NumericVector< Number > * _Re_time
residual vector for time contributions
void computeTimeDerivativeHelper(T &u_dot, const T2 &u_old) const
Helper function that actually does the math for computing the time derivative.
registerMooseObject("MooseApp", LStableDirk3)
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template cos(_arg) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(cos
virtual NumericVector< Number > * solutionUDot()
virtual bool converged(const unsigned int sys_num)
Eventually we want to convert this virtual over to taking a solver system number argument.
unsigned int _n_linear_iterations
Total number of linear iterations over all stages of the time step.
unsigned int number() const
Gets the number of this system.
virtual void computeTimeDerivatives() override
Computes the time derivative and the Jacobian of the time derivative.
void destroyColoring()
Destroy the coloring object if it exists.
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
const NumericVector< Number > *const & _solution
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Base class for time integrators.
unsigned int getNumLinearIterationsLastSolve() const
Gets the number of linear iterations in the most recent solve.
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
LStableDirk3(const InputParameters ¶meters)
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
virtual Real & timeOld() const
const NumericVector< Number > & _solution_old
unsigned int _n_nonlinear_iterations
Total number of nonlinear iterations over all stages of the time step.
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
unsigned int getNumNonlinearIterationsLastSolve() const
Gets the number of nonlinear iterations in the most recent solve.
NumericVector< Number > * addVector(const std::string &name, const bool project, const libMesh::ParallelType type)
Wrapper around vector addition for nonlinear time integrators.
virtual void add(const numeric_index_type i, const T value)=0
NumericVector< Number > * _Re_non_time
residual vector for non-time contributions
virtual void potentiallySetupFiniteDifferencing()
Create finite differencing contexts for assembly of the Jacobian and/or approximating the action of t...
static InputParameters validParams()
void computeDuDotDu()
Compute _du_dot_du.
virtual libMesh::System & system() override
Get the reference to the libMesh system.