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.