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;
#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)
LibUtilities::BasisType GetEdgeBasisType(const int i) const
This function returns the type of expansion basis on the i-th edge.
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)
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 GetEdgeNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th edge.
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 int v_GetNedges() 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 int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false)
virtual LibUtilities::BasisType v_GetEdgeBasisType(const int i) const
virtual int v_NumBndryCoeffs() const
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey)
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_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_GetEdgeInteriorMap(const int eid, const Orientation edgeOrient, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray)
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 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_GetEdgeNcoeffs(const int i) 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)
virtual int v_GetEdgeNumPoints(const int i) const
virtual const LibUtilities::BasisKey v_DetEdgeBasisKey(const int edge) const
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 void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
virtual void v_GetEdgeToElementMap(const int eid, const Orientation edgeOrient, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, int P=-1)
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey)
virtual int v_DetCartesianDirOfEdge(const int edge)
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 A[m x n], B[n x k], C[m x k].
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
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs
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*y.
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.