35 #include <boost/core/ignore_unused.hpp>
49 StdTriExp::StdTriExp()
67 "order in 'a' direction is higher than order "
88 int nquad1 =
m_base[1]->GetNumPoints();
105 for(i = 0; i < nquad1; ++i)
107 w1_tmp[i] = 0.5*(1-z1[i])*w1[i];
138 boost::ignore_unused(out_d2);
141 int nquad0 =
m_base[0]->GetNumPoints();
142 int nquad1 =
m_base[1]->GetNumPoints();
152 if (out_d0.size() > 0)
156 for (i = 0; i < nquad1; ++i)
162 if (out_d1.size() > 0)
168 for (i = 0; i < nquad1; ++i)
171 1,&out_d1[0]+i*nquad0,
172 1,&out_d1[0]+i*nquad0,1);
176 else if (out_d1.size() > 0)
181 for (i = 0; i < nquad1; ++i)
189 for (i = 0; i < nquad1; ++i)
192 1,&out_d1[0]+i*nquad0,
193 1,&out_d1[0]+i*nquad0,1);
217 ASSERTL1(
false,
"input dir is out of range");
229 boost::ignore_unused(out_d2);
264 m_base[1]->GetNumModes());
268 inarray,outarray,wsp);
277 bool doCheckCollDir0,
278 bool doCheckCollDir1)
280 boost::ignore_unused(doCheckCollDir0, doCheckCollDir1);
284 int nquad0 =
m_base[0]->GetNumPoints();
285 int nquad1 =
m_base[1]->GetNumPoints();
286 int nmodes0 =
m_base[0]->GetNumModes();
287 int nmodes1 =
m_base[1]->GetNumModes();
289 ASSERTL1(wsp.size() >= nquad0*nmodes1,
290 "Workspace size is not sufficient");
293 "Basis[1] is not of general tensor type");
295 for (i = mode = 0; i < nmodes0; ++i)
297 Blas::Dgemv(
'N', nquad1,nmodes1-i,1.0,base1.get()+mode*nquad1,
298 nquad1,&inarray[0]+mode,1,0.0,&wsp[0]+i*nquad1,1);
305 Blas::Daxpy(nquad1,inarray[1],base1.get()+nquad1,1,
309 Blas::Dgemm(
'N',
'T', nquad0,nquad1,nmodes0,1.0, base0.get(),nquad0,
310 &wsp[0], nquad1,0.0, &outarray[0], nquad0);
336 int npoints[2] = {
m_base[0]->GetNumPoints(),
337 m_base[1]->GetNumPoints()};
338 int nmodes[2] = {
m_base[0]->GetNumModes(),
339 m_base[1]->GetNumModes()};
341 fill(outarray.get(), outarray.get()+
m_ncoeffs, 0.0 );
345 for(i = 0; i < 3; i++)
351 for(i = 0; i < npoints[0]; i++)
353 physEdge[0][i] = inarray[i];
356 for(i = 0; i < npoints[1]; i++)
358 physEdge[1][i] = inarray[npoints[0]-1+i*npoints[0]];
359 physEdge[2][i] = inarray[(npoints[1]-1)*npoints[0]-i*npoints[0]];
364 m_base[0]->GetBasisKey()),
373 for (i = 0; i < 3; i++)
375 segexp[i!=0]->FwdTrans_BndConstrained(physEdge[i],coeffEdge[i]);
378 for (j = 0; j < nmodes[i != 0]; j++)
381 outarray[ mapArray[j] ] =
sign * coeffEdge[i][j];
401 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
408 for (i = 0; i < nInteriorDofs; i++)
410 rhs[i] = tmp1[ mapArray[i] ];
414 1.0,&(matsys->GetPtr())[0],nInteriorDofs,
418 for (i = 0; i < nInteriorDofs; i++)
420 outarray[ mapArray[i] ] = result[i];
482 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
488 bool multiplybyweights)
490 int nquad0 =
m_base[0]->GetNumPoints();
491 int nquad1 =
m_base[1]->GetNumPoints();
492 int order0 =
m_base[0]->GetNumModes();
494 if(multiplybyweights)
510 inarray,outarray,wsp);
520 bool doCheckCollDir0,
521 bool doCheckCollDir1)
523 boost::ignore_unused(doCheckCollDir0, doCheckCollDir1);
527 int nquad0 =
m_base[0]->GetNumPoints();
528 int nquad1 =
m_base[1]->GetNumPoints();
529 int nmodes0 =
m_base[0]->GetNumModes();
530 int nmodes1 =
m_base[1]->GetNumModes();
532 ASSERTL1(wsp.size() >= nquad1*nmodes0,
533 "Workspace size is not sufficient");
535 Blas::Dgemm(
'T',
'N',nquad1,nmodes0,nquad0,1.0,inarray.get(),nquad0,
536 base0.get(),nquad0,0.0,wsp.get(),nquad1);
539 for (mode=i=0; i < nmodes0; ++i)
541 Blas::Dgemv(
'T',nquad1,nmodes1-i,1.0, base1.get()+mode*nquad1,
542 nquad1,wsp.get()+i*nquad1,1, 0.0,
543 outarray.get() + mode,1);
550 outarray[1] +=
Blas::Ddot(nquad1,base1.get()+nquad1,1,
585 ASSERTL1(
false,
"input dir is out of range");
594 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
603 int nquad0 =
m_base[0]->GetNumPoints();
604 int nquad1 =
m_base[1]->GetNumPoints();
605 int nqtot = nquad0*nquad1;
606 int nmodes0 =
m_base[0]->GetNumModes();
607 int wspsize = max(max(nqtot,
m_ncoeffs),nquad1*nmodes0);
615 for(i = 0; i < nquad1; ++i)
617 gfac0[i] = 2.0/(1-z1[i]);
620 for(i = 0; i < nquad1; ++i)
622 Vmath::Smul(nquad0,gfac0[i],&inarray[0]+i*nquad0,1,
623 &tmp0[0]+i*nquad0,1);
634 tmp0,outarray,gfac0);
642 for (i = 0; i < nquad0; ++i)
644 gfac0[i] = 0.5*(1+z0[i]);
647 for (i = 0; i < nquad1; ++i)
649 Vmath::Vmul(nquad0,&gfac0[0],1,&tmp0[0]+i*nquad0,1,
650 &tmp0[0]+i*nquad0,1);
660 tmp0,outarray,gfac0);
667 ASSERTL1(
false,
"input dir is out of range");
692 eta[0] = 2.*(1.+xi[0])/d1-1.0;
699 xi[0] = (1.0 + eta[0]) * (1.0 - eta[1]) * 0.5 - 1.0;
707 int nquad0 =
m_base[0]->GetNumPoints();
708 int nquad1 =
m_base[1]->GetNumPoints();
709 int order0 =
m_base[0]->GetNumModes();
710 int order1 =
m_base[1]->GetNumModes();
716 "calling argument mode is larger than "
717 "total expansion order");
720 for (i = 0; i < order0; ++i, m+=order1-i)
737 for (i = 0; i < nquad1; ++i)
740 1,&outarray[0]+i*nquad0,1);
744 for(i = 0; i < nquad0; ++i)
747 1,&outarray[0]+i,nquad0,&outarray[0]+i,nquad0);
760 const int nm1 =
m_base[1]->GetNumModes();
761 const double c = 1 + 2*nm1;
762 const int mode0 = floor(0.5*(c -
sqrt(c*c - 8*mode)));
768 return StdExpansion::BaryEvaluateBasis<1>(coll[1], 1);
773 StdExpansion::BaryEvaluateBasis<0>(coll[0], mode0) *
774 StdExpansion::BaryEvaluateBasis<1>(coll[1], mode);
796 "BasisType is not a boundary interior form");
798 "BasisType is not a boundary interior form");
806 "BasisType is not a boundary interior form");
808 "BasisType is not a boundary interior form");
815 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
829 ASSERTL2((i >= 0)&&(i <= 2),
"edge id is out of range");
842 const std::vector<unsigned int> &nummodes,
846 nummodes[modes_offset],
847 nummodes[modes_offset+1]);
857 boost::ignore_unused(coords_2);
865 for(i = 0; i < nq1; ++i)
867 for(j = 0; j < nq0; ++j)
869 coords_0[i*nq0+j] = (1+z0[j])*(1-z1[i])/2.0 - 1.0;
882 (
const int i,
const int j)
const
884 boost::ignore_unused(j);
885 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
902 m_base[1]->GetBasisKey().GetPointsKey().
907 m_base[1]->GetNumModes(),pkey);
913 "unexpected points distribution");
920 "Information not available to set edge key");
939 "Mapping not defined for this type of basis");
942 if(useCoeffPacking ==
true)
944 switch(localVertexId)
958 localDOF =
m_base[1]->GetNumModes();
963 ASSERTL0(
false,
"eid must be between 0 and 2");
970 switch(localVertexId)
979 localDOF =
m_base[1]->GetNumModes();
989 ASSERTL0(
false,
"eid must be between 0 and 2");
1002 "Expansion not of a proper type");
1006 int nummodes0, nummodes1;
1013 nummodes0 =
m_base[0]->GetNumModes();
1014 nummodes1 =
m_base[1]->GetNumModes();
1016 startvalue = 2*nummodes1;
1018 for(i = 0; i < nummodes0-2; i++)
1020 for(j = 0; j < nummodes1-3-i; j++)
1022 outarray[cnt++]=startvalue+j;
1024 startvalue+=nummodes1-2-i;
1032 "Expansion not of expected type");
1035 int nummodes0, nummodes1;
1043 nummodes0 =
m_base[0]->GetNumModes();
1044 nummodes1 =
m_base[1]->GetNumModes();
1046 value = 2*nummodes1-1;
1047 for(i = 0; i < value; i++)
1053 for(i = 0; i < nummodes0-2; i++)
1055 outarray[cnt++]=value;
1056 value += nummodes1-2-i;
1067 boost::ignore_unused(Q);
1071 "Mapping not defined for this type of basis");
1075 int order0 =
m_base[0]->GetNumModes();
1076 int order1 =
m_base[1]->GetNumModes();
1088 ASSERTL0(
false,
"eid must be between 0 and 2");
1091 bool checkForZeroedModes =
false;
1096 else if(
P != numModes)
1098 checkForZeroedModes =
true;
1102 if(maparray.size() !=
P)
1107 if(signarray.size() !=
P)
1113 fill(signarray.get() , signarray.get()+
P, 1);
1121 for(i = 0; i <
P; cnt+=order1-i, ++i)
1129 maparray[0] = order1;
1131 for(i = 2; i <
P; i++)
1133 maparray[i] = order1-1+i;
1139 for(i = 0; i <
P; i++)
1146 ASSERTL0(
false,
"eid must be between 0 and 2");
1152 swap( maparray[0] , maparray[1] );
1154 for(i = 3; i <
P; i+=2)
1160 if (checkForZeroedModes)
1164 for (
int j = numModes; j <
P; j++)
1167 maparray[j] = maparray[0];
1180 "Mapping not defined for this type of basis");
1182 const int nummodes1 =
m_base[1]->GetNumModes();
1185 if(maparray.size() != nEdgeIntCoeffs)
1190 if(signarray.size() != nEdgeIntCoeffs)
1196 fill( signarray.get() , signarray.get()+nEdgeIntCoeffs, 1 );
1203 int cnt = 2*nummodes1 - 1;
1204 for(i = 0; i < nEdgeIntCoeffs; cnt+=nummodes1-2-i, ++i)
1212 for(i = 0; i < nEdgeIntCoeffs; i++)
1214 maparray[i] = nummodes1+1+i;
1220 for(i = 0; i < nEdgeIntCoeffs; i++)
1228 ASSERTL0(
false,
"eid must be between 0 and 2");
1235 for(i = 1; i < nEdgeIntCoeffs; i+=2)
1259 nq0 =
m_base[0]->GetNumPoints();
1260 nq1 =
m_base[1]->GetNumPoints();
1283 for(
int i = 0; i < nq; ++i)
1285 for(
int j = 0; j < nq-i; ++j,++cnt)
1288 coords[cnt][0] = -1.0 + 2*j/(
NekDouble)(nq-1);
1289 coords[cnt][1] = -1.0 + 2*i/(
NekDouble)(nq-1);
1293 for(
int i = 0; i < neq; ++i)
1297 I[0] =
m_base[0]->GetI(coll);
1298 I[1] =
m_base[1]->GetI(coll+1);
1301 for (
int j = 0; j < nq1; ++j)
1307 Mat->GetRawPtr() + j*nq0*neq + i, neq);
1357 k1,k2,inarray,outarray,mkey);
1381 int qa =
m_base[0]->GetNumPoints();
1382 int qb =
m_base[1]->GetNumPoints();
1383 int nmodes_a =
m_base[0]->GetNumModes();
1384 int nmodes_b =
m_base[1]->GetNumModes();
1397 OrthoExp.
FwdTrans(array,orthocoeffs);
1407 for(
int j = 0; j < nmodes_a; ++j)
1409 for(
int k = 0; k < nmodes_b-j; ++k, ++cnt)
1412 pow((1.0*j)/(nmodes_a-1),cutoff*nmodes_a),
1413 pow((1.0*k)/(nmodes_b-1),cutoff*nmodes_b));
1415 orthocoeffs[cnt] *= (SvvDiffCoeff *fac);
1426 max_ab = max(max_ab,0);
1430 for(
int j = 0; j < nmodes_a; ++j)
1432 for(
int k = 0; k < nmodes_b-j; ++k, ++cnt)
1434 int maxjk = max(j,k);
1437 orthocoeffs[cnt] *= SvvDiffCoeff *
1448 min(nmodes_a,nmodes_b));
1451 int nmodes = min(nmodes_a,nmodes_b);
1456 for(
int j = 0; j < nmodes_a; ++j)
1458 for(
int k = 0; k < nmodes_b-j; ++k)
1462 orthocoeffs[cnt] *= (SvvDiffCoeff
1463 *exp(-(j+k-nmodes)*(j+k-nmodes)
1465 *(j+k-cutoff+epsilon)))));
1469 orthocoeffs[cnt] *= 0.0;
1478 OrthoExp.
BwdTrans(orthocoeffs,array);
1486 int n_coeffs = inarray.size();
1487 int nquad0 =
m_base[0]->GetNumPoints();
1488 int nquad1 =
m_base[1]->GetNumPoints();
1493 int nqtot = nquad0*nquad1;
1496 int nmodes0 =
m_base[0]->GetNumModes();
1497 int nmodes1 =
m_base[1]->GetNumModes();
1498 int numMin2 = nmodes0;
1520 m_TriExp ->BwdTrans(inarray,phys_tmp);
1521 m_OrthoTriExp->FwdTrans(phys_tmp, coeff);
1523 for (i = 0; i < n_coeffs; i++)
1528 numMin += numMin2 - 1;
1533 m_OrthoTriExp->BwdTrans(coeff,phys_tmp);
1534 m_TriExp ->FwdTrans(phys_tmp, outarray);
1545 if(inarray.get() == outarray.get())
1551 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1556 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1569 int nquad0 =
m_base[0]->GetNumPoints();
1570 int nquad1 =
m_base[1]->GetNumPoints();
1577 for(i = 0; i < nquad1; ++i)
1580 w0.get(),1, outarray.get()+i*nquad0,1);
1588 for(i = 0; i < nquad1; ++i)
1591 outarray.get()+i*nquad0,1);
1597 for(i = 0; i < nquad1; ++i)
1599 Blas::Dscal(nquad0,0.5*w1[i],outarray.get()+i*nquad0,1);
1604 ASSERTL0(
false,
"Unsupported quadrature points type.");
1613 boost::ignore_unused(standard);
1615 int np1 =
m_base[0]->GetNumPoints();
1616 int np2 =
m_base[1]->GetNumPoints();
1617 int np = max(np1,np2);
1624 for(
int i = 0; i < np-1; ++i)
1627 for(
int j = 0; j < np-i-2; ++j)
1629 conn[cnt++] = row +j;
1630 conn[cnt++] = row +j+1;
1631 conn[cnt++] = rowp1 +j;
1633 conn[cnt++] = rowp1 +j+1;
1634 conn[cnt++] = rowp1 +j;
1635 conn[cnt++] = row +j+1;
1638 conn[cnt++] = row +np-i-2;
1639 conn[cnt++] = row +np-i-1;
1640 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 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)
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
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.
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.
const LibUtilities::BasisSharedPtr & GetBasis(int dir) const
This function gets the shared point to basis in the dir direction.
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 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 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)
LibUtilities::NekManager< StdMatrixKey, DNekMat, StdMatrixKey::opLess > m_stdMatrixManager
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
NekDouble GetConstFactor(const ConstFactorType &factor) const
bool ConstFactorExists(const ConstFactorType &factor) const
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_x, Array< OneD, NekDouble > &coords_y, Array< OneD, NekDouble > &coords_z)
virtual 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)
virtual void v_GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrates the specified function over the domain.
virtual void v_GetTraceToElementMap(const int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation edgeOrient=eForwards, int P=-1, int Q=-1)
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false)
virtual int v_GetTraceNcoeffs(const int i) const
virtual int v_NumBndryCoeffs() const
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey)
virtual int v_GetTraceNumPoints(const int i) const
virtual void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi)
virtual 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)
virtual void v_GetTraceInteriorToElementMap(const int eid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation edgeOrient=eForwards)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray)
virtual int v_GetNtraces() const
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
virtual void v_IProductWRTBase_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_FwdTrans_BndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray)
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey)
virtual int v_NumDGBndryCoeffs() const
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset)
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Calculate the inner product of inarray with respect to the basis B=base0[p]*base1[pq] and put into ou...
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Backward tranform for triangular elements.
virtual int v_GetNverts() const
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
virtual bool v_IsBoundaryInteriorExpansion()
virtual void v_IProductWRTDerivBase_MatOp(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Transform a given function from physical quadrature space to coefficient space.
virtual 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)
Calculate the derivative of the physical points.
virtual LibUtilities::ShapeType v_DetShapeType() const
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray)
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) final
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual 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)
virtual void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int j) const
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey)
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 = A x 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 getNumberOfCoefficients(int Na, int Nb)
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ ePolyEvenlySpaced
1D Evenly-spaced points using Lagrange polynomial
@ eGaussRadauMAlpha1Beta0
Gauss Radau pinned at x=-1, .
@ eModified_B
Principle Modified Functions .
@ eOrtho_A
Principle Orthogonal Functions .
@ 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
The above copyright notice and this permission notice shall be included.
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/y.
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 > sqrt(scalarT< T > in)