UnitTestSetup() { rtol = 1e-4; atol = 1e-5; crtol = 1e-12; catol = 1e-12; a = 3.1; const OrdinalType d = 2; const OrdinalType p = 7; // Create product basis Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<OrdinalType,ValueType> > > bases(d); for (OrdinalType i=0; i<d; i++) bases[i] = Teuchos::rcp(new Stokhos::LegendreBasis<OrdinalType,ValueType>(p)); basis = Teuchos::rcp(new Stokhos::CompletePolynomialBasis<OrdinalType,ValueType>(bases)); // Constant expansion exp = Teuchos::rcp(new Stokhos::ConstantOrthogPolyExpansion<OrdinalType,ValueType>()); // Create approximation cx.reset(basis, 1); cx.term(0, 0) = a; cu.reset(basis, 1); cu2.reset(basis, 1); }
UnitTestSetup() { rtol = 1e-4; atol = 1e-5; crtol = 1e-12; catol = 1e-12; a = 3.1; const OrdinalType d = 2; const OrdinalType p = 7; // Create product basis Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<OrdinalType,ValueType> > > bases(d); for (OrdinalType i=0; i<d; i++) bases[i] = Teuchos::rcp(new Stokhos::LegendreBasis<OrdinalType,ValueType>(p)); basis = Teuchos::rcp(new product_basis_type(bases)); // Tensor product quadrature quad = Teuchos::rcp(new Stokhos::TensorProductQuadrature<OrdinalType,ValueType>(basis)); // Tensor product pseudospectral operator Teuchos::Array< Stokhos::EvenGrowthRule<OrdinalType> > point_growth(d); ps_op = Teuchos::rcp(new Stokhos::QuadraturePseudoSpectralOperator<OrdinalType,ValueType>(*basis, *quad)); // Triple product tensor Cijk = basis->computeTripleProductTensor(); Cijk_linear = basis->computeLinearTripleProductTensor(); // Quadrature expansion exp = Teuchos::rcp(new Stokhos::PseudoSpectralOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk, ps_op)); exp_linear = Teuchos::rcp(new Stokhos::PseudoSpectralOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk_linear, ps_op)); // Create approximation sz = basis->size(); x.reset(basis); y.reset(basis); u.reset(basis); u2.reset(basis); cx.reset(basis, 1); x.term(0, 0) = 1.0; cx.term(0, 0) = a; cu.reset(basis); cu2.reset(basis, 1); sx.reset(basis, d+1); su.reset(basis, d+1); su2.reset(basis, d+1); for (OrdinalType i=0; i<d; i++) { x.term(i, 1) = 0.1; sx.term(i, 1) = 0.0; } y.term(0, 0) = 2.0; for (OrdinalType i=0; i<d; i++) y.term(i, 1) = 0.25; }
Lanczos_PCE_Setup(bool normalize, bool project) : func() { rtol = 1e-8; atol = 1e-12; const OrdinalType d = 3; const OrdinalType p = 5; // Create product basis Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<OrdinalType,ValueType> > > bases(d); for (OrdinalType i=0; i<d; i++) bases[i] = Teuchos::rcp(new Stokhos::LegendreBasis<OrdinalType,ValueType>(p)); basis = Teuchos::rcp(new Stokhos::CompletePolynomialBasis<OrdinalType,ValueType>(bases)); // Create approximation sz = basis->size(); Stokhos::OrthogPolyApprox<OrdinalType,ValueType> x(basis); for (OrdinalType i=0; i<d; i++) x.term(i, 1) = 1.0; // Tensor product quadrature Teuchos::RCP<const Stokhos::Quadrature<OrdinalType,ValueType> > quad = Teuchos::rcp(new Stokhos::TensorProductQuadrature<OrdinalType,ValueType>(basis, 4*p)); // Triple product tensor Teuchos::RCP<Stokhos::Sparse3Tensor<int,double> > Cijk = basis->computeTripleProductTensor(basis->size()); // Quadrature expansion exp = Teuchos::rcp(new Stokhos::QuadOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk, quad)); // Compute PCE via quadrature expansion u.reset(basis); v.reset(basis); func.eval(*exp, x, u); exp->times(v,u,u); // Compute Lanczos basis st_bases.resize(1); if (project) { st_1d_proj_basis = Teuchos::rcp(new Stokhos::LanczosProjPCEBasis<OrdinalType,ValueType>( p, Teuchos::rcp(&u,false), Cijk, normalize)); st_bases[0] = st_1d_proj_basis; } else { st_1d_basis = Teuchos::rcp(new Stokhos::LanczosPCEBasis<OrdinalType,ValueType>( p, Teuchos::rcp(&u,false), quad, normalize, false)); st_bases[0] = st_1d_basis; } st_basis = Teuchos::rcp(new Stokhos::CompletePolynomialBasis<OrdinalType,ValueType>(st_bases, 1e-15)); st_sz = st_basis->size(); u_st.reset(st_basis); v_st.reset(st_basis); if (project) { u_st[0] = st_1d_proj_basis->getNewCoeffs(0); u_st[1] = st_1d_proj_basis->getNewCoeffs(1); } else { u_st[0] = st_1d_basis->getNewCoeffs(0); u_st[1] = st_1d_basis->getNewCoeffs(1); } // Tensor product quadrature st_quad = Teuchos::rcp(new Stokhos::TensorProductQuadrature<OrdinalType,ValueType>(st_basis)); // Triple product tensor Teuchos::RCP<Stokhos::Sparse3Tensor<int,double> > st_Cijk = st_basis->computeTripleProductTensor(st_basis->size()); // Quadrature expansion Stokhos::QuadOrthogPolyExpansion<OrdinalType,ValueType> st_exp(st_basis, st_Cijk, st_quad); st_exp.times(v_st, u_st, u_st); }
UnitTestSetup() { rtol = 1e-10;//4 atol = 1e-10;//5 crtol = 1e-12; catol = 1e-12; a = 3.1; const OrdinalType d = 2; const OrdinalType p = 7; // Create product basis Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<OrdinalType,ValueType> > > bases(d); for (OrdinalType i=0; i<d; i++) bases[i] = Teuchos::rcp(new Stokhos::LegendreBasis<OrdinalType,ValueType>(p)); basis = Teuchos::rcp(new Stokhos::CompletePolynomialBasis<OrdinalType,ValueType>(bases)); // Tensor product quadrature quad = Teuchos::rcp(new Stokhos::TensorProductQuadrature<OrdinalType,ValueType>(basis)); // Triple product tensor Cijk = basis->computeTripleProductTensor(basis->size()); Cijk_linear = basis->computeTripleProductTensor(basis->dimension()+1); // Algebraic expansion exp = Teuchos::rcp(new Stokhos::QuadOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk, quad)); exp_linear = Teuchos::rcp(new Stokhos::QuadOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk_linear, quad)); // Quadrature expansion qexp = Teuchos::rcp(new Stokhos::QuadOrthogPolyExpansion<OrdinalType,ValueType>(basis, Cijk, quad)); //Dense Direct Division Operator direct_division_strategy = Teuchos::rcp(new Stokhos::DenseDirectDivisionExpansionStrategy<int,double,Stokhos::StandardStorage<int, double> >(basis, Cijk)); // Create approximation // sz = basis->size(); x.reset(basis); y.reset(basis); u.reset(basis); u2.reset(basis); cx.reset(basis, 1); x.term(0, 0) = 1.0; // y.term(0, 0) = 1.0: cx.term(0, 0) = a; cu.reset(basis); // cu2.reset(basis, 1); // sx.reset(basis, d+1); // su.reset(basis, d+1); // su2.reset(basis, d+1); for (OrdinalType i=0; i<d; i++) { x.term(i, 1) = 1.0; // y.term(i, 1) = 0.1; } // y.term(0, 0) = 2.0; // for (OrdinalType i=0; i<d; i++) // y.term(i, 1) = 0.25; c1.reset(basis); c1.term(0,0)=1; exp->exp(cu, x); }