25 params.
addClassDescription(
"Fourth-order diagonally implicit Runge Kutta method (Dirk) with " 26 "three stages plus an update.");
27 params.
addParam<
bool>(
"safe_start",
true,
"If true, use LStableDirk4 to bootstrap this method.");
35 _safe_start(getParam<bool>(
"safe_start"))
37 mooseInfo(
"AStableDirk4 and other multistage TimeIntegrators are known not to work with " 38 "Materials/AuxKernels that accumulate 'state' and should be used with caution.");
41 for (
unsigned int stage = 0; stage < 3; ++stage)
43 std::ostringstream oss;
44 oss <<
"residual_stage" << stage + 1;
90 mooseError(
"AStableDirk4: Time derivative of solution (`u_dot`) is not stored. Please set " 91 "uDotRequested() to true in FEProblemBase befor requesting `u_dot`.");
129 for (
unsigned int current_stage = 1; current_stage < 5; ++current_stage)
139 if (current_stage < 4)
146 _console <<
"Update Stage." << std::endl;
174 mooseError(
"AStableDirk4::postResidual(): Member variable _stage can only have values 1-4.");
195 for (
unsigned int j = 0; j <
_stage; ++j)
210 for (
unsigned int j = 0; j < 3; ++j)
Fourth-order diagonally implicit Runge Kutta method (Dirk) with five stages.
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
std::shared_ptr< LStableDirk4 > _bootstrap_method
virtual Real & time() const
virtual void solve() override
Solves the time step and sets the number of nonlinear and linear iterations.
FEProblemBase & _fe_problem
Reference to the problem.
void mooseInfo(Args &&... args) const
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.
AStableDirk4(const InputParameters ¶meters)
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
Base class for a system (of equations)
DualNumber< Real, DNDerivativeType, true > ADReal
Real & _dt
The current time step size.
registerMooseObject("MooseApp", AStableDirk4)
virtual const std::string & name() const
Get the name of the class.
NumericVector< Number > * _Re_time
residual vector for time contributions
Factory & getFactory()
Retrieve a writable reference to the Factory associated with this App.
static InputParameters validParams()
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template cos(_arg) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(cos
virtual std::unique_ptr< Base > create()=0
virtual NumericVector< Number > * solutionUDot()
NumericVector< Number > * _stage_residuals[3]
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.
MooseApp & _app
The MOOSE application this is associated with.
unsigned int number() const
Gets the number of this system.
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
Fourth-order diagonally implicit Runge Kutta method (Dirk) with three stages plus an update...
const NumericVector< Number > *const & _solution
void computeTimeDerivativeHelper(T &u_dot, const T2 &u_old) const
Helper function that actually does the math for computing the time derivative.
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
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
virtual Real & timeOld() const
const NumericVector< Number > & _solution_old
virtual void computeTimeDerivatives() override
Computes the time derivative and the Jacobian of the time derivative.
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
int & _t_step
The current time step number.
static InputParameters validParams()
virtual void postResidual(NumericVector< Number > &residual) override
Callback to the NonLinearTimeIntegratorInterface called immediately after the residuals are computed ...
void computeDuDotDu()
Compute _du_dot_du.
virtual libMesh::System & system() override
Get the reference to the libMesh system.