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.num_elements() > 0)
156 for (i = 0; i < nquad1; ++i)
162 if (out_d1.num_elements() > 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.num_elements() > 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.num_elements() >= 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++)
376 segexp[i!=0]->FwdTrans_BndConstrained(physEdge[i],coeffEdge[i]);
379 for (j = 0; j < nmodes[i != 0]; j++)
382 outarray[ mapArray[j] ] = sign * coeffEdge[i][j];
402 int nInteriorDofs =
m_ncoeffs - nBoundaryDofs;
409 for (i = 0; i < nInteriorDofs; i++)
411 rhs[i] = tmp1[ mapArray[i] ];
415 1.0,&(matsys->GetPtr())[0],nInteriorDofs,
419 for (i = 0; i < nInteriorDofs; i++)
421 outarray[ mapArray[i] ] = result[i];
483 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
489 bool multiplybyweights)
491 int nquad0 =
m_base[0]->GetNumPoints();
492 int nquad1 =
m_base[1]->GetNumPoints();
493 int order0 =
m_base[0]->GetNumModes();
495 if(multiplybyweights)
511 inarray,outarray,wsp);
521 bool doCheckCollDir0,
522 bool doCheckCollDir1)
524 boost::ignore_unused(doCheckCollDir0, doCheckCollDir1);
528 int nquad0 =
m_base[0]->GetNumPoints();
529 int nquad1 =
m_base[1]->GetNumPoints();
530 int nmodes0 =
m_base[0]->GetNumModes();
531 int nmodes1 =
m_base[1]->GetNumModes();
533 ASSERTL1(wsp.num_elements() >= nquad1*nmodes0,
534 "Workspace size is not sufficient");
536 Blas::Dgemm(
'T',
'N',nquad1,nmodes0,nquad0,1.0,inarray.get(),nquad0,
537 base0.get(),nquad0,0.0,wsp.get(),nquad1);
540 for (mode=i=0; i < nmodes0; ++i)
542 Blas::Dgemv(
'T',nquad1,nmodes1-i,1.0, base1.get()+mode*nquad1,
543 nquad1,wsp.get()+i*nquad1,1, 0.0,
544 outarray.get() + mode,1);
551 outarray[1] +=
Blas::Ddot(nquad1,base1.get()+nquad1,1,
586 ASSERTL1(
false,
"input dir is out of range");
595 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
604 int nquad0 =
m_base[0]->GetNumPoints();
605 int nquad1 =
m_base[1]->GetNumPoints();
606 int nqtot = nquad0*nquad1;
607 int nmodes0 =
m_base[0]->GetNumModes();
608 int wspsize = max(max(nqtot,
m_ncoeffs),nquad1*nmodes0);
616 for(i = 0; i < nquad1; ++i)
618 gfac0[i] = 2.0/(1-z1[i]);
621 for(i = 0; i < nquad1; ++i)
623 Vmath::Smul(nquad0,gfac0[i],&inarray[0]+i*nquad0,1,
624 &tmp0[0]+i*nquad0,1);
635 tmp0,outarray,gfac0);
643 for (i = 0; i < nquad0; ++i)
645 gfac0[i] = 0.5*(1+z0[i]);
648 for (i = 0; i < nquad1; ++i)
650 Vmath::Vmul(nquad0,&gfac0[0],1,&tmp0[0]+i*nquad0,1,
651 &tmp0[0]+i*nquad0,1);
661 tmp0,outarray,gfac0);
668 ASSERTL1(
false,
"input dir is out of range");
690 eta[0] = 2*(1+xi[0])/(1-xi[1])-1.0;
699 int nquad0 =
m_base[0]->GetNumPoints();
700 int nquad1 =
m_base[1]->GetNumPoints();
701 int order0 =
m_base[0]->GetNumModes();
702 int order1 =
m_base[1]->GetNumModes();
708 "calling argument mode is larger than " 709 "total expansion order");
712 for (i = 0; i < order0; ++i, m+=order1-i)
729 for (i = 0; i < nquad1; ++i)
732 1,&outarray[0]+i*nquad0,1);
736 for(i = 0; i < nquad0; ++i)
739 1,&outarray[0]+i,nquad0,&outarray[0]+i,nquad0);
762 "BasisType is not a boundary interior form");
764 "BasisType is not a boundary interior form");
772 "BasisType is not a boundary interior form");
774 "BasisType is not a boundary interior form");
781 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
795 ASSERTL2((i >= 0)&&(i <= 2),
"edge id is out of range");
808 const std::vector<unsigned int> &nummodes,
812 nummodes[modes_offset],
813 nummodes[modes_offset+1]);
821 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
838 boost::ignore_unused(coords_2);
846 for(i = 0; i < nq1; ++i)
848 for(j = 0; j < nq0; ++j)
850 coords_0[i*nq0+j] = (1+z0[j])*(1-z1[i])/2.0 - 1.0;
864 ASSERTL2(edge >= 0 && edge <= 2,
"edge id is out of range");
866 return edge == 0 ? 0 : 1;
872 ASSERTL2(i >= 0 && i <= 2,
"edge id is out of range");
889 m_base[1]->GetBasisKey().GetPointsKey().
894 m_base[1]->GetNumModes(),pkey);
900 "unexpected points distribution");
907 "Information not available to set edge key");
929 "Mapping not defined for this type of basis");
933 int order0 =
m_base[0]->GetNumModes();
934 int order1 =
m_base[1]->GetNumModes();
946 ASSERTL0(
false,
"eid must be between 0 and 2");
949 bool checkForZeroedModes =
false;
954 else if(P != numModes)
956 checkForZeroedModes =
true;
960 if(maparray.num_elements() !=
P)
965 if(signarray.num_elements() !=
P)
971 fill(signarray.get() , signarray.get()+
P, 1);
979 for(i = 0; i <
P; cnt+=order1-i, ++i)
986 swap( maparray[0] , maparray[1] );
988 for(i = 3; i <
P; i+=2)
997 maparray[0] = order1;
999 for(i = 2; i <
P; i++)
1001 maparray[i] = order1-1+i;
1006 swap( maparray[0] , maparray[1] );
1008 for(i = 3; i <
P; i+=2)
1017 for(i = 0; i <
P; i++)
1024 swap( maparray[0] , maparray[1] );
1026 for(i = 3; i <
P; i+=2)
1034 ASSERTL0(
false,
"eid must be between 0 and 2");
1039 if (checkForZeroedModes)
1043 for (
int j = numModes; j <
P; j++)
1046 maparray[j] = maparray[0];
1056 "Mapping not defined for this type of basis");
1059 if(useCoeffPacking ==
true)
1061 switch(localVertexId)
1075 localDOF =
m_base[1]->GetNumModes();
1080 ASSERTL0(
false,
"eid must be between 0 and 2");
1087 switch(localVertexId)
1096 localDOF =
m_base[1]->GetNumModes();
1106 ASSERTL0(
false,
"eid must be between 0 and 2");
1123 "Mapping not defined for this type of basis");
1125 const int nummodes1 =
m_base[1]->GetNumModes();
1128 if(maparray.num_elements() != nEdgeIntCoeffs)
1133 if(signarray.num_elements() != nEdgeIntCoeffs)
1139 fill( signarray.get() , signarray.get()+nEdgeIntCoeffs, 1 );
1146 int cnt = 2*nummodes1 - 1;
1147 for(i = 0; i < nEdgeIntCoeffs; cnt+=nummodes1-2-i, ++i)
1154 for(i = 1; i < nEdgeIntCoeffs; i+=2)
1163 for(i = 0; i < nEdgeIntCoeffs; i++)
1165 maparray[i] = nummodes1+1+i;
1170 for(i = 1; i < nEdgeIntCoeffs; i+=2)
1179 for(i = 0; i < nEdgeIntCoeffs; i++)
1186 for(i = 1; i < nEdgeIntCoeffs; i+=2)
1195 ASSERTL0(
false,
"eid must be between 0 and 2");
1205 "Expansion not of a proper type");
1209 int nummodes0, nummodes1;
1216 nummodes0 =
m_base[0]->GetNumModes();
1217 nummodes1 =
m_base[1]->GetNumModes();
1219 startvalue = 2*nummodes1;
1221 for(i = 0; i < nummodes0-2; i++)
1223 for(j = 0; j < nummodes1-3-i; j++)
1225 outarray[cnt++]=startvalue+j;
1227 startvalue+=nummodes1-2-i;
1235 "Expansion not of expected type");
1238 int nummodes0, nummodes1;
1246 nummodes0 =
m_base[0]->GetNumModes();
1247 nummodes1 =
m_base[1]->GetNumModes();
1249 value = 2*nummodes1-1;
1250 for(i = 0; i < value; i++)
1256 for(i = 0; i < nummodes0-2; i++)
1258 outarray[cnt++]=value;
1259 value += nummodes1-2-i;
1281 nq0 =
m_base[0]->GetNumPoints();
1282 nq1 =
m_base[1]->GetNumPoints();
1305 for(
int i = 0; i < nq; ++i)
1307 for(
int j = 0; j < nq-i; ++j,++cnt)
1310 coords[cnt][0] = -1.0 + 2*j/(
NekDouble)(nq-1);
1311 coords[cnt][1] = -1.0 + 2*i/(
NekDouble)(nq-1);
1315 for(
int i = 0; i < neq; ++i)
1319 I[0] =
m_base[0]->GetI(coll);
1320 I[1] =
m_base[1]->GetI(coll+1);
1323 for (
int j = 0; j < nq1; ++j)
1329 Mat->GetRawPtr() + j*nq0*neq + i, neq);
1379 k1,k2,inarray,outarray,mkey);
1403 int qa =
m_base[0]->GetNumPoints();
1404 int qb =
m_base[1]->GetNumPoints();
1405 int nmodes_a =
m_base[0]->GetNumModes();
1406 int nmodes_b =
m_base[1]->GetNumModes();
1419 OrthoExp.
FwdTrans(array,orthocoeffs);
1429 for(
int j = 0; j < nmodes_a; ++j)
1431 for(
int k = 0; k < nmodes_b-j; ++k, ++cnt)
1434 pow((1.0*j)/(nmodes_a-1),cutoff*nmodes_a),
1435 pow((1.0*k)/(nmodes_b-1),cutoff*nmodes_b));
1437 orthocoeffs[cnt] *= (SvvDiffCoeff *fac);
1448 max_ab = max(max_ab,0);
1452 for(
int j = 0; j < nmodes_a; ++j)
1454 for(
int k = 0; k < nmodes_b-j; ++k, ++cnt)
1456 int maxjk = max(j,k);
1459 orthocoeffs[cnt] *= SvvDiffCoeff *
1470 min(nmodes_a,nmodes_b));
1473 int nmodes = min(nmodes_a,nmodes_b);
1478 for(
int j = 0; j < nmodes_a; ++j)
1480 for(
int k = 0; k < nmodes_b-j; ++k)
1484 orthocoeffs[cnt] *= (SvvDiffCoeff
1485 *exp(-(j+k-nmodes)*(j+k-nmodes)
1487 *(j+k-cutoff+epsilon)))));
1491 orthocoeffs[cnt] *= 0.0;
1500 OrthoExp.
BwdTrans(orthocoeffs,array);
1508 int n_coeffs = inarray.num_elements();
1509 int nquad0 =
m_base[0]->GetNumPoints();
1510 int nquad1 =
m_base[1]->GetNumPoints();
1515 int nqtot = nquad0*nquad1;
1518 int nmodes0 =
m_base[0]->GetNumModes();
1519 int nmodes1 =
m_base[1]->GetNumModes();
1520 int numMin2 = nmodes0;
1542 m_TriExp ->BwdTrans(inarray,phys_tmp);
1543 m_OrthoTriExp->FwdTrans(phys_tmp, coeff);
1545 for (i = 0; i < n_coeffs; i++)
1550 numMin += numMin2 - 1;
1555 m_OrthoTriExp->BwdTrans(coeff,phys_tmp);
1556 m_TriExp ->FwdTrans(phys_tmp, outarray);
1567 if(inarray.get() == outarray.get())
1573 m_ncoeffs, tmp.get(), 1, 0.0, outarray.get(), 1);
1578 m_ncoeffs, inarray.get(), 1, 0.0, outarray.get(), 1);
1591 int nquad0 =
m_base[0]->GetNumPoints();
1592 int nquad1 =
m_base[1]->GetNumPoints();
1599 for(i = 0; i < nquad1; ++i)
1602 w0.get(),1, outarray.get()+i*nquad0,1);
1610 for(i = 0; i < nquad1; ++i)
1613 outarray.get()+i*nquad0,1);
1619 for(i = 0; i < nquad1; ++i)
1621 Blas::Dscal(nquad0,0.5*w1[i],outarray.get()+i*nquad0,1);
1626 ASSERTL0(
false,
"Unsupported quadrature points type.");
1635 boost::ignore_unused(standard);
1637 int np1 =
m_base[0]->GetNumPoints();
1638 int np2 =
m_base[1]->GetNumPoints();
1639 int np = max(np1,np2);
1646 for(
int i = 0; i < np-1; ++i)
1649 for(
int j = 0; j < np-i-2; ++j)
1651 conn[cnt++] = row +j;
1652 conn[cnt++] = row +j+1;
1653 conn[cnt++] = rowp1 +j;
1655 conn[cnt++] = rowp1 +j+1;
1656 conn[cnt++] = rowp1 +j;
1657 conn[cnt++] = row +j+1;
1660 conn[cnt++] = row +np-i-2;
1661 conn[cnt++] = row +np-i-1;
1662 conn[cnt++] = rowp1+np-i-2;
virtual void v_IProductWRTDerivBase_MatOp(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
#define ASSERTL0(condition, msg)
virtual int v_GetEdgeNcoeffs(const int i) const
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
virtual void v_GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
const int kSVVDGFiltermodesmax
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Backward tranform for triangular elements.
virtual void v_GetEdgeToElementMap(const int eid, const Orientation edgeOrient, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, int P=-1)
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
static Array< OneD, NekDouble > NullNekDouble1DArray
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)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
std::shared_ptr< StdTriExp > StdTriExpSharedPtr
#define sign(a, b)
return the sign(b)*a
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 NumBndryCoeffs(void) const
int GetBasisNumModes(const int dir) const
This function returns the number of expansion modes in the dir direction.
virtual void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_FwdTrans_BndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
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_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
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
Principle Modified Functions .
void Sdiv(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha/y.
void LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
Convert local cartesian coordinate xi into local collapsed coordinates eta.
NekDouble Integral(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &w0, const Array< OneD, const NekDouble > &w1)
virtual void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
const int kSVVDGFiltermodesmin
std::shared_ptr< DNekMat > DNekMatSharedPtr
LibUtilities::NekManager< StdMatrixKey, DNekBlkMat, StdMatrixKey::opLess > m_stdStaticCondMatrixManager
virtual int v_GetNverts() const
MatrixType GetMatrixType() const
virtual int v_NumBndryCoeffs() const
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 A[m x n], B[n x k], C[m x k].
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray)
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey)
virtual const LibUtilities::BasisKey v_DetEdgeBasisKey(const int edge) const
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
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...
Gauss Radau pinned at x=-1, .
virtual int v_DetCartesianDirOfEdge(const int edge)
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey)
Principle Orthogonal Functions .
1D Evenly-spaced points using Lagrange polynomial
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset)
virtual void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true)
virtual void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual int v_NumDGBndryCoeffs() const
The base class for all shapes.
int GetEdgeNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th edge.
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray)
static const NekDouble kNekZeroTol
int GetNumModes() const
Returns the order of the basis.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
int getNumberOfCoefficients(int Na)
const LibUtilities::BasisSharedPtr & GetBasis(int dir) const
This function gets the shared point to basis in the dir direction.
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Principle Modified Functions .
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey)
void WeakDerivMatrixOp_MatFree(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
int getNumberOfCoefficients(int Na, int Nb)
DNekMatSharedPtr CreateGeneralMatrix(const StdMatrixKey &mkey)
this function generates the mass matrix
Principle Orthogonal Functions .
Defines a specification for a set of points.
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true)
virtual void v_IProductWRTBase_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
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].
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
virtual void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
NekDouble GetConstFactor(const ConstFactorType &factor) const
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
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)
const NekDouble kSVVDGFilter[9][11]
virtual LibUtilities::ShapeType v_DetShapeType() const
virtual int v_GetEdgeNumPoints(const int i) const
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.
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)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrates the specified function over the domain.
static double Ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: output = .
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
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_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
bool ConstFactorExists(const ConstFactorType &factor) const
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
void MassMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual bool v_IsBoundaryInteriorExpansion()
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space...
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false)
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray)
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
LibUtilities::NekManager< StdMatrixKey, DNekMat, StdMatrixKey::opLess > m_stdMatrixManager
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
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.
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)
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)
std::shared_ptr< StdSegExp > StdSegExpSharedPtr
virtual void v_GetEdgeInteriorMap(const int eid, const Orientation edgeOrient, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Array< OneD, LibUtilities::BasisSharedPtr > m_base
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.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
LibUtilities::BasisType GetEdgeBasisType(const int i) const
This function returns the type of expansion basis on the i-th edge.
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_x, Array< OneD, NekDouble > &coords_y, Array< OneD, NekDouble > &coords_z)
Describes the specification for a Basis.
1D Gauss-Lobatto-Legendre quadrature points
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 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.
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual LibUtilities::BasisType v_GetEdgeBasisType(const int i) const
virtual int v_GetNedges() const
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space...