49 :
StdExpansion(Ba.GetNumModes() * Bb.GetNumModes(), 2, Ba, Bb),
102 ASSERTL1(
false,
"input dir is out of range");
130 if (
m_base[0]->Collocation() &&
m_base[1]->Collocation())
133 inarray, 1, outarray, 1);
145 m_base[1]->GetNumModes());
148 outarray, wsp,
true,
true);
166 bool doCheckCollDir0,
bool doCheckCollDir1)
168 int nquad0 =
m_base[0]->GetNumPoints();
169 int nquad1 =
m_base[1]->GetNumPoints();
170 int nmodes0 =
m_base[0]->GetNumModes();
171 int nmodes1 =
m_base[1]->GetNumModes();
173 bool colldir0 = doCheckCollDir0 ? (
m_base[0]->Collocation()) :
false;
174 bool colldir1 = doCheckCollDir1 ? (
m_base[1]->Collocation()) :
false;
176 if (colldir0 && colldir1)
182 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nmodes1, 1.0, &inarray[0], nquad0,
183 base1.get(), nquad1, 0.0, &outarray[0], nquad0);
187 Blas::Dgemm(
'N',
'N', nquad0, nmodes1, nmodes0, 1.0, base0.get(),
188 nquad0, &inarray[0], nmodes0, 0.0, &outarray[0], nquad0);
192 ASSERTL1(wsp.size() >= nquad0 * nmodes1,
193 "Workspace size is not sufficient");
197 Blas::Dgemm(
'N',
'N', nquad0, nmodes1, nmodes0, 1.0, base0.get(),
198 nquad0, &inarray[0], nmodes0, 0.0, &wsp[0], nquad0);
199 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nmodes1, 1.0, &wsp[0], nquad0,
200 base1.get(), nquad1, 0.0, &outarray[0], nquad0);
207 if ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()))
223 out = (*matsys) * in;
231 if ((
m_base[0]->Collocation()) && (
m_base[1]->Collocation()))
238 int npoints[2] = {
m_base[0]->GetNumPoints(),
m_base[1]->GetNumPoints()};
239 int nmodes[2] = {
m_base[0]->GetNumModes(),
m_base[1]->GetNumModes()};
241 fill(outarray.get(), outarray.get() +
m_ncoeffs, 0.0);
245 for (i = 0; i < 4; i++)
251 for (i = 0; i < npoints[0]; i++)
253 physEdge[0][i] = inarray[i];
254 physEdge[2][i] = inarray[npoints[0] * npoints[1] - 1 - i];
257 for (i = 0; i < npoints[1]; i++)
259 physEdge[1][i] = inarray[npoints[0] - 1 + i * npoints[0]];
261 inarray[(npoints[1] - 1) * npoints[0] - i * npoints[0]];
266 m_base[0]->GetBasisKey()),
268 m_base[1]->GetBasisKey())};
274 for (i = 0; i < 4; i++)
276 segexp[i % 2]->FwdTransBndConstrained(physEdge[i], coeffEdge[i]);
279 for (j = 0; j < nmodes[i % 2]; j++)
282 outarray[mapArray[j]] =
sign * coeffEdge[i][j];
302 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
309 for (i = 0; i < nInteriorDofs; i++)
311 rhs[i] = tmp1[mapArray[i]];
314 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, 1.0,
315 &(matsys->GetPtr())[0], nInteriorDofs, rhs.get(), 1, 0.0,
318 for (i = 0; i < nInteriorDofs; i++)
320 outarray[mapArray[i]] = result[i];
357 if (
m_base[0]->Collocation() &&
m_base[1]->Collocation())
371 int nquad0 =
m_base[0]->GetNumPoints();
372 int nquad1 =
m_base[1]->GetNumPoints();
373 int order0 =
m_base[0]->GetNumModes();
375 if (multiplybyweights)
383 m_base[1]->GetBdata(), tmp, outarray, wsp,
390 m_base[1]->GetBdata(), inarray, outarray,
406 ASSERTL0((dir == 0) || (dir == 1),
"input dir is out of range");
408 int nquad0 =
m_base[0]->GetNumPoints();
409 int nquad1 =
m_base[1]->GetNumPoints();
410 int nqtot = nquad0 * nquad1;
411 int order0 =
m_base[0]->GetNumModes();
422 m_base[1]->GetDbdata(), tmp, outarray, wsp,
428 m_base[1]->GetBdata(), tmp, outarray, wsp,
448 bool doCheckCollDir0,
bool doCheckCollDir1)
450 int nquad0 =
m_base[0]->GetNumPoints();
451 int nquad1 =
m_base[1]->GetNumPoints();
452 int nmodes0 =
m_base[0]->GetNumModes();
453 int nmodes1 =
m_base[1]->GetNumModes();
455 bool colldir0 = doCheckCollDir0 ? (
m_base[0]->Collocation()) :
false;
456 bool colldir1 = doCheckCollDir1 ? (
m_base[1]->Collocation()) :
false;
458 if (colldir0 && colldir1)
464 Blas::Dgemm(
'N',
'N', nmodes0, nmodes1, nquad1, 1.0, inarray.get(),
465 nmodes0, base1.get(), nquad1, 0.0, outarray.get(), nmodes0);
469 Blas::Dgemm(
'T',
'N', nmodes0, nquad1, nquad0, 1.0, base0.get(), nquad0,
470 inarray.get(), nquad0, 0.0, outarray.get(), nmodes0);
474 ASSERTL1(wsp.size() >= nquad1 * nmodes0,
475 "Workspace size is not sufficient");
478 Blas::Dgemm(
'T',
'N', nmodes0, nquad1, nquad0, 1.0, base0.get(), nquad0,
479 inarray.get(), nquad0, 0.0, wsp.get(), nmodes0);
482 for (
int i = 0; i < nmodes0; ++i)
484 for (
int j = 0; j < nquad1; ++j)
486 wsp[j * nmodes0 + i] =
487 Blas::Ddot(nquad0, base0.get() + i * nquad0, 1,
488 inarray.get() + j * nquad0, 1);
492 Blas::Dgemm(
'N',
'N', nmodes0, nmodes1, nquad1, 1.0, wsp.get(), nmodes0,
493 base1.get(), nquad1, 0.0, outarray.get(), nmodes0);
524 int nquad0 =
m_base[0]->GetNumPoints();
525 int nquad1 =
m_base[1]->GetNumPoints();
528 int btmp0 =
m_base[0]->GetNumModes();
529 int mode0 = mode % btmp0;
530 int mode1 = mode / btmp0;
532 ASSERTL2(mode1 == (
int)floor((1.0 * mode) / btmp0),
533 "Integer Truncation not Equiv to Floor");
536 "calling argument mode is larger than total expansion order");
538 for (i = 0; i < nquad1; ++i)
541 &outarray[0] + i * nquad0, 1);
544 for (i = 0; i < nquad0; ++i)
547 &outarray[0] + i, nquad0, &outarray[0] + i, nquad0);
567 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
569 if ((i == 0) || (i == 2))
581 ASSERTL2((i >= 0) && (i <= 4),
"edge id is out of range");
582 if ((i == 0) || (i == 2))
594 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
596 if ((i == 0) || (i == 2))
607 const int i, [[maybe_unused]]
const int j)
const
609 ASSERTL2((i >= 0) && (i <= 3),
"edge id is out of range");
611 if ((i == 0) || (i == 2))
631 "BasisType is not a boundary interior form");
635 "BasisType is not a boundary interior form");
645 "BasisType is not a boundary interior form");
649 "BasisType is not a boundary interior form");
655 const std::vector<unsigned int> &nummodes,
int &modes_offset)
657 int nmodes = nummodes[modes_offset] * nummodes[modes_offset + 1];
665 bool returnval =
false;
690 for (i = 0; i < nq1; ++i)
692 Blas::Dcopy(nq0, z0.get(), 1, &coords_0[0] + i * nq0, 1);
693 Vmath::Fill(nq0, z1[i], &coords_1[0] + i * nq0, 1);
717 const int nm0 =
m_base[0]->GetNumModes();
718 const int nm1 =
m_base[1]->GetNumModes();
720 return StdExpansion::BaryEvaluateBasis<0>(coords[0], mode % nm1) *
721 StdExpansion::BaryEvaluateBasis<1>(coords[1], mode / nm0);
732 int nummodes0, nummodes1;
733 int value1 = 0, value2 = 0;
739 nummodes0 =
m_base[0]->GetNumModes();
740 nummodes1 =
m_base[1]->GetNumModes();
752 value1 = 2 * nummodes0;
755 ASSERTL0(0,
"Mapping array is not defined for this expansion");
759 for (i = 0; i < value1; i++)
769 value2 = value1 + nummodes0 - 1;
775 ASSERTL0(0,
"Mapping array is not defined for this expansion");
779 for (i = 0; i < nummodes1 - 2; i++)
781 outarray[cnt++] = value1 + i * nummodes0;
782 outarray[cnt++] = value2 + i * nummodes0;
788 for (i = nummodes0 * (nummodes1 - 1); i <
GetNcoeffs(); i++)
799 int nummodes0, nummodes1;
806 nummodes0 =
m_base[0]->GetNumModes();
807 nummodes1 =
m_base[1]->GetNumModes();
815 startvalue = nummodes0;
818 startvalue = 2 * nummodes0;
821 ASSERTL0(0,
"Mapping array is not defined for this expansion");
834 ASSERTL0(0,
"Mapping array is not defined for this expansion");
838 for (i = 0; i < nummodes1 - 2; i++)
840 for (j = 0; j < nummodes0 - 2; j++)
842 outarray[cnt++] = startvalue + j;
844 startvalue += nummodes0;
852 if (useCoeffPacking ==
true)
854 switch (localVertexId)
865 localDOF =
m_base[0]->GetNumModes() - 1;
877 localDOF =
m_base[0]->GetNumModes() *
878 (
m_base[1]->GetNumModes() - 1);
882 localDOF =
m_base[0]->GetNumModes();
891 m_base[0]->GetNumModes() *
m_base[1]->GetNumModes() - 1;
895 localDOF =
m_base[0]->GetNumModes() + 1;
900 ASSERTL0(
false,
"eid must be between 0 and 3");
906 switch (localVertexId)
917 localDOF =
m_base[0]->GetNumModes() - 1;
930 m_base[0]->GetNumModes() *
m_base[1]->GetNumModes() - 1;
934 localDOF =
m_base[0]->GetNumModes() + 1;
942 localDOF =
m_base[0]->GetNumModes() *
943 (
m_base[1]->GetNumModes() - 1);
947 localDOF =
m_base[0]->GetNumModes();
952 ASSERTL0(
false,
"eid must be between 0 and 3");
966 ASSERTL1(traceid < 4,
"traceid must be between 0 and 3");
969 unsigned int order0 =
m_base[0]->GetNumModes();
970 unsigned int order1 =
m_base[1]->GetNumModes();
971 unsigned int numModes = (traceid % 2) ? order1 : order0;
973 if (maparray.size() != numModes)
986 for (i = 0; i < numModes; i++)
994 for (i = 0; i < numModes; i++)
996 maparray[i] = i * order0 + 1;
1002 for (i = 0; i < numModes; i++)
1004 maparray[i] = order0 + i;
1010 for (i = 0; i < numModes; i++)
1012 maparray[i] = i * order0;
1027 for (i = 0; i < numModes; i++)
1035 for (i = 0; i < numModes; i++)
1037 maparray[i] = (i + 1) * order0 - 1;
1043 for (i = 0; i < numModes; i++)
1045 maparray[i] = order0 * (order1 - 1) + i;
1051 for (i = 0; i < numModes; i++)
1053 maparray[i] = order0 * i;
1063 ASSERTL0(
false,
"Mapping not defined for this type of basis");
1072 const int nummodes0 =
m_base[0]->GetNumModes();
1073 const int nummodes1 =
m_base[1]->GetNumModes();
1077 if (maparray.size() != nEdgeIntCoeffs)
1082 if (signarray.size() != nEdgeIntCoeffs)
1088 fill(signarray.get(), signarray.get() + nEdgeIntCoeffs, 1);
1097 for (i = 0; i < nEdgeIntCoeffs; i++)
1099 maparray[i] = i + 2;
1105 for (i = 0; i < nEdgeIntCoeffs; i++)
1107 maparray[i] = (i + 2) * nummodes0 + 1;
1113 for (i = 0; i < nEdgeIntCoeffs; i++)
1115 maparray[i] = nummodes0 + i + 2;
1121 for (i = 0; i < nEdgeIntCoeffs; i++)
1123 maparray[i] = (i + 2) * nummodes0;
1128 ASSERTL0(
false,
"eid must be between 0 and 3");
1134 for (i = 1; i < nEdgeIntCoeffs; i += 2)
1146 for (i = 0; i < nEdgeIntCoeffs; i++)
1148 maparray[i] = i + 1;
1154 for (i = 0; i < nEdgeIntCoeffs; i++)
1156 maparray[i] = (i + 2) * nummodes0 - 1;
1162 for (i = 0; i < nEdgeIntCoeffs; i++)
1164 maparray[i] = nummodes0 * (nummodes1 - 1) + i + 1;
1170 for (i = 0; i < nEdgeIntCoeffs; i++)
1172 maparray[i] = nummodes0 * (i + 1);
1177 ASSERTL0(
false,
"eid must be between 0 and 3");
1182 reverse(maparray.get(), maparray.get() + nEdgeIntCoeffs);
1187 ASSERTL0(
false,
"Mapping not defined for this type of basis");
1208 int nq0 =
m_base[0]->GetNumPoints();
1209 int nq1 =
m_base[1]->GetNumPoints();
1232 for (i = 0; i < nq; ++i)
1234 for (j = 0; j < nq; ++j, ++cnt)
1237 coords[cnt][0] = -1.0 + 2 * j / (
NekDouble)(nq - 1);
1238 coords[cnt][1] = -1.0 + 2 * i / (
NekDouble)(nq - 1);
1242 for (i = 0; i < neq; ++i)
1246 I[0] =
m_base[0]->GetI(coll);
1247 I[1] =
m_base[1]->GetI(coll + 1);
1250 for (j = 0; j < nq1; ++j)
1256 Mat->GetRawPtr() + j * nq0 * neq + i, neq);
1268 for (i = 0; i < order1; ++i)
1270 (*Mat)(order0 *i + 1, i * order0 + 1) = 1.0;
1276 for (i = 0; i < order0; ++i)
1278 (*Mat)(order0 + i, order0 + i) = 1.0;
1292 (*Mat) = Imass * Iprod;
1300 int dir = (edge + 1) % 2;
1301 int nCoeffs =
m_base[dir]->GetNumModes();
1309 coords[0] = (edge == 0 || edge == 3) ? -1.0 : 1.0;
1316 Vmath::Vcopy(nCoeffs, m_Ix->GetPtr(), 1, Mat->GetPtr(), 1);
1342 int qa =
m_base[0]->GetNumPoints();
1343 int qb =
m_base[1]->GetNumPoints();
1344 int nmodes_a =
m_base[0]->GetNumModes();
1345 int nmodes_b =
m_base[1]->GetNumModes();
1346 int nmodes = min(nmodes_a, nmodes_b);
1359 OrthoExp.
FwdTrans(array, orthocoeffs);
1369 for (
int j = 0; j < nmodes_a; ++j)
1371 for (
int k = 0; k < nmodes_b; ++k)
1375 pow((1.0 * j) / (nmodes_a - 1), cutoff * nmodes_a),
1376 pow((1.0 * k) / (nmodes_b - 1), cutoff * nmodes_b));
1378 orthocoeffs[j * nmodes_b + k] *= SvvDiffCoeff * fac;
1389 max_ab = max(max_ab, 0);
1392 for (
int j = 0; j < nmodes_a; ++j)
1394 for (
int k = 0; k < nmodes_b; ++k)
1396 int maxjk = max(j, k);
1399 orthocoeffs[j * nmodes_b + k] *=
1409 min(nmodes_a, nmodes_b));
1412 for (
int j = 0; j < nmodes_a; ++j)
1414 for (
int k = 0; k < nmodes_b; ++k)
1416 if (j + k >= cutoff)
1418 orthocoeffs[j * nmodes_b + k] *=
1420 exp(-(j + k - nmodes) * (j + k - nmodes) /
1422 (j + k - cutoff + 1)))));
1426 orthocoeffs[j * nmodes_b + k] *= 0.0;
1433 OrthoExp.
BwdTrans(orthocoeffs, array);
1442 int qa =
m_base[0]->GetNumPoints();
1443 int qb =
m_base[1]->GetNumPoints();
1444 int nmodesA =
m_base[0]->GetNumModes();
1445 int nmodesB =
m_base[1]->GetNumModes();
1446 int P = nmodesA - 1;
1447 int Q = nmodesB - 1;
1458 int Pcut = cutoff *
P;
1459 int Qcut = cutoff * Q;
1463 OrthoExp.
FwdTrans(array, orthocoeffs);
1467 for (
int i = 0; i < nmodesA; ++i)
1469 for (
int j = 0; j < nmodesB; ++j)
1472 if (i > Pcut || j > Qcut)
1476 fac = max(fac1, fac2);
1477 fac = pow(fac, exponent);
1478 orthocoeffs[i * nmodesB + j] *= exp(-alpha * fac);
1484 OrthoExp.
BwdTrans(orthocoeffs, array);
1491 int n_coeffs = inarray.size();
1498 int nmodes0 =
m_base[0]->GetNumModes();
1499 int nmodes1 =
m_base[1]->GetNumModes();
1500 int numMax = nmodes0;
1520 for (
int i = 0; i < numMin + 1; ++i)
1522 Vmath::Vcopy(numMin, tmp = coeff + cnt, 1, tmp2 = coeff_tmp + cnt, 1);
1571 int nquad0 =
m_base[0]->GetNumPoints();
1572 int nquad1 =
m_base[1]->GetNumPoints();
1578 for (i = 0; i < nquad1; ++i)
1580 Vmath::Vmul(nquad0, inarray.get() + i * nquad0, 1, w0.get(), 1,
1581 outarray.get() + i * nquad0, 1);
1584 for (i = 0; i < nquad0; ++i)
1586 Vmath::Vmul(nquad1, outarray.get() + i, nquad0, w1.get(), 1,
1587 outarray.get() + i, nquad0);
1594 int np1 =
m_base[0]->GetNumPoints();
1595 int np2 =
m_base[1]->GetNumPoints();
1596 int np = max(np1, np2);
1603 for (
int i = 0; i < np - 1; ++i)
1606 for (
int j = 0; j < np - 1; ++j)
1608 conn[cnt++] = row + j;
1609 conn[cnt++] = row + j + 1;
1610 conn[cnt++] = rowp1 + j;
1612 conn[cnt++] = rowp1 + j + 1;
1613 conn[cnt++] = rowp1 + j;
1614 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.
void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
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 v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
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.
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)
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
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.
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.
const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int j) const final
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
StdRegions::ConstFactorMap factors
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.