43 #include "Teuchos_TimeMonitor.hpp" 45 template <
typename ordinal_type,
typename value_type>
49 #ifdef STOKHOS_TEUCHOS_TIME_MONITOR 50 TEUCHOS_FUNC_TIME_MONITOR(
"Stokhos::TensorProductQuadrature -- Quad Grid Generation");
55 Teuchos::Array< Teuchos::RCP<const OneDOrthogPolyBasis<ordinal_type,value_type> > > coordinate_bases = product_basis->getCoordinateBases();
58 Teuchos::Array< Teuchos::Array<value_type> > gp(d);
59 Teuchos::Array< Teuchos::Array<value_type> > gw(d);
60 Teuchos::Array< Teuchos::Array< Teuchos::Array<value_type> > > gv(d);
61 Teuchos::Array<ordinal_type> n(d);
64 coordinate_bases[i]->getQuadPoints(2*(coordinate_bases[i]->order()),
69 quad_points.resize(ntot);
70 quad_weights.resize(ntot);
71 quad_values.resize(ntot);
72 Teuchos::Array<ordinal_type>
index(d);
77 quad_points[cnt].resize(d);
79 quad_values[cnt].resize(sz);
81 quad_points[cnt][
j] = gp[
j][
index[
j]];
82 quad_weights[cnt] *= gw[
j][
index[
j]];
88 quad_values[cnt][k] *= gv[
j][
index[
j]][term[
j]];
92 while (i < d-1 &&
index[i] == n[i]) {
103 template <
typename ordinal_type,
typename value_type>
107 #ifdef STOKHOS_TEUCHOS_TIME_MONITOR 108 TEUCHOS_FUNC_TIME_MONITOR(
"Stokhos::TensorProductQuadrature -- Quad Grid Generation");
113 Teuchos::Array< Teuchos::RCP<const OneDOrthogPolyBasis<ordinal_type,value_type> > > coordinate_bases = product_basis->getCoordinateBases();
116 Teuchos::Array< Teuchos::Array<value_type> > gp(d);
117 Teuchos::Array< Teuchos::Array<value_type> > gw(d);
118 Teuchos::Array< Teuchos::Array< Teuchos::Array<value_type> > > gv(d);
119 Teuchos::Array<ordinal_type> n(d);
122 coordinate_bases[i]->getQuadPoints(quad_order,
123 gp[i], gw[i], gv[i]);
127 quad_points.resize(ntot);
128 quad_weights.resize(ntot);
129 quad_values.resize(ntot);
130 Teuchos::Array<ordinal_type>
index(d);
135 quad_points[cnt].resize(d);
137 quad_values[cnt].resize(sz);
139 quad_points[cnt][
j] = gp[
j][
index[
j]];
140 quad_weights[cnt] *= gw[
j][
index[
j]];
146 quad_values[cnt][k] *= gv[
j][
index[
j]][term[
j]];
150 while (i < d-1 &&
index[i] == n[i]) {
161 template <
typename ordinal_type,
typename value_type>
162 const Teuchos::Array< Teuchos::Array<value_type> >&
169 template <
typename ordinal_type,
typename value_type>
170 const Teuchos::Array<value_type>&
177 template <
typename ordinal_type,
typename value_type>
178 const Teuchos::Array< Teuchos::Array<value_type> >&
185 template <
typename ordinal_type,
typename value_type>
191 os <<
"Tensor Product Quadrature with " << nqp <<
" points:" 192 << std::endl <<
"Weight : Points" << std::endl;
194 os << i <<
": " << quad_weights[i] <<
" : ";
195 for (
ordinal_type j=0; j<static_cast<ordinal_type>(quad_points[i].size());
197 os << quad_points[i][
j] <<
" ";
200 os <<
"Basis values at quadrature points:" << std::endl;
202 os << i <<
" " <<
": ";
203 for (
ordinal_type j=0; j<static_cast<ordinal_type>(quad_values[i].size());
205 os << quad_values[i][
j] <<
" ";
virtual const Teuchos::Array< value_type > & getQuadWeights() const
Get quadrature weights.
SparseArrayIterator< index_iterator, value_iterator >::value_type index(const SparseArrayIterator< index_iterator, value_iterator > &it)
virtual const Teuchos::Array< Teuchos::Array< value_type > > & getQuadPoints() const
Get quadrature points.
TensorProductQuadrature(const Teuchos::RCP< const ProductBasis< ordinal_type, value_type > > &product_basis)
Constructor.
virtual const Teuchos::Array< Teuchos::Array< value_type > > & getBasisAtQuadPoints() const
Get values of basis at quadrature points.
virtual std::ostream & print(std::ostream &os) const
Print quadrature data.
Abstract base class for multivariate orthogonal polynomials generated from tensor products of univari...