35 #include <boost/core/ignore_unused.hpp> 
   49     namespace LocalRegions
 
   52             StdExpansion(), 
Expansion(pGeom), StdExpansion2D()
 
   64                      "Routine only set up for two-dimensions");
 
   74                 for (
int i = 0; i < nedges;++i)
 
   80                     if (edgeExp->GetRightAdjacentElementExp())
 
   82                         if (edgeExp->GetRightAdjacentElementExp()->GetGeom()
 
   83                             ->GetGlobalID() == 
GetGeom()->GetGlobalID())
 
   95             int nquad_e = min(EdgeExp->GetNumPoints(0),
 
   96                               int(normals[0].size()));
 
   98             int nEdgePts = EdgeExp->GetTotPoints();
 
  100             Vmath::Vmul (nquad_e, normals[0], 1, Fx, 1, edgePhys, 1);
 
  101             Vmath::Vvtvp(nquad_e, normals[1], 1, Fy, 1, edgePhys, 1,
 
  108                 if (locExp->GetRightAdjacentElementExp()->GetGeom()->GetGlobalID()
 
  131                 for (i = 0; i < nedges; ++i)
 
  137                     if (edgeExp->GetRightAdjacentElementExp())
 
  139                         if (edgeExp->GetRightAdjacentElementExp()->GetGeom()
 
  140                             ->GetGlobalID() == 
GetGeom()->GetGlobalID())
 
  155             int order_e = map->size();
 
  157             int n_coeffs = EdgeExp->GetNcoeffs();
 
  160             if(n_coeffs!=order_e) 
 
  162                 EdgeExp->FwdTrans(Fn, edgeCoeffs);
 
  172                 LibUtilities::BasisKey bkey_ortho(btype,EdgeExp->GetBasis(0)->GetNumModes(),EdgeExp->GetBasis(0)->GetPointsKey());
 
  173                 LibUtilities::BasisKey bkey(EdgeExp->GetBasis(0)->GetBasisType(),EdgeExp->GetBasis(0)->GetNumModes(),EdgeExp->GetBasis(0)->GetPointsKey());
 
  177                 for(i = order_e; i < n_coeffs; i++)
 
  185                 EdgeExp->MassMatrixOp(edgeCoeffs, edgeCoeffs, masskey);
 
  189                 EdgeExp->IProductWRTBase(Fn, edgeCoeffs);
 
  200             if(EdgeExp->GetBasis(0)->GetBasisType() !=
 
  204                 for(i = 0; i < order_e; ++i)
 
  206                     outarray[(*map)[i].index] +=
 
  207                         (*map)[i].sign * edgeCoeffs[i];
 
  212                 int nCoeffs0, nCoeffs1;
 
  226                         nCoeffs1 = 
m_base[1]->GetNumModes();
 
  228                         for(i = 0; i < order_e; ++i)
 
  230                             for(j = 0; j < nCoeffs1; j++)
 
  232                                 outarray[(*map)[i].index + j*order_e] +=
 
  233                                     mat_gauss->GetPtr()[j]*
 
  234                                     (*map)[i].sign*edgeCoeffs[i];
 
  241                         nCoeffs0 = 
m_base[0]->GetNumModes();
 
  243                         for(i = 0; i < order_e; ++i)
 
  245                             for(j = 0; j < nCoeffs0; j++)
 
  247                                 outarray[(*map)[i].index - j] +=
 
  248                                     mat_gauss->GetPtr()[order_e - 1 -j]*
 
  249                                     (*map)[i].sign*edgeCoeffs[i];
 
  256                         nCoeffs1 = 
m_base[1]->GetNumModes();
 
  258                         for(i = 0; i < order_e; ++i)
 
  260                             for(j = 0; j < nCoeffs1; j++)
 
  262                                 outarray[(*map)[i].index - j*order_e] +=
 
  263                                     mat_gauss->GetPtr()[order_e - 1 - j]*
 
  264                                     (*map)[i].sign*edgeCoeffs[i];
 
  271                         nCoeffs0 = 
m_base[0]->GetNumModes();
 
  273                         for(i = 0; i < order_e; ++i)
 
  275                             for(j = 0; j < nCoeffs0; j++)
 
  277                                 outarray[(*map)[i].index + j] +=
 
  278                                     mat_gauss->GetPtr()[j]*
 
  279                                     (*map)[i].sign*edgeCoeffs[i];
 
  285                         ASSERTL0(
false,
"edge value (< 3) is out of range");
 
  299             for(i = 0; i < nedges; ++i)
 
  303                                                    e_tmp = inout + cnt);
 
  324             for(e = 0; e < nedges; ++e)
 
  326                 order_e = EdgeExp[e]->GetNcoeffs();
 
  327                 nquad_e = EdgeExp[e]->GetNumPoints(0);
 
  334                 for(i = 0; i < order_e; ++i)
 
  336                     edgeCoeffs[i] = inarray[i+cnt];
 
  340                 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
  389             for(e = 0; e < nedges; ++e)
 
  391                 nquad_e = EdgeExp[e]->GetNumPoints(0);
 
  397                 EdgeExp[e]->BwdTrans(edgeCoeffs[e], edgePhys);
 
  399                 Vmath::Vmul(nquad_e, normals[dir], 1, edgePhys, 1, edgePhys, 1);
 
  417             int order_e = EdgeExp->GetNcoeffs();
 
  418             int nquad_e = EdgeExp->GetNumPoints(0);
 
  428             StdRegions::VarCoeffMap::const_iterator x;
 
  431             if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
 
  435                     edge, EdgeExp, x->second, work);
 
  436                 Vmath::Vmul(nquad_e, work, 1, edgePhys, 1, edgePhys, 1);
 
  439             EdgeExp->IProductWRTBase(edgePhys, coeff);
 
  442             for(i = 0; i < order_e; ++i)
 
  444                 outarray[map[i]] += 
sign[i]*coeff[i];
 
  458             ASSERTL0(&inarray[0] != &outarray[0],
 
  459                      "Input and output arrays use the same memory");
 
  466             for(e = 0; e < nedges; ++e)
 
  468                 order_e = EdgeExp[e]->GetNcoeffs();
 
  472                 Vmath::Vcopy(order_e, tmp = inarray + cnt, 1, edgeCoeffs, 1);
 
  473                 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
  475                     tau, e, EdgeExp, edgePhys, dirForcing, outarray);
 
  494             int nquad_e = EdgeExp[edge]->GetNumPoints(0);
 
  495             int order_e = EdgeExp[edge]->GetNcoeffs();
 
  530             StdRegions::VarCoeffMap::const_iterator x;
 
  532             if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
 
  536                     edge, EdgeExp[edge], x->second, work);
 
  537                 Vmath::Vmul(nquad_e, work, 1, edgePhys, 1, edgePhys, 1);
 
  543             EdgeExp[edge]->IProductWRTBase(edgePhys, outcoeff);
 
  545             for(i = 0; i < order_e; ++i)
 
  547                 outarray[emap[i]] += 
