https://mooseframework.inl.gov
ImplicitEuler.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 
18 {
19 public:
21 
23  virtual ~ImplicitEuler();
24 
25  virtual int order() override { return 1; }
26  virtual void computeTimeDerivatives() override;
27  void computeADTimeDerivatives(ADReal & ad_u_dot,
28  const dof_id_type & dof,
29  ADReal & ad_u_dotdot) const override;
30  virtual void postResidual(NumericVector<Number> & residual) override;
31  virtual bool overridesSolve() const override { return false; }
32 
33  virtual Real timeDerivativeRHSContribution(const dof_id_type dof_id,
34  const std::vector<Real> & factors) const override;
35  virtual Real timeDerivativeMatrixContribution(const Real factor) const override;
36 
37 protected:
41  template <typename T, typename T2>
42  void computeTimeDerivativeHelper(T & u_dot, const T2 & u_old) const;
43 };
44 
45 template <typename T, typename T2>
46 void
47 ImplicitEuler::computeTimeDerivativeHelper(T & u_dot, const T2 & u_old) const
48 {
49  u_dot -= u_old;
50  u_dot *= 1. / _dt;
51 }
virtual void computeTimeDerivatives() override
Computes the time derivative and the Jacobian of the time derivative.
Definition: ImplicitEuler.C:28
virtual bool overridesSolve() const override
Definition: ImplicitEuler.h:31
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
DualNumber< Real, DNDerivativeType, true > ADReal
Definition: ADRealForward.h:46
virtual ~ImplicitEuler()
Definition: ImplicitEuler.C:25
Real & _dt
The current time step size.
void computeTimeDerivativeHelper(T &u_dot, const T2 &u_old) const
Helper function that actually does the math for computing the time derivative.
Definition: ImplicitEuler.h:47
static InputParameters validParams()
Definition: ImplicitEuler.C:16
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Base class for time integrators.
ImplicitEuler(const InputParameters &parameters)
Definition: ImplicitEuler.C:23
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
Definition: ImplicitEuler.C:56
const InputParameters & parameters() const
Get the parameters of the object.
virtual Real timeDerivativeMatrixContribution(const Real factor) const override
The time derivative&#39;s contribution to the right hand side of a linear system.
Definition: ImplicitEuler.C:95
virtual Real timeDerivativeRHSContribution(const dof_id_type dof_id, const std::vector< Real > &factors) const override
The time derivative&#39;s contribution to the right hand side of a linear system.
Definition: ImplicitEuler.C:86
virtual void postResidual(NumericVector< Number > &residual) override
Callback to the NonLinearTimeIntegratorInterface called immediately after the residuals are computed ...
Definition: ImplicitEuler.C:64
virtual int order() override
Definition: ImplicitEuler.h:25
Implicit Euler&#39;s method.
Definition: ImplicitEuler.h:17
uint8_t dof_id_type