43 :
StdExpansion(LibUtilities::StdTriData::getNumberOfCoefficients(
44 Ba.GetNumModes(), Bb.GetNumModes()),
47 Ba.GetNumModes(), Bb.GetNumModes()),
51 "order in 'a' direction is higher than order "
61 int nquad1 =
m_base[1]->GetNumPoints();
70 case LibUtilities::eGaussRadauMAlpha1Beta0:
79 for (i = 0; i < nquad1; ++i)
81 w1_tmp[i] = 0.5 * (1 - z1[i]) * w1[i];
112 int nquad0 =
m_base[0]->GetNumPoints();
113 int nquad1 =
m_base[1]->GetNumPoints();
123 if (out_d0.size() > 0)
127 for (i = 0; i < nquad1; ++i)
129 Blas::Dscal(nquad0, wsp[i], &out_d0[0] + i * nquad0, 1);
133 if (out_d1.size() > 0)
139 for (i = 0; i < nquad1; ++i)
141 Vmath::Vvtvp(nquad0, &wsp[0], 1, &out_d0[0] + i * nquad0, 1,
142 &out_d1[0] + i * nquad0, 1,
143 &out_d1[0] + i * nquad0, 1);
147 else if (out_d1.size() > 0)
152 for (i = 0; i < nquad1; ++i)
154 Blas::Dscal(nquad0, wsp[i], &diff0[0] + i * nquad0, 1);
160 for (i = 0; i < nquad1; ++i)
162 Vmath::Vvtvp(nquad0, &wsp[0], 1, &diff0[0] + i * nquad0, 1,
163 &out_d1[0] + i * nquad0, 1, &out_d1[0] + i * nquad0,
187 ASSERTL1(
false,
"input dir is out of range");
220 m_base[0]->GetNumModes());
231 [[maybe_unused]]
bool doCheckCollDir0,
232 [[maybe_unused]]
bool doCheckCollDir1)
236 int nquad0 =
m_base[0]->GetNumPoints();
237 int nquad1 =
m_base[1]->GetNumPoints();
238 int nmodes0 =
m_base[0]->GetNumModes();
239 int nmodes1 =
m_base[1]->GetNumModes();
241 ASSERTL1(wsp.size() >= nquad1 * nmodes0,
242 "Workspace size is not sufficient");
245 "Basis[1] is not of general tensor type");
247 for (i = mode = 0; i < nmodes0; ++i)
249 Blas::Dgemv(
'N', nquad1, nmodes1 - i, 1.0, base1.data() + mode * nquad1,
250 nquad1, &inarray[0] + mode, 1, 0.0, &wsp[0] + i * nquad1,
258 Blas::Daxpy(nquad1, inarray[1], base1.data() + nquad1, 1,
259 &wsp[0] + nquad1, 1);
262 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nmodes0, 1.0, base0.data(), nquad0,
263 &wsp[0], nquad1, 0.0, &outarray[0], nquad0);
279 out = (*matsys) * in;
287 int npoints[2] = {
m_base[0]->GetNumPoints(),
m_base[1]->GetNumPoints()};
288 int nmodes[2] = {
m_base[0]->GetNumModes(),
m_base[1]->GetNumModes()};
290 fill(outarray.data(), outarray.data() +
m_ncoeffs, 0.0);
294 for (i = 0; i < 3; i++)
300 for (i = 0; i < npoints[0]; i++)
302 physEdge[0][i] = inarray[i];
305 for (i = 0; i < npoints[1]; i++)
307 physEdge[1][i] = inarray[npoints[0] - 1 + i * npoints[0]];
309 inarray[(npoints[1] - 1) * npoints[0] - i * npoints[0]];
314 m_base[0]->GetBasisKey()),
316 m_base[1]->GetBasisKey())};
322 for (i = 0; i < 3; i++)
324 segexp[i != 0]->FwdTransBndConstrained(physEdge[i], coeffEdge[i]);
327 for (j = 0; j < nmodes[i != 0]; j++)
330 outarray[mapArray[j]] =
sign * coeffEdge[i][j];
350 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
357 for (i = 0; i < nInteriorDofs; i++)
359 rhs[i] = tmp1[mapArray[i]];
362 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, 1.0, &(matsys->GetPtr())[0],
363 nInteriorDofs, rhs.data(), 1, 0.0, result.data(), 1);
365 for (i = 0; i < nInteriorDofs; i++)
367 outarray[mapArray[i]] = result[i];
423 int nquad0 =
m_base[0]->GetNumPoints();
424 int nquad1 =
m_base[1]->GetNumPoints();
425 int order0 =
m_base[0]->GetNumModes();
427 if (multiplybyweights)
435 m_base[1]->GetBdata(), tmp, outarray, wsp);
441 m_base[1]->GetBdata(), inarray, outarray,
451 [[maybe_unused]]
bool doCheckCollDir0,
452 [[maybe_unused]]
bool doCheckCollDir1)
456 int nquad0 =
m_base[0]->GetNumPoints();
457 int nquad1 =
m_base[1]->GetNumPoints();
458 int nmodes0 =
m_base[0]->GetNumModes();
459 int nmodes1 =
m_base[1]->GetNumModes();
461 ASSERTL1(wsp.size() >= nquad1 * nmodes0,
462 "Workspace size is not sufficient");
464 Blas::Dgemm(
'T',
'N', nquad1, nmodes0, nquad0, 1.0, inarray.data(), nquad0,
465 base0.data(), nquad0, 0.0, wsp.data(), nquad1);
468 for (mode = i = 0; i < nmodes0; ++i)
470 Blas::Dgemv(
'T', nquad1, nmodes1 - i, 1.0, base1.data() + mode * nquad1,
471 nquad1, wsp.data() + i * nquad1, 1, 0.0,
472 outarray.data() + mode, 1);
479 outarray[1] +=
Blas::Ddot(nquad1, base1.data() + nquad1, 1,
480 wsp.data() + nquad1, 1);
496 int nquad0 =
m_base[0]->GetNumPoints();
497 int nquad1 =
m_base[1]->GetNumPoints();
498 int nqtot = nquad0 * nquad1;
499 int nmodes0 =
m_base[0]->GetNumModes();
508 for (i = 0; i < nquad1; ++i)
510 gfac0[i] = 2.0 / (1 - z1[i]);
513 for (i = 0; i < nquad1; ++i)
515 Vmath::Smul(nquad0, gfac0[i], &inarray[0] + i * nquad0, 1,
516 &tmp0[0] + i * nquad0, 1);
526 m_base[1]->GetBdata(), tmp0, outarray,
535 for (i = 0; i < nquad0; ++i)
537 gfac0[i] = 0.5 * (1 + z0[i]);
540 for (i = 0; i < nquad1; ++i)
542 Vmath::Vmul(nquad0, &gfac0[0], 1, &tmp0[0] + i * nquad0, 1,
543 &tmp0[0] + i * nquad0, 1);
547 m_base[1]->GetBdata(), tmp0, tmp3,
552 m_base[1]->GetDbdata(), tmp0, outarray,
560 ASSERTL1(
false,
"input dir is out of range");
585 eta[0] = 2. * (1. + xi[0]) / d1 - 1.0;
592 xi[0] = (1.0 + eta[0]) * (1.0 - eta[1]) * 0.5 - 1.0;
599 int nquad0 =
m_base[0]->GetNumPoints();
600 int nquad1 =
m_base[1]->GetNumPoints();
601 int order0 =
m_base[0]->GetNumModes();
602 int order1 =
m_base[1]->GetNumModes();
608 "total expansion order");
611 for (i = 0; i < order0; ++i, m += order1 - i)
627 for (i = 0; i < nquad1; ++i)
630 1, &outarray[0] + i * nquad0, 1);
634 for (i = 0; i < nquad0; ++i)
637 &outarray[0] + i, nquad0, &outarray[0] + i, nquad0);
649 const int nm1 =
m_base[1]->GetNumModes();
650 const double c = 1 + 2 * nm1;
651 const int mode0 = floor(0.5 * (c -
sqrt(c * c - 8 * mode)));
656 return StdExpansion::BaryEvaluateBasis<1>(coll[1], 1);
660 return StdExpansion::BaryEvaluateBasis<0>(coll[0], mode0) *
661 StdExpansion::BaryEvaluateBasis<1>(coll[1], mode);
668 std::array<NekDouble, 3> &firstOrderDerivs)
675 if ((1 - coll[1]) < 1e-5)
679 PhysDeriv(inarray, EphysDeriv0, EphysDeriv1);
682 I[0] =
GetBase()[0]->GetI(coll);
683 I[1] =
GetBase()[1]->GetI(coll + 1);
697 temp = firstOrderDerivs[0];
700 firstOrderDerivs[0] = firstOrderDerivs[0] * fac0;
703 NekDouble fac1 = fac0 * (coll[0] + 1) / 2;
706 firstOrderDerivs[1] += fac1 * temp;
729 "BasisType is not a boundary interior form");
731 "BasisType is not a boundary interior form");
739 "BasisType is not a boundary interior form");
741 "BasisType is not a boundary interior form");
748 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
762 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
776 ASSERTL2((i >= 0) && (i <= 2),
"edge id is out of range");
789 const std::vector<unsigned int> &nummodes,
int &modes_offset)
792 nummodes[modes_offset], nummodes[modes_offset + 1]);
808 for (i = 0; i < nq1; ++i)
810 for (j = 0; j < nq0; ++j)
812 coords_0[i * nq0 + j] = (1 + z0[j]) * (1 - z1[i]) / 2.0 - 1.0;
814 Vmath::Fill(nq0, z1[i], &coords_1[0] + i * nq0, 1);
825 const int i, [[maybe_unused]]
const int j,
826 [[maybe_unused]]
bool UseGLL)
const
828 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
843 return m_base[dir]->GetBasisKey();
849 "Unexpected points distribution " +
852 " in StdTriExp::v_GetTraceBasisKey");
865 m_base[dir]->GetNumModes(),
866 m_base[dir]->GetPointsKey());
879 m_base[dir]->GetNumModes(),
883 case LibUtilities::eGaussRadauMAlpha1Beta0:
893 m_base[dir]->GetNumModes(),
916 m_base[dir]->GetNumModes(),
930 m_base[dir]->GetNumModes(),
937 "Unexpected points distribution " +
940 " in StdTriExp::v_GetTraceBasisKey");
953 m_base[dir]->GetNumModes(),
954 m_base[dir]->GetPointsKey());
960 "Unexpected points distribution " +
963 " in StdTriExp::v_GetTraceBasisKey");
976 m_base[dir]->GetNumModes(),
977 m_base[dir]->GetPointsKey());
990 m_base[dir]->GetNumModes(),
994 case LibUtilities::eGaussRadauMAlpha1Beta0:
1004 m_base[dir]->GetNumModes(),
1011 "Unexpected points distribution " +
1014 " in StdTriExp::v_GetTraceBasisKey");
1022 "Information not available to set edge key");
1036 "Mapping not defined for this type of basis");
1039 if (useCoeffPacking ==
true)
1041 switch (localVertexId)
1055 localDOF =
m_base[1]->GetNumModes();
1060 ASSERTL0(
false,
"eid must be between 0 and 2");
1067 switch (localVertexId)
1076 localDOF =
m_base[1]->GetNumModes();
1086 ASSERTL0(
false,
"eid must be between 0 and 2");
1099 "Expansion not of a proper type");
1103 int nummodes0, nummodes1;
1110 nummodes0 =
m_base[0]->GetNumModes();
1111 nummodes1 =
m_base[1]->GetNumModes();
1113 startvalue = 2 * nummodes1;
1115 for (i = 0; i < nummodes0 - 2; i++)
1117 for (j = 0; j < nummodes1 - 3 - i; j++)
1119 outarray[cnt++] = startvalue + j;
1121 startvalue += nummodes1 - 2 - i;
1129 "Expansion not of expected type");
1132 int nummodes0, nummodes1;
1140 nummodes0 =
m_base[0]->GetNumModes();
1141 nummodes1 =
m_base[1]->GetNumModes();
1143 value = 2 * nummodes1 - 1;
1144 for (i = 0; i < value; i++)
1150 for (i = 0; i < nummodes0 - 2; i++)
1152 outarray[cnt++] = value;
1153 value += nummodes1 - 2 - i;
1163 "Mapping not defined for this type of basis");
1165 ASSERTL1(eid < 3,
"eid must be between 0 and 2");
1168 int order0 =
m_base[0]->GetNumModes();
1169 int order1 =
m_base[1]->GetNumModes();
1170 int numModes = (eid == 0) ? order0 : order1;
1172 if (maparray.size() != numModes)
1182 for (i = 0; i < numModes; cnt += order1 - i, ++i)
1190 maparray[0] = order1;
1192 for (i = 2; i < numModes; i++)
1194 maparray[i] = order1 - 1 + i;
1200 for (i = 0; i < numModes; i++)
1207 ASSERTL0(
false,
"eid must be between 0 and 2");
1218 "Mapping not defined for this type of basis");
1220 const int nummodes1 =
m_base[1]->GetNumModes();
1223 if (maparray.size() != nEdgeIntCoeffs)
1228 if (signarray.size() != nEdgeIntCoeffs)
1234 fill(signarray.data(), signarray.data() + nEdgeIntCoeffs, 1);
1241 int cnt = 2 * nummodes1 - 1;
1242 for (i = 0; i < nEdgeIntCoeffs; cnt += nummodes1 - 2 - i, ++i)
1250 for (i = 0; i < nEdgeIntCoeffs; i++)
1252 maparray[i] = nummodes1 + 1 + i;
1258 for (i = 0; i < nEdgeIntCoeffs; i++)
1260 maparray[i] = 2 + i;
1266 ASSERTL0(
false,
"eid must be between 0 and 2");
1273 for (i = 1; i < nEdgeIntCoeffs; i += 2)
1297 nq0 =
m_base[0]->GetNumPoints();
1298 nq1 =
m_base[1]->GetNumPoints();
1319 for (
int i = 0; i < nq; ++i)
1321 for (
int j = 0; j < nq - i; ++j, ++cnt)
1324 coords[cnt][0] = -1.0 + 2 * j / (
NekDouble)(nq - 1);
1325 coords[cnt][1] = -1.0 + 2 * i / (
NekDouble)(nq - 1);
1329 for (
int i = 0; i < neq; ++i)
1333 I[0] =
m_base[0]->GetI(coll);
1334 I[1] =
m_base[1]->GetI(coll + 1);
1337 for (
int j = 0; j < nq1; ++j)
1343 Mat->GetRawPtr() + j * nq0 * neq + i, neq);
1407 int qa =
m_base[0]->GetNumPoints();
1408 int qb =
m_base[1]->GetNumPoints();
1409 int nmodes_a =
m_base[0]->GetNumModes();
1410 int nmodes_b =
m_base[1]->GetNumModes();
1423 OrthoExp.
FwdTrans(array, orthocoeffs);
1434 for (
int j = 0; j < nmodes_a; ++j)
1436 for (
int k = 0; k < nmodes_b - j; ++k, ++cnt)
1439 pow((1.0 * j) / (nmodes_a - 1), cutoff * nmodes_a),
1440 pow((1.0 * k) / (nmodes_b - 1), cutoff * nmodes_b));
1442 orthocoeffs[cnt] *= (SvvDiffCoeff * fac);
1453 max_ab =
max(max_ab, 0);
1457 for (
int j = 0; j < nmodes_a; ++j)
1459 for (
int k = 0; k < nmodes_b - j; ++k, ++cnt)
1461 int maxjk =
max(j, k);
1464 orthocoeffs[cnt] *= SvvDiffCoeff *
kSVVDGFilter[max_ab][maxjk];
1473 min(nmodes_a, nmodes_b));
1476 int nmodes =
min(nmodes_a, nmodes_b);
1481 for (
int j = 0; j < nmodes_a; ++j)
1483 for (
int k = 0; k < nmodes_b - j; ++k)
1485 if (j + k >= cutoff)
1489 exp(-(j + k - nmodes) * (j + k - nmodes) /
1490 ((
NekDouble)((j + k - cutoff + epsilon) *
1491 (j + k - cutoff + epsilon)))));
1495 orthocoeffs[cnt] *= 0.0;
1503 OrthoExp.
BwdTrans(orthocoeffs, array);
1510 int n_coeffs = inarray.size();
1511 int nquad0 =
m_base[0]->GetNumPoints();
1512 int nquad1 =
m_base[1]->GetNumPoints();
1517 int nqtot = nquad0 * nquad1;
1520 int nmodes0 =
m_base[0]->GetNumModes();
1521 int nmodes1 =
m_base[1]->GetNumModes();
1522 int numMin2 = nmodes0;
1543 m_TriExp->BwdTrans(inarray, phys_tmp);
1544 m_OrthoTriExp->FwdTrans(phys_tmp, coeff);
1546 for (i = 0; i < n_coeffs; i++)
1551 numMin += numMin2 - 1;
1556 m_OrthoTriExp->BwdTrans(coeff, phys_tmp);
1557 m_TriExp->FwdTrans(phys_tmp, outarray);
1569 int nquad0 =
m_base[0]->GetNumPoints();
1570 int nquad1 =
m_base[1]->GetNumPoints();
1577 for (i = 0; i < nquad1; ++i)
1579 Vmath::Vmul(nquad0, inarray.data() + i * nquad0, 1, w0.data(), 1,
1580 outarray.data() + i * nquad0, 1);
1586 case LibUtilities::eGaussRadauMAlpha1Beta0:
1587 for (i = 0; i < nquad1; ++i)
1589 Blas::Dscal(nquad0, 0.5 * w1[i], outarray.data() + i * nquad0,
1595 for (i = 0; i < nquad1; ++i)
1598 outarray.data() + i * nquad0, 1);
1607 int np1 =
m_base[0]->GetNumPoints();
1608 int np2 =
m_base[1]->GetNumPoints();
1609 int np =
max(np1, np2);
1616 for (
int i = 0; i < np - 1; ++i)
1619 for (
int j = 0; j < np - i - 2; ++j)
1621 conn[cnt++] = row + j;
1622 conn[cnt++] = row + j + 1;
1623 conn[cnt++] = rowp1 + j;
1625 conn[cnt++] = rowp1 + j + 1;
1626 conn[cnt++] = rowp1 + j;
1627 conn[cnt++] = row + j + 1;
1630 conn[cnt++] = row + np - i - 2;
1631 conn[cnt++] = row + np - i - 1;
1632 conn[cnt++] = rowp1 + np - i - 2;
#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...
#define sign(a, b)
return the sign(b)*a
Describes the specification for a Basis.
int GetNumModes() const
Returns the order of the 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_d0, Array< OneD, NekDouble > &outarray_d1)
Calculate the 2D derivative in the local tensor/collapsed coordinate at the physical points.
NekDouble BaryTensorDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs)
NekDouble Integral(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &w0, const Array< OneD, const NekDouble > &w1)
void BwdTrans_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0=true, bool doCheckCollDir1=true)
void IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0=true, bool doCheckCollDir1=true)
The base class for all shapes.
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.
void WeakDerivMatrixOp_MatFree(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
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 LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
Convert local cartesian coordinate xi into local collapsed coordinates eta.
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
const Array< OneD, const LibUtilities::BasisSharedPtr > & GetBase() const
This function gets the shared point to basis.
DNekMatSharedPtr CreateGeneralMatrix(const StdMatrixKey &mkey)
this function generates the mass matrix
void LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
NekDouble PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
This function evaluates the expansion at a single (arbitrary) point of the domain.
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 BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space.
int GetTraceNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th trace.
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.
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
int GetBasisNumModes(const int dir) const
This function returns the number of expansion modes in the dir direction.
void PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
Array< OneD, LibUtilities::BasisSharedPtr > m_base
void MassMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
MatrixType GetMatrixType() const
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
LibUtilities::ShapeType v_DetShapeType() const final
int v_GetTraceNumPoints(const int i) const override
void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Backward tranform for triangular elements.
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi) override
void v_GetCoords(Array< OneD, NekDouble > &coords_x, Array< OneD, NekDouble > &coords_y, Array< OneD, NekDouble > &coords_z) override
int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset) override
const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int j, bool UseGLL=false) const override
void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true) override
void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray) override
int v_GetNtraces() const final
void v_StdPhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray) override
void v_GetTraceInteriorToElementMap(const int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation edgeOrient=eForwards) override
int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false) override
DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey) override
void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey) override
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculate the inner product of inarray with respect to the basis B=base0[p]*base1[pq] and put into ou...
int v_GetTraceNcoeffs(const int i) const override
void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray) override
Calculate the derivative of the physical points.
void v_GetTraceCoeffMap(const unsigned int traceid, Array< OneD, unsigned int > &maparray) override
void v_BwdTrans_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1) override
bool v_IsBoundaryInteriorExpansion() const override
void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray) override
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
int v_GetTraceIntNcoeffs(const int i) const override
int v_NumDGBndryCoeffs() const override
void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta) override
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) final
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrates the specified function over the domain.
NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Transform a given function from physical quadrature space to coefficient space.
void v_GetInteriorMap(Array< OneD, unsigned int > &outarray) override
int v_GetNverts() const final
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey) override
void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
int v_NumBndryCoeffs() const override
void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true) override
void v_IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1) 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 = 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.
static double Ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: output = .
static void Dgemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
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, int Nb)
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
const std::string kPointsTypeStr[]
@ eGaussRadauMLegendre
1D Gauss-Radau-Legendre quadrature points, pinned at x=-1
@ eGaussLegendreWithMP
1D Gauss-Legendre quadrature points with additional x=-1 and x=1 end points
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eGaussLegendreWithM
1D Gauss-Legendre quadrature points with additional x=-1 point
@ ePolyEvenlySpaced
1D Evenly-spaced points using Lagrange polynomial
@ eModified_B
Principle Modified Functions .
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eOrtho_B
Principle Orthogonal Functions .
@ eModified_A
Principle Modified Functions .
static const NekDouble kNekZeroTol
@ eFactorSVVDGKerDiffCoeff
@ eFactorSVVPowerKerDiffCoeff
const int kSVVDGFiltermodesmin
const int kSVVDGFiltermodesmax
const NekDouble kSVVDGFilter[9][11]
@ ePhysInterpToEquiSpaced
std::shared_ptr< StdTriExp > StdTriExpSharedPtr
std::shared_ptr< StdSegExp > StdSegExpSharedPtr
static Array< OneD, NekDouble > NullNekDouble1DArray
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 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 Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
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)