https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
PolynomialQuadrature::Hermite Class Reference

Normal distributions use Hermite polynomials. More...

#include <PolynomialQuadrature.h>

Inheritance diagram for PolynomialQuadrature::Hermite:
[legend]

Public Member Functions

 Hermite (const Real mu, const Real sig)
 
virtual void store (std::ostream &stream, void *context) const override
 
virtual void store (nlohmann::json &json) const override
 
virtual Real compute (const unsigned int order, const Real x, const bool normalize=true) const override
 Hermite polynomial using static function then scales by <P_n^2> = n!
 
virtual Real computeDerivative (const unsigned int order, const Real x, const unsigned int m=1) const override
 Compute derivative of Hermite polynomial P'n = nP{n-1}.
 
virtual Real innerProduct (const unsigned int order) const override
 
virtual void gaussQuadrature (const unsigned int order, std::vector< Real > &points, std::vector< Real > &weights) const override
 Gauss-Hermite quadrature: sum(weights) = sqrt(2\pi)
 
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
 

Private Attributes

const Real _mu
 
const Real _sig
 

Detailed Description

Normal distributions use Hermite polynomials.

Definition at line 96 of file PolynomialQuadrature.h.

Constructor & Destructor Documentation

◆ Hermite()

PolynomialQuadrature::Hermite::Hermite ( const Real  mu,
const Real  sig 
)

Member Function Documentation

◆ clenshawQuadrature()

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

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::Hermite::compute ( const unsigned int  order,
const Real  x,
const bool  normalize = true 
) const
overridevirtual

Hermite polynomial using static function then scales by <P_n^2> = n!

Reimplemented from PolynomialQuadrature::Polynomial.

Definition at line 266 of file PolynomialQuadrature.C.

267{
268 Real val = hermite(order, x, _mu, _sig);
269 if (normalize)
270 val /= innerProduct(order);
271 return val;
272}
const std::vector< double > x
virtual Real innerProduct(const unsigned int order) const override
Real hermite(const unsigned int order, const Real x, const Real mu=0.0, const Real sig=1.0)
Hermite polynomial of specified order.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ computeDerivative()

Real PolynomialQuadrature::Hermite::computeDerivative ( const unsigned int  order,
const Real  x,
const unsigned int  m = 1 
) const
overridevirtual

Compute derivative of Hermite polynomial P'n = nP{n-1}.

Reimplemented from PolynomialQuadrature::Polynomial.

Definition at line 275 of file PolynomialQuadrature.C.

276{
277 if (m > order)
278 return 0.0;
279
280 Real xref = (x - _mu) / _sig;
281 Real val = hermite(order - m, xref);
282 for (unsigned int i = 0; i < m; ++i)
283 val *= static_cast<Real>(order - i) / _sig;
284
285 return val;
286}

◆ gaussQuadrature()

void PolynomialQuadrature::Hermite::gaussQuadrature ( const unsigned int  order,
std::vector< Real > &  points,
std::vector< Real > &  weights 
) const
overridevirtual

Gauss-Hermite quadrature: sum(weights) = sqrt(2\pi)

Implements PolynomialQuadrature::Polynomial.

Definition at line 289 of file PolynomialQuadrature.C.

292{
293 gauss_hermite(order, points, weights, _mu, _sig);
294}
void gauss_hermite(const unsigned int order, std::vector< Real > &points, std::vector< Real > &weights, const Real mu, const Real sig)
Generalized formula for any polynomial order.

◆ innerProduct()

Real PolynomialQuadrature::Hermite::innerProduct ( const unsigned int  order) const
overridevirtual

Implements PolynomialQuadrature::Polynomial.

Definition at line 243 of file PolynomialQuadrature.C.

244{
245 return (Real)Utility::factorial(order);
246}

Referenced by compute().

◆ productIntegral()

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

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

◆ store() [1/2]

void PolynomialQuadrature::Hermite::store ( nlohmann::json &  json) const
overridevirtual

Reimplemented from PolynomialQuadrature::Polynomial.

Definition at line 258 of file PolynomialQuadrature.C.

259{
260 json["type"] = "Hermite";
261 json["mu"] = _mu;
262 json["sig"] = _sig;
263}

◆ store() [2/2]

void PolynomialQuadrature::Hermite::store ( std::ostream &  stream,
void *  context 
) const
overridevirtual

Reimplemented from PolynomialQuadrature::Polynomial.

Definition at line 249 of file PolynomialQuadrature.C.

250{
251 std::string type = "Hermite";
252 dataStore(stream, type, context);
253 dataStore(stream, _mu, context);
254 dataStore(stream, _sig, context);
255}
void dataStore(std::ostream &stream, LineSegment &l, void *context)

Member Data Documentation

◆ _mu

const Real PolynomialQuadrature::Hermite::_mu
private

Definition at line 119 of file PolynomialQuadrature.h.

Referenced by compute(), computeDerivative(), gaussQuadrature(), store(), and store().

◆ _sig

const Real PolynomialQuadrature::Hermite::_sig
private

Definition at line 120 of file PolynomialQuadrature.h.

Referenced by compute(), computeDerivative(), gaussQuadrature(), store(), and store().


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