46 namespace MultiRegions
58 DisContField1D::DisContField1D():
60 m_bndCondExpansions(),
81 const std::string &variable,
82 const bool SetUpJustDG)
84 m_bndCondExpansions(),
110 (*m_exp)[ElmtID[i]]->
111 as<LocalRegions::Expansion1D>();
113 locExpList->GetExp(0)->
114 as<LocalRegions::Expansion0D>();
116 exp0d->SetAdjacentElementExp(VertexID[i], exp1d);
158 int ElmtPointGeom = 0;
159 int TracePointGeom = 0;
162 for (
int i = 0; i <
m_exp->size(); ++i)
165 for (
int j = 0; j < exp1d->GetNverts(); ++j)
167 ElmtPointGeom = (exp1d->GetGeom1D())->GetVid(j);
169 for (
int k = 0; k <
m_trace->GetExpSize(); ++k)
171 TracePointGeom =
m_trace->GetExp(k)->GetGeom()->GetVid(0);
173 if (TracePointGeom == ElmtPointGeom)
196 m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt+e));
201 ASSERTL0(
false,
"Periodic verts need setting up");
210 for (cnt = n = 0; n <
m_exp->size(); ++n)
212 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v, ++cnt)
219 boost::unordered_map<int,pair<int,int> > perVertToExpMap;
220 boost::unordered_map<int,pair<int,int> >
::iterator it2;
221 for (n = 0; n <
m_exp->size(); ++n)
223 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
226 (*
m_exp)[n]->GetGeom()->GetVid(v));
230 perVertToExpMap[it->first] = make_pair(n,v);
237 for (n = 0; n <
m_exp->size(); ++n)
239 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
241 int vertGeomId = (*m_exp)[n]->GetGeom()->GetVid(v);
249 it2 = perVertToExpMap.find(ent.
id);
251 if (it2 == perVertToExpMap.end())
253 if (
m_session->GetComm()->GetRowComm()->GetSize() > 1 &&
260 ASSERTL1(
false,
"Periodic vert not found!");
264 int offset =
m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
265 [n][v]->GetElmtId());
268 int offset2 =
m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
270 [it2->second.second]->GetElmtId());
286 if (traceEl->GetLeftAdjacentElementVertex () == -1 ||
287 traceEl->GetRightAdjacentElementVertex() == -1)
297 int traceGeomId = traceEl->GetGeom0D()->GetGlobalID();
303 fwd = traceGeomId == min(traceGeomId,pIt->second[0].id);
307 int offset =
m_trace->GetPhys_Offset(traceEl->GetElmtId());
309 GetTraceToUniversalMapUnique(offset) >= 0;
313 else if (traceEl->GetLeftAdjacentElementVertex () != -1 &&
314 traceEl->GetRightAdjacentElementVertex() != -1)
318 (traceEl->GetLeftAdjacentElementExp().get()) ==
323 ASSERTL2(
false,
"Unconnected trace element!");
336 const std::string &variable)
343 map<int,int> GeometryToRegionsMap;
345 SpatialDomains::BoundaryRegionCollection::const_iterator it;
353 for(it = bregions.begin(); it != bregions.end(); ++it)
356 for (bregionIt = it->second->begin();
357 bregionIt != it->second->end(); bregionIt++)
361 int id = (*(bregionIt->second))[0]->GetGlobalID();
362 GeometryToRegionsMap[id] = it->first;
367 map<int,SpatialDomains::GeometrySharedPtr> EndOfDomain;
370 for(domIt = domain.begin(); domIt != domain.end(); ++domIt)
373 for(
int i = 0; i < geomvector->size(); ++i)
375 for(
int j = 0; j < 2; ++j)
377 int vid = (*geomvector)[i]->GetVid(j);
378 if(EndOfDomain.count(vid) == 0)
380 EndOfDomain[vid] = (*geomvector)[i]->GetVertex(j);
384 EndOfDomain.erase(vid);
389 ASSERTL1(EndOfDomain.size() == 2,
"Did not find two ends of domain");
393 for(regIt = EndOfDomain.begin(); regIt != EndOfDomain.end(); ++regIt)
395 if(GeometryToRegionsMap.count(regIt->first) != 0)
398 ASSERTL1(iter != GeometryToRegionsMap.end(),
"Failied to find GeometryToRegionMap");
399 int regionId = iter->second;
400 SpatialDomains::BoundaryRegionCollection::const_iterator bregionsIter = bregions.find(regionId);
401 ASSERTL1(bregionsIter != bregions.end(),
"Failed to find boundary region");
403 returnval->AddBoundaryRegions (regionId,breg);
405 SpatialDomains::BoundaryConditionCollection::const_iterator bconditionsIter = bconditions.find(regionId);
406 ASSERTL1(bconditionsIter != bconditions.end(),
"Failed to find boundary collection");
408 returnval->AddBoundaryConditions(regionId,bcond);
416 gvec->push_back(regIt->second);
417 (*breg)[regIt->first] = gvec;
419 returnval->AddBoundaryRegions(bregions.size()+numNewBc,breg);
425 (*bCondition)[variable] = notDefinedCondition;
427 returnval->AddBoundaryConditions(bregions.size()+numNewBc,bCondition);
448 const std::string &variable,
449 bool SetToOneSpaceDimension):
450 ExpList1D(pSession,graph1D,domain, true,variable,SetToOneSpaceDimension),
451 m_bndCondExpansions(),
470 m_bndCondExpansions(In.m_bndCondExpansions),
471 m_bndConditions(In.m_bndConditions),
472 m_globalBndMat(In.m_globalBndMat),
474 m_traceMap(In.m_traceMap),
475 m_boundaryVerts(In.m_boundaryVerts),
476 m_periodicVerts(In.m_periodicVerts),
477 m_periodicFwdCopy(In.m_periodicFwdCopy),
478 m_periodicBwdCopy(In.m_periodicBwdCopy),
479 m_leftAdjacentVerts(In.m_leftAdjacentVerts)
513 const std::string variable)
521 SpatialDomains::BoundaryRegionCollection::const_iterator it;
524 for (it = bregions.begin(); it != bregions.end(); ++it)
528 if (boundaryCondition->GetBoundaryConditionType() !=
532 for (bregionIt = it->second->begin();
533 bregionIt != it->second->end(); bregionIt++)
535 cnt += bregionIt->second->size();
562 const std::string variable)
570 = boost::dynamic_pointer_cast<
572 SpatialDomains::BoundaryRegionCollection::const_iterator it;
577 int i, region1ID, region2ID;
581 map<int,int> BregionToVertMap;
585 for (it = bregions.begin(); it != bregions.end(); ++it)
589 if (locBCond->GetBoundaryConditionType()
595 int id = (*(it->second->begin()->second))[0]->GetGlobalID();
597 BregionToVertMap[it->first] = id;
603 int n = vComm->GetSize();
604 int p = vComm->GetRank();
607 nregions[p] = BregionToVertMap.size();
614 for (i = 1; i < n; ++i)
616 regOffset[i] = regOffset[i-1] + nregions[i-1];
621 for(i = regOffset[p], iit = BregionToVertMap.begin();
622 iit != BregionToVertMap.end(); ++iit, ++i)
624 bregid [i] = iit->first;
625 bregmap[i] = iit->second;
626 islocal.insert(iit->first);
632 for (
int i = 0; i < totRegions; ++i)
634 BregionToVertMap[bregid[i]] = bregmap[i];
638 for (it = bregions.begin(); it != bregions.end(); ++it)
642 if (locBCond->GetBoundaryConditionType()
649 region1ID = it->first;
650 region2ID = boost::static_pointer_cast<
652 locBCond)->m_connectedBoundaryRegion;
654 ASSERTL0(BregionToVertMap.count(region1ID) != 0,
655 "Cannot determine vertex of region1ID");
657 ASSERTL0(BregionToVertMap.count(region2ID) != 0,
658 "Cannot determine vertex of region2ID");
662 islocal.count(region2ID) != 0);
684 const std::string variable,
697 SpatialDomains::BoundaryRegionCollection::const_iterator it;
705 for (it = bregions.begin(); it != bregions.end(); ++it)
708 bconditions, it->first, variable);
710 if (locBCond->GetBoundaryConditionType() ==
715 for (bregionIt = it->second->begin();
716 bregionIt != it->second->end(); bregionIt++)
718 for (k = 0; k < bregionIt->second->size(); k++)
720 if ((vert = boost::dynamic_pointer_cast
722 (*bregionIt->second)[k])))
727 bndCondExpansions[cnt] = locPointExp;
728 bndConditions[cnt++] = locBCond;
733 "dynamic cast to a vertex failed");
741 for (it = bregions.begin(); it != bregions.end(); ++it)
745 switch(locBCond->GetBoundaryConditionType())
752 for (bregionIt = it->second->begin();
753 bregionIt != it->second->end(); bregionIt++)
755 for (k = 0; k < bregionIt->second->size(); k++)
757 if((vert = boost::dynamic_pointer_cast
759 (*bregionIt->second)[k])))
764 bndCondExpansions[cnt] = locPointExp;
765 bndConditions[cnt++] = locBCond;
770 "dynamic cast to a vertex failed");
780 ASSERTL0(
false,
"This type of BC not implemented yet");
793 "Routine currently only tested for HybridDGHelmholtz");
796 "Full matrix global systems are not supported for HDG "
801 "The local to global map is not set up for the requested "
810 (*m_globalBndMat)[mkey] = glo_matrix;
814 glo_matrix = matrixIter->second;
833 for(
int v = 0; v < 2; ++v)
839 if(vertExp->GetLeftAdjacentElementExp()->GetGeom()->GetGlobalID() != (*m_exp)[i]->GetGeom()->GetGlobalID())
925 for (cnt = n = 0; n < nElements; ++n)
932 Basis = (*m_exp)[n]->GetBasis(0);
934 for(v = 0; v < 2; ++v, ++cnt)
936 int offset =
m_trace->GetPhys_Offset(elmtToTrace[n][v]->GetElmtId());
940 (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
945 (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
969 "Method not set up for non-zero Neumann "
970 "boundary condition");
985 "Method not set up for this boundary condition.");
1028 int n,p,offset,phys_offset;
1031 "input array is of insufficient length");
1033 for (n = 0; n < nexp; ++n)
1037 for (p = 0; p < (*m_exp)[n]->GetNverts(); ++p)
1039 offset =
m_trace->GetPhys_Offset(
1040 (
m_traceMap->GetElmtToTrace())[n][p]->GetElmtId());
1041 (*m_exp)[n]->GetVertexPhysVals(p, inarray + phys_offset,
1051 int n,offset, t_offset;
1064 Basis = (*m_exp)[n]->GetBasis(0);
1067 int e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1074 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1075 if(negatedFluxNormal[2*n])
1077 outarray[offset] -= Fn[t_offset];
1081 outarray[offset] += Fn[t_offset];
1084 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1086 if(negatedFluxNormal[2*n+1])
1088 outarray[offset+(*m_exp)[n]->GetVertexMap(1)] -= Fn[t_offset];
1092 outarray[offset+(*m_exp)[n]->GetVertexMap(1)] += Fn[t_offset];
1112 for(p = 0; p < 2; ++p)
1115 for (
int i=0; i<((*m_exp)[n]->
1116 GetVertexNormal(p)).num_elements(); i++)
1118 vertnorm += ((*m_exp)[n]->GetVertexNormal(p))[i][0];
1119 coords[0] = vertnorm ;
1122 t_offset =
GetTrace()->GetPhys_Offset(n+p);
1124 if (vertnorm >= 0.0)
1126 m_Ixm = BASE->GetI(coords);
1129 for (j = 0; j < e_ncoeffs; j++)
1131 outarray[offset + j] +=
1132 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1138 m_Ixm = BASE->GetI(coords);
1140 for (j = 0; j < e_ncoeffs; j++)
1142 outarray[offset + j] -=
1143 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1150 static int sav_ncoeffs = 0;
1151 if(!m_Ixm.get() || e_ncoeffs != sav_ncoeffs)
1164 m_Ixm = BASE->GetI(coords);
1167 m_Ixp = BASE->GetI(coords);
1169 sav_ncoeffs = e_ncoeffs;
1172 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1173 if(negatedFluxNormal[2*n])
1175 for (j = 0; j < e_ncoeffs; j++)
1177 outarray[offset + j] -=
1178 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1183 for (j = 0; j < e_ncoeffs; j++)
1185 outarray[offset + j] +=
1186 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1190 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1191 if (negatedFluxNormal[2*n+1])
1193 for (j = 0; j < e_ncoeffs; j++)
1195 outarray[offset + j] -=
1196 (m_Ixp->GetPtr())[j] * Fn[t_offset];
1201 for (j = 0; j < e_ncoeffs; j++)
1203 outarray[offset + j] +=
1204 (m_Ixp->GetPtr())[j] * Fn[t_offset];
1236 int GloBndDofs =
m_traceMap->GetNumGlobalBndCoeffs();
1237 int NumDirBCs =
m_traceMap->GetNumLocalDirBndCoeffs();
1258 int LocBndCoeffs =
m_traceMap->GetNumLocalBndCoeffs();
1266 for (cnt = n = 0; n < nexp; ++n)
1268 nbndry = (*m_exp)[n]->NumDGBndryCoeffs();
1270 e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1272 e_l = loc_lambda + cnt;
1277 Floc =
Transpose(*(HDGLamToU->GetBlock(n,n)))*ElmtFce;
1292 id =
m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1297 id =
m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1305 if (GloBndDofs - NumDirBCs > 0)
1326 m_traceMap->GlobalToLocalBnd(BndSol,loc_lambda);
1329 out = (*InvHDGHelm)*F + (*HDGLamToU)*LocLambda;
1343 const std::string varName,
1370 (boost::static_pointer_cast<SpatialDomains
1372 ->m_dirichletCondition).Evaluate(x0[0],x1[0],x2[0],time));
1379 (boost::static_pointer_cast<SpatialDomains
1381 ->m_neumannCondition).Evaluate(x0[0],x1[0],x2[0],time));
1387 (boost::static_pointer_cast<SpatialDomains
1389 ->m_robinFunction).Evaluate(x0[0],x1[0],x2[0],time));
1392 (boost::static_pointer_cast<SpatialDomains
1394 ->m_robinPrimitiveCoeff).Evaluate(x0[0],x1[0],x2[0],time));
1403 ASSERTL0(
false,
"This type of BC not implemented yet");
1414 map<int, int> VertGID;
1420 if (ElmtID.num_elements() != nbcs)
1426 fill(ElmtID.get(), ElmtID.get()+nbcs, -1);
1429 if (VertID.num_elements() != nbcs)
1438 VertGID[Vid] = cnt++;
1446 for(i = 0; i < exp->GetNverts(); ++i)
1448 id = exp->GetGeom()->GetVid(i);
1450 if (VertGID.count(
id) > 0)
1452 bid = VertGID.find(
id)->second;
1453 ASSERTL1(ElmtID[bid] == -1,
"Edge already set");
1461 ASSERTL1(cnt == nbcs,
"Failed to visit all boundary condtiions");
1465 boost::shared_ptr<ExpList> &result)
1468 int offsetOld, offsetNew;
1470 std::vector<unsigned int> eIDs;
1476 for (cnt = n = 0; n < i; ++n)
1484 eIDs.push_back(ElmtID[cnt+n]);
1492 for (n = 0; n < result->GetExpSize(); ++n)
1494 nq =
GetExp(ElmtID[cnt+n])->GetTotPoints();
1496 offsetNew = result->GetPhys_Offset(n);
1498 tmp2 = result->UpdatePhys()+ offsetNew, 1);
1500 nq =
GetExp(ElmtID[cnt+n])->GetNcoeffs();
1502 offsetNew = result->GetCoeff_Offset(n);
1504 tmp2 = result->UpdateCoeffs()+ offsetNew, 1);
1539 map<int, RobinBCInfoSharedPtr> returnval;
1558 VertID[i],Array_tmp = locExpList->GetPhys());
1563 if(returnval.count(elmtid) != 0)
1565 rInfo->next = returnval.find(elmtid)->second;
1567 returnval[elmtid] = rInfo;
GlobalSysSolnType GetGlobalSysSolnType() const
Return the associated solution type.
const DNekScalBlkMatSharedPtr & GetBlockMatrix(const GlobalMatrixKey &gkey)
const Array< OneD, const NekDouble > & GetCoeffs() const
This function returns (a reference to) the array (implemented as m_coeffs) containing all local expa...
#define ASSERTL0(condition, msg)
virtual void v_Reset()
Reset geometry information, metrics, matrix managers and geometry information.
std::vector< bool > m_negatedFluxNormal
int GetCoeff_Offset(int n) const
Get the start offset position for a global list of m_coeffs correspoinding to element n...
virtual void v_EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
Evaluate all boundary conditions at a given time..
static ExpListSharedPtr NullExpListSharedPtr
void EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
virtual void v_AddTraceIntegral(const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
bool isLocal
Flag specifying if this entity is local to this partition.
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
const BoundaryConditionCollection & GetBoundaryConditions(void) const
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
boost::shared_ptr< RobinBCInfo > RobinBCInfoSharedPtr
virtual std::map< int, RobinBCInfoSharedPtr > v_GetRobinBCInfo()
void FindPeriodicVertices(const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Generate a associative map of periodic vertices in a mesh.
const boost::shared_ptr< LocalRegions::ExpansionVector > GetExp() const
This function returns the vector of elements in the expansion.
Lagrange Polynomials using the Gauss points .
SpatialDomains::BoundaryConditionsSharedPtr GetDomainBCs(const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable)
std::map< ConstFactorType, NekDouble > ConstFactorMap
void SetUpDG(const std::string &variable)
void GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
void ApplyGeomInfo()
Apply geometry information to each expansion.
boost::shared_ptr< DNekMat > DNekMatSharedPtr
int GetExpSize(void)
This function returns the number of elements in the expansion.
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
boost::shared_ptr< Expansion0D > Expansion0DSharedPtr
boost::shared_ptr< GlobalLinSys > GenGlobalBndLinSys(const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocTo...
void SetAdjacentElementExp(int vertex, Expansion1DSharedPtr &v)
1D Gauss-Gauss-Legendre quadrature points
virtual void v_GetFwdBwdTracePhys(Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
BasisManagerT & BasisManager(void)
GlobalLinSysSharedPtr GetGlobalBndLinSys(const GlobalLinSysKey &mkey)
For a given key, returns the associated global linear system.
std::vector< bool > m_leftAdjacentVerts
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
void SetBoundaryConditionExpansion(const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable, Array< OneD, MultiRegions::ExpListSharedPtr > &bndCondExpansions, Array< OneD, SpatialDomains::BoundaryConditionShPtr > &bndConditions)
Populates the list of boundary condition expansions.
Base class for all multi-elemental spectral/hp expansions.
boost::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
The base class for all shapes.
boost::shared_ptr< ExpList > & GetTrace()
virtual void v_ExtractTracePhys(Array< OneD, NekDouble > &outarray)
boost::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
virtual void v_GetBndElmtExpansion(int i, boost::shared_ptr< ExpList > &result)
DisContField1D()
Default constructor.
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
virtual ~DisContField1D()
Destructor.
int id
Geometry ID of entity.
bool m_physState
The state of the array m_phys.
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
std::map< int, Composite >::const_iterator CompositeMapConstIter
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
boost::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
boost::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
This class is the abstraction of a global discontinuous two- dimensional spectral/hp element expansio...
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
SpatialDomains::MeshGraphSharedPtr m_graph
Mesh associated with this expansion list.
void GenerateBoundaryConditionExpansion(const SpatialDomains::MeshGraphSharedPtr &graph1D, const SpatialDomains::BoundaryConditions &bcs, const std::string variable)
Discretises the boundary conditions.
LibUtilities::SessionReaderSharedPtr m_session
Session.
AssemblyMapDGSharedPtr m_traceMap
Local to global DG mapping for trace space.
Defines a specification for a set of points.
void Neg(int n, T *x, const int incx)
Negate x = -x.
boost::shared_ptr< Expansion > ExpansionSharedPtr
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
boost::shared_ptr< GeometryVector > Composite
virtual void v_HelmSolve(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const Array< OneD, const NekDouble > &dirForcing)
Solve the Helmholtz equation.
static const NekDouble kNekUnsetDouble
Describe a linear system.
std::map< int, Composite > CompositeMap
StdRegions::MatrixType GetMatrixType() const
Return the matrix type.
std::vector< int > m_periodicBwdCopy
Describes a matrix with ordering defined by a local to global map.
const Array< OneD, const NekDouble > & GetPhys() const
This function returns (a reference to) the array (implemented as m_phys) containing the function ev...
bool IsLeftAdjacentVertex(const int n, const int e)
GlobalLinSysMapShPtr m_globalBndMat
Global boundary matrix.
boost::shared_ptr< ExpList0D > ExpList0DSharedPtr
Shared pointer to an ExpList0D object.
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
static AssemblyMapSharedPtr NullAssemblyMapSharedPtr
boost::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
std::vector< bool > & GetNegatedFluxNormal(void)
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
Discretised boundary conditions.
virtual void v_Reset()
Reset this field, so that geometry information can be updated.
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
NekDouble GetCoeff(int i)
Get the i th value (coefficient) of m_coeffs.
boost::shared_ptr< MeshGraph1D > MeshGraph1DSharedPtr
std::set< int > m_boundaryVerts
A set storing the global IDs of any boundary edges.
boost::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
This class is the abstraction of a one-dimensional multi-elemental expansions which is merely a colle...
ExpListSharedPtr m_trace
Trace space storage for points between elements.
std::vector< int > m_periodicFwdCopy
A vector indicating degress of freedom which need to be copied from forwards to backwards space in ca...
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
boost::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
const BoundaryRegionCollection & GetBoundaryRegions(void) const
boost::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
boost::shared_ptr< Basis > BasisSharedPtr
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
void Zero(int n, T *x, const int incx)
Zero vector.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
boost::shared_ptr< Expansion1D > Expansion1DSharedPtr
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
boost::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Describes the specification for a Basis.
boost::shared_ptr< PointGeom > PointGeomSharedPtr
virtual void v_GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &VertID)