Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
Public Member Functions | List of all members
PolynomialQuadrature::Polynomial Class Referenceabstract

General polynomial class with function for evaluating a polynomial of a given order at a given point. More...

#include <PolynomialQuadrature.h>

Inheritance diagram for PolynomialQuadrature::Polynomial:
[legend]

Public Member Functions

 Polynomial ()
 
virtual ~Polynomial ()=default
 
virtual void store (std::ostream &stream, void *context) const
 
virtual void store (nlohmann::json &json) const
 
virtual Real compute (const unsigned int order, const Real x, const bool normalize=true) const
 
virtual Real computeDerivative (const unsigned int order, const Real x, const unsigned int m=1) const
 Computes the mth derivative of polynomial: d^mP_n/dx^m. More...
 
virtual Real innerProduct (const unsigned int order) const =0
 
virtual void gaussQuadrature (const unsigned int order, std::vector< Real > &points, std::vector< Real > &weights) const =0
 
virtual void clenshawQuadrature (const unsigned int order, std::vector< Real > &points, std::vector< Real > &weights) const
 
Real productIntegral (const std::vector< unsigned int > order) const
 

Detailed Description

General polynomial class with function for evaluating a polynomial of a given order at a given point.

Definition at line 33 of file PolynomialQuadrature.h.

Constructor & Destructor Documentation

◆ Polynomial()

PolynomialQuadrature::Polynomial::Polynomial ( )
inline

Definition at line 36 of file PolynomialQuadrature.h.

36 {}

◆ ~Polynomial()

virtual PolynomialQuadrature::Polynomial::~Polynomial ( )
virtualdefault

Member Function Documentation

◆ clenshawQuadrature()

void PolynomialQuadrature::Polynomial::clenshawQuadrature ( const unsigned int  order,
std::vector< Real > &  points,
std::vector< Real > &  weights 
) const
virtual

Reimplemented in PolynomialQuadrature::Legendre.

Definition at line 81 of file PolynomialQuadrature.C.

84 {
85  ::mooseError("Clenshaw quadrature has not been implemented for this polynomial type.");
86 }

◆ compute()

Real PolynomialQuadrature::Polynomial::compute ( const unsigned int  order,
const Real  x,
const bool  normalize = true 
) const
virtual

Reimplemented in PolynomialQuadrature::Hermite, and PolynomialQuadrature::Legendre.

Definition at line 65 of file PolynomialQuadrature.C.

Referenced by productIntegral().

66 {
67  ::mooseError("Polynomial type has not been implemented.");
68  return 0;
69 }

◆ computeDerivative()

Real PolynomialQuadrature::Polynomial::computeDerivative ( const unsigned int  order,
const Real  x,
const unsigned int  m = 1 
) const
virtual

Computes the mth derivative of polynomial: d^mP_n/dx^m.

Reimplemented in PolynomialQuadrature::Hermite, and PolynomialQuadrature::Legendre.

Definition at line 72 of file PolynomialQuadrature.C.

75 {
76  ::mooseError("Polynomial type has not been implemented.");
77  return 0;
78 }

◆ gaussQuadrature()

virtual void PolynomialQuadrature::Polynomial::gaussQuadrature ( const unsigned int  order,
std::vector< Real > &  points,
std::vector< Real > &  weights 
) const
pure virtual

◆ innerProduct()

virtual Real PolynomialQuadrature::Polynomial::innerProduct ( const unsigned int  order) const
pure virtual

◆ productIntegral()

Real PolynomialQuadrature::Polynomial::productIntegral ( const std::vector< unsigned int order) const

Definition at line 89 of file PolynomialQuadrature.C.

90 {
91  const unsigned int nprod = order.size();
92 
93  if (nprod == 1)
94  return (order[0] == 0 ? 1.0 : 0.0);
95  else if (nprod == 2)
96  return (order[0] == order[1] ? innerProduct(order[0]) : 0.0);
97 
98  unsigned int poly_order = std::accumulate(order.begin(), order.end(), 0);
99  unsigned int quad_order = (poly_order % 2 == 0 ? poly_order : poly_order - 1) / 2;
100 
101  std::vector<Real> xq;
102  std::vector<Real> wq;
103  gaussQuadrature(quad_order, xq, wq);
104 
105  Real val = 0.0;
106  for (unsigned int q = 0; q < xq.size(); ++q)
107  {
108  Real prod = wq[q];
109  for (unsigned int i = 0; i < nprod; ++i)
110  prod *= compute(order[i], xq[q], false);
111  val += prod;
112  }
113 
114  return val / std::accumulate(wq.begin(), wq.end(), 0.0);
115 }
virtual void gaussQuadrature(const unsigned int order, std::vector< Real > &points, std::vector< Real > &weights) const =0
virtual Real compute(const unsigned int order, const Real x, const bool normalize=true) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Real innerProduct(const unsigned int order) const =0

◆ store() [1/2]

void PolynomialQuadrature::Polynomial::store ( std::ostream &  stream,
void context 
) const
virtual

Reimplemented in PolynomialQuadrature::Hermite, and PolynomialQuadrature::Legendre.

Definition at line 51 of file PolynomialQuadrature.C.

52 {
53  // Cannot be pure virtual because for dataLoad operations the base class must be constructed
54  ::mooseError("Polynomial child class must override this method.");
55 }

◆ store() [2/2]

void PolynomialQuadrature::Polynomial::store ( nlohmann::json &  json) const
virtual

Reimplemented in PolynomialQuadrature::Hermite, and PolynomialQuadrature::Legendre.

Definition at line 58 of file PolynomialQuadrature.C.

59 {
60  // Cannot be pure virtual because for dataLoad operations the base class must be constructed
61  ::mooseError("Polynomial child class must override this method.");
62 }

The documentation for this class was generated from the following files: