49 :
StdExpansion(Ba.GetNumModes() * Bb.GetNumModes(), 2, Ba, Bb),
102 ASSERTL1(
false,
"input dir is out of range");
123 if (
m_base[0]->Collocation() &&
m_base[1]->Collocation())
126 inarray, 1, outarray, 1);
138 m_base[1]->GetNumModes());
141 outarray, wsp,
true,
true);
159 bool doCheckCollDir0,
bool doCheckCollDir1)
161 int nquad0 =
m_base[0]->GetNumPoints();
162 int nquad1 =
m_base[1]->GetNumPoints();
163 int nmodes0 =
m_base[0]->GetNumModes();
164 int nmodes1 =
m_base[1]->GetNumModes();
166 bool colldir0 = doCheckCollDir0 ? (
m_base[0]->Collocation()) :
false;
167 bool colldir1 = doCheckCollDir1 ? (
m_base[1]->Collocation()) :
false;
169 if (colldir0 && colldir1)
175 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nmodes1, 1.0, &inarray[0], nquad0,
176 base1.data(), nquad1, 0.0, &outarray[0], nquad0);
180 Blas::Dgemm(
'N',
'N', nquad0, nmodes1, nmodes0, 1.0, base0.data(),
181 nquad0, &inarray[0], nmodes0, 0.0, &outarray[0], nquad0);
185 ASSERTL1(wsp.size() >= nquad0 * nmodes1,
186 "Workspace size is not sufficient");
190 Blas::Dgemm(
'N',
'N', nquad0, nmodes1, nmodes0, 1.0, base0.data(),
191 nquad0, &inarray[0], nmodes0, 0.0, &wsp[0], nquad0);
192 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nmodes1, 1.0, &wsp[0], nquad0,
193 base1.data(), nquad1, 0.0, &outarray[0], nquad0);
200 if ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()))
216 out = (*matsys) * in;
224 if ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()))
231 int npoints[2] = {
m_base[0]->GetNumPoints(),
m_base[1]->GetNumPoints()};
232 int nmodes[2] = {
m_base[0]->GetNumModes(),
m_base[1]->GetNumModes()};
234 fill(outarray.data(), outarray.data() +
m_ncoeffs, 0.0);
238 for (i = 0; i < 4; i++)
244 for (i = 0; i < npoints[0]; i++)
246 physEdge[0][i] = inarray[i];
247 physEdge[2][i] = inarray[npoints[0] * npoints[1] - 1 - i];
250 for (i = 0; i < npoints[1]; i++)
252 physEdge[1][i] = inarray[npoints[0] - 1 + i * npoints[0]];
254 inarray[(npoints[1] - 1) * npoints[0] - i * npoints[0]];
259 m_base[0]->GetBasisKey()),
261 m_base[1]->GetBasisKey())};
267 for (i = 0; i < 4; i++)
269 segexp[i % 2]->FwdTransBndConstrained(physEdge[i], coeffEdge[i]);
272 for (j = 0; j < nmodes[i % 2]; j++)
275 outarray[mapArray[j]] =
sign * coeffEdge[i][j];
295 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
302 for (i = 0; i < nInteriorDofs; i++)
304 rhs[i] = tmp1[mapArray[i]];
307 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, 1.0,
308 &(matsys->GetPtr())[0], nInteriorDofs, rhs.data(), 1, 0.0,
311 for (i = 0; i < nInteriorDofs; i++)
313 outarray[mapArray[i]] = result[i];
350 if (
m_base[0]->Collocation() &&
m_base[1]->Collocation())
364 int nquad0 =
m_base[0]->GetNumPoints();
365 int nquad1 =
m_base[1]->GetNumPoints();
366 int order0 =
m_base[0]->GetNumModes();
368 if (multiplybyweights)
376 m_base[1]->GetBdata(), tmp, outarray, wsp,
383 m_base[1]->GetBdata(), inarray, outarray,
399 ASSERTL0((dir == 0) || (dir == 1),
"input dir is out of range");
401 int nquad0 =
m_base[0]->GetNumPoints();
402 int nquad1 =
m_base[1]->GetNumPoints();
403 int nqtot = nquad0 * nquad1;
404 int order0 =
m_base[0]->GetNumModes();
415 m_base[1]->GetDbdata(), tmp, outarray, wsp,
421 m_base[1]->GetBdata(), tmp, outarray, wsp,
441 bool doCheckCollDir0,
bool doCheckCollDir1)
443 int nquad0 =
m_base[0]->GetNumPoints();
444 int nquad1 =
m_base[1]->GetNumPoints();
445 int nmodes0 =
m_base[0]->GetNumModes();
446 int nmodes1 =
m_base[1]->GetNumModes();
448 bool colldir0 = doCheckCollDir0 ? (
m_base[0]->Collocation()) :
false;
449 bool colldir1 = doCheckCollDir1 ? (
m_base[1]->Collocation()) :
false;
451 if (colldir0 && colldir1)
457 Blas::Dgemm(
'N',
'N', nmodes0, nmodes1, nquad1, 1.0, inarray.data(),
458 nmodes0, base1.data(), nquad1, 0.0, outarray.data(),
463 Blas::Dgemm(
'T',
'N', nmodes0, nquad1, nquad0, 1.0, base0.data(),
464 nquad0, inarray.data(), nquad0, 0.0, outarray.data(),
469 ASSERTL1(wsp.size() >= nquad1 * nmodes0,
470 "Workspace size is not sufficient");
473 Blas::Dgemm(
'T',
'N', nmodes0, nquad1, nquad0, 1.0, base0.data(),
474 nquad0, inarray.data(), nquad0, 0.0, wsp.data(), nmodes0);
477 for (
int i = 0; i < nmodes0; ++i)
479 for (
int j = 0; j < nquad1; ++j)
481 wsp[j * nmodes0 + i] =
482 Blas::Ddot(nquad0, base0.data() + i * nquad0, 1,
483 inarray.data() + j * nquad0, 1);
487 Blas::Dgemm(
'N',
'N', nmodes0, nmodes1, nquad1, 1.0, wsp.data(),
488 nmodes0, base1.data(), nquad1, 0.0, outarray.data(),
520 int nquad0 =
m_base[0]->GetNumPoints();
521 int nquad1 =
m_base[1]->GetNumPoints();
524 int btmp0 =
m_base[0]->GetNumModes();
525 int mode0 = mode % btmp0;
526 int mode1 = mode / btmp0;
528 ASSERTL2(mode1 == (
int)floor((1.0 * mode) / btmp0),
529 "Integer Truncation not Equiv to Floor");
532 "calling argument mode is larger than total expansion order");
534 for (i = 0; i < nquad1; ++i)
537 &outarray[0] + i * nquad0, 1);
540 for (i = 0; i < nquad0; ++i)
543 &outarray[0] + i, nquad0, &outarray[0] + i, nquad0);
563 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
565 if ((i == 0) || (i == 2))
577 ASSERTL2((i >= 0) && (i <= 4),
"edge id is out of range");
578 if ((i == 0) || (i == 2))
590 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
592 if ((i == 0) || (i == 2))
603 const int i, [[maybe_unused]]
const int j,
604 [[maybe_unused]]
bool UseGLL)
const
606 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
608 if ((i == 0) || (i == 2))
654 "BasisType is not a boundary interior form");
658 "BasisType is not a boundary interior form");
668 "BasisType is not a boundary interior form");
672 "BasisType is not a boundary interior form");
678 const std::vector<unsigned int> &nummodes,
int &modes_offset)
680 int nmodes = nummodes[modes_offset] * nummodes[modes_offset + 1];
688 bool returnval =
false;
713 for (i = 0; i < nq1; ++i)
715 Blas::Dcopy(nq0, z0.data(), 1, &coords_0[0] + i * nq0, 1);
716 Vmath::Fill(nq0, z1[i], &coords_1[0] + i * nq0, 1);
740 const int nm0 =
m_base[0]->GetNumModes();
741 const int nm1 =
m_base[1]->GetNumModes();
743 return StdExpansion::BaryEvaluateBasis<0>(coords[0], mode % nm1) *
744 StdExpansion::BaryEvaluateBasis<1>(coords[1], mode / nm0);
750 std::array<NekDouble, 3> &firstOrderDerivs)
763 int nummodes0, nummodes1;
764 int value1 = 0, value2 = 0;
770 nummodes0 =
m_base[0]->GetNumModes();
771 nummodes1 =
m_base[1]->GetNumModes();
783 value1 = 2 * nummodes0;
786 ASSERTL0(0,
"Mapping array is not defined for this expansion");
790 for (i = 0; i < value1; i++)
800 value2 = value1 + nummodes0 - 1;
806 ASSERTL0(0,
"Mapping array is not defined for this expansion");
810 for (i = 0; i < nummodes1 - 2; i++)
812 outarray[cnt++] = value1 + i * nummodes0;
813 outarray[cnt++] = value2 + i * nummodes0;
819 for (i = nummodes0 * (nummodes1 - 1); i <
GetNcoeffs(); i++)
830 int nummodes0, nummodes1;
837 nummodes0 =
m_base[0]->GetNumModes();
838 nummodes1 =
m_base[1]->GetNumModes();
846 startvalue = nummodes0;
849 startvalue = 2 * nummodes0;
852 ASSERTL0(0,
"Mapping array is not defined for this expansion");
865 ASSERTL0(0,
"Mapping array is not defined for this expansion");
869 for (i = 0; i < nummodes1 - 2; i++)
871 for (j = 0; j < nummodes0 - 2; j++)
873 outarray[cnt++] = startvalue + j;
875 startvalue += nummodes0;
883 if (useCoeffPacking ==
true)
885 switch (localVertexId)
896 localDOF =
m_base[0]->GetNumModes() - 1;
908 localDOF =
m_base[0]->GetNumModes() *
909 (
m_base[1]->GetNumModes() - 1);
913 localDOF =
m_base[0]->GetNumModes();
922 m_base[0]->GetNumModes() *
m_base[1]->GetNumModes() - 1;
926 localDOF =
m_base[0]->GetNumModes() + 1;
931 ASSERTL0(
false,
"eid must be between 0 and 3");
937 switch (localVertexId)
948 localDOF =
m_base[0]->GetNumModes() - 1;
961 m_base[0]->GetNumModes() *
m_base[1]->GetNumModes() - 1;
965 localDOF =
m_base[0]->GetNumModes() + 1;
973 localDOF =
m_base[0]->GetNumModes() *
974 (
m_base[1]->GetNumModes() - 1);
978 localDOF =
m_base[0]->GetNumModes();
983 ASSERTL0(
false,
"eid must be between 0 and 3");
997 ASSERTL1(traceid < 4,
"traceid must be between 0 and 3");
1000 unsigned int order0 =
m_base[0]->GetNumModes();
1001 unsigned int order1 =
m_base[1]->GetNumModes();
1002 unsigned int numModes = (traceid % 2) ? order1 : order0;
1004 if (maparray.size() != numModes)
1017 for (i = 0; i < numModes; i++)
1025 for (i = 0; i < numModes; i++)
1027 maparray[i] = i * order0 + 1;
1033 for (i = 0; i < numModes; i++)
1035 maparray[i] = order0 + i;
1041 for (i = 0; i < numModes; i++)
1043 maparray[i] = i * order0;
1058 for (i = 0; i < numModes; i++)
1066 for (i = 0; i < numModes; i++)
1068 maparray[i] = (i + 1) * order0 - 1;
1074 for (i = 0; i < numModes; i++)
1076 maparray[i] = order0 * (order1 - 1) + i;
1082 for (i = 0; i < numModes; i++)
1084 maparray[i] = order0 * i;
1094 ASSERTL0(
false,
"Mapping not defined for this type of basis");
1103 const int nummodes0 =
m_base[0]->GetNumModes();
1104 const int nummodes1 =
m_base[1]->GetNumModes();
1108 if (maparray.size() != nEdgeIntCoeffs)
1113 if (signarray.size() != nEdgeIntCoeffs)
1119 fill(signarray.data(), signarray.data() + nEdgeIntCoeffs, 1);
1128 for (i = 0; i < nEdgeIntCoeffs; i++)
1130 maparray[i] = i + 2;
1136 for (i = 0; i < nEdgeIntCoeffs; i++)
1138 maparray[i] = (i + 2) * nummodes0 + 1;
1144 for (i = 0; i < nEdgeIntCoeffs; i++)
1146 maparray[i] = nummodes0 + i + 2;
1152 for (i = 0; i < nEdgeIntCoeffs; i++)
1154 maparray[i] = (i + 2) * nummodes0;
1159 ASSERTL0(
false,
"eid must be between 0 and 3");
1165 for (i = 1; i < nEdgeIntCoeffs; i += 2)
1177 for (i = 0; i < nEdgeIntCoeffs; i++)
1179 maparray[i] = i + 1;
1185 for (i = 0; i < nEdgeIntCoeffs; i++)
1187 maparray[i] = (i + 2) * nummodes0 - 1;
1193 for (i = 0; i < nEdgeIntCoeffs; i++)
1195 maparray[i] = nummodes0 * (nummodes1 - 1) + i + 1;
1201 for (i = 0; i < nEdgeIntCoeffs; i++)
1203 maparray[i] = nummodes0 * (i + 1);
1208 ASSERTL0(
false,
"eid must be between 0 and 3");
1213 reverse(maparray.data(), maparray.data() + nEdgeIntCoeffs);
1218 ASSERTL0(
false,
"Mapping not defined for this type of basis");
1239 int nq0 =
m_base[0]->GetNumPoints();
1240 int nq1 =
m_base[1]->GetNumPoints();
1263 for (i = 0; i < nq; ++i)
1265 for (j = 0; j < nq; ++j, ++cnt)
1268 coords[cnt][0] = -1.0 + 2 * j / (
NekDouble)(nq - 1);
1269 coords[cnt][1] = -1.0 + 2 * i / (
NekDouble)(nq - 1);
1273 for (i = 0; i < neq; ++i)
1277 I[0] =
m_base[0]->GetI(coll);
1278 I[1] =
m_base[1]->GetI(coll + 1);
1281 for (j = 0; j < nq1; ++j)
1287 Mat->GetRawPtr() + j * nq0 * neq + i, neq);
1299 for (i = 0; i < order1; ++i)
1301 (*Mat)(order0 *i + 1, i * order0 + 1) = 1.0;
1307 for (i = 0; i < order0; ++i)
1309 (*Mat)(order0 + i, order0 + i) = 1.0;
1323 (*Mat) = Imass * Iprod;
1331 int dir = (edge + 1) % 2;
1332 int nCoeffs =
m_base[dir]->GetNumModes();
1340 coords[0] = (edge == 0 || edge == 3) ? -1.0 : 1.0;
1347 Vmath::Vcopy(nCoeffs, m_Ix->GetPtr(), 1, Mat->GetPtr(), 1);
1373 int qa =
m_base[0]->GetNumPoints();
1374 int qb =
m_base[1]->GetNumPoints();
1375 int nmodes_a =
m_base[0]->GetNumModes();
1376 int nmodes_b =
m_base[1]->GetNumModes();
1377 int nmodes =
min(nmodes_a, nmodes_b);
1390 OrthoExp.
FwdTrans(array, orthocoeffs);
1400 for (
int j = 0; j < nmodes_a; ++j)
1402 for (
int k = 0; k < nmodes_b; ++k)
1406 pow((1.0 * j) / (nmodes_a - 1), cutoff * nmodes_a),
1407 pow((1.0 * k) / (nmodes_b - 1), cutoff * nmodes_b));
1409 orthocoeffs[j * nmodes_b + k] *= SvvDiffCoeff * fac;
1420 max_ab =
max(max_ab, 0);
1423 for (
int j = 0; j < nmodes_a; ++j)
1425 for (
int k = 0; k < nmodes_b; ++k)
1427 int maxjk =
max(j, k);
1430 orthocoeffs[j * nmodes_b + k] *=
1440 min(nmodes_a, nmodes_b));
1443 for (
int j = 0; j < nmodes_a; ++j)
1445 for (
int k = 0; k < nmodes_b; ++k)
1447 if (j + k >= cutoff)
1449 orthocoeffs[j * nmodes_b + k] *=
1451 exp(-(j + k - nmodes) * (j + k - nmodes) /
1453 (j + k - cutoff + 1)))));
1457 orthocoeffs[j * nmodes_b + k] *= 0.0;
1464 OrthoExp.
BwdTrans(orthocoeffs, array);
1473 int qa =
m_base[0]->GetNumPoints();
1474 int qb =
m_base[1]->GetNumPoints();
1475 int nmodesA =
m_base[0]->GetNumModes();
1476 int nmodesB =
m_base[1]->GetNumModes();
1477 int P = nmodesA - 1;
1478 int Q = nmodesB - 1;
1489 int Pcut = cutoff *
P;
1490 int Qcut = cutoff * Q;
1494 OrthoExp.
FwdTrans(array, orthocoeffs);
1498 for (
int i = 0; i < nmodesA; ++i)
1500 for (
int j = 0; j < nmodesB; ++j)
1503 if (i > Pcut || j > Qcut)
1507 fac =
max(fac1, fac2);
1508 fac = pow(fac, exponent);
1509 orthocoeffs[i * nmodesB + j] *= exp(-alpha * fac);
1515 OrthoExp.
BwdTrans(orthocoeffs, array);
1522 int n_coeffs = inarray.size();
1529 int nmodes0 =
m_base[0]->GetNumModes();
1530 int nmodes1 =
m_base[1]->GetNumModes();
1531 int numMax = nmodes0;
1551 for (
int i = 0; i < numMin + 1; ++i)
1553 Vmath::Vcopy(numMin, tmp = coeff + cnt, 1, tmp2 = coeff_tmp + cnt, 1);
1602 int nquad0 =
m_base[0]->GetNumPoints();
1603 int nquad1 =
m_base[1]->GetNumPoints();
1609 for (i = 0; i < nquad1; ++i)
1611 Vmath::Vmul(nquad0, inarray.data() + i * nquad0, 1, w0.data(), 1,
1612 outarray.data() + i * nquad0, 1);
1615 for (i = 0; i < nquad0; ++i)
1617 Vmath::Vmul(nquad1, outarray.data() + i, nquad0, w1.data(), 1,
1618 outarray.data() + i, nquad0);
1625 int np1 =
m_base[0]->GetNumPoints();
1626 int np2 =
m_base[1]->GetNumPoints();
1627 int np =
max(np1, np2);
1634 for (
int i = 0; i < np - 1; ++i)
1637 for (
int j = 0; j < np - 1; ++j)
1639 conn[cnt++] = row + j;
1640 conn[cnt++] = row + j + 1;
1641 conn[cnt++] = rowp1 + j;
1643 conn[cnt++] = rowp1 + j + 1;
1644 conn[cnt++] = rowp1 + j;
1645 conn[cnt++] = row + j + 1;
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
#define sign(a, b)
return the sign(b)*a
Describes the specification for a Basis.
Defines a specification for a set of points.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray_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)
const LibUtilities::BasisSharedPtr & GetBasis(int dir) const
This function gets the shared point to basis in the dir direction.
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
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)
DNekMatSharedPtr CreateGeneralMatrix(const StdMatrixKey &mkey)
this function generates the mass matrix
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.
int GetTraceNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th trace.
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
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.
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
const ConstFactorMap & GetConstFactors() const
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
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_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_ExponentialFilter(Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff) 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
int v_NumDGBndryCoeffs() const final
void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta) override
int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false) override
void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
bool v_IsBoundaryInteriorExpansion() const override
int v_GetTraceNcoeffs(const int i) const final
int v_GetNtraces() const final
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
int v_GetTraceNumPoints(const int i) const final
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
int v_NumBndryCoeffs() const final
void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey) override
void v_GetCoords(Array< OneD, NekDouble > &coords_0, Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2) override
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) override
This function evaluates the basis function mode mode at a point coords of the domain.
int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset) 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*base1 and put into outarray.
void v_GetInteriorMap(Array< OneD, unsigned int > &outarray) override
int v_GetNverts() const final
NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrates the specified function over the domain.
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_BwdTrans(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 StdMatrixKey &mkey) override
void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi) override
NekDouble v_PhysEvalFirstDeriv(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
void v_GetTraceCoeffMap(const unsigned int traceid, Array< OneD, unsigned int > &maparray) override
Get the map of the coefficient location to teh local trace coefficients.
const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int j, bool UseGLL=false) const final
DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey) 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_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) 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
void v_GetTraceInteriorToElementMap(const int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation edgeOrient=eForwards) 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_GetBoundaryMap(Array< OneD, unsigned int > &outarray) override
DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey) override
int v_GetTraceIntNcoeffs(const int i) const final
StdQuadExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb)
Constructor using BasisKey class for quadrature points and order definition.
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey) override
LibUtilities::ShapeType v_DetShapeType() const final
void v_FillMode(const int mode, Array< OneD, NekDouble > &array) override
Fill outarray with mode mode of expansion.
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 Dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Copy x to y.
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...
int getNumberOfCoefficients(int Na, int Nb)
BasisManagerT & BasisManager(void)
std::shared_ptr< Basis > BasisSharedPtr
void InterpCoeff2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, Array< OneD, NekDouble > &to)
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ eGaussGaussLegendre
1D Gauss-Gauss-Legendre quadrature points
@ P
Monomial polynomials .
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points.
@ eOrtho_A
Principle Orthogonal Functions .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eModified_A
Principle Modified Functions .
@ eFourier
Fourier Expansion .
static const NekDouble kNekZeroTol
@ eFactorSVVDGKerDiffCoeff
@ eFactorSVVPowerKerDiffCoeff
const int kSVVDGFiltermodesmin
const int kSVVDGFiltermodesmax
const NekDouble kSVVDGFilter[9][11]
@ ePhysInterpToEquiSpaced
std::map< ConstFactorType, NekDouble > ConstFactorMap
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 Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
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 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)