Intrepid2
Classes | Public Types | Static Public Member Functions | List of all members
Intrepid2::Experimental::ProjectionTools< DeviceType > Class Template Reference

A class providing static members to perform projection-based interpolations: More...

#include <Intrepid2_ProjectionTools.hpp>

Classes

struct  ElemSystem
 Class to solve a square system A x = b on each cell A is expected to be saddle a point (KKT) matrix of the form [C B; B^T 0], where C has size nxn and B nxm, with n>0, m>=0. B^T is copied from B, so one does not have to define the B^T portion of A. b will contain the solution x. The first n-entries of x are copied into the provided basis coefficients using the provided indexing. The system is solved either with a QR factorization implemented in KokkosKernels or with Lapack GELS function. More...
 

Public Types

using ExecSpaceType = typename DeviceType::execution_space
 
using MemSpaceType = typename DeviceType::memory_space
 
using EvalPointsType = typename ProjectionStruct<DeviceType, double>::EvalPointsType
 

Static Public Member Functions

template<typename BasisType , typename ortValueType , class ... ortProperties>
static void getL2EvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for L2 projection.
 
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
static void getL2BasisCoeffs (Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints, const typename BasisType::ScalarViewType evaluationPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes the basis coefficients of the L2 projection of the target function.
 
template<typename BasisType >
static void getL2DGEvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.
 
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
static void getL2DGBasisCoeffs (Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.
 
template<typename basisViewType , typename targetViewType , typename BasisType >
static void getL2DGBasisCoeffs (basisViewType basisCoeffs, const targetViewType targetAtTargetEPoints, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.
 
template<typename BasisType , typename OrientationViewType >
static void getHGradEvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, typename BasisType::ScalarViewType gradEvalPoints, const OrientationViewType cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for HGrad projection.
 
template<class BasisCoeffsViewType , class TargetValueViewType , class TargetGradViewType , class BasisType , class OrientationViewType >
static void getHGradBasisCoeffs (BasisCoeffsViewType basisCoeffs, const TargetValueViewType targetAtEvalPoints, const TargetGradViewType targetGradAtGradEvalPoints, const typename BasisType::ScalarViewType evaluationPoints, const typename BasisType::ScalarViewType gradEvalPoints, const OrientationViewType cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes the basis coefficients of the HGrad projection of the target function.
 
template<typename BasisType , typename ortValueType , class ... ortProperties>
static void getHCurlEvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, typename BasisType::ScalarViewType curlEvalPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for HCurl projection.
 
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
static void getHCurlBasisCoeffs (Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetCurlAtCurlEvalPoints, const typename BasisType::ScalarViewType evaluationPoints, const typename BasisType::ScalarViewType curlEvalPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes the basis coefficients of the HCurl projection of the target function.
 
template<typename BasisType , typename ortValueType , class ... ortProperties>
static void getHDivEvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, typename BasisType::ScalarViewType divEvalPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for HDiv projection.
 
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
static void getHDivBasisCoeffs (Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetDivAtDivEvalPoints, const typename BasisType::ScalarViewType evaluationPoints, const typename BasisType::ScalarViewType divEvalPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes the basis coefficients of the HDiv projection of the target function.
 
template<typename BasisType , typename ortValueType , class ... ortProperties>
static void getHVolEvaluationPoints (typename BasisType::ScalarViewType evaluationPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct, const EvalPointsType evalPointType=EvalPointsType::TARGET)
 Computes evaluation points for HVol projection.
 
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
static void getHVolBasisCoeffs (Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs, const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints, const typename BasisType::ScalarViewType evaluationPoints, const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations, const BasisType *cellBasis, ProjectionStruct< DeviceType, typename BasisType::scalarType > *projStruct)
 Computes the basis coefficients of the HVol projection of the target function.
 

Detailed Description

template<typename DeviceType>
class Intrepid2::Experimental::ProjectionTools< DeviceType >

A class providing static members to perform projection-based interpolations:

This class provides tools to perform projection-based interpolations of a target function $f$ that satisfy the commutativity property of the De Rham complex and that have optimal accuracy w.r.t. the corresponding norms ( $H^1$, $H^{\text{div}}$, $H^{\text{curl}}$, $L^2$).

The projection-based interpolation $\Pi_h^X$ of the target function $f$ reads

\[
\Pi_h^X(f) = \sum_i \alpha^f_i \phi_i, \quad X \in \{\text{grad},\, \text{div},\, \text{curl},\, \text{vol}\},
\]

where $\{\phi_i\}$ is the basis of the finite element, $\alpha_i^f$ are the basisCoeffs.

It also provides tools to perform a local L2 projection into HGrad, HCurl, HDiv and L2 fields. This projection does not satisfy the properties of the projection-based interpolations, but it is simpler and does not require to evaluate the derivatives of the target functions.

Use:

  1. create a ProjectionStruct object
  2. allocate views for storing the points where to evaluate the target function and its derivatives
  3. evaluate the points/weights using one of the methods getHGradEvaluationPoints, getHCURLEvaluationPoints, getHDivEvaluationPoints, getHVolEvaluationPoints, or getL2EvaluationPoints
  4. Map to the physical elements the evaluation points, evaluate the target function and its derivatives at these points and map them back (inverse of pullback operator) to the reference points. Note: if the target function is defined at reference element (e.g. in case the target function is a combination of basis functions) there is no need to map points and functions between the reference and physical spaces, but one needs to simply evaluate the target function and its derivatives at the evaluation points
  5. Evaluate the basis coefficients using one of the methods getHGradBasisCoeffs, getHCURLBasisCoeffs, getHDivBasisCoeffs, getHVolBasisCoeffs, or getL2BasisCoeffs
Remarks
The projections are performed at the oriented reference element. Therefore, the target function $f$, which is contravariant, needs to be mapped back to the reference element (using inverse of pullback operator) before calling getXXXBasisCoeffs.
The projections are implemented as in "Demkowics et al., Computing with Hp-Adaptive Finite Elements, Vol. 2, Chapman & Hall/CRC 2007". However, the projections along edges for HGrad and HCurl elements have been performed on the $H^1$ seminorm and the $L^2$ norm respectively, instead of on the $L^2$ and $H^{-1}$ and norms. This requires more regularity of the target function.
Todo
There is room for significant improvement. One could separate the computation of the basis function values and derivatives from the functions getXXXBasisCoeffs, so that they can be stored and reused for projecting other target functions. Similarly one could store all the QR factorizations and reuse them for other target functions. For internal evaluation points (that are not affected by orientation) one could compute the QR factorization on the reference cell and then use on all the cells.

Note: Other algorithmic improvements could be enabled by accessing the implementation of the orientation tools, however, we preferred the projections to work with any orientation, and assuming only that internal basis functions are not affected by the orientation.

Definition at line 183 of file Intrepid2_ProjectionTools.hpp.

Member Typedef Documentation

◆ EvalPointsType

template<typename DeviceType >
using Intrepid2::Experimental::ProjectionTools< DeviceType >::EvalPointsType = typename ProjectionStruct<DeviceType, double>::EvalPointsType

Definition at line 187 of file Intrepid2_ProjectionTools.hpp.

◆ ExecSpaceType

template<typename DeviceType >
using Intrepid2::Experimental::ProjectionTools< DeviceType >::ExecSpaceType = typename DeviceType::execution_space

Definition at line 185 of file Intrepid2_ProjectionTools.hpp.

◆ MemSpaceType

template<typename DeviceType >
using Intrepid2::Experimental::ProjectionTools< DeviceType >::MemSpaceType = typename DeviceType::memory_space

Definition at line 186 of file Intrepid2_ProjectionTools.hpp.

Member Function Documentation

◆ getHCurlBasisCoeffs()

template<typename DeviceType >
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHCurlBasisCoeffs ( Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetCurlAtCurlEvalPoints,
const typename BasisType::ScalarViewType evaluationPoints,
const typename BasisType::ScalarViewType curlEvalPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes the basis coefficients of the HCurl projection of the target function.

C - num. cells
F - num. fields
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - rank-3 view (C,P1,D) containing the values of the target function evaluated at the evaluation points
targetcurlAtCurlEvalPoints[in] - variable rank view containing the values of the curl of the target function evaluated at the evaluation points
evaluationPoints[in] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points for the projection at each cell
curlEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function curls, at each cell
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HCURL basis for the projection
projStruct[in] - pointer to ProjectionStruct object
Remarks
targetAtCurlEvalPoints has rank 2 (C,P2) in 2D, and rank 3 (C,P2,D) in 3D

Definition at line 484 of file Intrepid2_ProjectionToolsDefHCURL.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getAllDofOrdinal(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisPointsRange(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getCardinality(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getDofCount(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::CellTools< DeviceType >::getReferenceEdgeTangent(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getValues(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), Intrepid2::OrientationTools< DeviceType >::modifyBasisByOrientation(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getHCurlEvaluationPoints()

template<typename DeviceType >
template<typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHCurlEvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
typename BasisType::ScalarViewType curlEvalPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for HCurl projection.

C - num. cells
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points for the projection at each cell
curlEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function curls, at each cell
cellOrientations[in] - rank-1 view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HCURL basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 396 of file Intrepid2_ProjectionToolsDefHCURL.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), and Intrepid2::Impl::OrientationTools::mapSubcellCoordsToRefCell().

◆ getHDivBasisCoeffs()

template<typename DeviceType >
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHDivBasisCoeffs ( Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetDivAtDivEvalPoints,
const typename BasisType::ScalarViewType evaluationPoints,
const typename BasisType::ScalarViewType divEvalPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes the basis coefficients of the HDiv projection of the target function.

C - num. cells
F - num. fields
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - rank-3 view (C,P1,D) containing the values of the target function evaluated at the evaluation points
targetDivAtDivEvalPoints[in] - rank-2 view (C,P2) view containing the values of the divergence of the target function evaluated at the evaluation points
evaluationPoints[in] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points, at each cell
divEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function divergence, at each cell
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HDIV basis for the projection
projStruct[in] - pointer to ProjectionStruct object

Definition at line 317 of file Intrepid2_ProjectionToolsDefHDIV.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getAllDofOrdinal(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisPointsRange(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getCardinality(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getDofCount(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::CellTools< DeviceType >::getReferenceSideNormal(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetPointsRange(), Intrepid2::Basis< Device, outputValueType, pointValueType >::getValues(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), Intrepid2::OrientationTools< DeviceType >::modifyBasisByOrientation(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getHDivEvaluationPoints()

template<typename DeviceType >
template<typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHDivEvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
typename BasisType::ScalarViewType divEvalPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for HDiv projection.

C - num. cells
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points for the projection at each cell
divEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function divergence, at each cell
cellOrientations[in] - rank-1 view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HDIV basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 249 of file Intrepid2_ProjectionToolsDefHDIV.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), and Intrepid2::Impl::OrientationTools::mapSubcellCoordsToRefCell().

◆ getHGradBasisCoeffs()

template<typename DeviceType >
template<class BasisCoeffsViewType , class TargetValueViewType , class TargetGradViewType , class BasisType , class OrientationViewType >
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHGradBasisCoeffs ( BasisCoeffsViewType basisCoeffs,
const TargetValueViewType targetAtEvalPoints,
const TargetGradViewType targetGradAtGradEvalPoints,
const typename BasisType::ScalarViewType evaluationPoints,
const typename BasisType::ScalarViewType gradEvalPoints,
const OrientationViewType cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes the basis coefficients of the HGrad projection of the target function.

C - num. cells
F - num. fields
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - rank-2 view (C,P1) containing the values of the target function evaluated at the evaluation points
targetGradAtGradEvalPoints[in] - rank-3 view (C,P2,D) view containing the values of the gradient of the target function evaluated at the evaluation points
evaluationPoints[in] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points, at each cell
gradEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function gradients, at each cell
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HGRAD basis for the projection
projStruct[in] - pointer to ProjectionStruct object

Definition at line 413 of file Intrepid2_ProjectionToolsDefHGRAD.hpp.

References Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::CellTools< DeviceType >::getReferenceEdgeTangent(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), Intrepid2::OrientationTools< DeviceType >::modifyBasisByOrientation(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getHGradEvaluationPoints()

template<typename DeviceType >
template<typename BasisType , typename OrientationViewType >
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHGradEvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
typename BasisType::ScalarViewType gradEvalPoints,
const OrientationViewType cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for HGrad projection.

C - num. cells
P1 - num. evaluation points
P2 - num. evaluation points for derivatives
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P1,D) containing the coordinates of the evaluation points, at each cell
gradEvalPoints[in] - rank-3 view (C,P2,D) containing the coordinates of the points where to evaluate the function gradients, at each cell
cellOrientations[in] - rank-1 container (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HGRAD basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 322 of file Intrepid2_ProjectionToolsDefHGRAD.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getDerivPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), and Intrepid2::Impl::OrientationTools::mapSubcellCoordsToRefCell().

◆ getHVolBasisCoeffs()

template<typename DeviceType >
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHVolBasisCoeffs ( Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints,
const typename BasisType::ScalarViewType evaluationPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes the basis coefficients of the HVol projection of the target function.

C - num. cells
F - num. fields
P - num. evaluation points
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - rank-2 view (C,P) containing the values of the target function evaluated at the evaluation points
evaluationPoints[in] - rank-3 view (C,P,D) containing the coordinates of the evaluation points, at each cell
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HGRAD basis for the projection
projStruct[in] - pointer to ProjectionStruct object

Definition at line 82 of file Intrepid2_ProjectionToolsDefHVOL.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetPointsRange(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getHVolEvaluationPoints()

template<typename DeviceType >
template<typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getHVolEvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for HVol projection.

C - num. cells
P - num. evaluation points
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P,D) containing the coordinates of the evaluation points, at each cell
cellOrientations[in] - rank-1 view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the HVOL basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 64 of file Intrepid2_ProjectionToolsDefHVOL.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), and Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getPointsRange().

◆ getL2BasisCoeffs()

template<typename DeviceType >
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getL2BasisCoeffs ( Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints,
const typename BasisType::ScalarViewType evaluationPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes the basis coefficients of the L2 projection of the target function.

C - num. cells
F - num. fields
P - num. evaluation points
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - variable rank view containing the values of the target function evaluated at the evaluation points
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the basis for the projection
projStruct[in] - pointer to ProjectionStruct object
Remarks
targetAtEvalPoints has rank 2 (C,P) for HGRAD and HVOL elements, and rank 3 (C,P,D) for HCURL and HDIV elements

Definition at line 481 of file Intrepid2_ProjectionToolsDefL2.hpp.

References Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::CellTools< DeviceType >::getReferenceEdgeTangent(), Intrepid2::CellTools< DeviceType >::getReferenceSideNormal(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), Intrepid2::OrientationTools< DeviceType >::modifyBasisByOrientation(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getL2DGBasisCoeffs() [1/2]

template<typename DeviceType >
template<typename basisViewType , typename targetViewType , typename BasisType >
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getL2DGBasisCoeffs ( basisViewType basisCoeffs,
const targetViewType targetAtTargetEPoints,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.

This function simply perform an L2 projection in each cell with no guarantee of preserving continuity across cells. It also does not account for orientation.

C - num. cells
F - num. fields
P - num. evaluation points
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - variable rank view containing the values of the target function evaluated at the evaluation points
cellBasis[in] - pointer to the basis for the projection
projStruct[in] - pointer to ProjectionStruct object
Remarks
targetAtEvalPoints has rank 2 (C,P) for HGRAD and HVOL elements, and rank 3 (C,P,D) for HCURL and HDIV elements

Definition at line 900 of file Intrepid2_ProjectionToolsDefL2.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getL2DGBasisCoeffs() [2/2]

template<typename DeviceType >
template<typename basisCoeffsValueType , class ... basisCoeffsProperties, typename funValsValueType , class ... funValsProperties, typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getL2DGBasisCoeffs ( Kokkos::DynRankView< basisCoeffsValueType, basisCoeffsProperties... > basisCoeffs,
const Kokkos::DynRankView< funValsValueType, funValsProperties... > targetAtEvalPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct )
static

Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.

This function simply perform an L2 projection in each cell with no guarantee of preserving continuity across cells

C - num. cells
F - num. fields
P - num. evaluation points
D - spatial dimension
Parameters
basisCoeffs[out] - rank-2 view (C,F) containing the basis coefficients
targetAtEvalPoints[in] - variable rank view containing the values of the target function evaluated at the evaluation points
cellOrientations[in] - 1-rank view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the basis for the projection
projStruct[in] - pointer to ProjectionStruct object
Remarks
targetAtEvalPoints has rank 2 (C,P) for HGRAD and HVOL elements, and rank 3 (C,P,D) for HCURL and HDIV elements

Definition at line 810 of file Intrepid2_ProjectionToolsDefL2.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getBasisEvalWeights(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getNumBasisEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTargetEvalWeights(), Intrepid2::FunctionSpaceTools< DeviceType >::integrate(), Intrepid2::OrientationTools< DeviceType >::modifyBasisByOrientation(), and Intrepid2::Experimental::ProjectionTools< DeviceType >::ElemSystem::solve().

◆ getL2DGEvaluationPoints()

template<typename DeviceType >
template<typename BasisType >
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getL2DGEvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for local L2 projection for broken HGRAD HCURL HDIV and HVOL spaces.

C - num. cells
P - num. evaluation points
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P,D) containing the coordinates of the evaluation points for the projection at each cell
cellBasis[in] - pointer to the basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 794 of file Intrepid2_ProjectionToolsDefL2.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), and Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints().

◆ getL2EvaluationPoints()

template<typename DeviceType >
template<typename BasisType , typename ortValueType , class ... ortProperties>
void Intrepid2::Experimental::ProjectionTools< DeviceType >::getL2EvaluationPoints ( typename BasisType::ScalarViewType evaluationPoints,
const Kokkos::DynRankView< ortValueType, ortProperties... > cellOrientations,
const BasisType * cellBasis,
ProjectionStruct< DeviceType, typename BasisType::scalarType > * projStruct,
const EvalPointsType evalPointType = EvalPointsType::TARGET )
static

Computes evaluation points for L2 projection.

C - num. cells
P - num. evaluation points
D - spatial dimension
Parameters
evaluationPoints[out] - rank-3 view (C,P,D) containing the coordinates of the evaluation points for the projection at each cell
cellOrientations[in] - rank-1 view (C) containing the Orientation objects at each cell
cellBasis[in] - pointer to the basis for the projection
projStruct[in] - pointer to ProjectionStruct object
evalPointType[in] - enum selecting whether the points should be computed for the basis functions or for the target function

Definition at line 375 of file Intrepid2_ProjectionToolsDefL2.hpp.

References Intrepid2::RealSpaceTools< DeviceType >::clone(), Intrepid2::RefSubcellParametrization< DeviceType >::get(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getMaxNumEvalPoints(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getPointsRange(), Intrepid2::Experimental::ProjectionStruct< DeviceType, ValueType >::getTopologyKey(), Intrepid2::Impl::OrientationTools::mapSubcellCoordsToRefCell(), and Intrepid2::Impl::OrientationTools::mapToModifiedReference().


The documentation for this class was generated from the following files: