www.mooseframework.org
PiecewiseConstant.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 
10 #include "PiecewiseConstant.h"
11 
13 
15 
18 {
20  MooseEnum direction("left right", "left");
21  params.addParam<MooseEnum>(
22  "direction", direction, "Direction to look to find value: " + direction.getRawNames());
23  params.addClassDescription("Defines data using a set of x-y data pairs");
24  return params;
25 }
26 
28 PiecewiseConstant::getDirection(const std::string & direction)
29 {
31  if (direction == "left")
32  {
34  }
35  else if (direction == "right")
36  {
38  }
39  else
40  {
41  mooseError("Unknown direction in PiecewiseConstant");
42  }
43  return dir;
44 }
45 
47  : PiecewiseBase(parameters), _direction(getDirection(getParam<MooseEnum>("direction")))
48 {
49 }
50 
51 Real
52 PiecewiseConstant::value(Real t, const Point & p) const
53 {
54  Real func_value = 0.0;
55  const Real x = _has_axis ? p(_axis) : t;
56 
57  unsigned i = 1;
58  const unsigned len = functionSize();
59  const Real toler = 1e-14;
60 
61  // endpoint cases
62  if ((_direction == LEFT && x < (1 + toler) * domain(0)) ||
63  (_direction == RIGHT && x < (1 - toler) * domain(0)))
64  {
65  func_value = range(0);
66  i = len;
67  }
68  if ((_direction == LEFT && x > (1 + toler) * domain(len - 1)) ||
69  (_direction == RIGHT && x > (1 - toler) * domain(len - 1)))
70  {
71  func_value = range(len - 1);
72  i = len;
73  }
74 
75  for (; i < len; ++i)
76  {
77  if (_direction == LEFT && x < (1 + toler) * domain(i))
78  {
79  func_value = range(i - 1);
80  break;
81  }
82  else if ((_direction == RIGHT && x < (1 - toler) * domain(i)))
83  {
84  func_value = range(i);
85  break;
86  }
87  }
88 
89  return _scale_factor * func_value;
90 }
91 
92 Real
93 PiecewiseConstant::timeDerivative(Real /*t*/, const Point & /*p*/) const
94 {
95  return 0;
96 }
97 
98 Real
100 {
101  const unsigned len = functionSize();
102  Real sum = 0;
103  unsigned offset = 0;
104 
105  if (_direction == RIGHT)
106  offset = 1;
107 
108  for (unsigned i = 0; i < len - 1; ++i)
109  sum += range(i + offset) * (domain(i + 1) - domain(i));
110 
111  return _scale_factor * sum;
112 }
113 
114 Real
116 {
117  return integral() / (domain(functionSize() - 1) - domain(0));
118 }
PiecewiseConstant::validParams
static InputParameters validParams()
Definition: PiecewiseConstant.C:17
PiecewiseBase::functionSize
virtual Real functionSize() const
Definition: PiecewiseBase.C:70
MooseEnumBase::getRawNames
std::string getRawNames() const
Method for returning the raw name strings for this instance.
Definition: MooseEnumBase.C:158
PiecewiseConstant::UNDEFINED
Definition: PiecewiseConstant.h:56
MooseObject::mooseError
void mooseError(Args &&... args) const
Definition: MooseObject.h:141
PiecewiseConstant::integral
virtual Real integral() const override
Definition: PiecewiseConstant.C:99
MooseEnum
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:31
PiecewiseConstant::getDirection
DirectionEnum getDirection(const std::string &direction)
Definition: PiecewiseConstant.C:28
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
PiecewiseConstant::RIGHT
Definition: PiecewiseConstant.h:55
InputParameters
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Definition: InputParameters.h:53
x
static PetscErrorCode Vec x
Definition: PetscDMMoose.C:1263
PiecewiseBase::_axis
int _axis
if _has_axis is true point component to use as function argument, otherwise use t
Definition: PiecewiseBase.h:53
PiecewiseBase::range
virtual Real range(const int i) const
Definition: PiecewiseBase.C:82
InputParameters::addClassDescription
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump.
Definition: InputParameters.C:70
registerMooseObject
registerMooseObject("MooseApp", PiecewiseConstant)
PiecewiseConstant::timeDerivative
virtual Real timeDerivative(Real t, const Point &pt) const override
Get the time derivative of the function (based on time only)
Definition: PiecewiseConstant.C:93
PiecewiseConstant.h
PiecewiseConstant::average
virtual Real average() const override
Definition: PiecewiseConstant.C:115
PiecewiseConstant::PiecewiseConstant
PiecewiseConstant(const InputParameters &parameters)
Definition: PiecewiseConstant.C:46
PiecewiseConstant::DirectionEnum
DirectionEnum
Definition: PiecewiseConstant.h:52
PiecewiseBase::_has_axis
const bool _has_axis
Definition: PiecewiseBase.h:54
PiecewiseBase
Function base which provides a piecewise approximation to a provided (x,y) point data set.
Definition: PiecewiseBase.h:26
PiecewiseConstant
Function which provides a piecewise continuous constant interpolation of a provided (x,...
Definition: PiecewiseConstant.h:24
PiecewiseConstant::LEFT
Definition: PiecewiseConstant.h:54
PiecewiseBase::domain
virtual Real domain(const int i) const
Definition: PiecewiseBase.C:76
defineLegacyParams
defineLegacyParams(PiecewiseConstant)
PiecewiseConstant::_direction
const DirectionEnum _direction
Definition: PiecewiseConstant.h:60
PiecewiseBase::_scale_factor
const Real _scale_factor
function value scale factor
Definition: PiecewiseBase.h:50
PiecewiseBase::validParams
static InputParameters validParams()
Definition: PiecewiseBase.C:16
PiecewiseConstant::value
virtual Real value(Real t, const Point &pt) const override
Get the value of the function (based on time only)
Definition: PiecewiseConstant.C:52