class
SorterMesh sorter for global distributed mesh node reordering.
Contents
Public static functions
- static void registerReducers()
- Configure Charm++ reduction types.
Constructors, destructors, conversion operators
-
Sorter(std::size_t meshid,
const CProxy_Transporter& transporter,
const tk::CProxy_MeshWriter& meshwriter,
const tk::
SorterCallback& cbs, const std::vector<Scheme>& scheme, CkCallback reorderRefiner, const std::vector<std::size_t>& ginpoel, const tk:: UnsMesh:: CoordMap& coordmap, const tk:: UnsMesh:: Chunk& el, const std::map<int, std::vector<std::size_t>>& bface, const std::vector<std::size_t>& triinpoel, const std::map<int, std::vector<std::size_t>>& bnode, const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblockid, int nchare) explicit - Constructor.
- Sorter(CkMigrateMessage*) explicit
- Migrate constructor.
Public functions
- void setup(std::size_t npoin)
- Setup chare mesh boundary node communication map.
-
void query(int fromch,
const tk::
AllCommMaps& bnd) - Incoming query for a list mesh nodes for which this chare compiles communication maps.
- void recvquery()
- Report receipt of boundary node lists.
- void response()
- Respond to boundary node list queries.
-
void bnd(int fromch,
const tk::
CommMaps& msum) - Receive boundary node communication maps for our mesh chunk.
- void recvbnd()
- Receive receipt of boundary node communication map.
- void start()
- Start reordering (if user enabled it)
- void offset(int c, std::size_t u)
- Receive number of uniquely assigned global mesh node IDs from chares with lower indices.
- void request(int c, const std::unordered_set<std::size_t>& nd)
- Request new global node IDs for old node IDs.
- void lower(std::size_t low)
- Receive lower bound of node IDs our PE operates on after reordering.
-
void neworder(const std::unordered_map<std::size_t, std::tuple<std::size_t, tk::
UnsMesh:: Coord>>& nodes) - Receive new (reordered) global node IDs and coordinates.
- void createWorkers()
- Create worker chare array elements on this PE.
-
void mesh(std::vector<std::size_t>& ginpoel,
tk::
UnsMesh:: CoordMap& coordmap, std::vector<std::size_t>& triinpoel, std::map<int, std::vector<std::size_t>>& bnode) - Update mesh data we hold for whoever calls this function.
Charm++ pack/unpack serializer member functions
- std::size_t m_meshid
- Mesh ID.
- CProxy_Transporter m_host
- Host proxy.
- tk::CProxy_MeshWriter m_meshwriter
- MeshWriter proxy.
- tk::
SorterCallback m_cbs - Charm++ callbacks associated to compile-time tags for sorter.
- std::vector<Scheme> m_scheme
- Discretization schemes (one per mesh)
- CkCallback m_reorderRefiner
- Callback to use to send reordered mesh to Refiner.
- std::vector<std::size_t> m_ginpoel
- Tetrtahedron element connectivity of our chunk of the mesh (global ids)
- tk::
UnsMesh:: CoordMap m_coordmap - Coordinates associated to global node IDs of our mesh chunk.
- tk::
UnsMesh:: Chunk m_el - Elements of the mesh chunk we operate on.
- std::size_t m_nbnd
- Counter for number of chares contributing to chare boundary nodes.
- std::map<int, std::vector<std::size_t>> m_bface
- List of boundary faces associated to side-set IDs.
- std::vector<std::size_t> m_triinpoel
- Boundary face-node connectivity.
- std::map<int, std::vector<std::size_t>> m_bnode
- List of boundary nodes associated to side-set IDs.
- std::unordered_map<std::size_t, std::set<std::size_t>> m_elemblockid
- Local tet ids associated with mesh block ids.
- int m_nchare
- Total number of sorter chares.
- std::set<std::size_t> m_nodeset
- Unique global node IDs chares on our PE will contribute to.
- int m_noffset
- Counter for the number of chares from which this chare has received node reordering offsets from.
- std::unordered_map<std::size_t, std::vector<int>> m_nodech
- Node->chare map used to build boundary node communication maps.
- tk::
NodeCommMap m_chnode - Chare->node map used to build boundary node communication maps.
- std::unordered_map<tk::
UnsMesh:: Edge, std::vector<int>, tk:: UnsMesh:: Hash<2>, tk:: UnsMesh:: Eq<2>> m_edgech - Edge->chare map used to build boundary edge communication maps.
- tk::
EdgeCommMap m_chedge - Chare->edge map used to build boundary edge communication maps.
- tk::
CommMaps m_msum - Communication maps associated to chare IDs.
- std::unordered_map<int, std::unordered_set<std::size_t>> m_reordcomm
- Communication map used for distributed mesh node reordering.
- std::size_t m_start
- Starting global mesh node ID for node reordering on this chare during mesh node reordering.
- std::unordered_map<std::size_t, std::size_t> m_newnodes
- Map associating new node IDs (value) to old node IDs (key)
- tk::
UnsMesh:: CoordMap m_newcoordmap - Coordinates associated to global (new) node IDs during reordering.
- std::vector<std::pair<int, std::unordered_set<std::size_t>>> m_reqnodes
- Queue of requested node IDs from chares.
- std::size_t m_lower
- Lower bound of node IDs this chare contributes to in a linear system.
- std::size_t m_upper
- Upper bound of node IDs this chare contributes to in a linear system.
- void pup(PUP::er& p) override
- Pack/Unpack serialize member function.
- void operator|(PUP::er& p, Sorter& s)
- Pack/Unpack serialize operator|.
Function documentation
inciter:: Sorter:: Sorter(std::size_t meshid,
const CProxy_Transporter& transporter,
const tk::CProxy_MeshWriter& meshwriter,
const tk:: SorterCallback& cbs,
const std::vector<Scheme>& scheme,
CkCallback reorderRefiner,
const std::vector<std::size_t>& ginpoel,
const tk:: UnsMesh:: CoordMap& coordmap,
const tk:: UnsMesh:: Chunk& el,
const std::map<int, std::vector<std::size_t>>& bface,
const std::vector<std::size_t>& triinpoel,
const std::map<int, std::vector<std::size_t>>& bnode,
const std::unordered_map<std::size_t, std::set<std::size_t>>& elemblockid,
int nchare) explicit
Constructor.
Parameters | |
---|---|
meshid in | Mesh ID |
transporter in | Transporter (host) Charm++ proxy |
meshwriter in | Mesh writer Charm++ proxy |
cbs in | Charm++ callbacks for Sorter |
scheme in | Discretization schemes (one per mesh) |
reorderRefiner in | Callback to use to send reordered mesh to Refiner |
ginpoel in | Mesh connectivity (this chare) using global node IDs |
coordmap in | Mesh node coordinates (this chare) for global node IDs |
el | |
bface in | Face lists mapped to side set ids |
triinpoel in | Interconnectivity of points and boundary-faces |
bnode in | Node ids mapped to side set ids |
elemblockid in | Local tet ids associated to mesh block ids |
nchare in | Total number of Charm++ worker chares |
void inciter:: Sorter:: setup(std::size_t npoin)
Setup chare mesh boundary node communication map.
Parameters | |
---|---|
npoin in | Total number of mesh points in mesh. Note that the number of mesh points does not have to be exactly the total number of points in the mesh. It can be a larger number, but not less. This is only used here to assign nodes to workers that will assign ids to mesh nodes during node reordering. |
void inciter:: Sorter:: query(int fromch,
const tk:: AllCommMaps& bnd)
Incoming query for a list mesh nodes for which this chare compiles communication maps.
Parameters | |
---|---|
fromch in | Sender chare ID |
bnd in | Chare-boundary data from another chare |
void inciter:: Sorter:: bnd(int fromch,
const tk:: CommMaps& msum)
Receive boundary node communication maps for our mesh chunk.
Parameters | |
---|---|
fromch in | Sender chare ID |
msum in | Communication map(s) assembled by chare fromch |
void inciter:: Sorter:: offset(int c,
std::size_t u)
Receive number of uniquely assigned global mesh node IDs from chares with lower indices.
Parameters | |
---|---|
c in | Chare ID |
u in | Number of mesh node IDs chare c will assign IDs to |
This function computes the offset each chare will need to start assigning its new node IDs from. The offset for a chare is the offset for the previous chare plus the number of node IDs the previous chare (uniquely) assigns new IDs for minus the number of node IDs the previous chare receives from others (lower chares). This is computed here in a parallel/distributed fashion by each chare sending its number of node IDs (that it uniquely assigns) to all chares. Note that each chare would only need to send this information to chares with higher IDs, but instead this function is called in a broadcast fashion, because that is more efficient than individual calls to only chares with higher IDs. Therefore when computing the offsets, we only count the lower chares. When this is done, we have the precise asymmetric communication map as well as the start offset on all chares and so we can start the distributed global mesh node ID reordering.
void inciter:: Sorter:: request(int c,
const std::unordered_set<std::size_t>& nd)
Request new global node IDs for old node IDs.
Parameters | |
---|---|
c in | Chare request coming from and to which we send new IDs to |
nd in | Set of old node IDs whose new IDs are requested |
void inciter:: Sorter:: neworder(const std::unordered_map<std::size_t, std::tuple<std::size_t, tk:: UnsMesh:: Coord>>& nodes)
Receive new (reordered) global node IDs and coordinates.
Parameters | |
---|---|
nodes in | Map associating new to old node IDs |
void inciter:: Sorter:: mesh(std::vector<std::size_t>& ginpoel,
tk:: UnsMesh:: CoordMap& coordmap,
std::vector<std::size_t>& triinpoel,
std::map<int, std::vector<std::size_t>>& bnode)
Update mesh data we hold for whoever calls this function.
Parameters | |
---|---|
ginpoel in/out | Mesh connectivity using global IDs |
coordmap in/out | Map of mesh node coordinates |
triinpoel in/out | Boundary face-node connectivity |
bnode in | Node lists of side sets |
void inciter:: Sorter:: pup(PUP::er& p) override
Pack/Unpack serialize member function.
Parameters | |
---|---|
p in/out | Charm++'s PUP::er serializer object reference |
Variable documentation
std::unordered_map<int, std::unordered_set<std::size_t>> inciter:: Sorter:: m_reordcomm
Communication map used for distributed mesh node reordering.
This map associates the list of global mesh point indices to fellow chare IDs from which this chare receives new node IDs during reordering. Only data that will be received from chares with a lower index are stored, thus this is an asymmetric communication map.