https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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.
 
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::Legendre, and PolynomialQuadrature::Hermite.

Definition at line 65 of file PolynomialQuadrature.C.

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

Referenced by productIntegral().

◆ 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::Legendre, and PolynomialQuadrature::Hermite.

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 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 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

◆ store() [1/2]

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

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

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}

◆ store() [2/2]

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

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

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}

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