109 bool doCheckCollDir0,
bool doCheckCollDir1,
bool doCheckCollDir2);
117 bool doCheckCollDir0,
bool doCheckCollDir1,
bool doCheckCollDir2);
181 std::array<NekDouble, 3> &firstOrderDerivs)
override;
189 bool doCheckCollDir0,
bool doCheckCollDir1,
bool doCheckCollDir2) = 0;
197 bool doCheckCollDir0,
bool doCheckCollDir1,
bool doCheckCollDir2) = 0;
231 std::array<NekDouble, 3> &firstOrderDerivs)
233 const int nq0 =
m_base[0]->GetNumPoints();
234 const int nq1 =
m_base[1]->GetNumPoints();
235 const int nq2 =
m_base[2]->GetNumPoints();
244 for (
int j = 0; j < nq1 * nq2; ++j, ptr += nq0)
247 StdExpansion::BaryEvaluate<0, true>(coord[0], ptr, deriv0[j]);
250 for (
int j = 0; j < nq2; ++j)
252 deriv0phys1[j] = StdExpansion::BaryEvaluate<1, false>(
253 coord[1], &deriv0[j * nq1]);
255 firstOrderDerivs[0] =
256 StdExpansion::BaryEvaluate<2, false>(coord[2], &deriv0phys1[0]);
258 for (
int j = 0; j < nq2; ++j)
260 phys0phys1[j] = StdExpansion::BaryEvaluate<1, true>(
261 coord[1], &phys0[j * nq1], phys0deriv1[j]);
263 firstOrderDerivs[1] =
264 StdExpansion::BaryEvaluate<2, false>(coord[2], &phys0deriv1[0]);
266 return StdExpansion::BaryEvaluate<2, true>(coord[2], &phys0phys1[0],
267 firstOrderDerivs[2]);
291 const int numpoints,
const int nummodes);
295 const int numpoints,
const int nummodes);
#define STD_REGIONS_EXPORT
Describes the specification for a Basis.
virtual int v_GetNedges(void) const
void BwdTrans_SumFacKernel(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, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)
virtual void v_GetEdgeInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards)
int v_GetShapeDimension() const final
void IProductWRTBase_SumFacKernel(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, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)
int GetEdgeNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th edge.
virtual void v_BwdTrans_SumFacKernel(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, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)=0
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
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
NekDouble v_PhysEvaluate(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.
NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrates the specified function over the domain.
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
virtual void v_IProductWRTBase_SumFacKernel(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, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)=0
~StdExpansion3D() override=default
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray_d1, Array< OneD, NekDouble > &outarray_d2, Array< OneD, NekDouble > &outarray_d3)
Calculate the 3D derivative in the local tensor/collapsed coordinate at the physical points.
StdExpansion3D(const StdExpansion3D &T)=default
The base class for all shapes.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
@ P
Monomial polynomials .
LibUtilities::BasisKey EvaluateTriFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
LibUtilities::BasisKey EvaluateQuadFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
std::shared_ptr< StdExpansion3D > StdExpansion3DSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr