35 #include <boost/core/ignore_unused.hpp>
47 StdSegExp::StdSegExp()
84 bool returnval =
false;
114 int nquad0 =
m_base[0]->GetNumPoints();
145 boost::ignore_unused(out_d1, out_d2);
153 boost::ignore_unused(dir);
154 ASSERTL1(dir == 0,
"input dir is out of range");
164 boost::ignore_unused(out_d1, out_d2);
173 boost::ignore_unused(dir);
174 ASSERTL1(dir == 0,
"input dir is out of range");
205 int nquad =
m_base[0]->GetNumPoints();
207 if (
m_base[0]->Collocation())
215 (
m_base[0]->GetBdata()).get(), nquad, &inarray[0], 1, 0.0,
224 int n_coeffs = inarray.size();
231 int nmodes0 =
m_base[0]->GetNumModes();
246 Vmath::Vcopy(numMin, tmp = coeff, 1, tmp2 = coeff_tmp, 1);
272 if (
m_base[0]->Collocation())
287 out = (*matsys) * in;
295 if (
m_base[0]->Collocation())
324 ASSERTL0(
false,
"This type of FwdTrans is not defined for this "
328 fill(outarray.get(), outarray.get() +
m_ncoeffs, 0.0);
352 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, 1.0,
353 &(matsys->GetPtr())[0], nInteriorDofs,
354 tmp1.get() + offset, 1, 0.0,
355 outarray.get() + offset, 1);
401 boost::ignore_unused(coll_check);
403 int nquad =
m_base[0]->GetNumPoints();
452 boost::ignore_unused(dir);
453 ASSERTL1(dir == 0,
"input dir is out of range");
461 int nquad =
m_base[0]->GetNumPoints();
466 if (multiplybyweights)
471 0.0, outarray.get(), 1);
476 1, 0.0, outarray.get(), 1);
497 int nquad =
m_base[0]->GetNumPoints();
501 "calling argument mode is larger than total expansion order");
509 return StdExpansion::BaryEvaluateBasis<0>(coords[0], mode);
516 boost::ignore_unused(mkey);
518 int nquad =
m_base[0]->GetNumPoints();
534 int nquad =
m_base[0]->GetNumPoints();
556 int nq =
m_base[0]->GetNumPoints();
557 int nmodes =
m_base[0]->GetNumModes();
571 OrthoExp.
FwdTrans(array, orthocoeffs);
574 for (
int j = 0; j < nmodes; ++j)
580 exp(-(j - nmodes) * (j - nmodes) /
581 ((
NekDouble)((j - cutoff + 1) * (j - cutoff + 1)))));
585 orthocoeffs[j] *= 0.0;
590 OrthoExp.
BwdTrans(orthocoeffs, array);
599 int nq =
m_base[0]->GetNumPoints();
600 int nmodes =
m_base[0]->GetNumModes();
609 int Pcut = cutoff *
P;
613 OrthoExp.
FwdTrans(array, orthocoeffs);
617 for (
int j = 0; j < nmodes; ++j)
623 fac = pow(fac, exponent);
624 orthocoeffs[j] *= exp(-alpha * fac);
629 OrthoExp.
BwdTrans(orthocoeffs, array);
637 int nquad0 =
m_base[0]->GetNumPoints();
641 Vmath::Vmul(nquad0, inarray.get(), 1, w0.get(), 1, outarray.get(), 1);
648 boost::ignore_unused(coords_1, coords_2);
668 boost::ignore_unused(i);
674 boost::ignore_unused(i);
680 boost::ignore_unused(i);
695 const std::vector<unsigned int> &nummodes,
int &modes_offset)
697 int nmodes = nummodes[modes_offset];
716 int nq =
m_base[0]->GetNumPoints();
729 for (
int i = 0; i < neq; ++i)
731 coords[0] = -1.0 + 2 * i / (
NekDouble)(neq - 1);
732 I =
m_base[0]->GetI(coords);
733 Vmath::Vcopy(nq, I->GetRawPtr(), 1, Mat->GetRawPtr() + i, neq);
746 (*Mat) = Imass * Iprod;
753 if (mattype ==
eMass)
786 int nummodes =
m_base[0]->GetNumModes();
796 outarray[1] = nummodes - 1;
803 ASSERTL0(0,
"Mapping array is not defined for this expansion");
836 ASSERTL0(0,
"Mapping array is not defined for this expansion");
843 boost::ignore_unused(useCoeffPacking);
844 ASSERTL0((localVertexId == 0) || (localVertexId == 1),
846 "must be between 0 or 1");
848 int localDOF = localVertexId;
851 (localVertexId == 1))
853 localDOF =
m_base[0]->GetNumModes() - 1;
861 boost::ignore_unused(standard);
862 int np =
m_base[0]->GetNumPoints();
866 for (
int i = 0; i < np - 1; ++i)
880 int order0 =
m_base[0]->GetNumModes();
882 ASSERTL0(traceid < 2,
"eid must be between 0 and 1");
884 if (maparray.size() != 1)
893 maparray[0] = (traceid == 0) ? 0 : 1;
898 maparray[0] = (traceid == 0) ? 0 : order0 - 1;
911 boost::ignore_unused(orient,
P, Q);
915 if (signarray.size() != 1)
931 boost::ignore_unused(eid, orient,
P, Q);
932 if (maparray.size() != 1)
939 if (signarray.size() != 1)
#define ASSERTL0(condition, msg)
#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.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Evaluate the derivative at the physical quadrature points given by inarray and return in outarray.
The base class for all shapes.
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
int NumBndryCoeffs(void) const
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int GetVertexMap(const int localVertexId, bool useCoeffPacking=false)
DNekMatSharedPtr CreateGeneralMatrix(const StdMatrixKey &mkey)
this function generates the mass matrix
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space.
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space.
LibUtilities::NekManager< StdMatrixKey, DNekBlkMat, StdMatrixKey::opLess > m_stdStaticCondMatrixManager
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
MatrixType GetMatrixType() const
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
Class representing a segment element in reference space All interface of this class sits in StdExpans...
virtual int v_GetTraceIntNcoeffs(const int i) const final override
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Inner product of inarray over region with respect to the expansion basis (this)->m_base[0] and return...
virtual int v_NumDGBndryCoeffs() const override
virtual int v_GetTraceNumPoints(const int i) const final override
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) final override
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey) override
void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true) override
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray) override
virtual LibUtilities::ShapeType v_DetShapeType() const override
Return Shape of region, using ShapeType enum list. i.e. Segment.
virtual int v_GetNverts() const final override
virtual int v_NumBndryCoeffs() const override
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
virtual void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi) override
virtual void v_GetTraceCoeffMap(const unsigned int traceid, Array< OneD, unsigned int > &maparray) override
Get the map of the coefficient location to teh local trace coefficients.
void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Forward transform from physical quadrature space stored in inarray and evaluate the expansion coeffic...
StdSegExp()
defult constructor
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray) override
void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray) override
Evaluate the derivative at the physical quadrature points given by inarray and return in outarray.
virtual void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true) override
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_0, Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2) override
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrate the physical point list inarray over region and return the value.
virtual int v_GetTraceNcoeffs(const int i) const final override
virtual ~StdSegExp() override
Destructor.
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false) override
virtual void v_ExponentialFilter(Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff) override
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey) override
void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
virtual void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Backward transform from coefficient space given in inarray and evaluate at the physical quadrature po...
virtual int v_GetNtraces() const final override
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray) override
void v_GetTraceToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation edgeOrient, int P, int Q) override
void v_GetElmtTraceToTraceMap(const unsigned int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation edgeOrient, int P, int Q) override
void v_StdPhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray) override
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta) override
virtual bool v_IsBoundaryInteriorExpansion() const override
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset) override
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey) override
void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
static void Dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A[m x n].
static void Dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Copy x to y.
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.
int getNumberOfCoefficients(int Na)
void InterpCoeff1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eModified_B
Principle Modified Functions .
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points.
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eChebyshev
Chebyshev Polynomials.
@ eModified_A
Principle Modified Functions .
@ eFourier
Fourier Expansion .
@ ePhysInterpToEquiSpaced
The above copyright notice and this permission notice shall be included.
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.
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
void Zero(int n, T *x, const int incx)
Zero vector.
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.