38 template <
typename Func>
140 #define LANCZOS_UNIT_TESTS(BASENAME, TAG, FUNC, NORMALIZE, PROJECT) \
141 namespace BASENAME ## TAG { \
143 Lanczos_PCE_Setup< FUNC<int,double> > setup(NORMALIZE, PROJECT); \
145 TEUCHOS_UNIT_TEST( BASENAME, TAG ## Map ) { \
146 Stokhos::OrthogPolyApprox<int,double> u2(setup.basis); \
148 setup.st_1d_proj_basis->transformCoeffsFromLanczos( \
149 setup.u_st.coeff(), \
152 setup.st_1d_basis->transformCoeffsFromLanczos( \
153 setup.u_st.coeff(), \
155 success = Stokhos::comparePCEs(setup.u, "u", u2, "u2", \
156 setup.rtol, setup.atol, out); \
159 TEUCHOS_UNIT_TEST( BASENAME, TAG ## Orthog ) { \
160 const Teuchos::Array<double>& norms = \
161 setup.st_bases[0]->norm_squared(); \
162 const Teuchos::Array<double>& weights = \
163 setup.st_quad->getQuadWeights(); \
164 const Teuchos::Array< Teuchos::Array<double> >& values = \
165 setup.st_quad->getBasisAtQuadPoints(); \
166 Teuchos::SerialDenseMatrix<int,double> mat(setup.st_sz, \
168 for (int i=0; i<setup.st_sz; i++) { \
169 for (int j=0; j<setup.st_sz; j++) { \
170 for (unsigned int k=0; k<weights.size(); k++) \
171 mat(i,j) += weights[k]*values[k][i]*values[k][j]; \
172 mat(i,j) /= std::sqrt(norms[i]*norms[j]); \
176 success = mat.normInf() < setup.atol; \
178 out << "\n Error, mat.normInf() < atol = " << mat.normInf() \
179 << " < " << setup.atol << ": failed!\n"; \
180 out << "mat = " << printMat(mat) << std::endl; \
184 TEUCHOS_UNIT_TEST( BASENAME, TAG ## PCE ) { \
185 Stokhos::OrthogPolyApprox<int,double> v2(setup.basis); \
186 lanczos_pce_quad_func quad_func(setup.v_st, *setup.st_basis); \
187 setup.exp->unary_op(quad_func, v2, setup.u); \
188 success = comparePCEs(setup.v, "v", v2, "v2", setup.rtol, \
192 TEUCHOS_UNIT_TEST( BASENAME, TAG ## Mean ) { \
193 success = Teuchos::testRelErr( \
194 "v.mean()", setup.v.mean(), \
195 "v_st.mean()", setup.v_st.mean(), \
196 "rtol", setup.rtol, \
197 "rtol", setup.rtol, \
198 Teuchos::Ptr<std::ostream>(out.getOStream().get())); \
202 TEUCHOS_UNIT_TEST( BASENAME, TAG ## StandardDeviation ) { \
203 success = Teuchos::testRelErr( \
204 "v.standard_deviation()", \
205 setup.v.standard_deviation(), \
206 "v_st.standard_devaition()", \
207 setup.v_st.standard_deviation(), \
210 Teuchos::Ptr<std::ostream>(out.getOStream().get())); \
219 template <
typename Ordinal_Type,
typename Value_Type>
223 static const bool is_even =
true;
244 template <typename Ordinal_Type, typename Value_Type>
248 static const bool is_even =
false;
270 template <typename Ordinal_Type, typename Value_Type>
274 static const bool is_even =
false;
static const bool is_even
void sin(OrthogPolyApprox< ordinal_type, value_type, node_type > &c, const OrthogPolyApprox< ordinal_type, value_type, node_type > &a)
const Stokhos::OrthogPolyApprox< int, double > & pce
void times(OrthogPolyApprox< ordinal_type, value_type, node_type > &c, const OrthogPolyApprox< ordinal_type, value_type, node_type > &a, const OrthogPolyApprox< ordinal_type, value_type, node_type > &b)
lanczos_pce_quad_func(const Stokhos::OrthogPolyApprox< int, double > &pce_, const Stokhos::OrthogPolyBasis< int, double > &basis_)
value_type evaluate(const Teuchos::Array< value_type > &point) const
Evaluate polynomial approximation at a point.
Teuchos::RCP< const Stokhos::HouseTriDiagPCEBasis< OrdinalType, ValueType > > st_1d_proj_basis
void exp(OrthogPolyApprox< ordinal_type, value_type, node_type > &c, const OrthogPolyApprox< ordinal_type, value_type, node_type > &a)
void cos(OrthogPolyApprox< ordinal_type, value_type, node_type > &c, const OrthogPolyApprox< ordinal_type, value_type, node_type > &a)
value_type getNewCoeffs(ordinal_type i) const
Get new coefficients in this new basis.
Stokhos::OrthogPolyApprox< OrdinalType, ValueType > v_st
Stokhos::OrthogPolyApprox< OrdinalType, ValueType > u
void eval(Stokhos::QuadOrthogPolyExpansion< OrdinalType, ValueType > &exp, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &x, Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &u)
void eval(Stokhos::QuadOrthogPolyExpansion< OrdinalType, ValueType > &exp, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &x, Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &u)
value_type getNewCoeffs(ordinal_type i) const
Get new coefficients in this new basis.
Teuchos::RCP< const Stokhos::CompletePolynomialBasis< OrdinalType, ValueType > > st_basis
static int runUnitTestsFromMain(int argc, char *argv[])
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
void reset(const Teuchos::RCP< const Stokhos::OrthogPolyBasis< ordinal_type, value_type > > &new_basis, ordinal_type sz=0)
Reset to a new basis.
Lanczos_PCE_Setup(bool normalize, bool project)
Teuchos::RCP< const Stokhos::Quadrature< OrdinalType, ValueType > > st_quad
Teuchos::Array< double > vec
Teuchos::RCP< const Stokhos::LanczosPCEBasis< OrdinalType, ValueType > > st_1d_basis
const Stokhos::OrthogPolyBasis< int, double > & basis
virtual Teuchos::RCP< Stokhos::Sparse3Tensor< ordinal_type, value_type > > computeTripleProductTensor() const
Compute triple product tensor.
void resize(size_type new_size, const value_type &x=value_type())
Stokhos::OrthogPolyApprox< OrdinalType, ValueType > u_st
KOKKOS_INLINE_FUNCTION PCE< Storage > exp(const PCE< Storage > &a)
int main(int argc, char **argv)
Teuchos::RCP< Stokhos::QuadOrthogPolyExpansion< OrdinalType, ValueType > > exp
virtual ordinal_type size() const
Return total size of basis.
Teuchos::RCP< const Stokhos::CompletePolynomialBasis< OrdinalType, ValueType > > basis
Teuchos::RCP< const Stokhos::LanczosProjPCEBasis< OrdinalType, ValueType > > st_1d_proj_basis
void eval(Stokhos::QuadOrthogPolyExpansion< OrdinalType, ValueType > &exp, const Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &x, Stokhos::OrthogPolyApprox< OrdinalType, ValueType > &u)
Teuchos::Array< Teuchos::RCP< const Stokhos::OneDOrthogPolyBasis< OrdinalType, ValueType > > > st_bases
Func::ValueType ValueType
Func::OrdinalType OrdinalType
double operator()(const double &a) const
#define LANCZOS_UNIT_TESTS(BASENAME, TAG, FUNC, NORMALIZE)
Defines quadrature for a tensor product basis by tensor products of 1-D quadrature rules...
Stokhos::OrthogPolyApprox< OrdinalType, ValueType > v
reference term(ordinal_type dimension, ordinal_type order)
Get coefficient term for given dimension and order.