48 : StdExpansion(LibUtilities::StdTriData::getNumberOfCoefficients(
49 Ba.GetNumModes(), (Bb.GetNumModes())),
51 StdExpansion2D(LibUtilities::StdTriData::getNumberOfCoefficients(
52 Ba.GetNumModes(), (Bb.GetNumModes())),
57 m_staticCondMatrixManager(
std::bind(&
Expansion::CreateStaticCondMatrix,
58 this,
std::placeholders::_1))
63 : StdExpansion(T), StdExpansion2D(T), StdTriExp(T),
Expansion(T),
65 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
75 int nmodes[2] = {
m_base[0]->GetNumModes(),
m_base[1]->GetNumModes()};
77 fill(outarray.data(), outarray.data() +
m_ncoeffs, 0.0);
79 if (nmodes[0] == 1 && nmodes[1] == 1)
81 outarray[0] = inarray[0];
87 for (i = 0; i < 3; i++)
95 for (i = 0; i < npoints[0]; i++)
97 physEdge[0][i] = inarray[i];
101 for (i = 0; i < npoints[1]; i++)
103 physEdge[1][i] = inarray[npoints[0] - 1 + i * npoints[0]];
104 physEdge[2][i] = inarray[i * npoints[0]];
113 for (i = 1; i < 3; i++)
121 for (i = 1; i < 3; i++)
127 m_base[0]->GetPointsKey(), physEdge[i]);
129 npoints[1] = npoints[0];
136 for (i = 0; i < 3; i++)
138 segexp[i]->FwdTransBndConstrained(physEdge[i], coeffEdge[i]);
143 for (j = 0; j < nmodes[i != 0]; j++)
146 outarray[mapArray[j]] =
sign * coeffEdge[i][j];
151 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
153 if (nInteriorDofs > 0)
177 for (i = 0; i < nInteriorDofs; i++)
179 rhs[i] = tmp1[mapArray[i]];
182 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, matsys->Scale(),
183 &((matsys->GetOwnedMatrix())->GetPtr())[0], nInteriorDofs,
184 rhs.data(), 1, 0.0, result.data(), 1);
186 for (i = 0; i < nInteriorDofs; i++)
188 outarray[mapArray[i]] = result[i];
197 int nquad0 =
m_base[0]->GetNumPoints();
198 int nquad1 =
m_base[1]->GetNumPoints();
199 int nqtot = nquad0 * nquad1;
215 tmp3, jac, Deformed);
218 outarray, jac, Deformed);
227 ASSERTL1((dir == 0) || (dir == 1) || (dir == 2),
"Invalid direction.");
229 "Invalid direction.");
231 int nquad0 =
m_base[0]->GetNumPoints();
232 int nquad1 =
m_base[1]->GetNumPoints();
233 int nqtot = nquad0 * nquad1;
234 int nmodes0 =
m_base[0]->GetNumModes();
247 m_base[1]->GetBasisKey());
252 m_base[0]->GetBasisKey());
255 for (
int i = 0; i < nquad1; ++i)
257 Vmath::Smul(nquad0, gfac0[i], &inarray[0] + i * nquad0, 1,
258 &tmp0[0] + i * nquad0, 1);
261 for (
int i = 0; i < nquad1; ++i)
263 Vmath::Vmul(nquad0, &gfac1[0], 1, &tmp0[0] + i * nquad0, 1,
264 &tmp1[0] + i * nquad0, 1);
269 Vmath::Vmul(nqtot, &df[2 * dir][0], 1, &tmp0[0], 1, &tmp0[0], 1);
270 Vmath::Vmul(nqtot, &df[2 * dir + 1][0], 1, &tmp1[0], 1, &tmp1[0], 1);
271 Vmath::Vmul(nqtot, &df[2 * dir + 1][0], 1, &inarray[0], 1, &tmp2[0], 1);
275 Vmath::Smul(nqtot, df[2 * dir][0], tmp0, 1, tmp0, 1);
276 Vmath::Smul(nqtot, df[2 * dir + 1][0], tmp1, 1, tmp1, 1);
277 Vmath::Smul(nqtot, df[2 * dir + 1][0], inarray, 1, tmp2, 1);
289 int nquad0 =
m_base[0]->GetNumPoints();
290 int nquad1 =
m_base[1]->GetNumPoints();
291 int nqtot = nquad0 * nquad1;
302 m_base[1]->GetBasisKey());
307 m_base[0]->GetBasisKey());
310 for (i = 0; i < nquad1; ++i)
312 Vmath::Smul(nquad0, gfac0[i], &inarray[0] + i * nquad0, 1,
313 &tmp0[0] + i * nquad0, 1);
315 for (i = 0; i < nquad1; ++i)
317 Vmath::Vmul(nquad0, &gfac1[0], 1, &tmp0[0] + i * nquad0, 1,
318 &tmp1[0] + i * nquad0, 1);
325 Vmath::Vmul(nqtot, &dfdir[0][0], 1, &tmp0[0], 1, &tmp0[0], 1);
326 Vmath::Vmul(nqtot, &dfdir[1][0], 1, &tmp1[0], 1, &tmp1[0], 1);
327 Vmath::Vmul(nqtot, &dfdir[1][0], 1, &inarray[0], 1, &tmp2[0], 1);
329 Vmath::Vadd(nqtot, &tmp0[0], 1, &tmp1[0], 1, &tmp1[0], 1);
335 tmp3, jac, Deformed);
338 outarray, jac, Deformed);
348 int nq =
m_base[0]->GetNumPoints() *
m_base[1]->GetNumPoints();
357 Vmath::Vvtvvtp(nq, &normals[0][0], 1, &Fx[0], 1, &normals[1][0], 1,
358 &Fy[0], 1, &Fn[0], 1);
359 Vmath::Vvtvp(nq, &normals[2][0], 1, &Fz[0], 1, &Fn[0], 1, &Fn[0], 1);
363 Vmath::Svtsvtp(nq, normals[0][0], &Fx[0], 1, normals[1][0], &Fy[0], 1,
365 Vmath::Svtvp(nq, normals[2][0], &Fz[0], 1, &Fn[0], 1, &Fn[0], 1);
388 m_base[0]->GetPointsKey());
390 m_base[1]->GetPointsKey());
401 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[1] <= 1.0 && Lcoords[1] >= -1.0 &&
403 "Local coordinates are not in region [-1,1]");
423 std::array<NekDouble, 3> &firstOrderDerivs)
428 return StdTriExp::v_PhysEvalFirstDeriv(Lcoord, inarray, firstOrderDerivs);
445 Vmath::Reverse(EdgeExp->GetNumPoints(0), &outarray[0], 1, &outarray[0],
454 int nquad0 =
m_base[0]->GetNumPoints();
455 int nquad1 =
m_base[1]->GetNumPoints();
462 Vmath::Vcopy(nquad0, &(inarray[0]), 1, &(outarray[0]), 1);
466 Vmath::Vcopy(nquad1, &(inarray[0]) + (nquad0 - 1), nquad0,
471 Vmath::Vcopy(nquad1, &(inarray[0]), nquad0, &(outarray[0]), 1);
475 ASSERTL0(
false,
"edge value (< 3) is out of range");
479 ASSERTL1(EdgeExp->GetBasis(0)->GetPointsType() ==
481 "Edge expansion should be GLL");
484 if (
m_base[edge ? 1 : 0]->GetPointsKey() !=
485 EdgeExp->GetBasis(0)->GetPointsKey())
492 EdgeExp->GetBasis(0)->GetPointsKey(), outarray);
497 [[maybe_unused]]
const int edge,
500 ASSERTL0(
false,
"Routine not implemented for triangular elements");
505 int nquad0 =
m_base[0]->GetNumPoints();
506 int nquad1 =
m_base[1]->GetNumPoints();
513 for (
int i = 0; i < nquad0; ++i)
520 for (
int i = 0; i < nquad1; ++i)
522 outarray[i] = (nquad0 - 1) + i * nquad0;
527 for (
int i = 0; i < nquad1; ++i)
529 outarray[i] = i * nquad0;
533 ASSERTL0(
false,
"edge value (< 3) is out of range");
542 for (i = 0; i < ptsKeys.size(); ++i)
566 for (i = 0; i < dim; ++i)
593 Vmath::Fill(nqe, df[2 * i + 1][0] + df[2 * i][0], normal[i],
604 ASSERTL0(
false,
"Edge is out of range (edge < 3)");
611 fac += normal[i][0] * normal[i][0];
613 fac = 1.0 /
sqrt(fac);
626 int nquad0 = ptsKeys[0].GetNumPoints();
627 int nquad1 = ptsKeys[1].GetNumPoints();
640 for (j = 0; j < nquad0; ++j)
645 normals[i * nquad0 + j] =
646 -df[2 * i + 1][j] * edgejac[j];
649 from_key = ptsKeys[0];
652 for (j = 0; j < nquad1; ++j)
654 edgejac[j] = jac[nquad0 * j + nquad0 - 1];
657 normals[i * nquad1 + j] =
658 (df[2 * i][nquad0 * j + nquad0 - 1] +
659 df[2 * i + 1][nquad0 * j + nquad0 - 1]) *
663 from_key = ptsKeys[1];
666 for (j = 0; j < nquad1; ++j)
668 edgejac[j] = jac[nquad0 * j];
671 normals[i * nquad1 + j] =
672 -df[2 * i][nquad0 * j] * edgejac[j];
675 from_key = ptsKeys[1];
678 ASSERTL0(
false,
"edge is out of range (edge < 3)");
693 Vmath::Vmul(nqe, work, 1, normal[i], 1, normal[i], 1);
700 Vmath::Vvtvp(nqe, normal[i], 1, normal[i], 1, work, 1, work, 1);
710 Vmath::Vmul(nqe, normal[i], 1, work, 1, normal[i], 1);
727 const NekDouble *data,
const std::vector<unsigned int> &nummodes,
728 const int mode_offset,
NekDouble *coeffs,
729 [[maybe_unused]] std::vector<LibUtilities::BasisType> &fromType)
731 int data_order0 = nummodes[mode_offset];
732 int fillorder0 =
min(
m_base[0]->GetNumModes(), data_order0);
733 int data_order1 = nummodes[mode_offset + 1];
734 int order1 =
m_base[1]->GetNumModes();
735 int fillorder1 =
min(order1, data_order1);
748 "Extraction routine not set up for this basis");
751 for (i = 0; i < fillorder0; ++i)
753 Vmath::Vcopy(fillorder1 - i, &data[cnt], 1, &coeffs[cnt1], 1);
754 cnt += data_order1 - i;
760 ASSERTL0(
false,
"basis is either not set up or not hierarchicial");
784 returnval = StdTriExp::v_GenMatrix(mkey);
798 return tmp->GetStdMatrix(mkey);
825 StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
840 StdExpansion::LaplacianMatrixOp_MatFree(k1, k2, inarray, outarray, mkey);
848 StdExpansion::WeakDerivMatrixOp_MatFree(i, inarray, outarray, mkey);
855 StdExpansion::WeakDirectionalDerivMatrixOp_MatFree(inarray, outarray, mkey);
862 StdExpansion::MassLevelCurvatureMatrixOp_MatFree(inarray, outarray, mkey);
881 int nquad0 =
m_base[0]->GetNumPoints();
882 int nquad1 =
m_base[1]->GetNumPoints();
883 int nqtot = nquad0 * nquad1;
884 int nmodes0 =
m_base[0]->GetNumModes();
885 int nmodes1 =
m_base[1]->GetNumModes();
889 ASSERTL1(wsp.size() >= 3 * wspsize,
"Workspace is of insufficient size.");
913 Vmath::Vvtvvtp(nqtot, &metric00[0], 1, &wsp1[0], 1, &metric01[0], 1,
914 &wsp2[0], 1, &wsp0[0], 1);
915 Vmath::Vvtvvtp(nqtot, &metric01[0], 1, &wsp1[0], 1, &metric11[0], 1,
916 &wsp2[0], 1, &wsp2[0], 1);
937 const unsigned int dim = 2;
946 for (i = 0; i < dim; ++i)
948 for (j = i; j < dim; ++j)
954 const unsigned int nquad0 =
m_base[0]->GetNumPoints();
955 const unsigned int nquad1 =
m_base[1]->GetNumPoints();
960 m_base[1]->GetBasisKey());
962 for (i = 0; i < nquad1; i++)
964 Blas::Dscal(nquad0, gfac0[i], &dEta_dXi[0][0] + i * nquad0, 1);
965 Blas::Dscal(nquad0, gfac0[i], &dEta_dXi[1][0] + i * nquad0, 1);
970 m_base[0]->GetBasisKey());
972 for (i = 0; i < nquad0; i++)
974 Blas::Dscal(nquad1, gfac1[i], &dEta_dXi[1][0] + i, nquad0);
981 Vmath::Smul(nqtot, df[0][0], &dEta_dXi[0][0], 1, &tmp[0], 1);
982 Vmath::Svtvp(nqtot, df[1][0], &dEta_dXi[1][0], 1, &tmp[0], 1, &tmp[0],
990 Vmath::Smul(nqtot, df[2][0], &dEta_dXi[0][0], 1, &tmp[0], 1);
991 Vmath::Svtvp(nqtot, df[3][0], &dEta_dXi[1][0], 1, &tmp[0], 1, &tmp[0],
1003 Vmath::Smul(nqtot, df[4][0], &dEta_dXi[0][0], 1, &tmp[0], 1);
1004 Vmath::Svtvp(nqtot, df[5][0], &dEta_dXi[1][0], 1, &tmp[0], 1,
1015 NekDouble g2 = df[1][0] * df[1][0] + df[3][0] * df[3][0];
1018 g2 += df[5][0] * df[5][0];
1025 Vmath::Vmul(nqtot, &df[0][0], 1, &dEta_dXi[0][0], 1, &tmp[0], 1);
1026 Vmath::Vvtvp(nqtot, &df[1][0], 1, &dEta_dXi[1][0], 1, &tmp[0], 1,
1036 Vmath::Vmul(nqtot, &df[2][0], 1, &dEta_dXi[0][0], 1, &tmp[0], 1);
1037 Vmath::Vvtvp(nqtot, &df[3][0], 1, &dEta_dXi[1][0], 1, &tmp[0], 1,
1052 Vmath::Vmul(nqtot, &df[4][0], 1, &dEta_dXi[0][0], 1, &tmp[0], 1);
1053 Vmath::Vvtvp(nqtot, &df[5][0], 1, &dEta_dXi[1][0], 1, &tmp[0], 1,
1085 int n_coeffs = inarray.size();
1086 int nquad0 =
m_base[0]->GetNumPoints();
1087 int nquad1 =
m_base[1]->GetNumPoints();
1088 int nqtot = nquad0 * nquad1;
1089 int nmodes0 =
m_base[0]->GetNumModes();
1090 int nmodes1 =
m_base[1]->GetNumModes();
1091 int numMin2 = nmodes0, i;
1120 m_TriExp->BwdTrans(inarray, phys_tmp);
1121 m_OrthoTriExp->FwdTrans(phys_tmp, coeff);
1123 for (i = 0; i < n_coeffs; i++)
1128 numMin += numMin2 - 1;
1133 m_OrthoTriExp->BwdTrans(coeff, phys_tmp);
1134 m_TriExp->FwdTrans(phys_tmp, outarray);
1158 StdTriExp::v_SVVLaplacianFilter(array, mkey);
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define sign(a, b)
return the sign(b)*a
Describes the specification for a Basis.
int GetNumPoints() const
Return points order at which basis is defined.
PointsKey GetPointsKey() const
Return distribution of points.
Defines a specification for a set of points.
size_t GetNumPoints() const
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
SpatialDomains::Geometry2D * GetGeom2D() const
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculates the inner product of a given function f with the different modes of the expansion.
std::map< int, NormalVector > m_traceNormals
std::map< int, Array< OneD, NekDouble > > m_elmtBndNormDirElmtLen
the element length in each element boundary(Vertex, edge or face) normal direction calculated based o...
SpatialDomains::Geometry * GetGeom() const
ExpansionSharedPtr GetLeftAdjacentElementExp() const
void ComputeLaplacianMetric()
SpatialDomains::Geometry * m_geom
void ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
int GetLeftAdjacentElementTrace() const
StdRegions::Orientation GetTraceOrient(int trace)
SpatialDomains::GeomFactorsUniquePtr m_geomFactors
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray) override
void v_DropLocMatrix(const MatrixKey &mkey) override
void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp) override
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
void v_GetTracePhysMap(const int edge, Array< OneD, int > &outarray) override
DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
void v_IProductWRTDirectionalDerivBase(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords) override
DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
StdRegions::Orientation v_GetTraceOrient(int edge) override
TriExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, SpatialDomains::Geometry2D *geom)
Constructor using BasisKey class for quadrature points and order definition.
void v_ComputeTraceNormal(const int edge) override
void v_GetTracePhysVals(const int edge, const StdRegions::StdExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient) override
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
void v_GetTraceQFactors(const int edge, Array< OneD, NekDouble > &outarray) override
void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_GetLocTracePhysVals(const int edge, const StdRegions::StdExpansionSharedPtr &EdgeExp, const NekDouble *inarray, Array< OneD, NekDouble > &outarray) override
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType) override
void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey) override
void v_NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, const Array< OneD, const NekDouble > &Fz, Array< OneD, NekDouble > &outarray) override
void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_ComputeLaplacianMetric() override
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
NekDouble GetCoord(const int i, const Array< OneD, const NekDouble > &Lcoord)
Given local collapsed coordinate Lcoord, return the value of physical coordinate in direction i.
NekDouble GetLocCoords(const Array< OneD, const NekDouble > &coords, Array< OneD, NekDouble > &Lcoords)
Determine the local collapsed coordinates that correspond to a given Cartesian coordinate for this ge...
int GetCoordim() const
Return the coordinate dimension of this object (i.e. the dimension of the space in which this object ...
void FillGeom()
Populate the coordinate mapping Geometry::m_coeffs information from any children geometry elements.
StdRegions::Orientation GetEorient(const int i) const
Returns the orientation of edge i with respect to the ordering of edges in the standard element.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray_d0, Array< OneD, NekDouble > &outarray_d1)
Calculate the 2D derivative in the local tensor/collapsed coordinate at the physical points.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
void HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
int NumBndryCoeffs(void) const
const LibUtilities::PointsKeyVector GetPointsKeys() const
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, Array< OneD, NekDouble > &outarray)
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...
void LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void GetTraceToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards, int P=-1, int Q=-1)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
Array< OneD, const NekDouble > GetStdFac(const StdFacKey &mkey)
const LibUtilities::BasisKey GetTraceBasisKey(const int i, int k=-1, bool UseGLL=false) const
This function returns the basis key belonging to the i-th trace.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
MatrixType GetMatrixType() const
void v_IProductWRTBaseKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const Array< OneD, NekDouble > &jac, const bool Deformed, const bool CollDir0=false, const bool CollDir1=false) override
Inner product of inarray over region with respect to the expansion basis (this)->m_base[0] and return...
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 = alpha A x plus beta y where A[m x n].
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
void Interp1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
this function interpolates a 1D function evaluated at the quadrature points of the basis fbasis0 to ...
std::vector< PointsKey > PointsKeyVector
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eModified_B
Principle Modified Functions .
@ eOrtho_A
Principle Orthogonal Functions .
@ eOrtho_B
Principle Orthogonal Functions .
@ eModified_A
Principle Modified Functions .
std::shared_ptr< SegExp > SegExpSharedPtr
GeomType
Indicates the type of element geometry.
@ eRegular
Geometry is straight-sided with constant geometric factors.
@ eMovingRegular
Currently unused.
@ eDeformed
Geometry is curved or has non-constant factors.
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
@ eInvLaplacianWithUnityMean
std::shared_ptr< StdTriExp > StdTriExpSharedPtr
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
Svtsvtp (scalar times vector plus scalar times vector):
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 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 Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/x.
void Vdiv(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 Zero(int n, T *x, const int incx)
Zero vector.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Reverse(int n, const T *x, const int incx, T *y, const int incy)
void Vvtvvtp(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtp (vector times vector plus vector times 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.
scalarT< T > max(scalarT< T > lhs, scalarT< T > rhs)
scalarT< T > min(scalarT< T > lhs, scalarT< T > rhs)
scalarT< T > sqrt(scalarT< T > in)