47 #ifndef __INTREPID2_PROJECTIONSTRUCT_HPP__
48 #define __INTREPID2_PROJECTIONSTRUCT_HPP__
50 #include "Intrepid2_ConfigDefs.hpp"
55 namespace Experimental {
77 template<
typename SpT,
typename ValueType>
81 typedef Kokkos::pair<ordinal_type,ordinal_type> range_type;
82 typedef typename Kokkos::Impl::is_space<SpT>::host_mirror_space::execution_space host_space_type;
83 typedef Kokkos::DynRankView<ValueType,host_space_type> view_type;
84 typedef std::array<std::array<range_type, 12>,4> range_tag;
85 typedef std::array<std::array<view_type, 12>,4> view_tag;
86 typedef std::array<std::array<unsigned, 12>,4> key_tag;
91 return numBasisEvalPoints;
97 return numBasisDerivEvalPoints;
103 return numTargetEvalPoints;
109 return numTargetDerivEvalPoints;
119 return basisCubPoints[subCellDim][subCellId].extent(0);
129 return basisDerivCubPoints[subCellDim][subCellId].extent(0);
139 return targetCubPoints[subCellDim][subCellId].extent(0);
149 return targetDerivCubPoints[subCellDim][subCellId].extent(0);
165 return basisCubPoints[subCellDim][subCellId];
181 return basisDerivCubPoints[subCellDim][subCellId];
197 return targetCubPoints[subCellDim][subCellId];
213 return targetDerivCubPoints[subCellDim][subCellId];
228 return basisCubWeights[subCellDim][subCellId];
243 return basisDerivCubWeights[subCellDim][subCellId];
258 return targetCubWeights[subCellDim][subCellId];
273 return targetDerivCubWeights[subCellDim][subCellId];
283 return basisPointsRange[subCellDim][subCellId];
293 return basisDerivPointsRange[subCellDim][subCellId];
303 return targetPointsRange[subCellDim][subCellId];
313 return targetDerivPointsRange[subCellDim][subCellId];
322 unsigned getTopologyKey(
const ordinal_type subCellDim,
const ordinal_type subCellId) {
323 return subCellTopologyKey[subCellDim][subCellId];
330 template<
typename BasisPtrType>
332 const ordinal_type targetCubDegree);
339 template<
typename BasisPtrType>
341 const ordinal_type targetCubDegree,
342 const ordinal_type targetGradCubDegre);
349 template<
typename BasisPtrType>
351 const ordinal_type targetCubDegree,
352 const ordinal_type targetCurlCubDegre);
359 template<
typename BasisPtrType>
361 const ordinal_type targetCubDegree,
362 const ordinal_type targetDivCubDegre);
368 template<
typename BasisPtrType>
370 const ordinal_type targetCubDegree);
372 key_tag subCellTopologyKey;
373 range_tag basisPointsRange;
374 range_tag basisDerivPointsRange;
375 range_tag targetPointsRange;
376 range_tag targetDerivPointsRange;
377 view_tag basisCubPoints;
378 view_tag basisCubWeights;
379 view_tag basisDerivCubPoints;
380 view_tag basisDerivCubWeights;
381 view_tag targetCubPoints;
382 view_tag targetCubWeights;
383 view_tag targetDerivCubPoints;
384 view_tag targetDerivCubWeights;
385 ordinal_type numBasisEvalPoints;
386 ordinal_type numBasisDerivEvalPoints;
387 ordinal_type numTargetEvalPoints;
388 ordinal_type numTargetDerivEvalPoints;
range_type getTargetDerivPointsRange(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the range of the target function derivative evaluation points corresponding to a subcell...
unsigned getTopologyKey(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the key of a subcell topology.
void createL2ProjectionStruct(const BasisPtrType cellBasis, const ordinal_type targetCubDegree)
Initialize the ProjectionStruct for L2 projections.
void createHDivProjectionStruct(const BasisPtrType cellBasis, const ordinal_type targetCubDegree, const ordinal_type targetDivCubDegre)
Initialize the ProjectionStruct for HDIV projections.
ordinal_type getNumTargetEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns number of points where to evaluate the target function on a subcell.
ordinal_type getNumBasisEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns number of basis evaluation points on a subcell.
range_type getTargetPointsRange(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the range of the target function evaluation points corresponding to a subcell.
view_type getTargetDerivEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the points where to evaluate the derivatives of the target function on a subcell.
view_type getTargetEvalWeights(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the function evaluation weights on a subcell.
view_type getTargetDerivEvalWeights(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the function derivatives evaluation weights on a subcell.
view_type getBasisEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the basis evaluation points on a subcell.
ordinal_type getNumTargetDerivEvalPoints()
Returns number of points where to evaluate the derivatives of the target function.
Contains definitions of custom data types in Intrepid2.
ordinal_type getNumBasisDerivEvalPoints()
Returns number of evaluation points for basis derivatives.
void createHVolProjectionStruct(const BasisPtrType cellBasis, const ordinal_type targetCubDegree)
Initialize the ProjectionStruct for HVOL (local-L2) projection.
void createHCurlProjectionStruct(const BasisPtrType cellBasis, const ordinal_type targetCubDegree, const ordinal_type targetCurlCubDegre)
Initialize the ProjectionStruct for HCURL projections.
void createHGradProjectionStruct(const BasisPtrType cellBasis, const ordinal_type targetCubDegree, const ordinal_type targetGradCubDegre)
Initialize the ProjectionStruct for HGRAD projections.
ordinal_type getNumTargetDerivEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns number of points where to evaluate the derivatives of the target function on a subcell...
view_type getBasisDerivEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the evaluation points for basis derivatives on a subcell.
ordinal_type getNumBasisEvalPoints()
Returns number of basis evaluation points.
view_type getBasisDerivEvalWeights(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the basis derivatives evaluation weights on a subcell.
view_type getTargetEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the points where to evaluate the target function on a subcell.
An helper class to compute the evaluation points and weights needed for performing projections...
ordinal_type getNumTargetEvalPoints()
Returns number of points where to evaluate the target function.
view_type getBasisEvalWeights(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the basis evaluation weights on a subcell.
range_type getBasisPointsRange(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the range of the basis evaluation points corresponding to a subcell.
ordinal_type getNumBasisDerivEvalPoints(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns number of evaluation points for basis derivatives on a subcell.
Header file for the Intrepid2::Experimental::ProjectionStruct containing definitions.
range_type getBasisDerivPointsRange(const ordinal_type subCellDim, const ordinal_type subCellId)
Returns the range of the basis derivative evaluation points corresponding to a subcell.