50 : m_base(numbases), m_elmt_id(0), m_ncoeffs(numcoeffs),
52 std::placeholders::_1),
53 std::string(
"StdExpansionStdMatrix")),
54 m_stdStaticCondMatrixManager(
56 std::placeholders::_1),
57 std::string(
"StdExpansionStdStaticCondMatrix")),
60 std::string(
"StdExpansionStdFac"))
66 "NULL Basis attempting to be used.");
71 "NULL Basis attempting to be used.");
76 "NULL Basis attempting to be used.");
88 m_elmt_id(T.m_elmt_id), m_ncoeffs(T.m_ncoeffs),
89 m_stdMatrixManager(T.m_stdMatrixManager),
90 m_stdStaticCondMatrixManager(T.m_stdStaticCondMatrixManager),
91 m_stdFacManager(T.m_stdFacManager)
140 return (val < 0.0) ? 0.0 :
sqrt(val);
165 for (i = 0; i < coordim; ++i)
168 Vmath::Vvtvp(ntot, wsp_deriv, 1, wsp_deriv, 1, sum, 1, sum, 1);
198 for (i = 0; i < nbdry; ++i)
200 for (j = 0; j < nbdry; ++j)
202 (*A)(i, j) = (*mat)(bmap[i], bmap[j]);
205 for (j = 0; j < nint; ++j)
207 (*B)(i, j) = (*mat)(bmap[i], imap[j]);
211 for (i = 0; i < nint; ++i)
213 for (j = 0; j < nbdry; ++j)
215 (*C)(i, j) = (*mat)(imap[i], bmap[j]);
218 for (j = 0; j < nint; ++j)
220 (*D)(i, j) = (*mat)(imap[i], imap[j]);
229 (*A) = (*A) - (*B) * (*C);
239 returnval->SetBlock(0, 0,
A);
240 returnval->SetBlock(0, 1, B);
241 returnval->SetBlock(1, 0, C);
242 returnval->SetBlock(1, 1, D);
295 tmpout = Bwd_data + i;
318 returnval->GetRawPtr() + i * nq, 1);
333 *returnval = *MatBwdTrans;
346 for (i = 0; i < nq; ++i)
354 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
377 for (i = 0; i < nq; ++i)
385 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
398 for (i = 0; i < nq; ++i)
406 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
419 for (i = 0; i < nq; ++i)
427 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
458 int nummodes =
m_base[0]->GetNumModes();
459 bool equispaced =
true;
460 for (i = 1; i <
m_base.size(); ++i)
462 if (
m_base[i]->GetNumModes() != nummodes)
469 "Currently need to have same num modes in all "
470 "directionmodes to use EquiSpacedToCoeff method");
488 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
506 int nummodes =
m_base[0]->GetNumModes();
507 bool equispaced =
true;
508 for (
int i = 1; i <
m_base.size(); ++i)
510 if (
m_base[i]->GetNumModes() != nummodes)
517 "Currently need to have same num modes in all "
518 "directionmodes to use EquiSpacedToCoeff method");
536 returnval->GetRawPtr() + i *
m_ncoeffs, 1);
592 "This type of matrix, " +
593 static_cast<std::string
>(
595 ", can not be created using a general approach");
608 switch (mkey.m_stdFacType)
612 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
613 m_base[1]->GetPointsKey(),
614 "PointsKey are differrent in CreateStdFac");
617 returnval =
m_base[1]->GetW();
619 int nquad1 =
m_base[1]->GetNumPoints();
622 LibUtilities::eGaussRadauMAlpha1Beta0)
629 for (
int i = 0; i < nquad1; ++i)
631 returnval[i] *= 0.5 * (1 - z1[i]);
638 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
639 m_base[2]->GetPointsKey(),
640 "PointsKey are differrent in CreateStdFac");
643 returnval =
m_base[2]->GetW();
645 int nquad2 =
m_base[2]->GetNumPoints();
652 LibUtilities::eGaussRadauMAlpha1Beta0)
659 for (
int i = 0; i < nquad2; ++i)
661 returnval[i] *= 0.5 * (1 - z2[i]);
670 case LibUtilities::eGaussRadauMAlpha2Beta0:
676 case LibUtilities::eGaussRadauMAlpha1Beta0:
680 for (
int i = 0; i < nquad2; ++i)
682 returnval[i] *= 0.25 * (1 - z2[i]);
689 for (
int i = 0; i < nquad2; ++i)
691 returnval[i] *= 0.25 * (1 - z2[i]) * (1 - z2[i]);
701 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
702 m_base[0]->GetPointsKey(),
703 "PointssKey are differrent in CreateStdFac");
705 int nquad0 =
m_base[0]->GetNumPoints();
710 for (
int i = 0; i < nquad0; ++i)
712 returnval[i] = 0.5 * (1.0 + z0[i]);
718 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
719 m_base[1]->GetPointsKey(),
720 "PointssKey are differrent in CreateStdFac");
722 int nquad1 =
m_base[1]->GetNumPoints();
727 for (
int i = 0; i < nquad1; ++i)
729 returnval[i] = 0.5 * (1.0 + z1[i]);
735 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
736 m_base[1]->GetPointsKey(),
737 "PointssKey are differrent in CreateStdFac");
739 int nquad1 =
m_base[1]->GetNumPoints();
744 for (
int i = 0; i < nquad1; ++i)
746 returnval[i] = 2.0 / (1.0 - z1[i]);
752 ASSERTL1(mkey.m_basisKey.GetPointsKey() ==
753 m_base[2]->GetPointsKey(),
754 "PointssKey are differrent in CreateStdFac");
756 int nquad2 =
m_base[2]->GetNumPoints();
761 for (
int i = 0; i < nquad2; ++i)
763 returnval[i] = 2.0 / (1.0 - z2[i]);
771 return std::make_shared<Array<OneD, const NekDouble>>(returnval);
843 "This matrix does not have an operator");
918 "This matrix does not have an operator");
984 varcoefftypes[k2][k1]))
1053 for (i = 0; i < dim; ++i)
1067 for (i = 0; i < dim; i++)
1069 for (j = 0; j < dim; j++)
1142 for (
auto &x : varcoefftypes)
1150 ASSERTL0(ndir,
"Must define at least one advection velocity");
1152 "Number of constants is larger than coordinate dimensions");
1163 for (i = 0; i < ndir; ++i)
1167 1, tmp_adv, 1, tmp_adv, 1);
1176 bool addDiffusionTerm)
1183 for (
auto &x : varcoefftypes)
1191 ASSERTL0(ndir,
"Must define at least one advection velocity");
1193 "Number of constants is larger than coordinate dimensions");
1205 for (i = 0; i < ndir; ++i)
1209 1, tmp_adv, 1, tmp_adv, 1);
1222 Vmath::Svtvp(totpts, -lambda, tmp, 1, tmp_adv, 1, tmp_adv, 1);
1229 if (addDiffusionTerm)
1261 [[maybe_unused]]
const std::vector<unsigned int> &nummodes,
1262 [[maybe_unused]]
int &modes_offset)
1344 [[maybe_unused]] std::shared_ptr<StdExpansion> FromExp,
1347 [[maybe_unused]]
bool Traspose)
1349 ASSERTL0(
false,
"This function is not valid or not defined");
1353 [[maybe_unused]]
const int i, [[maybe_unused]]
const int k,
1354 [[maybe_unused]]
bool UseGLL)
const
1356 ASSERTL0(
false,
"This function is not valid or not defined");
1361 [[maybe_unused]]
const int i, [[maybe_unused]]
const int j)
const
1363 ASSERTL0(
false,
"This function is not valid or not defined");
1374 ASSERTL0(
false,
"This function has not been defined for this expansion");
1384 [[maybe_unused]]
const int dir,
1448 out = (*matsys) * in;
1481 [[maybe_unused]]
const int dir,
1487 "specific element types");
1500 "specific element types");
1514 [[maybe_unused]]
int mode)
1538 [[maybe_unused]] std::array<NekDouble, 3> &firstOrderDerivs)
1541 "PhysEvaluate first order derivative method does not exist"
1542 " for this shape type: " +
1543 static_cast<std::string
>(
1551 [[maybe_unused]] std::array<NekDouble, 3> &firstOrderDerivs,
1552 [[maybe_unused]] std::array<NekDouble, 6> &secondOrderDerivs)
1555 "PhysEvaluate second order derivative method does not exist"
1556 " for this shape type: " +
1557 static_cast<std::string
>(
1566 "been defined for this shape");
1573 "been defined for this element");
1582 "been defined for this element");
1620 [[maybe_unused]]
bool useCoeffPacking)
1627 [[maybe_unused]]
const int tid,
1630 [[maybe_unused]]
Orientation traceOrient, [[maybe_unused]]
int P,
1631 [[maybe_unused]]
int Q)
1637 [[maybe_unused]]
const unsigned int traceid,
1644 [[maybe_unused]]
const unsigned int tid,
1647 [[maybe_unused]]
Orientation traceOrient, [[maybe_unused]]
int P,
1648 [[maybe_unused]]
int Q)
1654 [[maybe_unused]]
const int tid,
1663 [[maybe_unused]]
int &numModes0,
1664 [[maybe_unused]]
int &numModes1,
1671 [[maybe_unused]]
const int vertex,
1676 "this shape or library");
1691 "Method does not exist for this shape or library");
1716 ASSERTL0(
false,
"This function is not defined in StdExpansion.");
1722 [[maybe_unused]]
const NekDouble exponent,
1723 [[maybe_unused]]
const NekDouble cutoff)
1725 ASSERTL0(
false,
"This function is not defined in StdExpansion.");
1729 [[maybe_unused]]
int numMin,
1733 ASSERTL0(
false,
"This function is not defined in StdExpansion.");
1784 bool addDiffusionTerm)
1815 ASSERTL0(
false,
"Not implemented.");
1859 for (
int i = 0; i <
m_base.size(); ++i)
1861 nqbase =
m_base[i]->GetNumPoints();
1862 np = std::max(np, nqbase);
1882 out = (*intmat) * in;
1889 "GetSimplexEquiSpacedConnectivity not"
1890 " implemented for " +
1891 static_cast<std::string
>(
1898 [[maybe_unused]]
const int nq1, [[maybe_unused]]
bool Forwards)
1901 "Method does not exist for this shape or library");
1921 out = (*intmat) * in;
1935 std::vector<unsigned int> nequivec(3, nequi);
1943 out = (*intmat) * in;
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
Describes the specification for a Basis.
Defines a specification for a set of points.
PointsType GetPointsType() const
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
The base class for all shapes.
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false)
std::shared_ptr< Array< OneD, const NekDouble > > CreateStdFac(const StdFacKey &mkey)
virtual void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi)
virtual ~StdExpansion()
Destructor.
virtual void v_PhysDirectionalDeriv(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &direction, Array< OneD, NekDouble > &outarray)
Physical derivative along a direction vector.
StdExpansion()
Default Constructor.
void EquiSpacedToPhys(const int nequi, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
virtual void v_GetTraceToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards, int P=-1, int Q=-1)
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoord, Array< OneD, NekDouble > &coord)
void GeneralMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void FillMode(const int mode, Array< OneD, NekDouble > &outarray)
This function fills the array outarray with the mode-th mode of the expansion.
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
void PhysInterpToSimplexEquiSpaced(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, int npset=-1)
This function performs an interpolation from the physical space points provided at input into an arra...
void WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void WeakDerivMatrixOp_MatFree(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
DNekBlkMatSharedPtr CreateStdStaticCondMatrix(const StdMatrixKey &mkey)
Create the static condensation of a matrix when using a boundary interior decomposition.
void LaplacianMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
int NumBndryCoeffs(void) const
void MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_0, Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2)
void LinearAdvectionDiffusionReactionMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey, bool addDiffusionTerm=true)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
virtual void v_GetElmtTraceToTraceMap(const unsigned int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards, int P=-1, int Q=-1)
virtual void v_NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, Array< OneD, NekDouble > &outarray)
virtual void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true)
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey)
void WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray)
virtual void v_SetCoeffsToOrientation(StdRegions::Orientation dir, Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
NekDouble Linf(const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &sol=NullNekDouble1DArray)
Function to evaluate the discrete error where is given by the array sol.
virtual NekDouble v_PhysEvalFirstSecondDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs, std::array< NekDouble, 6 > &secondOrderDerivs)
void EquiSpacedToCoeffs(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs a projection/interpolation from the equispaced points sometimes used in post-p...
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual bool v_IsCollocatedBasis() const =0
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
virtual DNekMatSharedPtr v_BuildInverseTransformationMatrix(const DNekScalMatSharedPtr &m_transformationmatrix)
NekDouble L2(const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &sol=NullNekDouble1DArray)
Function to evaluate the discrete error, where is given by the array sol.
virtual void v_GetVertexPhysVals(const int vertex, const Array< OneD, const NekDouble > &inarray, NekDouble &outarray)
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Transform a given function from physical quadrature space to coefficient space.
virtual NekDouble v_PhysEvaluateInterp(const Array< OneD, DNekMatSharedPtr > &I, const Array< OneD, const NekDouble > &physvals)
void LinearAdvectionMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
DNekMatSharedPtr CreateGeneralMatrix(const StdMatrixKey &mkey)
this function generates the mass matrix
virtual void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void PhysInterpToGLL(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, int npset=-1)
virtual void v_GetTraceCoeffMap(const unsigned int traceid, Array< OneD, unsigned int > &maparray)
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
this function calculates the inner product of a given function f with the different modes of the expa...
virtual bool v_IsBoundaryInteriorExpansion() const
virtual void v_MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray)
void LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_ExponentialFilter(Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff)
virtual const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int k, bool UseGLL=false) const
void IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void MassLevelCurvatureMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey)
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space.
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey)
virtual void v_ReOrientTracePhysMap(const StdRegions::Orientation orient, Array< OneD, int > &idmap, const int nq0, const int nq1, bool Forwards)
virtual void v_GetTraceNumModes(const int fid, int &numModes0, int &numModes1, Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2)
virtual void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_PhysInterp(std::shared_ptr< StdExpansion > FromExp, const Array< OneD, const NekDouble > &fromData, Array< OneD, NekDouble > &toData, bool Transpose)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray)
void GenStdMatBwdDeriv(const int dir, DNekMatSharedPtr &mat)
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual const LibUtilities::PointsKey v_GetNodalPointsKey() const
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void LinearAdvectionDiffusionReactionMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey, bool addDiffusionTerm=true)
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
virtual NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode)
virtual void v_GetTraceInteriorToElementMap(const int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eForwards)
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)=0
Calculates the inner product of a given function f with the different modes of the expansion.
void PhysInterpToPoints(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, int npset, MatrixType distrib)
virtual int v_GetCoordim() const
virtual bool v_IsNodalNonTensorialExp()
virtual void v_LinearAdvectionDiffusionReactionMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey, bool addDiffusionTerm=true)
void HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_DropLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
void WeakDirectionalDerivMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
NekDouble H1(const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &sol=NullNekDouble1DArray)
Function to evaluate the discrete error, where is given by the array sol.
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset)
void SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey)
void HelmholtzMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)=0
int GetShapeDimension() const
virtual LibUtilities::PointsKey v_GetTracePointsKey(const int i, const int j) const
Array< OneD, LibUtilities::BasisSharedPtr > m_base
virtual NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs)
virtual void v_LinearAdvectionMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_IProductWRTDirectionalDerivBase(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void LinearAdvectionMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
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.
virtual void v_StdPhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2, Array< OneD, NekDouble > &out_d3)
void MassMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void GeneralMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const LocalRegions::MatrixKey &mkey)
NekDouble Integral(const Array< OneD, const NekDouble > &inarray)
This function integrates the specified function over the domain.
LibUtilities::ShapeType GetShapeType() const
const Array< OneD, const NekDouble > & GetVarFactors(const StdRegions::ConstFactorType &type) const
const VarCoeffMap & GetVarCoeffs() const
MatrixType GetMatrixType() const
bool HasVarCoeff(const StdRegions::VarCoeffType &coeff) const
LibUtilities::PointsType GetNodalPointsType() const
const ConstFactorMap & GetConstFactors() const
const Array< OneD, const NekDouble > & GetVarCoeff(const StdRegions::VarCoeffType &coeff) const
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
const char *const ShapeTypeMap[SIZE_ShapeType]
BasisManagerT & BasisManager(void)
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
constexpr int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset=0)
@ eModified_B
Principle Modified Functions .
@ eOrtho_B
Principle Orthogonal Functions .
static const PointsKey NullPointsKey(0, eNoPointsType)
static VarFactorsMap NullVarFactorsMap
@ eLinearAdvectionReaction
@ eLinearAdvectionDiffusionReaction
@ ePhysInterpToEquiSpaced
const char *const MatrixTypeMap[]
std::map< ConstFactorType, NekDouble > ConstFactorMap
static ConstFactorMap NullConstFactorMap
static VarCoeffMap NullVarCoeffMap
std::shared_ptr< StdMatrixKey > StdMatrixKeySharedPtr
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
static DNekScalBlkMatSharedPtr NullDNekScalBlkMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
static DNekMatSharedPtr NullDNekMatSharedPtr
static Array< OneD, NekDouble > NullNekDouble1DArray
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
std::shared_ptr< DNekMat > DNekMatSharedPtr
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Svtvp (scalar times vector plus vector): z = alpha*x + y.
void Vabs(int n, const T *x, const int incx, T *y, const int incy)
vabs: y = |x|
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Zero(int n, T *x, const int incx)
Zero vector.
T Vamax(int n, const T *x, const int incx)
Return the maximum absolute element in x called vamax to avoid conflict with max.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
scalarT< T > sqrt(scalarT< T > in)