Nektar++
Public Member Functions | Protected Attributes | List of all members
Nektar::MultiRegions::MultiLevelBisectedGraph Class Reference

#include <SubStructuredGraph.h>

Public Member Functions

 MultiLevelBisectedGraph (MultiLevelBisectedGraphSharedPtr oldLevel, const int nPartition)
 
 MultiLevelBisectedGraph (const int nBndDofs)
 
 ~MultiLevelBisectedGraph (void)
 
int GetTotDofs () const
 
void SetGlobalNumberingOffset ()
 
void DumpNBndDofs (void) const
 
void CollectLeaves (std::vector< SubGraphSharedPtr > &leaves) const
 
int CutLeaves ()
 
int CutEmptyLeaves ()
 
int GetNdaughterGraphs () const
 
const SubGraphSharedPtr GetBndDofsGraph () const
 
std::vector< MultiLevelBisectedGraphSharedPtr > & GetDaughterGraphs ()
 

Protected Attributes

SubGraphSharedPtr m_BndDofs
 
std::vector< MultiLevelBisectedGraphSharedPtrm_daughterGraphs
 

Detailed Description

Definition at line 152 of file SubStructuredGraph.h.

Constructor & Destructor Documentation

◆ MultiLevelBisectedGraph() [1/2]

Nektar::MultiRegions::MultiLevelBisectedGraph::MultiLevelBisectedGraph ( MultiLevelBisectedGraphSharedPtr  oldLevel,
const int  nPartition 
)

Definition at line 103 of file SubStructuredGraph.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

