65 const bool Deformed, [[maybe_unused]]
bool CollDir0 =
false,
66 [[maybe_unused]]
bool CollDir1 =
false,
67 [[maybe_unused]]
bool CollDir2 =
false);
183 const bool Deformed, [[maybe_unused]]
bool CollDir0 =
false,
184 [[maybe_unused]]
bool CollDir1 =
false,
185 [[maybe_unused]]
bool CollDir2 =
false) = 0;
219 std::array<NekDouble, 3> &firstOrderDerivs)
221 const int nq0 =
m_base[0]->GetNumPoints();
222 const int nq1 =
m_base[1]->GetNumPoints();
223 const int nq2 =
m_base[2]->GetNumPoints();
232 for (
int j = 0; j < nq1 * nq2; ++j, ptr += nq0)
235 StdExpansion::BaryEvaluate<0, true>(coord[0], ptr, deriv0[j]);
238 for (
int j = 0; j < nq2; ++j)
240 deriv0phys1[j] = StdExpansion::BaryEvaluate<1, false>(
241 coord[1], &deriv0[j * nq1]);
243 firstOrderDerivs[0] =
244 StdExpansion::BaryEvaluate<2, false>(coord[2], &deriv0phys1[0]);
246 for (
int j = 0; j < nq2; ++j)
248 phys0phys1[j] = StdExpansion::BaryEvaluate<1, true>(
249 coord[1], &phys0[j * nq1], phys0deriv1[j]);
251 firstOrderDerivs[1] =
252 StdExpansion::BaryEvaluate<2, false>(coord[2], &phys0deriv1[0]);
254 return StdExpansion::BaryEvaluate<2, true>(coord[2], &phys0phys1[0],
255 firstOrderDerivs[2]);
271 std::shared_ptr<StdExpansion> fromExp,
277 const int nq0,
const int nq1,
bool Forwards)
override;
285 return ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()) &&
286 (
m_base[2]->Collocation()));
292 bool UseGLL =
false);
#define STD_REGIONS_EXPORT
Describes the specification for a Basis.
void IProductWRTBaseKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const Array< OneD, NekDouble > &jac, const bool Deformed, bool CollDir0=false, bool CollDir1=false, bool CollDir2=false)
void v_ReOrientTracePhysMap(const StdRegions::Orientation orient, Array< OneD, int > &idmap, const int nq0, const int nq1, bool Forwards) override
This method produces a mapping.
bool v_IsCollocatedBasis() const final
virtual int v_GetNedges(void) const
virtual void v_GetEdgeInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards)
int v_GetShapeDimension() const final
int GetEdgeNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th edge.
void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
int GetNedges() const
return the number of edges in 3D expansion
void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
NekDouble BaryTensorDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs)
void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
virtual int v_GetEdgeNcoeffs(const int i) const
void v_PhysInterp(std::shared_ptr< StdExpansion > fromExp, const Array< OneD, const NekDouble > &fromData, Array< OneD, NekDouble > &toData, bool Transpose) override
NekDouble v_PhysEvaluateInterp(const Array< OneD, DNekMatSharedPtr > &I, const Array< OneD, const NekDouble > &physvals) override
virtual void v_IProductWRTBaseKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const Array< OneD, NekDouble > &jac, const bool Deformed, bool CollDir0=false, bool CollDir1=false, bool CollDir2=false)=0
void v_GenStdMatBwdDeriv(const int dir, DNekMatSharedPtr &mat) override
void GetEdgeInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards)
void v_GetTraceToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient, int P, int Q) override
~StdExpansion3D() override=default
NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals) override
This function evaluates the expansion at a single (arbitrary) point of the domain.
StdExpansion3D(const StdExpansion3D &T)=default
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
Calculate the 3D derivative in the local tensor/collapsed coordinate at the physical points.
void v_PhysDeriv(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculate the derivative of the physical points in a given direction.
The base class for all shapes.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
virtual void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2, Array< OneD, NekDouble > &out_d3)
Calculate the derivative of the physical points.
std::shared_ptr< Basis > BasisSharedPtr
LibUtilities::BasisKey EvaluateQuadFaceBasisKey(const int facedir, const LibUtilities::BasisSharedPtr &faceDirBasis)
LibUtilities::BasisKey EvaluateTriFaceBasisKey(const int facedir, const LibUtilities::BasisSharedPtr &faceDirBasis, bool UseGLL)
std::shared_ptr< StdExpansion3D > StdExpansion3DSharedPtr
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
std::shared_ptr< DNekMat > DNekMatSharedPtr