46 template <
class Func,
typename OrdinalType,
typename ValueType>
52 Teuchos::RCP<const Stokhos::OrthogPolyBasis<OrdinalType,ValueType> > basis
57 const Teuchos::Array< Teuchos::Array<ValueType> >& points =
59 const Teuchos::Array< Teuchos::Array<ValueType> >& values =
61 OrdinalType nqp = weights.size();
64 for (OrdinalType i=0; i<c.
size(); i++)
69 for (OrdinalType k=0; k<nqp; k++) {
72 for (
int i=0; i<c.
size(); i++)
73 c[i] += weights[k]*
val*values[k][i] / basis->norm_squared(i);
77 template <
class Func,
typename OrdinalType,
typename ValueType>
84 Teuchos::RCP<const Stokhos::OrthogPolyBasis<OrdinalType,ValueType> > basis
89 const Teuchos::Array< Teuchos::Array<ValueType> >& points =
91 const Teuchos::Array< Teuchos::Array<ValueType> >& values =
93 OrdinalType nqp = weights.size();
96 for (OrdinalType i=0; i<c.
size(); i++)
101 for (OrdinalType k=0; k<nqp; k++) {
102 ValueType val1 = a.
evaluate(points[k], values[k]);
103 ValueType val2 = b.
evaluate(points[k], values[k]);
104 ValueType
val = func(val1, val2);
105 for (
int i=0; i<c.
size(); i++)
106 c[i] += weights[k]*
val*values[k][i] / basis->norm_squared(i);
110 template <
class Func,
typename OrdinalType,
typename ValueType>
118 Teuchos::RCP<const Stokhos::OrthogPolyBasis<OrdinalType,ValueType> > basis
123 const Teuchos::Array< Teuchos::Array<ValueType> >& points =
125 const Teuchos::Array< Teuchos::Array<ValueType> >& values =
127 OrdinalType nqp = weights.size();
130 for (OrdinalType i=0; i<c.
size(); i++)
135 for (OrdinalType k=0; k<nqp; k++) {
136 ValueType val2 = b.
evaluate(points[k], values[k]);
137 ValueType
val = func(a, val2);
138 for (
int i=0; i<c.
size(); i++)
139 c[i] += weights[k]*
val*values[k][i] / basis->norm_squared(i);
143 template <
class Func,
typename OrdinalType,
typename ValueType>
151 Teuchos::RCP<const Stokhos::OrthogPolyBasis<OrdinalType,ValueType> > basis
156 const Teuchos::Array< Teuchos::Array<ValueType> >& points =
158 const Teuchos::Array< Teuchos::Array<ValueType> >& values =
160 OrdinalType nqp = weights.size();
163 for (OrdinalType i=0; i<c.
size(); i++)
168 for (OrdinalType k=0; k<nqp; k++) {
169 ValueType val1 = a.
evaluate(points[k], values[k]);
170 ValueType
val = func(val1, b);
171 for (
int i=0; i<c.
size(); i++)
172 c[i] += weights[k]*
val*values[k][i] / basis->norm_squared(i);
223 return std::log(a+std::sqrt(a*a+1.0));
228 return std::log(a+std::sqrt(a*a-1.0));
233 return 0.5*std::log((1.0+a)/(1.0-a));
238 double operator() (
double a,
double b)
const {
return a + b; }
241 double operator() (
double a,
double b)
const {
return a - b; }
244 double operator() (
double a,
double b)
const {
return a * b; }
247 double operator() (
double a,
double b)
const {
return a / b; }
250 double operator() (
double a,
double b)
const {
return std::pow(a,b); }
257 computePCE1<UMinusFunc>(
setup.u2, v, *
setup.quad);
593 computePCE2<PlusFunc>(
setup.u2, v, w, *
setup.quad);
640 setup.exp->plus(ru, v, w);
641 computePCE2<PlusFunc>(
setup.u2, v, w, *
setup.quad);
709 computePCE2<MinusFunc>(
setup.u2, v, w, *
setup.quad);
756 setup.exp->minus(ru, v, w);
757 computePCE2<MinusFunc>(
setup.u2, v, w, *
setup.quad);
825 computePCE2<TimesFunc>(
setup.u2, v, w, *
setup.quad);
872 setup.exp->times(ru, v, w);
873 computePCE2<TimesFunc>(
setup.u2, v, w, *
setup.quad);
957 computePCE2<DivideFunc>(
setup.u2, v, w, *
setup.quad);
1004 setup.exp->divide(ru, v, w);
1005 computePCE2<DivideFunc>(
setup.u2, v, w, *
setup.quad);
1189 setup.exp->plusEqual(ru, v);
1242 setup.exp->minusEqual(ru, v);
1243 setup.exp->unaryMinus(v, v);
Class to store coefficients of a projection onto an orthogonal polynomial basis.
ordinal_type size() const
Return size.
value_type evaluate(const Teuchos::Array< value_type > &point) const
Evaluate polynomial approximation at a point.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > basis() const
Return basis.
Abstract base class for quadrature methods.
virtual const Teuchos::Array< value_type > & getQuadWeights() const =0
Get quadrature weights.
virtual const Teuchos::Array< Teuchos::Array< value_type > > & getBasisAtQuadPoints() const =0
Get values of basis at quadrature points.
virtual const Teuchos::Array< Teuchos::Array< value_type > > & getQuadPoints() const =0
Get quadrature points.
ScalarType f(const Teuchos::Array< ScalarType > &x, double a, double b)
void computePCE2RC(Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &c, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &a, ValueType b, const Stokhos::Quadrature< OrdinalType, ValueType > &quad)
TEUCHOS_UNIT_TEST(Stokhos_PSExpansion, UMinus)
void computePCE2(Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &c, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &a, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &b, const Stokhos::Quadrature< OrdinalType, ValueType > &quad)
void computePCE1(Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &c, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &a, const Stokhos::Quadrature< OrdinalType, ValueType > &quad)
UnitTestSetup< int, double > setup
void computePCE2LC(Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &c, ValueType a, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &b, const Stokhos::Quadrature< OrdinalType, ValueType > &quad)
bool comparePCEs(const PCEType &a1, const std::string &a1_name, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &a2, const std::string &a2_name, const ValueType &rel_tol, const ValueType &abs_tol, Teuchos::FancyOStream &out)
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a, double b) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a, double b) const
double operator()(double a, double b) const
double operator()(double a, double b) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a) const
double operator()(double a, double b) const
double operator()(double a) const