sign[i] * tau * outcoeff[i];
 
  557             for(n = 0; n < coordim; ++n)
 
  575                     Vmath::Vmul(nquad_e, ncdotMF_e, 1, edgePhys, 1, inval, 1);
 
  579                     Vmath::Vmul(nquad_e, normals[n], 1, edgePhys, 1, inval, 1);
 
  592                 EdgeExp[edge]->IProductWRTBase(inval, outcoeff);
 
  595                 for(i = 0; i < ncoeffs; ++i)
 
  598                     for(j = 0; j < order_e; ++j)
 
  600                         tmpcoeff[i] += (*invMass)(i,emap[j]) * 
sign[j]
 
  620                     Coeffs = Coeffs  + Dmat*Tmpcoeff;
 
  624                     if(varcoeffs.find(VarCoeff[n]) != varcoeffs.end())
 
  630                         Coeffs = Coeffs  + Dmat*Tmpcoeff;
 
  635                         Coeffs = Coeffs  + Dmat*Tmpcoeff;
 
  663             for (
unsigned int i = 0; i < EdgeExp->GetNcoeffs(); ++i)
 
  665                 edgetmp[i] = tmp[emap[i]];
 
  669             EdgeExp->BwdTrans(edgetmp, outarray);
 
  690                              "HybridDGHelmholtz matrix not set up " 
  691                              "for non boundary-interior expansions");
 
  715                     DNekMat LocMat(ncoeffs,ncoeffs);
 
  725                     StdRegions::VarCoeffMap::const_iterator x;
 
  727                     for(i=0;  i < coordim; ++i)
 
  761                                 Mat = Mat + Dmat*invMass*
Transpose(Dmat);
 
  777                             Mat = Mat + DmatL*invMass*
Transpose(DmatR);
 
  782                             Mat = Mat + Dmat*invMass*
Transpose(Dmat);
 
  789                     Mat = Mat + lambdaval*Mass;
 
  792                     for(i = 0; i < nedges; ++i)
 
  795                         order_e = EdgeExp->GetNcoeffs();  
 
  797                         int nq = EdgeExp->GetNumPoints(0);
 
  811                         for(j = 0; j < order_e; ++j)
 
  813                             for(k = 0; k < order_e; ++k)
 
  815                                 Mat(emap[j],emap[k]) = Mat(emap[j],emap[k]) + tau*
sign[j]*
sign[k]*
eMass(j,k);
 
  849                     for(i = 0; i < nedges; ++i)
 
  857                     for(j = 0; j < nbndry; ++j)
 
  874                         for(k = 0; k < ncoeffs; ++k)
 
  920                     for(i = 0; i < nedges; ++i)
 
  942                         ASSERTL0(
false,
"Direction not known");
 
  953                                 v_GetMF(dir,shapedim,varcoeffs);
 
  992                     for(j = 0; j < nbndry; ++j)
 
  998                         for(k = 0; k < ncoeffs; ++k)
 
 1000                             Ulam[k] = lamToU(k,j);
 
 1017                         Vmath::Vcopy(ncoeffs,&ulam[0],1,&(Qmat.GetPtr())[0]+j*ncoeffs,1);
 
 1025                     int order_e, nquad_e;
 
 1030                     StdRegions::VarCoeffMap::const_iterator x;
 
 1072                     for(i = 0; i < nedges; ++i)
 
 1078                     for(i = 0; i < nbndry; ++i)
 
 1086                         for(e = 0; e < nedges; ++e)
 
 1088                             order_e = EdgeExp[e]->GetNcoeffs();
 
 1089                             nquad_e = EdgeExp[e]->GetNumPoints(0);
 
 1106                             for(j = 0; j < order_e; ++j)
 
 1108                                 edgeCoeffs[j] = 
sign[j]*(*LamToQ[0])(emap[j],i);
 
 1111                             EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
 1123                                                          normals, varcoeffs);
 
 1136                             for(j = 0; j < order_e; ++j)
 
 1138                                 edgeCoeffs[j] = 
sign[j]*(*LamToQ[1])(emap[j],i);
 
 1141                             EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
 1155                                                          normals, varcoeffs);
 
 1172                                 for(j = 0; j < order_e; ++j)
 
 1174                                     edgeCoeffs[j] = 
sign[j]*(*LamToQ[2])(emap[j],i);
 
 1177                                 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
 1192                             for(j = 0; j < order_e; ++j)
 
 1194                                 edgeCoeffs[j] = 
sign[j]*LamToU(emap[j],i) - lam[cnt+j];
 
 1197                             EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
 
 1200                             if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
 
 1203                                 Vmath::Vmul(nquad_e,varcoeff_work,1,edgePhys,1,edgePhys,1);
 
 1209                             EdgeExp[e]->IProductWRTBase(work, edgeCoeffs);
 
 1211                             EdgeExp[e]->SetCoeffsToOrientation(edgedir,edgeCoeffs,edgeCoeffs);
 
 1213                             for(j = 0; j < order_e; ++j)
 
 1215                                 BndMat(cnt+j,i) = edgeCoeffs[j];
 
 1242                                  &(lmat->GetPtr())[0],1);
 
 1248                 ASSERTL0(
false,
"This matrix type cannot be generated from this class");
 
 1286             Out_d  = InvMass*Coeffs;
 
 1301                      "Not set up for non boundary-interior expansions");
 
 1302             ASSERTL1(inoutmat->GetRows() == inoutmat->GetColumns(),
 
 1303                      "Assuming that input matrix was square");
 
 1307             int order_e = edgeExp->GetNcoeffs();
 
 1316             DNekScalMat &edgemat = *edgeExp->GetLocMatrix(mkey);
 
 1330             int rows = inoutmat->GetRows();
 
 1345                 for(i = 0; i < order_e; ++i)
 
 1347                     for(j = 0; j < nbndry; ++j)
 
 1349                         if(map[i] == bmap[j])
 
 1355                     ASSERTL1(j != nbndry,
"Did not find number in map");
 
 1365                 for(i = 0; i < edge; ++i)
 
 1370                 for(i = 0; i < order_e; ++i)
 
 1377                     switch(edgeExp->GetBasis(0)->GetBasisType())
 
 1380                         reverse( map.get() , map.get()+order_e);
 
 1383                         reverse( map.get() , map.get()+order_e);
 
 1387                             swap(map[0],map[1]);
 
 1388                             for(i = 3; i < order_e; i+=2)
 
 1395                         ASSERTL0(
false,
"Edge boundary type not valid for this method");
 
 1401                 ASSERTL0(
false,
"Could not identify matrix type from dimension");
 
 1404             for(i = 0; i < order_e; ++i)
 
 1407                 for(j = 0; j < order_e; ++j)
 
 1410                     (*inoutmat)(id1,id2) +=  edgemat(i,j)*
