61 : StdExpansion(Ba.GetNumModes() * Bb.GetNumModes() * Bc.GetNumModes(), 3,
63 StdExpansion3D(Ba.GetNumModes() * Bb.GetNumModes() * Bc.GetNumModes(), Ba,
68 m_staticCondMatrixManager(
std::bind(&
Expansion::CreateStaticCondMatrix,
69 this,
std::placeholders::_1))
79 : StdExpansion(T), StdExpansion3D(T), StdHexExp(T),
Expansion(T),
81 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
112 ASSERTL1((dir == 0) || (dir == 1) || (dir == 2),
"Invalid direction.");
114 const int nq0 =
m_base[0]->GetNumPoints();
115 const int nq1 =
m_base[1]->GetNumPoints();
116 const int nq2 =
m_base[2]->GetNumPoints();
117 const int nq = nq0 * nq1 * nq2;
132 const bool CollDir0 =
m_base[0]->Collocation();
133 const bool CollDir1 =
m_base[1]->Collocation();
134 const bool CollDir2 =
m_base[2]->Collocation();
139 m_base[2]->GetBdata(), tmp2, outarray, jac,
140 Deformed,
false, CollDir1, CollDir2);
143 m_base[2]->GetBdata(), tmp3, tmp5, jac, Deformed,
144 CollDir0,
false, CollDir2);
148 m_base[2]->GetDbdata(), tmp4, tmp5, jac, Deformed,
149 CollDir0, CollDir1,
false);
157 ASSERTL1((dir == 0) || (dir == 1) || (dir == 2),
"Invalid direction.");
159 const int nq0 =
m_base[0]->GetNumPoints();
160 const int nq1 =
m_base[1]->GetNumPoints();
161 const int nq2 =
m_base[2]->GetNumPoints();
162 const int nq = nq0 * nq1 * nq2;
176 Vmath::Vmul(nq, &df[3 * dir][0], 1, tmp1.data(), 1, tmp2.data(), 1);
177 Vmath::Vmul(nq, &df[3 * dir + 1][0], 1, tmp1.data(), 1, tmp3.data(), 1);
178 Vmath::Vmul(nq, &df[3 * dir + 2][0], 1, tmp1.data(), 1, tmp4.data(), 1);
182 Vmath::Smul(nq, df[3 * dir][0], tmp1.data(), 1, tmp2.data(), 1);
183 Vmath::Smul(nq, df[3 * dir + 1][0], tmp1.data(), 1, tmp3.data(), 1);
184 Vmath::Smul(nq, df[3 * dir + 2][0], tmp1.data(), 1, tmp4.data(), 1);
200 const int nq0 =
m_base[0]->GetNumPoints();
201 const int nq1 =
m_base[1]->GetNumPoints();
202 const int nq2 =
m_base[2]->GetNumPoints();
203 const int nq = nq0 * nq1 * nq2;
218 const bool CollDir0 =
m_base[0]->Collocation();
219 const bool CollDir1 =
m_base[1]->Collocation();
220 const bool CollDir2 =
m_base[2]->Collocation();
227 Vmath::Vmul(nq, &dfdir[0][0], 1, inarray.data(), 1, tmp2.data(), 1);
228 Vmath::Vmul(nq, &dfdir[1][0], 1, inarray.data(), 1, tmp3.data(), 1);
229 Vmath::Vmul(nq, &dfdir[2][0], 1, inarray.data(), 1, tmp4.data(), 1);
232 m_base[2]->GetBdata(), tmp2, outarray, jac,
233 Deformed,
false, CollDir1, CollDir2);
236 m_base[2]->GetBdata(), tmp3, tmp5, jac, Deformed,
237 CollDir0,
false, CollDir2);
241 m_base[2]->GetDbdata(), tmp4, tmp5, jac, Deformed,
242 CollDir0, CollDir1,
false);
252 std::array<NekDouble, 3> &firstOrderDerivs)
257 return StdHexExp::v_PhysEvalFirstDeriv(Lcoord, inarray, firstOrderDerivs);
264 m_base[2]->GetBasisKey());
270 m_base[0]->GetPointsKey());
272 m_base[1]->GetPointsKey());
274 m_base[2]->GetPointsKey());
292 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[0] <= 1.0 && Lcoords[1] >= -1.0 &&
293 Lcoords[1] <= 1.0 && Lcoords[2] >= -1.0 && Lcoords[2] <= 1.0,
294 "Local coordinates are not in region [-1,1]");
315 const NekDouble *data,
const std::vector<unsigned int> &nummodes,
316 const int mode_offset,
NekDouble *coeffs,
317 std::vector<LibUtilities::BasisType> &fromType)
319 int data_order0 = nummodes[mode_offset];
320 int fillorder0 =
min(
m_base[0]->GetNumModes(), data_order0);
321 int data_order1 = nummodes[mode_offset + 1];
322 int order1 =
m_base[1]->GetNumModes();
323 int fillorder1 =
min(order1, data_order1);
324 int data_order2 = nummodes[mode_offset + 2];
325 int order2 =
m_base[2]->GetNumModes();
326 int fillorder2 =
min(order2, data_order2);
338 m_base[0]->GetPointsKey()),
340 m_base[1]->GetPointsKey()),
342 m_base[2]->GetPointsKey()));
345 m_base[2]->GetBasisKey());
367 "Extraction routine not set up for this basis");
369 "Extraction routine not set up for this basis");
372 for (j = 0; j < fillorder0; ++j)
374 for (i = 0; i < fillorder1; ++i)
376 Vmath::Vcopy(fillorder2, &data[cnt], 1, &coeffs[cnt1], 1);
382 for (i = fillorder1; i < data_order1; ++i)
387 for (i = fillorder1; i < order1; ++i)
412 ASSERTL0(
false,
"basis is either not set up or not "
419 int nquad0 =
m_base[0]->GetNumPoints();
420 int nquad1 =
m_base[1]->GetNumPoints();
421 int nquad2 =
m_base[2]->GetNumPoints();
433 if (outarray.size() != nq0 * nq1)
438 for (
int i = 0; i < nquad0 * nquad1; ++i)
448 if (outarray.size() != nq0 * nq1)
454 for (
int k = 0; k < nquad2; k++)
456 for (
int i = 0; i < nquad0; ++i)
458 outarray[k * nquad0 + i] = nquad0 * nquad1 * k + i;
467 if (outarray.size() != nq0 * nq1)
472 for (
int i = 0; i < nquad1 * nquad2; i++)
474 outarray[i] = nquad0 - 1 + i * nquad0;
482 if (outarray.size() != nq0 * nq1)
487 for (
int k = 0; k < nquad2; k++)
489 for (
int i = 0; i < nquad0; i++)
491 outarray[k * nquad0 + i] =
492 (nquad0 * (nquad1 - 1)) + (k * nquad0 * nquad1) + i;
501 if (outarray.size() != nq0 * nq1)
506 for (
int i = 0; i < nquad1 * nquad2; i++)
508 outarray[i] = i * nquad0;
515 if (outarray.size() != nq0 * nq1)
520 for (
int i = 0; i < nquad0 * nquad1; i++)
522 outarray[i] = nquad0 * nquad1 * (nquad2 - 1) + i;
527 ASSERTL0(
false,
"face value (> 5) is out of range");
538 for (i = 0; i < ptsKeys.size(); ++i)
563 for (i = 0; i < vCoordDim; ++i)
568 size_t nqb = nq_face;
582 for (i = 0; i < vCoordDim; ++i)
584 normal[i][0] = -df[3 * i + 2][0];
588 for (i = 0; i < vCoordDim; ++i)
590 normal[i][0] = -df[3 * i + 1][0];
594 for (i = 0; i < vCoordDim; ++i)
596 normal[i][0] = df[3 * i][0];
600 for (i = 0; i < vCoordDim; ++i)
602 normal[i][0] = df[3 * i + 1][0];
606 for (i = 0; i < vCoordDim; ++i)
608 normal[i][0] = -df[3 * i][0];
612 for (i = 0; i < vCoordDim; ++i)
614 normal[i][0] = df[3 * i + 2][0];
618 ASSERTL0(
false,
"face is out of range (edge < 5)");
623 for (i = 0; i < vCoordDim; ++i)
625 fac += normal[i][0] * normal[i][0];
627 fac = 1.0 /
sqrt(fac);
630 for (i = 0; i < vCoordDim; ++i)
632 Vmath::Fill(nq_face, fac * normal[i][0], normal[i], 1);
639 int nqe0 = ptsKeys[0].GetNumPoints();
640 int nqe1 = ptsKeys[1].GetNumPoints();
641 int nqe2 = ptsKeys[2].GetNumPoints();
642 int nqe01 = nqe0 * nqe1;
643 int nqe02 = nqe0 * nqe2;
644 int nqe12 = nqe1 * nqe2;
647 if (face == 0 || face == 5)
651 else if (face == 1 || face == 3)
672 for (j = 0; j < nqe; ++j)
674 normals[j] = -df[2][j] * jac[j];
675 normals[nqe + j] = -df[5][j] * jac[j];
676 normals[2 * nqe + j] = -df[8][j] * jac[j];
680 points0 = ptsKeys[0];
681 points1 = ptsKeys[1];
684 for (j = 0; j < nqe0; ++j)
686 for (k = 0; k < nqe2; ++k)
688 int idx = j + nqe01 * k;
689 normals[j + k * nqe0] = -df[1][idx] * jac[idx];
690 normals[nqe + j + k * nqe0] = -df[4][idx] * jac[idx];
691 normals[2 * nqe + j + k * nqe0] =
692 -df[7][idx] * jac[idx];
693 faceJac[j + k * nqe0] = jac[idx];
696 points0 = ptsKeys[0];
697 points1 = ptsKeys[2];
700 for (j = 0; j < nqe1; ++j)
702 for (k = 0; k < nqe2; ++k)
704 int idx = nqe0 - 1 + nqe0 * j + nqe01 * k;
705 normals[j + k * nqe1] = df[0][idx] * jac[idx];
706 normals[nqe + j + k * nqe1] = df[3][idx] * jac[idx];
707 normals[2 * nqe + j + k * nqe1] = df[6][idx] * jac[idx];
708 faceJac[j + k * nqe1] = jac[idx];
711 points0 = ptsKeys[1];
712 points1 = ptsKeys[2];
715 for (j = 0; j < nqe0; ++j)
717 for (k = 0; k < nqe2; ++k)
719 int idx = nqe0 * (nqe1 - 1) + j + nqe01 * k;
720 normals[j + k * nqe0] = df[1][idx] * jac[idx];
721 normals[nqe + j + k * nqe0] = df[4][idx] * jac[idx];
722 normals[2 * nqe + j + k * nqe0] = df[7][idx] * jac[idx];
723 faceJac[j + k * nqe0] = jac[idx];
726 points0 = ptsKeys[0];
727 points1 = ptsKeys[2];
730 for (j = 0; j < nqe1; ++j)
732 for (k = 0; k < nqe2; ++k)
734 int idx = j * nqe0 + nqe01 * k;
735 normals[j + k * nqe1] = -df[0][idx] * jac[idx];
736 normals[nqe + j + k * nqe1] = -df[3][idx] * jac[idx];
737 normals[2 * nqe + j + k * nqe1] =
738 -df[6][idx] * jac[idx];
739 faceJac[j + k * nqe1] = jac[idx];
742 points0 = ptsKeys[1];
743 points1 = ptsKeys[2];
746 for (j = 0; j < nqe01; ++j)
748 int idx = j + nqe01 * (nqe2 - 1);
749 normals[j] = df[2][idx] * jac[idx];
750 normals[nqe + j] = df[5][idx] * jac[idx];
751 normals[2 * nqe + j] = df[8][idx] * jac[idx];
752 faceJac[j] = jac[idx];
754 points0 = ptsKeys[0];
755 points1 = ptsKeys[1];
758 ASSERTL0(
false,
"face is out of range (face < 5)");
767 Vmath::Sdiv(nq_face, 1.0, &work[0], 1, &work[0], 1);
775 Vmath::Vmul(nq_face, work, 1, normal[i], 1, normal[i], 1);
782 Vmath::Vvtvp(nq_face, normal[i], 1, normal[i], 1, work, 1, work, 1);
792 Vmath::Vmul(nq_face, normal[i], 1, work, 1, normal[i], 1);
804 StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
819 StdExpansion::LaplacianMatrixOp_MatFree(k1, k2, inarray, outarray, mkey);
827 StdExpansion::WeakDerivMatrixOp_MatFree(i, inarray, outarray, mkey);
834 StdExpansion::WeakDirectionalDerivMatrixOp_MatFree(inarray, outarray, mkey);
841 StdExpansion::MassLevelCurvatureMatrixOp_MatFree(inarray, outarray, mkey);
866 int n_coeffs = inarray.size();
867 int nmodes0 =
m_base[0]->GetNumModes();
868 int nmodes1 =
m_base[1]->GetNumModes();
869 int nmodes2 =
m_base[2]->GetNumModes();
870 int numMax = nmodes0;
898 int cnt = 0, cnt2 = 0;
900 for (
int u = 0; u < numMin + 1; ++u)
902 for (
int i = 0; i < numMin; ++i)
905 tmp2 = coeff_tmp1 + cnt, 1);
911 tmp4 = coeff_tmp2 + cnt2, 1);
913 cnt2 = u * nmodes0 * nmodes1;
941 StdHexExp::v_SVVLaplacianFilter(array, mkey);
966 returnval = StdHexExp::v_GenMatrix(mkey);
981 return tmp->GetStdMatrix(mkey);
1015 int nquad0 =
m_base[0]->GetNumPoints();
1016 int nquad1 =
m_base[1]->GetNumPoints();
1017 int nquad2 =
m_base[2]->GetNumPoints();
1018 int nqtot = nquad0 * nquad1 * nquad2;
1020 ASSERTL1(wsp.size() >= 6 * nqtot,
"Insufficient workspace size.");
1055 Vmath::Vvtvvtp(nqtot, &metric00[0], 1, &wsp0[0], 1, &metric01[0], 1,
1056 &wsp1[0], 1, &wsp3[0], 1);
1057 Vmath::Vvtvp(nqtot, &metric02[0], 1, &wsp2[0], 1, &wsp3[0], 1, &wsp3[0], 1);
1058 Vmath::Vvtvvtp(nqtot, &metric01[0], 1, &wsp0[0], 1, &metric11[0], 1,
1059 &wsp1[0], 1, &wsp4[0], 1);
1060 Vmath::Vvtvp(nqtot, &metric12[0], 1, &wsp2[0], 1, &wsp4[0], 1, &wsp4[0], 1);
1061 Vmath::Vvtvvtp(nqtot, &metric02[0], 1, &wsp0[0], 1, &metric12[0], 1,
1062 &wsp1[0], 1, &wsp5[0], 1);
1063 Vmath::Vvtvp(nqtot, &metric22[0], 1, &wsp2[0], 1, &wsp5[0], 1, &wsp5[0], 1);
1065 const bool CollDir0 =
m_base[0]->Collocation();
1066 const bool CollDir1 =
m_base[1]->Collocation();
1067 const bool CollDir2 =
m_base[2]->Collocation();
1075 false, CollDir1, CollDir2);
1077 CollDir0,
false, CollDir2);
1081 CollDir0, CollDir1,
false);
1090 const unsigned int dim = 3;
1096 for (
unsigned int i = 0; i < dim; ++i)
1098 for (
unsigned int j = i; j < dim; ++j)
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
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.
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
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...
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
SpatialDomains::GeomFactorsUniquePtr m_geomFactors
void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_IProductWRTDirectionalDerivBase(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
HexExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::BasisKey &Bc, SpatialDomains::Geometry3D *geom)
Constructor using BasisKey class for quadrature points and order definition.
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey) override
void v_ComputeTraceNormal(const int face) override
void v_ComputeLaplacianMetric() 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_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp) override
void v_DropLocMatrix(const MatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculates the inner product .
void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords) override
Retrieves the physical coordinates of a given set of reference coordinates.
void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray) override
DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray) override
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) 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.
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.
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
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.
const LibUtilities::PointsKeyVector GetPointsKeys() const
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
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)
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
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
Class representing a hexehedral element in reference space.
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) override
Inner product of inarray over region with respect to the expansion basis (this)->m_base[0] and return...
MatrixType GetMatrixType() const
void Interp3D(const BasisKey &fbasis0, const BasisKey &fbasis1, const BasisKey &fbasis2, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, const BasisKey &tbasis2, Array< OneD, NekDouble > &to)
this function interpolates a 3D function evaluated at the quadrature points of the 3D basis,...
void InterpCoeff3D(const BasisKey &fbasis0, const BasisKey &fbasis1, const BasisKey &fbasis2, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, const BasisKey &tbasis2, Array< OneD, NekDouble > &to)
void Interp2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, Array< OneD, NekDouble > &to)
this function interpolates a 2D function evaluated at the quadrature points of the 2D basis,...
std::vector< PointsKey > PointsKeyVector
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eModified_A
Principle Modified Functions .
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< StdHexExp > StdHexExpSharedPtr
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 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 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 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)
scalarT< T > min(scalarT< T > lhs, scalarT< T > rhs)
scalarT< T > sqrt(scalarT< T > in)