106  {
107  m_daughterGraphs.push_back(oldLevel);
109  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ MultiLevelBisectedGraph() [2/2]

Nektar::MultiRegions::MultiLevelBisectedGraph::MultiLevelBisectedGraph ( const int  nBndDofs)

Definition at line 111 of file SubStructuredGraph.cpp.

111  :
113  {
114  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ ~MultiLevelBisectedGraph()

Nektar::MultiRegions::MultiLevelBisectedGraph::~MultiLevelBisectedGraph ( void  )

Definition at line 116 of file SubStructuredGraph.cpp.

117  {
118  }

Member Function Documentation

◆ CollectLeaves()

void Nektar::MultiRegions::MultiLevelBisectedGraph::CollectLeaves ( std::vector< SubGraphSharedPtr > &  leaves) const

Definition at line 168 of file SubStructuredGraph.cpp.

References m_BndDofs, and m_daughterGraphs.

170  {
171  int cnt = 0;
172 
173  for (auto &g : m_daughterGraphs)
174  {
175  g->CollectLeaves(leaves);
176  cnt++;
177  }
178 
179  if (cnt == 0)
180  {
182  leaves.push_back(leave);
183  }
184  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs
std::shared_ptr< SubGraph > SubGraphSharedPtr

◆ CutEmptyLeaves()

int Nektar::MultiRegions::MultiLevelBisectedGraph::CutEmptyLeaves ( )

Definition at line 186 of file SubStructuredGraph.cpp.

References CellMLToNektar.pycml::level, and m_daughterGraphs.

187  {
188  int returnval;
189  static int level = 0;
190  static int nLeaves = 0;
191  level++;
192 
193  if (level == 1 && m_daughterGraphs.size() == 0)
194  {
195  level = 0;
196  nLeaves = 0;
197  return 0;
198  }
199 
200  for (auto it = m_daughterGraphs.begin(); it != m_daughterGraphs.end();)
201  {
202  auto g = *it;
203  if (g->GetNdaughterGraphs() == 0 &&
204  g->GetBndDofsGraph()->GetNverts() == 0)
205  {
206  it = m_daughterGraphs.erase(it);
207  nLeaves++;
208  }
209  else
210  {
211  g->CutEmptyLeaves();
212  ++it;
213  }
214  }
215 
216  returnval = nLeaves;
217 
218  level--;
219  if(level == 0)
220  {
221  nLeaves = 0;
222  }
223 
224  return returnval;
225  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ CutLeaves()

int Nektar::MultiRegions::MultiLevelBisectedGraph::CutLeaves ( )

Definition at line 227 of file SubStructuredGraph.cpp.

References CellMLToNektar.pycml::level, and m_daughterGraphs.

228  {
229  int returnval;
230  static int level = 0;
231  static int nLeaves = 0;
232  level++;
233 
234  if (level == 1 && m_daughterGraphs.size() == 0)
235  {
236  level = 0;
237  nLeaves = 0;
238  return 0;
239  }
240 
241  for (auto it = m_daughterGraphs.begin(); it != m_daughterGraphs.end();)
242  {
243  auto g = *it;
244  if (g->GetNdaughterGraphs() == 0)
245  {
246  it = m_daughterGraphs.erase(it);
247  nLeaves++;
248  }
249  else
250  {
251  g->CutLeaves();
252  ++it;
253  }
254  }
255 
256  returnval = nLeaves;
257 
258  level--;
259  if(level == 0)
260  {
261  nLeaves = 0;
262  }
263 
264  return returnval;
265  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ DumpNBndDofs()

void Nektar::MultiRegions::MultiLevelBisectedGraph::DumpNBndDofs ( void  ) const

Definition at line 154 of file SubStructuredGraph.cpp.

References CellMLToNektar.pycml::level, m_BndDofs, and m_daughterGraphs.

155  {
156  static int level = 0;
157  level++;
158  cout << "LEVEL " << level << " " << m_BndDofs->GetNverts() << endl;
159 
160  for (auto &g : m_daughterGraphs)
161  {
162  g->DumpNBndDofs();
163  }
164 
165  level--;
166  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ GetBndDofsGraph()

const SubGraphSharedPtr Nektar::MultiRegions::MultiLevelBisectedGraph::GetBndDofsGraph ( ) const
inline

Definition at line 174 of file SubStructuredGraph.h.

175  {
176  return m_BndDofs;
177  }

◆ GetDaughterGraphs()

std::vector<MultiLevelBisectedGraphSharedPtr>& Nektar::MultiRegions::MultiLevelBisectedGraph::GetDaughterGraphs ( )
inline

Definition at line 180 of file SubStructuredGraph.h.

181  {
182  return m_daughterGraphs;
183  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ GetNdaughterGraphs()

int Nektar::MultiRegions::MultiLevelBisectedGraph::GetNdaughterGraphs ( ) const
inline

Definition at line 169 of file SubStructuredGraph.h.

170  {
171  return m_daughterGraphs.size();
172  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ GetTotDofs()

int Nektar::MultiRegions::MultiLevelBisectedGraph::GetTotDofs ( ) const

Definition at line 120 of file SubStructuredGraph.cpp.

References m_BndDofs, and m_daughterGraphs.

121  {
122  int returnval = 0;
123 
124  for (auto &g : m_daughterGraphs)
125  {
126  returnval += g->GetTotDofs();
127  }
128 
129  returnval += m_BndDofs->GetNverts();
130  return returnval;
131  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

◆ SetGlobalNumberingOffset()

void Nektar::MultiRegions::MultiLevelBisectedGraph::SetGlobalNumberingOffset ( )

Definition at line 133 of file SubStructuredGraph.cpp.

References CellMLToNektar.pycml::level, m_BndDofs, and m_daughterGraphs.

134  {
135  static int level = 0;
136  static int offset = 0;
137  level++;
138 
139  for (auto &g : m_daughterGraphs)
140  {
141  g->SetGlobalNumberingOffset();
142  }
143 
144  m_BndDofs->SetIdOffset(offset);
145  offset += m_BndDofs->GetNverts();
146 
147  level--;
148  if(level == 0)
149  {
150  offset = 0;
151  }
152  }
std::vector< MultiLevelBisectedGraphSharedPtr > m_daughterGraphs

Member Data Documentation

◆ m_BndDofs

SubGraphSharedPtr Nektar::MultiRegions::MultiLevelBisectedGraph::m_BndDofs
protected

◆ m_daughterGraphs

std::vector<MultiLevelBisectedGraphSharedPtr> Nektar::MultiRegions::MultiLevelBisectedGraph::m_daughterGraphs
protected