sign[i]*
sign[j];
 
 1430                      "Not set up for non boundary-interior expansions");
 
 1433             int order_e = edgeExp->GetNcoeffs();
 
 1444             DNekScalMat &edgemat = *edgeExp->GetLocMatrix(mkey);
 
 1450             for (i = 0; i < order_e; ++i)
 
 1452                 vEdgeCoeffs[i] = incoeffs[map[i]]*
sign[i];
 
 1455             vEdgeCoeffs = edgemat * vEdgeCoeffs;
 
 1457             for (i = 0; i < order_e; ++i)
 
 1459                 coeffs[map[i]] += vEdgeCoeffs[i]*
sign[i];
 
 1469             int nVerts, vid1, vid2, vMap1, vMap2;
 
 1476                     nVerts, nVerts, 0.0, storage);
 
 1477             DNekMat &VertexMat = (*m_vertexmatrix);
 
 1479             for (vid1 = 0; vid1 < nVerts; ++vid1)
 
 1483                 for (vid2 = 0; vid2 < nVerts; ++vid2)
 
 1486                     VertexValue = (*r_bnd)(vMap1, vMap2);
 
 1487                     VertexMat.SetValue(vid1, vid2, VertexValue);
 
 1491             return m_vertexmatrix;
 
 1506             map<int, int> invmap;
 
 1507             for (j = 0; j < nBndCoeffs; ++j)
 
 1509                 invmap[bmap[j]] = j;
 
 1525             for (n = 0; n < nEdgeCoeffs; ++n)
 
 1527                 edgemaparray[n] = invmap[maparray[n]];
 
 1530             return edgemaparray;
 
 1539                     const int edge)
 const 
 1541             std::map<int, NormalVector>::const_iterator x;
 
 1544                         "Edge normal not computed.");
 
 1551                                  const int nq0,  
const int nq1)
 
 1553             boost::ignore_unused(nq1);
 
 1555             if (idmap.size() != nq0)
 
 1563                     for (
int i = 0; i < nq0; ++i)
 
 1571                     for (
int i = 0; i < nq0; ++i)
 
 1578                     ASSERTL0(
false, 
"Unknown orientation");
 
 1613             int nquad_e = EdgeExp_e->GetNumPoints(0);
 
 1615             int nquad0  = 
m_base[0]->GetNumPoints();
 
 1616             int nquad1  = 
