https://mooseframework.inl.gov
Loading...
Searching...
No Matches
AStableDirk4.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "TimeIntegrator.h"
13
14class LStableDirk4;
15
52{
53public:
55
57
58 virtual int order() override { return 4; }
59 virtual void computeTimeDerivatives() override;
60 void computeADTimeDerivatives(ADReal & ad_u_dot,
61 const dof_id_type & dof,
62 ADReal & ad_u_dotdot) const override;
63 virtual void solve() override;
64 virtual void postResidual(NumericVector<Number> & residual) override;
65 virtual bool overridesSolve() const override { return true; }
66
67protected:
71 template <typename T, typename T2>
72 void computeTimeDerivativeHelper(T & u_dot, const T2 & u_old) const;
73
74 // Indicates the current stage.
75 unsigned int _stage;
76
77 // Store pointers to the various stage residuals
78 NumericVector<Number> * _stage_residuals[3];
79
80 // The parameter of the method, set at construction time and cannot be changed.
81 const Real _gamma; // 1.06857902130162881
82
83 // Butcher tableau "C" parameters derived from _gamma
84 // 1.06857902130162881, 0.5, -.06857902130162881
85 Real _c[3];
86
87 // Butcher tableau "A" values derived from _gamma. We only use the
88 // lower triangle of this.
89 // 1.06857902130162881
90 // -.56857902130162881, 1.06857902130162881
91 // 2.13715804260325762, -3.27431608520651524, 1.06857902130162881
92 Real _a[3][3];
93
94 // The Butcher tableau "b" parameters derived from _gamma;
95 // 1.2888640051572051e-01, 7.4222719896855893e-01, 1.2888640051572051e-01
96 Real _b[3];
97
98 // If true, we use a more expensive method (LStableDirk4) to
99 // "bootstrap" the first timestep of this method and avoid
100 // evaluating residuals before the initial time.
102
103 // A pointer to the "bootstrapping" method to use if _safe_start==true.
104 std::shared_ptr<LStableDirk4> _bootstrap_method;
105};
106
107template <typename T, typename T2>
108void
109AStableDirk4::computeTimeDerivativeHelper(T & u_dot, const T2 & u_old) const
110{
111 u_dot -= u_old;
112 u_dot *= 1. / _dt;
113}
DualNumber< Real, DNDerivativeType, true > ADReal
Fourth-order diagonally implicit Runge Kutta method (Dirk) with three stages plus an update.
Real _a[3][3]
virtual void postResidual(NumericVector< Number > &residual) override
Callback to the NonLinearTimeIntegratorInterface called immediately after the residuals are computed ...
unsigned int _stage
std::shared_ptr< LStableDirk4 > _bootstrap_method
void computeTimeDerivativeHelper(T &u_dot, const T2 &u_old) const
Helper function that actually does the math for computing the time derivative.
virtual int order() override
const Real _gamma
static InputParameters validParams()
NumericVector< Number > * _stage_residuals[3]
virtual void solve() override
Solves the time step and sets the number of nonlinear and linear iterations.
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 computeTimeDerivatives() override
Computes the time derivative and the Jacobian of the time derivative.
virtual bool overridesSolve() const override
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Fourth-order diagonally implicit Runge Kutta method (Dirk) with five stages.
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
Base class for time integrators.
Real & _dt
The current time step size.