50 : StdExpansion(Ba.GetNumModes() * Bb.GetNumModes(), 2, Ba, Bb),
51 StdExpansion2D(Ba.GetNumModes() * Bb.GetNumModes(), Ba, Bb),
55 m_staticCondMatrixManager(
std::bind(&
Expansion::CreateStaticCondMatrix,
56 this,
std::placeholders::_1))
61 : StdExpansion(T), StdExpansion2D(T), StdQuadExp(T),
Expansion(T),
63 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
71 if ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()))
78 int npoints[2] = {
m_base[0]->GetNumPoints(),
m_base[1]->GetNumPoints()};
79 int nmodes[2] = {
m_base[0]->GetNumModes(),
m_base[1]->GetNumModes()};
81 fill(outarray.data(), outarray.data() +
m_ncoeffs, 0.0);
83 if (nmodes[0] == 1 && nmodes[1] == 1)
85 outarray[0] = inarray[0];
91 for (i = 0; i < 4; i++)
97 for (i = 0; i < npoints[0]; i++)
99 physEdge[0][i] = inarray[i];
100 physEdge[2][i] = inarray[npoints[0] * (npoints[1] - 1) + i];
103 for (i = 0; i < npoints[1]; i++)
105 physEdge[1][i] = inarray[npoints[0] - 1 + i * npoints[0]];
106 physEdge[3][i] = inarray[i * npoints[0]];
110 for (i = 0; i < 4; i++)
120 for (i = 0; i < 4; i++)
122 segexp[i % 2]->FwdTransBndConstrained(physEdge[i], coeffEdge[i]);
125 for (j = 0; j < nmodes[i % 2]; j++)
128 outarray[mapArray[j]] =
sign * coeffEdge[i][j];
133 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
135 if (nInteriorDofs > 0)
159 for (i = 0; i < nInteriorDofs; i++)
161 rhs[i] = tmp1[mapArray[i]];
164 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, matsys->Scale(),
165 &((matsys->GetOwnedMatrix())->GetPtr())[0],
166 nInteriorDofs, rhs.data(), 1, 0.0, result.data(), 1);
168 for (i = 0; i < nInteriorDofs; i++)
170 outarray[mapArray[i]] = result[i];
180 ASSERTL1((dir == 0) || (dir == 1) || (dir == 2),
"Invalid direction.");
182 "Invalid direction.");
184 int nquad0 =
m_base[0]->GetNumPoints();
185 int nquad1 =
m_base[1]->GetNumPoints();
186 int nqtot = nquad0 * nquad1;
202 tmp3, jac, Deformed,
false,
203 m_base[1]->Collocation());
206 outarray, jac, Deformed,
m_base[0]->Collocation(),
216 ASSERTL1((dir == 0) || (dir == 1) || (dir == 2),
"Invalid direction.");
218 "Invalid direction.");
220 int nqtot =
m_base[0]->GetNumPoints() *
m_base[1]->GetNumPoints();
229 Vmath::Vmul(nqtot, &df[2 * dir][0], 1, inarray.data(), 1, tmp1.data(),
231 Vmath::Vmul(nqtot, &df[2 * dir + 1][0], 1, inarray.data(), 1,
236 Vmath::Smul(nqtot, df[2 * dir][0], inarray.data(), 1, tmp1.data(), 1);
237 Vmath::Smul(nqtot, df[2 * dir + 1][0], inarray.data(), 1, tmp2.data(),
247 int nq =
m_base[0]->GetNumPoints() *
m_base[1]->GetNumPoints();
256 Vmath::Vvtvvtp(nq, &normals[0][0], 1, &Fx[0], 1, &normals[1][0], 1,
257 &Fy[0], 1, &Fn[0], 1);
258 Vmath::Vvtvp(nq, &normals[2][0], 1, &Fz[0], 1, &Fn[0], 1, &Fn[0], 1);
262 Vmath::Svtsvtp(nq, normals[0][0], &Fx[0], 1, normals[1][0], &Fy[0], 1,
264 Vmath::Svtvp(nq, normals[2][0], &Fz[0], 1, &Fn[0], 1, &Fn[0], 1);
286 m_base[0]->GetPointsKey());
288 m_base[1]->GetPointsKey());
306 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[1] <= 1.0 && Lcoords[1] >= -1.0 &&
308 "Local coordinates are not in region [-1,1]");
320 std::array<NekDouble, 3> &firstOrderDerivs)
325 return StdQuadExp::v_PhysEvalFirstDeriv(Lcoord, inarray, firstOrderDerivs);
342 Vmath::Reverse(EdgeExp->GetNumPoints(0), &outarray[0], 1, &outarray[0],
351 int nquad0 =
m_base[0]->GetNumPoints();
352 int nquad1 =
m_base[1]->GetNumPoints();
361 Vmath::Vcopy(nquad0, &(inarray[0]), 1, &(outarray[0]), 1);
364 Vmath::Vcopy(nquad1, &(inarray[0]) + (nquad0 - 1), nquad0,
368 Vmath::Vcopy(nquad0, &(inarray[0]) + nquad0 * (nquad1 - 1), 1,
372 Vmath::Vcopy(nquad1, &(inarray[0]), nquad0, &(outarray[0]), 1);
375 ASSERTL0(
false,
"edge value (< 3) is out of range");
385 if (
m_base[edge % 2]->GetPointsKey() !=
386 EdgeExp->GetBasis(0)->GetPointsKey())
393 EdgeExp->GetBasis(0)->GetPointsKey(), outarray);
408 int nq0 =
m_base[0]->GetNumPoints();
409 int nq1 =
m_base[1]->GetNumPoints();
423 for (i = 0; i < nq0; i++)
426 nq1, mat_gauss->GetOwnedMatrix()->GetPtr().data(), 1,
433 for (i = 0; i < nq1; i++)
436 nq0, mat_gauss->GetOwnedMatrix()->GetPtr().data(), 1,
437 &inarray[i * nq0], 1);
443 for (i = 0; i < nq0; i++)
446 nq1, mat_gauss->GetOwnedMatrix()->GetPtr().data(), 1,
453 for (i = 0; i < nq1; i++)
456 nq0, mat_gauss->GetOwnedMatrix()->GetPtr().data(), 1,
457 &inarray[i * nq0], 1);
462 ASSERTL0(
false,
"edge value (< 3) is out of range");
469 int nquad0 =
m_base[0]->GetNumPoints();
470 int nquad1 =
m_base[1]->GetNumPoints();
477 for (
int i = 0; i < nquad0; ++i)
484 for (
int i = 0; i < nquad1; ++i)
486 outarray[i] = (nquad0 - 1) + i * nquad0;
491 for (
int i = 0; i < nquad0; ++i)
493 outarray[i] = i + nquad0 * (nquad1 - 1);
498 for (
int i = 0; i < nquad1; ++i)
500 outarray[i] = i * nquad0;
504 ASSERTL0(
false,
"edge value (< 3) is out of range");
513 int nquad0 =
m_base[0]->GetNumPoints();
514 int nquad1 =
m_base[1]->GetNumPoints();
539 for (i = 0; i < nquad0; ++i)
542 j[i] *
sqrt(g1[i] * g1[i] + g3[i] * g3[i]);
546 Vmath::Vcopy(nquad1, &(df[0][0]) + (nquad0 - 1), nquad0,
549 Vmath::Vcopy(nquad1, &(df[2][0]) + (nquad0 - 1), nquad0,
555 for (i = 0; i < nquad1; ++i)
558 j[i] *
sqrt(g0[i] * g0[i] + g2[i] * g2[i]);
563 Vmath::Vcopy(nquad0, &(df[1][0]) + (nquad0 * (nquad1 - 1)),
566 Vmath::Vcopy(nquad0, &(df[3][0]) + (nquad0 * (nquad1 - 1)),
569 Vmath::Vcopy(nquad0, &(jac[0]) + (nquad0 * (nquad1 - 1)), 1,
572 for (i = 0; i < nquad0; ++i)
575 j[i] *
sqrt(g1[i] * g1[i] + g3[i] * g3[i]);
584 for (i = 0; i < nquad1; ++i)
587 j[i] *
sqrt(g0[i] * g0[i] + g2[i] * g2[i]);
591 ASSERTL0(
false,
"edge value (< 3) is out of range");
597 int nqtot = nquad0 * nquad1;
618 for (i = 0; i < nquad0; ++i)
620 outarray[i] =
sqrt(g1_edge[i] * g1_edge[i] +
621 g3_edge[i] * g3_edge[i]);
633 for (i = 0; i < nquad1; ++i)
635 outarray[i] =
sqrt(g0_edge[i] * g0_edge[i] +
636 g2_edge[i] * g2_edge[i]);
649 for (i = 0; i < nquad0; ++i)
651 outarray[i] =
sqrt(g1_edge[i] * g1_edge[i] +
652 g3_edge[i] * g3_edge[i]);
666 for (i = 0; i < nquad1; ++i)
668 outarray[i] =
sqrt(g0_edge[i] * g0_edge[i] +
669 g2_edge[i] * g2_edge[i]);
676 ASSERTL0(
false,
"edge value (< 3) is out of range");
688 for (i = 0; i < nquad0; ++i)
690 outarray[i] = jac[0] *
sqrt(df[1][0] * df[1][0] +
691 df[3][0] * df[3][0]);
695 for (i = 0; i < nquad1; ++i)
697 outarray[i] = jac[0] *
sqrt(df[0][0] * df[0][0] +
698 df[2][0] * df[2][0]);
702 for (i = 0; i < nquad0; ++i)
704 outarray[i] = jac[0] *
sqrt(df[1][0] * df[1][0] +
705 df[3][0] * df[3][0]);
709 for (i = 0; i < nquad1; ++i)
711 outarray[i] = jac[0] *
sqrt(df[0][0] * df[0][0] +
712 df[2][0] * df[2][0]);
716 ASSERTL0(
false,
"edge value (< 3) is out of range");
728 for (i = 0; i < ptsKeys.size(); ++i)
751 for (i = 0; i < vCoordDim; ++i)
770 for (i = 0; i < vCoordDim; ++i)
776 for (i = 0; i < vCoordDim; ++i)
782 for (i = 0; i < vCoordDim; ++i)
788 for (i = 0; i < vCoordDim; ++i)
794 ASSERTL0(
false,
"edge is out of range (edge < 4)");
799 for (i = 0; i < vCoordDim; ++i)
801 fac += normal[i][0] * normal[i][0];
803 fac = 1.0 /
sqrt(fac);
807 for (i = 0; i < vCoordDim; ++i)
816 int nquad0 = ptsKeys[0].GetNumPoints();
817 int nquad1 = ptsKeys[1].GetNumPoints();
835 for (j = 0; j < nquad0; ++j)
838 for (i = 0; i < vCoordDim; ++i)
840 normals[i * nquad0 + j] =
841 -df[2 * i + 1][j] * edgejac[j];
844 from_key = ptsKeys[0];
847 for (j = 0; j < nquad1; ++j)
849 edgejac[j] = jac[nquad0 * j + nquad0 - 1];
850 for (i = 0; i < vCoordDim; ++i)
852 normals[i * nquad1 + j] =
853 df[2 * i][nquad0 * j + nquad0 - 1] * edgejac[j];
856 from_key = ptsKeys[1];
859 for (j = 0; j < nquad0; ++j)
861 edgejac[j] = jac[nquad0 * (nquad1 - 1) + j];
862 for (i = 0; i < vCoordDim; ++i)
864 normals[i * nquad0 + j] =
865 (df[2 * i + 1][nquad0 * (nquad1 - 1) + j]) *
869 from_key = ptsKeys[0];
872 for (j = 0; j < nquad1; ++j)
874 edgejac[j] = jac[nquad0 * j];
875 for (i = 0; i < vCoordDim; ++i)
877 normals[i * nquad1 + j] =
878 -df[2 * i][nquad0 * j] * edgejac[j];
881 from_key = ptsKeys[1];
884 ASSERTL0(
false,
"edge is out of range (edge < 3)");
889 int nqtot = nquad0 * nquad1;
896 for (j = 0; j < nquad0; ++j)
898 for (i = 0; i < vCoordDim; ++i)
900 Vmath::Vmul(nqtot, &(df[2 * i + 1][0]), 1, &jac[0],
901 1, &(tmp_gmat[0]), 1);
904 normals[i * nquad0 + j] = -tmp_gmat_edge[j];
907 from_key = ptsKeys[0];
910 for (j = 0; j < nquad1; ++j)
912 for (i = 0; i < vCoordDim; ++i)
918 normals[i * nquad1 + j] = tmp_gmat_edge[j];
921 from_key = ptsKeys[1];
924 for (j = 0; j < nquad0; ++j)
926 for (i = 0; i < vCoordDim; ++i)
928 Vmath::Vmul(nqtot, &(df[2 * i + 1][0]), 1, &jac[0],
929 1, &(tmp_gmat[0]), 1);
932 normals[i * nquad0 + j] = tmp_gmat_edge[j];
935 from_key = ptsKeys[0];
938 for (j = 0; j < nquad1; ++j)
940 for (i = 0; i < vCoordDim; ++i)
946 normals[i * nquad1 + j] = -tmp_gmat_edge[j];
949 from_key = ptsKeys[1];
952 ASSERTL0(
false,
"edge is out of range (edge < 3)");
968 Vmath::Vmul(nqe, work, 1, normal[i], 1, normal[i], 1);
975 Vmath::Vvtvp(nqe, normal[i], 1, normal[i], 1, work, 1, work, 1);
985 Vmath::Vmul(nqe, normal[i], 1, work, 1, normal[i], 1);
990 for (i = 0; i < vCoordDim; ++i)
1001 const NekDouble *data,
const std::vector<unsigned int> &nummodes,
1003 std::vector<LibUtilities::BasisType> &fromType)
1005 int data_order0 = nummodes[mode_offset];
1006 int fillorder0 = std::min(
m_base[0]->GetNumModes(), data_order0);
1008 int data_order1 = nummodes[mode_offset + 1];
1009 int order1 =
m_base[1]->GetNumModes();
1010 int fillorder1 =
min(order1, data_order1);
1021 m_base[0]->GetPointsKey()),
1023 m_base[1]->GetPointsKey()));
1025 m_base[1]->GetBasisKey());
1047 "Extraction routine not set up for this basis");
1050 for (i = 0; i < fillorder0; ++i)
1052 Vmath::Vcopy(fillorder1, data + cnt, 1, coeffs + cnt1, 1);
1086 ASSERTL0(
false,
"basis is either not set up or not hierarchicial");
1110 returnval = StdQuadExp::v_GenMatrix(mkey);
1122 return tmp->GetStdMatrix(mkey);
1149 StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
1164 StdExpansion::LaplacianMatrixOp_MatFree(k1, k2, inarray, outarray, mkey);
1172 StdExpansion::WeakDerivMatrixOp_MatFree(i, inarray, outarray, mkey);
1179 StdExpansion::WeakDirectionalDerivMatrixOp_MatFree(inarray, outarray, mkey);
1186 StdExpansion::MassLevelCurvatureMatrixOp_MatFree(inarray, outarray, mkey);
1200 int n_coeffs = inarray.size();
1206 int nmodes0 =
m_base[0]->GetNumModes();
1207 int nmodes1 =
m_base[1]->GetNumModes();
1208 int numMax = nmodes0;
1226 for (
int i = 0; i < numMin + 1; ++i)
1228 Vmath::Vcopy(numMin, tmp = coeff + cnt, 1, tmp2 = coeff_tmp + cnt, 1);
1245 int nquad0 =
m_base[0]->GetNumPoints();
1246 int nquad1 =
m_base[1]->GetNumPoints();
1247 int nqtot = nquad0 * nquad1;
1248 int nmodes0 =
m_base[0]->GetNumModes();
1249 int nmodes1 =
m_base[1]->GetNumModes();
1253 ASSERTL1(wsp.size() >= 3 * wspsize,
"Workspace is of insufficient size.");
1277 Vmath::Vvtvvtp(nqtot, &metric00[0], 1, &wsp1[0], 1, &metric01[0], 1,
1278 &wsp2[0], 1, &wsp0[0], 1);
1279 Vmath::Vvtvvtp(nqtot, &metric01[0], 1, &wsp1[0], 1, &metric11[0], 1,
1280 &wsp2[0], 1, &wsp2[0], 1);
1288 m_base[1]->Collocation());
1290 m_base[1]->Collocation(),
false);
1302 const unsigned int dim = 2;
1310 for (
unsigned int i = 0; i < dim; ++i)
1312 for (
unsigned int j = i; j < dim; ++j)
1350 StdQuadExp::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 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
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
StdRegions::Orientation v_GetTraceOrient(int edge) override
DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
void v_GetLocTracePhysVals(const int edge, const StdRegions::StdExpansionSharedPtr &EdgeExp, const NekDouble *inarray, Array< OneD, NekDouble > &outarray) override
DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
void v_HelmholtzMatrixOp(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
void GetEdgeInterpVals(const int edge, const NekDouble *inarray, Array< OneD, NekDouble > &outarray)
void v_ComputeLaplacianMetric() override
void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp) override
void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray) 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_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_GetTracePhysVals(const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient) override
void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_DropLocMatrix(const MatrixKey &mkey) override
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
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_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
void v_ComputeTraceNormal(const int edge) override
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey) override
void v_FwdTransBndConstrained(const Array< OneD, 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_GetTracePhysMap(const int edge, Array< OneD, int > &outarray) override
void v_GetTraceQFactors(const int edge, 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
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 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.
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)
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
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].
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 ...
void InterpCoeff2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, 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
@ eGaussGaussLegendre
1D Gauss-Gauss-Legendre quadrature points
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points.
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ 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< StdQuadExp > StdQuadExpSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
@ eInvLaplacianWithUnityMean
std::map< ConstFactorType, NekDouble > ConstFactorMap
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
T Dot(int n, const T *w, const T *x)
dot product
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)