36 #include <boost/core/ignore_unused.hpp> 47 namespace MultiRegions
59 DisContField1D::DisContField1D():
61 m_bndCondExpansions(),
82 const std::string &variable,
83 const bool SetUpJustDG,
85 :
ExpList1D(pSession,graph1D,true, ImpType),
89 if (variable.compare(
"DefaultVar") != 0)
115 (*m_exp)[ElmtID[i]]->
116 as<LocalRegions::Expansion1D>();
118 locExpList->GetExp(0)->
119 as<LocalRegions::Expansion0D>();
121 exp0d->SetAdjacentElementExp(VertexID[i], exp1d);
153 if (
m_session->DefinesCmdLineArgument(
"verbose"))
155 m_traceMap->PrintStats(std::cout, variable);
164 int ElmtPointGeom = 0;
165 int TracePointGeom = 0;
168 for (
int i = 0; i <
m_exp->size(); ++i)
171 for (
int j = 0; j < exp1d->GetNverts(); ++j)
173 ElmtPointGeom = (exp1d->GetGeom1D())->GetVid(j);
175 for (
int k = 0; k <
m_trace->GetExpSize(); ++k)
177 TracePointGeom =
m_trace->GetExp(k)->GetGeom()->GetVid(0);
179 if (TracePointGeom == ElmtPointGeom)
192 for (
int i = 0; i <
m_trace->GetExpSize(); ++i)
197 int offset =
m_trace->GetPhys_Offset(i);
198 int traceGeomId = traceEl->GetGeom0D()->GetGlobalID();
203 if (traceGeomId != min(pIt->second[0].id, traceGeomId))
205 traceEl->GetLeftAdjacentElementExp()->NegateVertexNormal(
206 traceEl->GetLeftAdjacentElementVertex());
209 else if (m_traceMap->GetTraceToUniversalMapUnique(offset) < 0)
211 traceEl->GetLeftAdjacentElementExp()->NegateVertexNormal(
212 traceEl->GetLeftAdjacentElementVertex());
227 m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt+e));
237 for (cnt = n = 0; n <
m_exp->size(); ++n)
239 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v, ++cnt)
246 std::unordered_map<int,pair<int,int> > perVertToExpMap;
247 for (n = 0; n <
m_exp->size(); ++n)
249 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
252 (*
m_exp)[n]->GetGeom()->GetVid(v));
256 perVertToExpMap[it->first] = make_pair(n,v);
263 for (n = 0; n <
m_exp->size(); ++n)
265 for (
int v = 0; v < (*m_exp)[n]->GetNverts(); ++v)
267 int vertGeomId = (*m_exp)[n]->GetGeom()->GetVid(v);
275 auto it2 = perVertToExpMap.find(ent.
id);
277 if (it2 == perVertToExpMap.end())
279 if (
m_session->GetComm()->GetRowComm()->GetSize() > 1 &&
286 ASSERTL1(
false,
"Periodic vert not found!");
290 int offset =
m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
291 [n][v]->GetElmtId());
294 int offset2 =
m_trace->GetPhys_Offset((m_traceMap->GetElmtToTrace())
296 [it2->second.second]->GetElmtId());
310 if (traceEl->GetLeftAdjacentElementVertex () == -1 ||
311 traceEl->GetRightAdjacentElementVertex() == -1)
321 int traceGeomId = traceEl->GetGeom0D()->GetGlobalID();
326 fwd = traceGeomId == min(traceGeomId,pIt->second[0].id);
330 int offset =
m_trace->GetPhys_Offset(traceEl->GetElmtId());
332 GetTraceToUniversalMapUnique(offset) >= 0;
336 else if (traceEl->GetLeftAdjacentElementVertex () != -1 &&
337 traceEl->GetRightAdjacentElementVertex() != -1)
340 fwd = (traceEl->GetLeftAdjacentElementExp().get()) == (*
m_exp)[n].get();
344 ASSERTL2(
false,
"Unconnected trace element!");
357 const std::string &variable)
363 map<int,int> GeometryToRegionsMap;
371 for(
auto &it : bregions)
373 for (
auto &bregionIt : *it.second)
377 int id = bregionIt.second->m_geomVec[0]->GetGlobalID();
378 GeometryToRegionsMap[id] = it.first;
382 map<int,SpatialDomains::GeometrySharedPtr> EndOfDomain;
385 for(
auto &domIt : domain)
388 for(
int i = 0; i < geomvector->m_geomVec.size(); ++i)
390 for(
int j = 0; j < 2; ++j)
392 int vid = geomvector->m_geomVec[i]->GetVid(j);
393 if(EndOfDomain.count(vid) == 0)
395 EndOfDomain[vid] = geomvector->m_geomVec[i]->GetVertex(j);
399 EndOfDomain.erase(vid);
404 ASSERTL1(EndOfDomain.size() == 2,
"Did not find two ends of domain");
407 for(
auto ®It : EndOfDomain)
409 if(GeometryToRegionsMap.count(regIt.first) != 0)
412 auto iter = GeometryToRegionsMap.find(regIt.first);
413 ASSERTL1(iter != GeometryToRegionsMap.end(),
414 "Failied to find GeometryToRegionMap");
416 int regionId = iter->second;
417 auto bregionsIter = bregions.find(regionId);
418 ASSERTL1(bregionsIter != bregions.end(),
419 "Failed to find boundary region");
422 bregionsIter->second;
423 returnval->AddBoundaryRegions(regionId, breg);
425 auto bconditionsIter = bconditions.find(regionId);
426 ASSERTL1(bconditionsIter != bconditions.end(),
427 "Failed to find boundary collection");
430 bconditionsIter->second;
431 returnval->AddBoundaryConditions(regionId,bcond);
441 gvec->m_geomVec.push_back(regIt.second);
442 (*breg)[regIt.first] = gvec;
444 returnval->AddBoundaryRegions(bregions.size()+numNewBc,breg);
450 (*bCondition)[variable] = notDefinedCondition;
452 returnval->AddBoundaryConditions(bregions.size()+numNewBc,bCondition);
473 const std::string &variable,
474 bool SetToOneSpaceDimension,
476 ExpList1D(pSession,graph1D,domain, true,variable,SetToOneSpaceDimension,ImpType),
480 if (variable.compare(
"DefaultVar") != 0)
542 const std::string variable)
552 for (
auto &it : bregions)
556 SpatialDomains::BoundaryRegion::iterator bregionIt;
557 for (
auto &bregionIt : *(it.second))
559 cnt += bregionIt.second->m_geomVec.size();
584 const std::string variable)
594 int i, region1ID, region2ID;
598 map<int,int> BregionToVertMap;
602 for (
auto &it : bregions)
606 if (locBCond->GetBoundaryConditionType()
611 int id = it.second->begin()->second->m_geomVec[0]->GetGlobalID();
613 BregionToVertMap[it.first] = id;
618 int n = vComm->GetSize();
619 int p = vComm->GetRank();
622 nregions[
p] = BregionToVertMap.size();
629 for (i = 1; i < n; ++i)
631 regOffset[i] = regOffset[i-1] + nregions[i-1];
638 for (
auto &iit : BregionToVertMap)
640 bregid [i ] = iit.first;
641 bregmap[i++] = iit.second;
642 islocal.insert(iit.first);
648 for (
int i = 0; i < totRegions; ++i)
650 BregionToVertMap[bregid[i]] = bregmap[i];
654 for (
auto &it : bregions)
658 if (locBCond->GetBoundaryConditionType()
665 region1ID = it.first;
666 region2ID = std::static_pointer_cast<
668 locBCond)->m_connectedBoundaryRegion;
670 ASSERTL0(BregionToVertMap.count(region1ID) != 0,
671 "Cannot determine vertex of region1ID");
673 ASSERTL0(BregionToVertMap.count(region2ID) != 0,
674 "Cannot determine vertex of region2ID");
678 islocal.count(region2ID) != 0);
700 const std::string variable,
706 boost::ignore_unused(graph1D);
721 for (
auto &it : bregions)
725 for (
auto &bregionIt : *(it.second))
727 for (k = 0; k < bregionIt.second->m_geomVec.size(); k++)
729 if((vert = std::dynamic_pointer_cast
731 bregionIt.second->m_geomVec[k])))
736 bndCondExpansions[cnt] = locPointExp;
737 bndConditions[cnt++] = locBCond;
742 "dynamic cast to a vertex failed");
756 "Routine currently only tested for HybridDGHelmholtz");
759 "Full matrix global systems are not supported for HDG " 764 "The local to global map is not set up for the requested " 773 (*m_globalBndMat)[mkey] = glo_matrix;
777 glo_matrix = matrixIter->second;
796 for(
int v = 0; v < 2; ++v)
802 if(vertExp->GetLeftAdjacentElementExp()->GetGeom()->GetGlobalID() != (*m_exp)[i]->GetGeom()->GetGlobalID())
811 if(vertExp->GetLeftAdjacentElementExp()->
812 VertexNormalNegated(vertExp->GetLeftAdjacentElementVertex()))
887 for (cnt = n = 0; n < nElements; ++n)
892 for(v = 0; v < 2; ++v, ++cnt)
894 int offset =
m_trace->GetPhys_Offset(elmtToTrace[n][v]->GetElmtId());
898 (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
903 (*m_exp)[n]->GetVertexPhysVals(v, field + phys_offset,
927 "Method not set up for non-zero Neumann " 928 "boundary condition");
943 "Method not set up for this boundary condition.");
986 int n,
p,offset,phys_offset;
989 "input array is of insufficient length");
991 for (n = 0; n < nexp; ++n)
995 for (p = 0; p < (*m_exp)[n]->GetNverts(); ++
p)
997 offset =
m_trace->GetPhys_Offset(
998 (
m_traceMap->GetElmtToTrace())[n][p]->GetElmtId());
999 (*m_exp)[n]->GetVertexPhysVals(p, inarray + phys_offset,
1009 int n,offset, t_offset;
1019 int e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1024 if ((*
m_exp)[n]->GetBasis(0)->GetBasisType() !=
1027 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1028 if(negatedFluxNormal[2*n])
1030 outarray[offset] -= Fn[t_offset];
1034 outarray[offset] += Fn[t_offset];
1037 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1039 if(negatedFluxNormal[2*n+1])
1041 outarray[offset+(*m_exp)[n]->GetVertexMap(1)] -= Fn[t_offset];
1045 outarray[offset+(*m_exp)[n]->GetVertexMap(1)] += Fn[t_offset];
1065 for(
p = 0;
p < 2; ++
p)
1068 for (
int i=0; i<((*m_exp)[n]->
1069 GetVertexNormal(
p)).num_elements(); i++)
1071 vertnorm += ((*m_exp)[n]->GetVertexNormal(
p))[i][0];
1072 coords[0] = vertnorm ;
1075 t_offset =
GetTrace()->GetPhys_Offset(n+
p);
1077 if (vertnorm >= 0.0)
1079 m_Ixm = BASE->GetI(coords);
1082 for (j = 0; j < e_ncoeffs; j++)
1084 outarray[offset + j] +=
1085 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1091 m_Ixm = BASE->GetI(coords);
1093 for (j = 0; j < e_ncoeffs; j++)
1095 outarray[offset + j] -=
1096 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1103 static int sav_ncoeffs = 0;
1104 if(!m_Ixm.get() || e_ncoeffs != sav_ncoeffs)
1117 m_Ixm = BASE->GetI(coords);
1120 m_Ixp = BASE->GetI(coords);
1122 sav_ncoeffs = e_ncoeffs;
1125 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][0]->GetElmtId());
1126 if(negatedFluxNormal[2*n])
1128 for (j = 0; j < e_ncoeffs; j++)
1130 outarray[offset + j] -=
1131 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1136 for (j = 0; j < e_ncoeffs; j++)
1138 outarray[offset + j] +=
1139 (m_Ixm->GetPtr())[j] * Fn[t_offset];
1143 t_offset =
GetTrace()->GetCoeff_Offset(elmtToTrace[n][1]->GetElmtId());
1144 if (negatedFluxNormal[2*n+1])
1146 for (j = 0; j < e_ncoeffs; j++)
1148 outarray[offset + j] -=
1149 (m_Ixp->GetPtr())[j] * Fn[t_offset];
1154 for (j = 0; j < e_ncoeffs; j++)
1156 outarray[offset + j] +=
1157 (m_Ixp->GetPtr())[j] * Fn[t_offset];
1174 const bool PhysSpaceForcing)
1176 boost::ignore_unused(flags, varfactors, dirForcing);
1187 if(PhysSpaceForcing)
1200 int GloBndDofs =
m_traceMap->GetNumGlobalBndCoeffs();
1201 int NumDirBCs =
m_traceMap->GetNumLocalDirBndCoeffs();
1222 int LocBndCoeffs =
m_traceMap->GetNumLocalBndCoeffs();
1230 for (cnt = n = 0; n < nexp; ++n)
1232 nbndry = (*m_exp)[n]->NumDGBndryCoeffs();
1234 e_ncoeffs = (*m_exp)[n]->GetNcoeffs();
1236 e_l = loc_lambda + cnt;
1241 Floc =
Transpose(*(HDGLamToU->GetBlock(n,n)))*ElmtFce;
1256 id =
m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1264 id =
m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
1270 ASSERTL0(
false,
"HDG implementation does not support " 1271 "periodic boundary conditions at present.");
1278 if (GloBndDofs - NumDirBCs > 0)
1299 m_traceMap->GlobalToLocalBnd(BndSol,loc_lambda);
1302 out = (*InvHDGHelm)*F + (*HDGLamToU)*LocLambda;
1316 const std::string varName,
1320 boost::ignore_unused(varName);
1345 (std::static_pointer_cast<SpatialDomains
1347 ->m_dirichletCondition).Evaluate(x0[0],x1[0],x2[0],time));
1354 (std::static_pointer_cast<SpatialDomains
1356 ->m_neumannCondition).Evaluate(x0[0],x1[0],x2[0],time));
1362 (std::static_pointer_cast<SpatialDomains
1364 ->m_robinFunction).Evaluate(x0[0],x1[0],x2[0],time));
1378 ASSERTL0(
false,
"This type of BC not implemented yet");
1389 map<int, int> VertGID;
1395 if (ElmtID.num_elements() != nbcs)
1401 fill(ElmtID.get(), ElmtID.get()+nbcs, -1);
1404 if (VertID.num_elements() != nbcs)
1413 VertGID[Vid] = cnt++;
1421 for(i = 0; i < exp->GetNverts(); ++i)
1423 id = exp->GetGeom()->GetVid(i);
1425 if (VertGID.count(
id) > 0)
1427 bid = VertGID.find(
id)->second;
1428 ASSERTL1(ElmtID[bid] == -1,
"Edge already set");
1436 ASSERTL1(cnt == nbcs,
"Failed to visit all boundary condtiions");
1440 std::shared_ptr<ExpList> &result,
1441 const bool DeclareCoeffPhysArrays)
1444 int offsetOld, offsetNew;
1445 std::vector<unsigned int> eIDs;
1451 for (cnt = n = 0; n < i; ++n)
1459 eIDs.push_back(ElmtID[cnt+n]);
1465 (*
this, eIDs, DeclareCoeffPhysArrays);
1468 if( DeclareCoeffPhysArrays)
1471 for (n = 0; n < result->GetExpSize(); ++n)
1473 nq =
GetExp(ElmtID[cnt+n])->GetTotPoints();
1475 offsetNew = result->GetPhys_Offset(n);
1477 tmp2 = result->UpdatePhys()+ offsetNew, 1);
1479 nq =
GetExp(ElmtID[cnt+n])->GetNcoeffs();
1481 offsetNew = result->GetCoeff_Offset(n);
1483 tmp2 = result->UpdateCoeffs()+ offsetNew, 1);
1519 map<int, RobinBCInfoSharedPtr> returnval;
1537 coeffphys[0] = (std::static_pointer_cast<SpatialDomains
1539 ->m_robinPrimitiveCoeff).Evaluate(x0[0],x1[0],x2[0],0.0);
1548 if(returnval.count(elmtid) != 0)
1550 rInfo->next = returnval.find(elmtid)->second;
1552 returnval[elmtid] = rInfo;
const Array< OneD, const NekDouble > & GetPhys() const
This function returns (a reference to) the array (implemented as m_phys) containing the function ev...
const DNekScalBlkMatSharedPtr & GetBlockMatrix(const GlobalMatrixKey &gkey)
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 MultiRegions::VarFactorsMap &varfactors, const Array< OneD, const NekDouble > &dirForcing, const bool PhysSpaceForcing)
Solve the Helmholtz equation.
#define ASSERTL0(condition, msg)
virtual void v_Reset()
Reset geometry information, metrics, matrix managers and geometry information.
std::shared_ptr< RobinBCInfo > RobinBCInfoSharedPtr
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
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.
std::vector< bool > m_negatedFluxNormal
int id
Geometry ID of entity.
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
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
void EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble=NekConstants::kNekUnsetDouble, const NekDouble=NekConstants::kNekUnsetDouble)
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
virtual void v_AddTraceIntegral(const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...
const BoundaryConditionCollection & GetBoundaryConditions(void) const
const Array< OneD, const NekDouble > & GetCoeffs() const
This function returns (a reference to) the array (implemented as m_coeffs) containing all local expa...
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.
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
std::shared_ptr< ExpList0D > ExpList0DSharedPtr
Shared pointer to an ExpList0D object.
Lagrange Polynomials using the Gauss points .
std::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
SpatialDomains::BoundaryConditionsSharedPtr GetDomainBCs(const SpatialDomains::CompositeMap &domain, const SpatialDomains::BoundaryConditions &Allbcs, const std::string &variable)
std::map< int, CompositeSharedPtr > CompositeMap
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.
std::shared_ptr< Composite > CompositeSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr
virtual void v_GetBndElmtExpansion(int i, std::shared_ptr< ExpList > &result, const bool DeclareCoeffPhysArrays)
void ApplyGeomInfo()
Apply geometry information to each expansion.
std::shared_ptr< Basis > BasisSharedPtr
int GetExpSize(void)
This function returns the number of elements in the expansion.
const std::shared_ptr< LocalRegions::ExpansionVector > GetExp() const
This function returns the vector of elements in the expansion.
std::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
std::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
Base class for all multi-elemental spectral/hp expansions.
virtual void v_ExtractTracePhys(Array< OneD, NekDouble > &outarray)
std::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
StdRegions::MatrixType GetMatrixType() const
Return the matrix type.
DisContField1D()
Default constructor.
std::shared_ptr< Expansion0D > Expansion0DSharedPtr
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
virtual ~DisContField1D()
Destructor.
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, BoundaryRegionShPtr > BoundaryRegionCollection
bool isLocal
Flag specifying if this entity is local to this partition.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
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.
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
std::shared_ptr< PointGeom > PointGeomSharedPtr
static const NekDouble kNekUnsetDouble
Describe a linear system.
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
std::vector< int > m_periodicBwdCopy
Describes a matrix with ordering defined by a local to global map.
bool IsLeftAdjacentVertex(const int n, const int e)
GlobalLinSysMapShPtr m_globalBndMat
Global boundary matrix.
std::shared_ptr< Expansion > ExpansionSharedPtr
static AssemblyMapSharedPtr NullAssemblyMapSharedPtr
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.
std::set< int > m_boundaryVerts
A set storing the global IDs of any boundary edges.
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)
GlobalSysSolnType GetGlobalSysSolnType() const
Return the associated solution type.
PeriodicMap m_periodicVerts
A map which identifies groups of periodic vertices.
int GetCoeff_Offset(int n) const
Get the start offset position for a global list of m_coeffs correspoinding to element n...
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...
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
std::shared_ptr< Expansion1D > Expansion1DSharedPtr
Describes the specification for a Basis.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
const BoundaryRegionCollection & GetBoundaryRegions(void) const
std::shared_ptr< ExpList > & GetTrace()
std::map< StdRegions::ConstFactorType, Array< OneD, NekDouble > > VarFactorsMap
virtual void v_GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &VertID)