m_base[1]->GetNumPoints();
 
 1617             int nqtot   = nquad0*nquad1;
 
 1638             StdRegions::VarCoeffMap::const_iterator MFdir;
 
 1643             for (
int k=0; k<coordim; k++)
 
 1645                 MFdir = varcoeffs.find(MMFCoeffs[dir*5+k]);
 
 1646                 tmp = MFdir->second;
 
 1668             Vmath::Vmul (nq, &vec[0][0], 1, &normals[0][0], 1, &Fn[0], 1);
 
 1669             Vmath::Vvtvp(nq, &vec[1][0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
 
 1670             Vmath::Vvtvp(nq, &vec[2][0], 1, &normals[2][0], 1, &Fn[0], 1, &Fn[0], 1);
 
 1672             return StdExpansion::Integral(Fn);
 
#define ASSERTL0(condition, msg)
 
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
 
#define sign(a, b)
return the sign(b)*a
 
Describes the specification for a Basis.
 
virtual void v_DGDeriv(const int dir, const Array< OneD, const NekDouble > &incoeffs, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &edgeCoeffs, Array< OneD, NekDouble > &out_d)
 
virtual void v_AddRobinTraceContribution(const int traceid, const Array< OneD, const NekDouble > &primCoeffs, const Array< OneD, NekDouble > &incoeffs, Array< OneD, NekDouble > &coeffs)
 
std::vector< bool > m_requireNeg
 
virtual Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
 
void SetTraceToGeomOrientation(Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, NekDouble > &inout)
 
virtual const NormalVector & v_GetTraceNormal(const int edge) const
 
void v_ReOrientTracePhysMap(const StdRegions::Orientation orient, Array< OneD, int > &idmap, const int nq0, const int nq1)
 
virtual void v_AddEdgeNormBoundaryInt(const int edge, const ExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
virtual Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
 
Array< OneD, unsigned int > GetTraceInverseBoundaryMap(int eid)
 
virtual void v_SetUpPhysNormals(const int edge)
 
virtual void v_AddRobinMassMatrix(const int edgeid, const Array< OneD, const NekDouble > &primCoeffs, DNekMatSharedPtr &inoutmat)
 
void AddNormTraceInt(const int dir, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &edgeCoeffs, Array< OneD, NekDouble > &outarray)
 
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
 
virtual Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
 
SpatialDomains::Geometry2DSharedPtr GetGeom2D() const
 
void AddHDGHelmholtzEdgeTerms(const NekDouble tau, const int edge, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, NekDouble > &edgePhys, const StdRegions::VarCoeffMap &dirForcing, Array< OneD, NekDouble > &outarray)
 
Array< OneD, NekDouble > v_GetnEdgecdotMF(const int dir, const int edge, ExpansionSharedPtr &EdgeExp_e, const Array< OneD, const Array< OneD, NekDouble > > &normals, const StdRegions::VarCoeffMap &varcoeffs)
 
virtual NekDouble v_VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
 
void GetPhysEdgeVarCoeffsFromElement(const int edge, ExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &varcoeff, Array< OneD, NekDouble > &outarray)
 
void AddEdgeBoundaryInt(const int edge, ExpansionSharedPtr &EdgeExp, Array< OneD, NekDouble > &edgePhys, Array< OneD, NekDouble > &outarray, const StdRegions::VarCoeffMap &varcoeffs=StdRegions::NullVarCoeffMap)
 
virtual DNekMatSharedPtr v_BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
 
std::map< int, NormalVector > m_edgeNormals
 
void AddHDGHelmholtzTraceTerms(const NekDouble tau, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, const StdRegions::VarCoeffMap &dirForcing, Array< OneD, NekDouble > &outarray)
 
SpatialDomains::GeometrySharedPtr GetGeom() const
 
SpatialDomains::GeometrySharedPtr m_geom
 
std::vector< ExpansionWeakPtr > m_traceExp
 
Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
 
ExpansionSharedPtr GetLeftAdjacentElementExp() const
 
const NormalVector & GetTraceNormal(const int id) const
 
virtual void v_ComputeTraceNormal(const int id)
 
int GetLeftAdjacentElementTrace() const
 
Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
 
Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
 
void AddEdgeNormBoundaryInt(const int edge, const std::shared_ptr< Expansion > &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
 
virtual StdRegions::Orientation v_GetTraceOrient(int trace)
 
ExpansionSharedPtr GetTraceExp(const int traceid)
 
StdRegions::Orientation GetTraceOrient(int trace)
 
IndexMapValuesSharedPtr GetIndexMap(const IndexMapKey &ikey)
 
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
 
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
 
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
 
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.
 
int NumBndryCoeffs(void) const
 
int NumDGBndryCoeffs(void) const
 
int GetVertexMap(const int localVertexId, bool useCoeffPacking=false)
 
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...
 
int GetNtraces() const
Returns the number of trace elements connected to this element.
 
int GetNverts() const
This function returns the number of vertices of the expansion domain.
 
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 GetTraceInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eForwards)
 
int GetTraceNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th trace.
 
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space.
 
bool IsBoundaryInteriorExpansion()
 
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
 
const ConstFactorMap & GetConstFactors() const
 
const VarCoeffMap & GetVarCoeffs() const
 
MatrixType GetMatrixType() const
 
const Array< OneD, const NekDouble > & GetVarCoeff(const StdRegions::VarCoeffType &coeff) const
 
bool HasVarCoeff(const StdRegions::VarCoeffType &coeff) const
 
NekDouble GetConstFactor(const ConstFactorType &factor) const
 
const VarCoeffMap GetVarCoeffAsMap(const VarCoeffType &coeff) const
 
void InterpCoeff1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
 
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points .
 
@ eGLL_Lagrange
Lagrange for SEM basis .
 
@ eModified_A
Principle Modified Functions .
 
std::shared_ptr< Expansion > ExpansionSharedPtr
 
std::shared_ptr< IndexMapValues > IndexMapValuesSharedPtr
 
std::shared_ptr< Expansion1D > Expansion1DSharedPtr
 
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
 
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
 
@ eInvLaplacianWithUnityMean
 
std::map< ConstFactorType, NekDouble > ConstFactorMap
 
static ConstFactorMap NullConstFactorMap
 
The above copyright notice and this permission notice shall be included.
 
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
 
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
 
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 Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
 
void Neg(int n, T *x, const int incx)
Negate x = -x.
 
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 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)