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);
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; }
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);