www.mooseframework.org
VariableTimeIntegrationAux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
11 
13 
15 
18 {
20  params.addRequiredCoupledVar("variable_to_integrate", "The variable to be integrated");
21  params.addParam<Real>("coefficient", 1.0, "A simple coefficient");
22  params.addParam<unsigned int>(
23  "order", 2, "The order of global truncation error: midpoint=1, trapazoidal=2, Simpson=3");
24  return params;
25 }
26 
28  : AuxKernel(parameters),
29  _coef(getParam<Real>("coefficient")),
30  _order(getParam<unsigned int>("order"))
31 {
32  switch (_order)
33  {
34  case 1:
35  _integration_coef.push_back(1.0);
36  _coupled_vars.push_back(&coupledValue("variable_to_integrate"));
37  break;
38  case 2:
39  _integration_coef.push_back(0.5);
40  _integration_coef.push_back(0.5);
41  _coupled_vars.push_back(&coupledValue("variable_to_integrate"));
42  _coupled_vars.push_back(&coupledValueOld("variable_to_integrate"));
43  break;
44  case 3:
45  _integration_coef.push_back(1.0 / 3.0);
46  _integration_coef.push_back(4.0 / 3.0);
47  _integration_coef.push_back(1.0 / 3.0);
48  _coupled_vars.push_back(&coupledValue("variable_to_integrate"));
49  _coupled_vars.push_back(&coupledValueOld("variable_to_integrate"));
50  _coupled_vars.push_back(&coupledValueOlder("variable_to_integrate"));
51  break;
52  default:
53  mooseError("VariableTimeIntegrationAux: unknown time integraiton order specfied");
54  }
55 }
56 
57 Real
59 {
60  Real integral = getIntegralValue();
61 
62  if (_order == 3)
63  return _u_older[_qp] + _coef * integral;
64 
65  return _u_old[_qp] + _coef * integral;
66 }
67 
68 Real
70 {
71  Real integral_value = 0.0;
72 
73  for (unsigned int i = 0; i < _order; ++i)
74  integral_value += _integration_coef[i] * (*_coupled_vars[i])[_qp] * _dt;
75 
83  if (_order == 3 && _dt != _dt_old)
84  {
85  Real x0 = 0.0;
86  Real x1 = _dt_old;
87  Real x2 = _dt + _dt_old;
88  Real y0 = (*_coupled_vars[2])[_qp];
89  Real y1 = (*_coupled_vars[1])[_qp];
90  Real y2 = (*_coupled_vars[0])[_qp];
91  Real term1 = (x2 - x0) * (y0 + (x2 - x0) * (y1 - y0) / (2.0 * (x1 - x0)));
92  Real term2 = (2.0 * x2 * x2 - x0 * x2 - x0 * x0 + 3.0 * x0 * x1 - 3.0 * x1 * x2) / 6.0;
93  Real term3 = (y2 - y1) / (x2 - x1) - (y1 - y0) / (x1 - x0);
94  integral_value = term1 + term2 * term3;
95  }
96 
97  return integral_value;
98 }
VariableTimeIntegrationAux::_integration_coef
std::vector< Real > _integration_coef
Definition: VariableTimeIntegrationAux.h:39
InputParameters::addRequiredCoupledVar
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
This method adds a coupled variable name pair.
Definition: InputParameters.C:216
VariableTimeIntegrationAux
An AuxKernel that can be used to integrate a field variable in time using a variety of different inte...
Definition: VariableTimeIntegrationAux.h:25
Coupleable::coupledValueOlder
virtual const VariableValue & coupledValueOlder(const std::string &var_name, unsigned int comp=0)
Returns an old value from two time steps previous of a coupled variable.
Definition: Coupleable.C:505
VariableTimeIntegrationAux::validParams
static InputParameters validParams()
Definition: VariableTimeIntegrationAux.C:17
MooseObject::mooseError
void mooseError(Args &&... args) const
Definition: MooseObject.h:141
defineLegacyParams
defineLegacyParams(VariableTimeIntegrationAux)
AuxKernelTempl::_u_older
const OutputTools< ComputeValueType >::VariableValue & _u_older
Holds the t-2 solution at the current quadrature point.
Definition: AuxKernel.h:184
VariableTimeIntegrationAux::computeValue
virtual Real computeValue() override
Compute and return the value of the aux variable.
Definition: VariableTimeIntegrationAux.C:58
InputParameters::addParam
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an option parameter and a documentation string to the InputParameters object.
Definition: InputParameters.h:1198
AuxKernelTempl
Base class for creating new auxiliary kernels and auxiliary boundary conditions.
Definition: AuxKernel.h:35
AuxKernelTempl::_u_old
const OutputTools< ComputeValueType >::VariableValue & _u_old
Holds the previous solution at the current quadrature point.
Definition: AuxKernel.h:181
InputParameters
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Definition: InputParameters.h:53
TransientInterface::_dt_old
Real & _dt_old
Size of the old time step.
Definition: TransientInterface.h:67
VariableTimeIntegrationAux.h
VariableTimeIntegrationAux::_coef
Real _coef
Definition: VariableTimeIntegrationAux.h:37
Coupleable::coupledValue
virtual const VariableValue & coupledValue(const std::string &var_name, unsigned int comp=0)
Returns value of a coupled variable.
Definition: Coupleable.C:387
VariableTimeIntegrationAux::VariableTimeIntegrationAux
VariableTimeIntegrationAux(const InputParameters &parameters)
Definition: VariableTimeIntegrationAux.C:27
AuxKernelTempl::validParams
static InputParameters validParams()
Definition: AuxKernel.C:28
Coupleable::coupledValueOld
virtual const VariableValue & coupledValueOld(const std::string &var_name, unsigned int comp=0)
Returns an old value from previous time step of a coupled variable.
Definition: Coupleable.C:483
TransientInterface::_dt
Real & _dt
Time step size.
Definition: TransientInterface.h:64
VariableTimeIntegrationAux::_order
unsigned int _order
Definition: VariableTimeIntegrationAux.h:38
VariableTimeIntegrationAux::_coupled_vars
std::vector< const VariableValue * > _coupled_vars
Definition: VariableTimeIntegrationAux.h:36
AuxKernelTempl::_qp
unsigned int _qp
Quadrature point index.
Definition: AuxKernel.h:227
VariableTimeIntegrationAux::getIntegralValue
Real getIntegralValue()
Definition: VariableTimeIntegrationAux.C:69
registerMooseObject
registerMooseObject("MooseApp", VariableTimeIntegrationAux)