14 #ifndef _DOMAIN_DECOMPOSITION_H
15 #define _DOMAIN_DECOMPOSITION_H
60 IntVec::const_iterator
end() {
return nodes.end(); }
124 void setup(
const int neq);
133 std::vector<std::set<int>>
134 getSubdomains(
int nx,
int ny,
int nz,
int overlap,
size_t block)
const;
146 size_t g1,
size_t g2,
size_t g3,
size_t overlap);
176 {
return blocks[idx].MLGEQ; }
181 {
return blocks[idx+1].localEqs; }
185 const std::map<int,int>&
getG2LEQ(
size_t idx)
const
186 {
return blocks[idx].G2LEQ; }
224 size_t g1,
size_t g2,
size_t overlap);
235 size_t g1,
size_t g2,
size_t g3,
249 const std::set<int>& cbasis,
250 int dim,
int thick,
int orient = 0);
261 void setupNodeNumbers(
int basis,
IntVec& lNodes,
262 std::set<int>& cbasis,
264 int dim,
int lidx,
int thick,
int orient = 0);
274 template<
class Callback>
std::vector< int > IntVec
General integer vector.
Definition: ASMbase.h:25
std::vector< IntVec > IntMat
General 2D integer matrix.
Definition: ASMbase.h:26
Representation of domain interfaces.
Base class for spline-based finite element (FE) assembly drivers.
Definition: ASMbase.h:70
Iterator for matching nodes on edges/faces with a given orientation and index.
Definition: DomainDecomposition.h:41
OrientIterator(const ASMbase *pch, int orient, int lIdx, int basis, int dim=2)
Constructor.
Definition: DomainDecomposition.C:40
IntVec nodes
Node number on boundary.
Definition: DomainDecomposition.h:66
size_t size() const
Obtain number of nodes.
Definition: DomainDecomposition.h:62
IntVec::const_iterator begin()
Obtain start of node numbers.
Definition: DomainDecomposition.h:58
IntVec::const_iterator end()
Obtain end of node numbers.
Definition: DomainDecomposition.h:60
Functor to order ghost connections.
Definition: DomainDecomposition.h:70
SlaveOrder(const DomainDecomposition &dd_)
The constructor initializes the DomainDecomposition reference.
Definition: DomainDecomposition.h:73
SlaveOrder & operator=(const SlaveOrder &)
Hide ill-formed default assignment operator.
Definition: DomainDecomposition.h:75
const DomainDecomposition & dd
Domain decomposition holding patch owner data.
Definition: DomainDecomposition.h:103
bool operator()(const ASM::Interface &A, const ASM::Interface &B) const
Compare interfaces.
Definition: DomainDecomposition.h:77
Class containing domain decomposition related partitioning.
Definition: DomainDecomposition.h:38
int getNoGlbEqs(size_t idx=0) const
Get total number of equations in a block.
Definition: DomainDecomposition.h:153
std::vector< std::set< int > > getSubdomains(int nx, int ny, int nz, int overlap, size_t block) const
Obtain local subdomains for an equation block.
Definition: DomainDecomposition.C:272
bool calcGlobalNodeNumbers(const ProcessAdm &adm, const SIMbase &sim)
Calculate the global node numbers for given finite element model.
Definition: DomainDecomposition.C:509
int maxNode
Last node we own.
Definition: DomainDecomposition.h:305
bool calcGlobalEqNumbers(const ProcessAdm &adm, const SIMbase &sim)
Calculate the global equation numbers for an element model.
Definition: DomainDecomposition.C:699
const IntVec & getMLGN() const
Obtain local-to-global node mapping.
Definition: DomainDecomposition.h:189
void setElms(const IntVec &elms, const std::string &save)
Set elements in partition.
Definition: DomainDecomposition.h:204
static IntMat calcSubdomains3D(size_t nel1, size_t nel2, size_t nel3, size_t g1, size_t g2, size_t g3, size_t overlap)
Calculates 3D subdomains with a given overlap.
Definition: DomainDecomposition.C:409
int getMaxNode() const
Get last node owned by this process.
Definition: DomainDecomposition.h:157
std::vector< BlockInfo > blocks
Equation mappings for all matrix blocks.
Definition: DomainDecomposition.h:300
bool calcGlobalEqNumbersPart(const ProcessAdm &adm, const Callback &cb)
Calculate the global equation numbers for a partitioned model.
Definition: DomainDecomposition.C:924
bool sanityCheckCorners(const SIMbase &sim)
Sanity check model.
Definition: DomainDecomposition.C:996
size_t getNoBlocks() const
Returns number of matrix blocks.
Definition: DomainDecomposition.h:195
const IntVec & getElms() const
Returns elements in partition.
Definition: DomainDecomposition.h:201
static IntMat calcSubdomains1D(size_t nel1, size_t g1, size_t overlap)
Calculates a 1D partitioning with a given overlap.
Definition: DomainDecomposition.C:338
static IntMat calcSubdomains(size_t nel1, size_t nel2, size_t nel3, size_t g1, size_t g2, size_t g3, size_t overlap)
Calculates subdomains with a given overlap.
Definition: DomainDecomposition.C:324
int getMinEq(size_t idx=0) const
Get first equation owned by this process.
Definition: DomainDecomposition.h:149
bool graphPartition(const ProcessAdm &adm, const IntMat &neigh)
Setup domain decomposition based on graph partitioning.
Definition: DomainDecomposition.C:1338
int getMinNode() const
Get first node owned by this process.
Definition: DomainDecomposition.h:155
DomainDecomposition()
Default constructor.
Definition: DomainDecomposition.h:109
int getPatchOwner(size_t p) const
Get process owning patch p.
Definition: DomainDecomposition.C:1328
int getMinDOF() const
Get first DOF owned by this process.
Definition: DomainDecomposition.h:159
bool isPartitioned() const
Returns whether a graph based partition is used.
Definition: DomainDecomposition.h:198
const SAMpatch * getSAM() const
Returns associated SAM.
Definition: DomainDecomposition.h:192
void clear()
Clear out partitioning information.
Definition: DomainDecomposition.C:1440
std::map< int, int > patchOwner
Process that owns a particular patch.
Definition: DomainDecomposition.h:285
void setPatchOwner(size_t p, size_t owner)
Set owner for a patch.
Definition: DomainDecomposition.h:164
std::set< ASM::Interface, SlaveOrder > ghostConnections
Connections to other processes.
Definition: DomainDecomposition.h:106
IntVec MLGN
Process-local-to-global node numbers.
Definition: DomainDecomposition.h:299
const IntVec & getMLGEQ(size_t idx=0) const
Obtain local-to-global equation mapping.
Definition: DomainDecomposition.h:175
int getMaxEq(size_t idx=0) const
Get last equation owned by this process.
Definition: DomainDecomposition.h:151
const SAMpatch * sam
The assembly handler the DD is constructed for.
Definition: DomainDecomposition.h:307
const std::set< int > & getBlockEqs(size_t idx) const
Obtain local-to-global equation mapping.
Definition: DomainDecomposition.h:180
static IntMat calcSubdomains2D(size_t nel1, size_t nel2, size_t g1, size_t g2, size_t overlap)
Calculates 2D subdomains with a given overlap.
Definition: DomainDecomposition.C:368
int minDof
First DOF we own.
Definition: DomainDecomposition.h:302
const std::map< int, int > & getG2LEQ(size_t idx) const
Obtain global-to-local equation mapping.
Definition: DomainDecomposition.h:185
IntVec myElms
Elements in partition.
Definition: DomainDecomposition.h:301
int minNode
First node we own.
Definition: DomainDecomposition.h:304
std::string savePart
Non-empty to save partitioning to file.
Definition: DomainDecomposition.h:309
int maxDof
Last DOF we own.
Definition: DomainDecomposition.h:303
int getMaxDOF() const
Get last DOF owned by this process.
Definition: DomainDecomposition.h:161
int getGlobalEq(int lEq, size_t idx=0) const
Get global equation number.
Definition: DomainDecomposition.C:977
bool setup(const ProcessAdm &adm, const SIMbase &sim)
Setup domain decomposition.
Definition: DomainDecomposition.C:1082
Class for administration of MPI processes in IFEM library.
Definition: ProcessAdm.h:33
This is a sub-class of SAM with added functionality for spline models.
Definition: SAMpatch.h:29
Base class for NURBS-based FEM simulators.
Definition: SIMbase.h:72
Struct for representing a domain interface.
Definition: Interface.h:24
int dim
Dimension of boundary.
Definition: Interface.h:30
int basis
Basis of boundary.
Definition: Interface.h:31
int midx
Index of boundary on master.
Definition: Interface.h:27
int master
Master patch (global number)
Definition: Interface.h:25
int slave
Slave patch (global number)
Definition: Interface.h:26
Struct with information per matrix block.
Definition: DomainDecomposition.h:288
IntVec MLGEQ
Process-local-to-global equation numbers for block.
Definition: DomainDecomposition.h:291
std::map< int, int > G2LEQ
Maps from local total matrix index to local block index.
Definition: DomainDecomposition.h:296
int components
Components in block.
Definition: DomainDecomposition.h:290
int nGlbEqs
Total matrix size.
Definition: DomainDecomposition.h:294
int maxEq
Last equation we own in block.
Definition: DomainDecomposition.h:293
int minEq
First equation we own in block.
Definition: DomainDecomposition.h:292
int basis
Bases for block.
Definition: DomainDecomposition.h:289
std::set< int > localEqs
Local equations belonging to the block.
Definition: DomainDecomposition.h:295