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; }
ordinal_type Stokhos::ProductLanczosPCEBasis<ordinal_type, value_type>:: isInvariant(const Stokhos::OrthogPolyApprox<ordinal_type, value_type>& pce) const { Teuchos::RCP<const Stokhos::OrthogPolyBasis<ordinal_type,value_type> > basis = pce.basis(); ordinal_type dim = basis->dimension(); value_type tol = 1.0e-15; // Check if basis is a product basis Teuchos::RCP<const Stokhos::ProductBasis<ordinal_type,value_type> > prod_basis = Teuchos::rcp_dynamic_cast<const Stokhos::ProductBasis<ordinal_type,value_type> >(basis); if (prod_basis == Teuchos::null) return -2; // Build list of dimensions pce depends on by looping over each dimension, // computing norm of pce with just that dimension -- note we don't include // the constant term Teuchos::Array<ordinal_type> dependent_dims; tmp_pce.reset(basis); for (ordinal_type i=0; i<dim; i++) { ordinal_type p = prod_basis->getCoordinateBases()[i]->order(); tmp_pce.init(0.0); for (ordinal_type j=1; j<=p; j++) tmp_pce.term(i,j) = pce.term(i,j); value_type nrm = tmp_pce.two_norm(); if (nrm > tol) dependent_dims.push_back(i); } // If dependent_dims has length 1, pce a function of a single variable, // which is an invariant subspace if (dependent_dims.size() == 1) return dependent_dims[0]; // If dependent_dims has length 0, pce is constant else if (dependent_dims.size() == 0) return -1; // Otherwise pce depends on more than one variable return -2; }
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); }