#include <fem_util.h>
Public Member Functions | |
FEM_MUtil () | |
FEM_MUtil (int i, femMeshModify *m) | |
~FEM_MUtil () | |
int | getIdx () |
void | getChunkNos (int entType, int entNo, int *numChunks, IDXL_Share ***chunks, int elemType=0) |
This function returns a list of chunks which share the entity given by type 'entType' and index 'entNo' entType=0 for a node and entType=1 for an element 'elemType' is needed if the entity in question is an element 'numChunks' specifies the number of chunks that share this entity 'chunks' is a list of IDXL_Share(tuple of chunk,index) entries for this entity Note that for a ghost node, we lookup the ghostRecv node table for a shared node, we look at the shared node table for a local node, we return the current chunk & index for a ghost element, we lookup the ghostrecv element table for a local element, it is just this chunk,index. | |
bool | isShared (int index) |
This function analyzes the shared IDXL list and replies if the node is shared this function will be only check the shared idxl list for nodes If an entry exists in the shared idxl lists, then it is a shared node. | |
void | splitEntityAll (FEM_Mesh *m, int localIdx, int nBetween, int *between) |
An IDXL helper function which is same as splitEntity, but instead of just adding to this chunk's idxl list, it will add to the idxl lists of all chunks. | |
void | splitEntitySharing (FEM_Mesh *m, int localIdx, int nBetween, int *between, int numChunks, int *chunks) |
'between' is the list of nodes between which 'localIdx' is to be added 'chunks' is the list of all chunks this node needs to be shared with Add this node as a shared node between the nodes 'between' on all 'chunks' i.e. | |
void | splitEntityRemote (FEM_Mesh *m, int chk, int localIdx, int nBetween, int *between) |
'between' is the list of shared indices between which the node 'localIdx' should be added Add it to the shared idxl list Also populate (interpolate) data from the nodes in 'between' | |
void | removeNodeAll (FEM_Mesh *m, int localIdx) |
Look up the shared idxl list to determine which chunks should lose this node Send a message to remove this shared node on each of these chunks Remove this node from the shared idxl list Finally remove the node. | |
void | removeNodeRemote (FEM_Mesh *m, int chk, int sharedIdx) |
Translate the sharedIdx to 'localIdx' from the shared idxl list. | |
int | exists_in_IDXL (FEM_Mesh *m, int localIdx, int chk, int type, int elemType=0) |
'type' specifies the IDXL list to look into look for 'localIdx' in the idxl list and return the shared index if found | |
int | lookup_in_IDXL (FEM_Mesh *m, int sharedIdx, int fromChk, int type, int elemType=0) |
'type' specifies the IDXL list to look into return the localIdx at the 'sharedIdx' entry in the idxl list | |
int | getRemoteIdx (FEM_Mesh *m, int elementid, int elemtype) |
Get one chunk from which this element is received as a ghost Look up the ghost recv Idxl list and get one chunk and shared index. | |
void | addGhostElementRemote (FEM_Mesh *m, int chk, int elemType, int numGhostIndices, int *ghostIndices, int numSharedIndices, int *sharedIndices, int connSize) |
chunkListMsg * | getChunksSharingGhostNodeRemote (FEM_Mesh *m, int chk, int sharedIdx) |
Get the local index of this node from the ghost send idxl list Find all chunks that this node is shared with Return this set of chunks along with the corresponding shared indices The list of chunks is sorted by chunk index number. | |
void | buildChunkToNodeTable (int *nodetype, int sharedcount, int ghostcount, int localcount, int *conn, int connSize, CkVec< int > ***allShared, int *numSharedChunks, CkVec< int > **allChunks, int ***sharedConn) |
conn specifies the nodes that are to be analyzed For each node there is a vector of all chunks that should know about it (allshared) Once we have this information, we find out all the chunks that are involved (unmSharedChunks Then we build a reverse data structure (which chunk needs to know about which of these nodes). | |
void | addElemRemote (FEM_Mesh *m, int chk, int elemtype, int connSize, int *conn, int numGhostIndex, int *ghostIndices) |
Add an element on this chunk, where the connectivity comes in terms of shared / ghost idxl entries from another chunk 'chk' it is assumed that all the connectivity is either a local node or a shared node on this chunk, and since the other chunk should know about all the connectivity, so it should be either in the shared or ghostsend idxl lists. | |
void | removeGhostElementRemote (FEM_Mesh *m, int chk, int elementid, int elemtype, int numGhostIndex, int *ghostIndices, int numGhostRNIndex, int *ghostRNIndices, int numGhostREIndex, int *ghostREIndices, int numSharedIndex, int *sharedIndices) |
Remove the ghost element from this chunk 'numGhostIndex' is the number of ghost indices that need to be removed from the idxl list here 'ghostIndices' is the list of ghost nodes that should be removed from the idxl list here 'numGhostRNIndex' is the number of local nodes that should not anymore be sent as a ghost to 'chk', so remove the entries 'ghostRNIndices' from the ghost send idxl list 'numGhostREIndex' is the number of local elements that should not anymore be sent as a ghost to 'chk', so remove the entries 'ghostREIndices' from the ghost send idxl list 'numSharedIndex' is the number of shared nodes that should be removed from the shared idxl list. | |
void | removeElemRemote (FEM_Mesh *m, int chk, int elementid, int elemtype, int permanent) |
void | removeGhostNodeRemote (FEM_Mesh *m, int fromChk, int sharedIdx) |
Translate this sharedIdx to the ghost index in the ghost Recv idxl list from 'fromChk' Remove this node as a ghost from this ghost recv IDXL list If this ghost node does not come as a ghost from any other chunk then delete this ghost node on this chunk. | |
int | Replace_node_local (FEM_Mesh *m, int oldIdx, int newIdx) |
A helper function which does a small part of the overall 'eating an element' process it is only called from FEM_add_element, when an element is being added with ghost conn removes oldIdx and copies all its attributes to newIdx also clears off the adjacencies of oldIdx and updates adjacencies of neighboring nodes and elements. | |
void | addToSharedList (FEM_Mesh *m, int fromChk, int sharedIdx) |
A helper function which does a small part of the overall 'eating an element' process it is only called from FEM_add_element, when an element is being added with ghost conn. | |
int | eatIntoElement (int localIdx) |
int | getLockOwner (int nodeId) |
Return the owner of this lock (nodeId) If 'nodeId' is local, find the owner from the smallest chunk (could be remote call) If it is a ghost, find one chunk where it is local and make a remote call on that to find the owner of the lock. | |
bool | knowsAbtNode (int chk, int nodeId) |
If this node is local, is it either on the ghost send or shared idxl list with 'chk' If it is a ghost index, is it on the ghost recv idxl list with 'chk'. | |
void | UpdateGhostSend (int nodeId, int *chunkl, int numchunkl) |
'chunkl' is the list of chunks this node should be sent as a ghost to Find out all chunks where this node is being send as a ghost to Now compare the two lists and remove the ghost sends for this node from the corresponding idxl lists | |
void | findGhostSend (int nodeId, int **chunkl, int *numchunkl) |
void | StructureTest (FEM_Mesh *m) |
A bunch of tests to verify the sanity of a mesh after a bout of adaptivity operations Mostly geometric appropriateness of the mesh Validity of nodes/elements. | |
int | AreaTest (FEM_Mesh *m) |
The area test verifies that the area of no element is less than the SLIVERAREA. | |
int | IdxlListTest (FEM_Mesh *m) |
The idxllist test verifies that the size of the idxl list on corresponding chunks are equal. | |
void | verifyIdxlListRemote (FEM_Mesh *m, int fromChk, int fsize, int type) |
This is a helper function for the above function (called on the remote chunk). | |
int | residualLockTest (FEM_Mesh *m) |
Verifies that at the end of one adaptive operation, there are no residual locks left on any node, i.e. | |
void | FEM_Print_n2n (FEM_Mesh *m, int nodeid) |
Look up the n2n adjacency list for this node and print it out. | |
void | FEM_Print_n2e (FEM_Mesh *m, int nodeid) |
Look up the n2e adjacency list for this node and print it out. | |
void | FEM_Print_e2n (FEM_Mesh *m, int eid) |
Look up the e2n adjacency list for this element and print it out. | |
void | FEM_Print_e2e (FEM_Mesh *m, int eid) |
Look up the e2e adjacency list for this element and print it out. | |
void | FEM_Print_coords (FEM_Mesh *m, int nodeid) |
A Print function for boundary and coordinates of a node Reads directly from the mesh data attributes The node could be local or a ghost (involves a remote call). | |
void | idxllock (FEM_Mesh *m, int chk, int type) |
Lock all idxl lists with between 'chk' and this chunk on the chunk that has a smaller index of the two. | |
void | idxlunlock (FEM_Mesh *m, int chk, int type) |
Same as above, only unlock. | |
void | idxllockLocal (FEM_Mesh *m, int toChk, int type) |
The chunk locking always maintains an order, smaller chunk ID always wants to lock a larger one, thus trying to avoid deadlocks, by sequencing resources. | |
void | idxlunlockLocal (FEM_Mesh *m, int toChk, int type) |
the unlock operation just releases the lock after verifying the lock was taken | |
void | copyElemData (int etype, int elemid, int newEl) |
copies the elem data from elemid to newEl Use the interpolate copy element function to do this | |
FEM_MUtil () | |
default constructor | |
FEM_MUtil (int i, femMeshModify *m) | |
constructor | |
FEM_MUtil (femMeshModify *m) | |
constructor | |
~FEM_MUtil () | |
destructor | |
void | pup (PUP::er &p) |
Pup for this object. | |
int | getIdx () |
Return the chunk index this util object is attached to. | |
int | getRemoteIdx (FEM_Mesh *m, int elementid, int elemtype) |
Get the shared ghost recv index in IDXL list for this element on one chunk. | |
bool | isShared (int index) |
Is this node shared among chunks. | |
int | exists_in_IDXL (FEM_Mesh *m, int localIdx, int chk, int type, int elemType=0) |
Returns the IDXL entry index of this 'entity' on IDXL list specified by type. | |
int | lookup_in_IDXL (FEM_Mesh *m, int sharedIdx, int fromChk, int type, int elemType=0) |
Read this shared entry 'sharedIdx' in the IDXL list specified by 'type'. | |
void | getChunkNos (int entType, int entNo, int *numChunks, IDXL_Share ***chunks, int elemType=0) |
Get all chunks that own this element/node. | |
void | buildChunkToNodeTable (int *nodetype, int sharedcount, int ghostcount, int localcount, int *conn, int connSize, CkVec< int > ***allShared, int *numSharedChunks, CkVec< int > **allChunks, int ***sharedConn) |
build a table of mappings of the which chunk knows about which node (given by conn) | |
chunkListMsg * | getChunksSharingGhostNodeRemote (FEM_Mesh *m, int chk, int sharedIdx) |
The set of chunks to which this node is sent as a ghost. | |
void | splitEntityAll (FEM_Mesh *m, int localIdx, int nBetween, int *between) |
Add this node to all the shared idxl lists on all chunks that share this node. | |
void | splitEntitySharing (FEM_Mesh *m, int localIdx, int nBetween, int *between, int numChunks, int *chunks) |
adds this new shared node to chunks only which share this edge(n=2) or face(n=3) | |
void | splitEntityRemote (FEM_Mesh *m, int chk, int localIdx, int nBetween, int *between) |
Add the shared node to IDXL list and populate its data, remote helper of above function. | |
void | removeNodeAll (FEM_Mesh *m, int localIdx) |
Delete this node on all remote chunks (present as shared or ghost). | |
void | removeNodeRemote (FEM_Mesh *m, int chk, int sharedIdx) |
Remove this node from shared IDXL list and delete node (remote helper of above function). | |
void | removeGhostNodeRemote (FEM_Mesh *m, int fromChk, int sharedIdx) |
Remove this ghost node on this chunk (called from remote chunk). | |
int | addElemRemote (FEM_Mesh *m, int chk, int elemtype, int connSize, int *conn, int numGhostIndex, int *ghostIndices) |
Add this element on this chunk (called from a remote chunk). | |
void | addGhostElementRemote (FEM_Mesh *m, int chk, int elemType, int *indices, int *typeOfIndex, int connSize) |
Add the element with this conn (indices, typeOfIndices) on this chunk (called from remote chunk). | |
void | removeElemRemote (FEM_Mesh *m, int chk, int elementid, int elemtype, int permanent, bool aggressive_node_removal=false) |
Remove this element on this chunk (called from remote chunk). | |
void | removeGhostElementRemote (FEM_Mesh *m, int chk, int elementid, int elemtype, int numGhostIndex, int *ghostIndices, int numGhostRNIndex, int *ghostRNIndices, int numGhostREIndex, int *ghostREIndices, int numSharedIndex, int *sharedIndices) |
Remove this ghost element on this chunk, also delete some ghost nodes and elements. | |
int | Replace_node_local (FEM_Mesh *m, int oldIdx, int newIdx) |
While acquiring a node (replace the oldIdx (ghost) with the newIdx). | |
void | addToSharedList (FEM_Mesh *m, int fromChk, int sharedIdx) |
Add this node to the shared Idxl list (called from remote chunk). | |
int | eatIntoElement (int localIdx, bool aggressive_node_removal=false) |
Acquire the element specified by this ghost index. | |
bool | knowsAbtNode (int chk, int nodeId) |
Does this chunk know about this node index (on any idxl list with 'chk'). | |
void | UpdateGhostSend (int nodeId, int *chunkl, int numchunkl) |
get rid of unnecessary node sends to some chunks for a node | |
void | findGhostSend (int nodeId, int *&chunkl, int &numchunkl) |
find the set of chunks where this node should be sent as a ghost | |
void | copyElemData (int etype, int elemid, int newEl) |
copies the elem data from elemid to newEl | |
void | packEntData (char **data, int *size, int *cnt, int localIdx, bool isnode, int elemType) |
Pack the data from this element/node and return it. | |
void | updateAttrs (char *data, int size, int newIndex, bool isnode, int elemType) |
update the attributes of 'newIndex' with this data | |
int | getLockOwner (int nodeId) |
Return the owner of this lock (specified by nodeid). | |
void | idxllock (FEM_Mesh *m, int chk, int type) |
Lock the idxl list with 'chk' (blocking call) (might be remote, if chk is smaller). | |
void | idxlunlock (FEM_Mesh *m, int chk, int type) |
Unlock the idxl list with 'chk' (might be remote if chk is smaller). | |
void | idxllockLocal (FEM_Mesh *m, int toChk, int type) |
Lock the idxl list with chk on this chunk. | |
void | idxlunlockLocal (FEM_Mesh *m, int toChk, int type) |
Unlock the idxl list with chk on this chunk. | |
void | FEM_Print_n2n (FEM_Mesh *m, int nodeid) |
Print the node-to-node adjacency for this node. | |
void | FEM_Print_n2e (FEM_Mesh *m, int nodeid) |
Print the node-to-element adjacency for this node. | |
void | FEM_Print_e2n (FEM_Mesh *m, int eid) |
Print the element-to-node adjacency for this element. | |
void | FEM_Print_e2e (FEM_Mesh *m, int eid) |
Print the element-to-element adjacency for this element. | |
void | FEM_Print_coords (FEM_Mesh *m, int nodeid) |
Print the coords and boundary for this node. | |
void | StructureTest (FEM_Mesh *m) |
A bunch of tests to verify that connectivity and geometric structure of mesh is appropriate. | |
int | AreaTest (FEM_Mesh *m) |
Test if the area of all elements is more than zero. | |
int | IdxlListTest (FEM_Mesh *m) |
Test if the Idxl lists are consistent on all chunks. | |
void | verifyIdxlListRemote (FEM_Mesh *m, int fromChk, int fsize, int type) |
Remote component of the above test (helper). | |
int | residualLockTest (FEM_Mesh *m) |
Test that there are no remaining acquired locks on this mesh. | |
void | unlockAll (FEM_Mesh *m) |
Release all currently held locks on this partition. | |
Private Attributes | |
int | idx |
chunk index | |
femMeshModify * | mmod |
femMeshModify * | mmod |
cross-pointer to the femMeshModify object for this chunk | |
CkVec< tuple > | outStandingMappings |
vector of pairs of 'to-be-updated' mappings | |
Data Structures | |
class | tuple |
a data structure to remember mappings from oldnode to newnode yet to be updated More... |
Definition at line 18 of file fem_util.h.
FEM_MUtil::FEM_MUtil | ( | ) | [inline] |
Definition at line 23 of file fem_util.h.
FEM_MUtil::FEM_MUtil | ( | int | i, | |
femMeshModify * | m | |||
) |
FEM_MUtil::~FEM_MUtil | ( | ) |
Definition at line 18 of file fem_util.C.
FEM_MUtil::FEM_MUtil | ( | ) | [inline] |
FEM_MUtil::FEM_MUtil | ( | int | i, | |
femMeshModify * | m | |||
) |
constructor
FEM_MUtil::FEM_MUtil | ( | femMeshModify * | m | ) |
FEM_MUtil::~FEM_MUtil | ( | ) |
destructor
int FEM_MUtil::getIdx | ( | ) | [inline] |
Definition at line 27 of file fem_util.h.
References idx.
Referenced by addToSharedList(), buildChunkToNodeTable(), FEM_Adapt::edge_bisect_help(), FEM_AdaptL::edge_contraction_help(), FEM_Adapt::edge_flip_help(), FEM_add_element_local(), FEM_add_node_local(), FEM_remove_element(), FEM_remove_element_local(), FEM_remove_node_local(), FEM_Adapt_Algs::refine_element_leb(), FEM_Adapt_Algs::refine_flip_element_leb(), FEM_Adapt::vertex_remove_help(), and FEM_Adapt::vertex_split_help().
void FEM_MUtil::getChunkNos | ( | int | entType, | |
int | entNo, | |||
int * | numChunks, | |||
IDXL_Share *** | chunks, | |||
int | elemType = 0 | |||
) |
This function returns a list of chunks which share the entity given by type 'entType' and index 'entNo' entType=0 for a node and entType=1 for an element 'elemType' is needed if the entity in question is an element 'numChunks' specifies the number of chunks that share this entity 'chunks' is a list of IDXL_Share(tuple of chunk,index) entries for this entity Note that for a ghost node, we lookup the ghostRecv node table for a shared node, we look at the shared node table for a local node, we return the current chunk & index for a ghost element, we lookup the ghostrecv element table for a local element, it is just this chunk,index.
Definition at line 21 of file fem_util.C.
References CmiMemoryCheck(), FEM_Mesh::elem, femMeshModify::fmMesh, IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, idx, index, isShared(), malloc(), mmod, FEM_Mesh::node, FEM_Node::shared, and type.
Referenced by buildChunkToNodeTable(), FEM_add_element(), FEM_Ghost_Essential_attributes(), FEM_Interpolate::FEM_InterpolateCopyAttributes(), FEM_Interpolate::FEM_InterpolateNodeOnEdge(), FEM_Modify_correctLockN(), FEM_Modify_LockN(), FEM_Modify_UnlockN(), FEM_Print_coords(), FEM_Adapt_Algs::getCoord(), FEM_Adapt::isCorner(), and FEM_lock::lock().
This function analyzes the shared IDXL list and replies if the node is shared this function will be only check the shared idxl list for nodes If an entry exists in the shared idxl lists, then it is a shared node.
Definition at line 118 of file fem_util.C.
References CmiMemoryCheck(), femMeshModify::fmMesh, IDXL_Side::getRec(), mmod, FEM_Mesh::node, and FEM_Node::shared.
Referenced by FEM_AdaptL::edge_contraction_help(), FEM_Interpolate::FEM_InterpolateNodeOnEdge(), getChunkNos(), and is_shared().
An IDXL helper function which is same as splitEntity, but instead of just adding to this chunk's idxl list, it will add to the idxl lists of all chunks.
Deprecated: unless we find some use for it in 3D
Definition at line 133 of file fem_util.C.
References IDXL_Side::addList(), IDXL_Side::addNode(), sharedNodeMsg::between, c, sharedNodeMsg::chk, CmiMemoryCheck(), free(), IDXL_Side::getRec(), femMeshModify::idx, idxllock(), idxlunlock(), malloc(), meshMod, mmod, sharedNodeMsg::nBetween, FEM_Mesh::node, FEM_Node::shared, IDXL_List::size(), and PUP::w.
void FEM_MUtil::splitEntitySharing | ( | FEM_Mesh * | m, | |
int | localIdx, | |||
int | nBetween, | |||
int * | between, | |||
int | numChunks, | |||
int * | chunks | |||
) |
'between' is the list of nodes between which 'localIdx' is to be added 'chunks' is the list of all chunks this node needs to be shared with Add this node as a shared node between the nodes 'between' on all 'chunks' i.e.
Update the shared idxl lists
Definition at line 191 of file fem_util.C.
References IDXL_Side::addNode(), sharedNodeMsg::between, sharedNodeMsg::chk, exists_in_IDXL(), idx, idxllock(), idxlunlock(), meshMod, sharedNodeMsg::nBetween, FEM_Mesh::node, and FEM_Node::shared.
Referenced by FEM_add_node().
void FEM_MUtil::splitEntityRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | localIdx, | |||
int | nBetween, | |||
int * | between | |||
) |
'between' is the list of shared indices between which the node 'localIdx' should be added Add it to the shared idxl list Also populate (interpolate) data from the nodes in 'between'
Definition at line 211 of file fem_util.C.
References IDXL_Side::addList(), IDXL_Side::addNode(), FEM_Interpolate::NodalArgs::addNode, CmiMemoryCheck(), FEM_Interpolate::FEM_InterpolateNodeOnEdge(), FEM_Interpolate::NodalArgs::frac, free(), femMeshModify::getfmInp(), FEM_Mesh::getfmMM(), malloc(), FEM_Interpolate::NodalArgs::n, FEM_Mesh::node, FEM_Interpolate::NodalArgs::nodes, and FEM_Node::shared.
Referenced by FEM_add_shared_node_remote().
Look up the shared idxl list to determine which chunks should lose this node Send a message to remove this shared node on each of these chunks Remove this node from the shared idxl list Finally remove the node.
Definition at line 238 of file fem_util.C.
References c, removeSharedNodeMsg::chk, CmiMemoryCheck(), FEM_remove_node_local(), free(), IDXL_Side::getRec(), femMeshModify::idx, removeSharedNodeMsg::index, malloc(), meshMod, mmod, FEM_Mesh::node, IDXL_Side::removeNode(), FEM_Node::shared, and size.
Referenced by FEM_remove_node().
Translate the sharedIdx to 'localIdx' from the shared idxl list.
Remove this node from the shared idxl list Finally remove this node
Definition at line 303 of file fem_util.C.
References IDXL_Side::addList(), CmiMemoryCheck(), FEM_remove_node_local(), FEM_Mesh::node, IDXL_Side::removeNode(), and FEM_Node::shared.
Referenced by femMeshModify::removeSharedNodeRemote().
'type' specifies the IDXL list to look into look for 'localIdx' in the idxl list and return the shared index if found
Definition at line 271 of file fem_util.C.
References IDXL_Side::addList(), CmiMemoryCheck(), FEM_Mesh::elem, FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, FEM_Mesh::node, FEM_Node::shared, and IDXL_List::size().
Referenced by addGhostElementRemote(), femMeshModify::addghostsendl(), femMeshModify::addghostsendr(), femMeshModify::addNodeRemote(), addToSharedList(), femMeshModify::cleanupIDXL(), eatIntoElement(), femMeshModify::eatIntoElement(), FEM_AdaptL::edge_contraction_help(), FEM_add_element(), FEM_add_node(), FEM_Ghost_Essential_attributes(), FEM_Interpolate::FEM_InterpolateCopyAttributes(), FEM_Interpolate::FEM_InterpolateElementCopy(), FEM_Interpolate::FEM_InterpolateNodeOnEdge(), FEM_Modify_correctLockN(), FEM_Modify_LockN(), FEM_Modify_UnlockN(), FEM_Print_coords(), FEM_remove_element(), findGhostSend(), FEM_Adapt_Algs::getCoord(), FEM_Adapt::getGhostElementIdxl(), FEM_Adapt::getGhostNodeIdxl(), femMeshModify::getIdxGhostSend(), getLockOwner(), FEM_Adapt::getSharedNodeIdxl(), FEM_Adapt::isCorner(), femMeshModify::shouldLoseGhost(), and splitEntitySharing().
int FEM_MUtil::lookup_in_IDXL | ( | FEM_Mesh * | m, | |
int | sharedIdx, | |||
int | fromChk, | |||
int | type, | |||
int | elemType = 0 | |||
) |
'type' specifies the IDXL list to look into return the localIdx at the 'sharedIdx' entry in the idxl list
Definition at line 651 of file fem_util.C.
References IDXL_Side::addList(), CmiMemoryCheck(), FEM_Mesh::elem, FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, FEM_Mesh::node, FEM_Node::shared, and IDXL_List::size().
Referenced by femMeshModify::addghostsendl(), femMeshModify::addghostsendl1(), femMeshModify::addghostsendr(), femMeshModify::addghostsendr1(), femMeshModify::addNodeRemote(), addToSharedList(), femMeshModify::addTransIDXLRemote(), femMeshModify::cleanupIDXL(), femMeshModify::eatIntoElement(), FEM_AdaptL::edge_contraction_help(), femMeshModify::findghostsend(), femMeshModify::getIdxGhostSend(), femMeshModify::getLockOwner(), femMeshModify::getRemoteBound(), femMeshModify::getRemoteCoord(), femMeshModify::hasLockRemoteNode(), femMeshModify::interpolateElemCopy(), femMeshModify::isFixedNodeRemote(), femMeshModify::knowsAbtNode(), femMeshModify::lockRemoteNode(), femMeshModify::modifyLockAll(), femMeshModify::packElemData(), femMeshModify::packEntData(), femMeshModify::purgeElement(), femMeshModify::refine_flip_element_leb(), removeGhostNodeRemote(), femMeshModify::removeIDXLRemote(), femMeshModify::shouldLoseGhost(), femMeshModify::unlockRemoteNode(), femMeshModify::updateAttrs(), femMeshModify::updateghostsend(), femMeshModify::updateIdxlList(), femMeshModify::updateNodeAttrs(), femMeshModify::verifyghostsend(), femMeshModify::verifyLock(), and femMeshModify::willItLose().
Get one chunk from which this element is received as a ghost Look up the ghost recv Idxl list and get one chunk and shared index.
Definition at line 677 of file fem_util.C.
References CmiMemoryCheck(), FEM_Mesh::elem, and size.
Referenced by FEM_Adapt_Algs::refine_element_leb().
void FEM_MUtil::addGhostElementRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elemType, | |||
int | numGhostIndices, | |||
int * | ghostIndices, | |||
int | numSharedIndices, | |||
int * | sharedIndices, | |||
int | connSize | |||
) |
Definition at line 343 of file fem_util.C.
References IDXL_Side::addList(), IDXL_Side::addNode(), chunkListMsg::chunkList, CmiMemoryCheck(), conn, FEM_Adapt_Algs::coord_attr, FEM_Mesh::elem, exists_in_IDXL(), FEM_add_element_local(), FEM_add_node_local(), FEM_Ghost_Essential_attributes(), femMeshModify::fmAdaptAlgs, free(), FEM_Entity::ghost, FEM_Entity::ghostRecv, idx, idxllock(), idxlunlock(), chunkListMsg::indexList, malloc(), meshMod, mmod, FEM_Mesh::node, chunkListMsg::numChunkList, and FEM_Node::shared.
Referenced by femMeshModify::addGhostElem().
chunkListMsg * FEM_MUtil::getChunksSharingGhostNodeRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | sharedIdx | |||
) |
Get the local index of this node from the ghost send idxl list Find all chunks that this node is shared with Return this set of chunks along with the corresponding shared indices The list of chunks is sorted by chunk index number.
Definition at line 386 of file fem_util.C.
References IDXL_Side::addList(), chunkListMsg::chunkList, CmiMemoryCheck(), IDXL_Side::getRec(), FEM_Entity::ghostSend, chunkListMsg::indexList, FEM_Mesh::node, chunkListMsg::numChunkList, and FEM_Node::shared.
Referenced by femMeshModify::getChunksSharingGhostNode().
void FEM_MUtil::buildChunkToNodeTable | ( | int * | nodetype, | |
int | sharedcount, | |||
int | ghostcount, | |||
int | localcount, | |||
int * | conn, | |||
int | connSize, | |||
CkVec< int > *** | allShared, | |||
int * | numSharedChunks, | |||
CkVec< int > ** | allChunks, | |||
int *** | sharedConn | |||
) |
conn specifies the nodes that are to be analyzed For each node there is a vector of all chunks that should know about it (allshared) Once we have this information, we find out all the chunks that are involved (unmSharedChunks Then we build a reverse data structure (which chunk needs to know about which of these nodes).
(sharedConn) 'allChunks' is the list of all the chunks involved This is the most unnecessarily complicated piece of code I have ever written.. REWRITE!
Definition at line 419 of file fem_util.C.
References CmiMemoryCheck(), free(), getChunkNos(), getIdx(), index, malloc(), and CkVec< T >::push_back().
Referenced by FEM_add_element().
int FEM_MUtil::addElemRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elemtype, | |||
int | connSize, | |||
int * | conn, | |||
int | numGhostIndex, | |||
int * | ghostIndices | |||
) |
Add an element on this chunk, where the connectivity comes in terms of shared / ghost idxl entries from another chunk 'chk' it is assumed that all the connectivity is either a local node or a shared node on this chunk, and since the other chunk should know about all the connectivity, so it should be either in the shared or ghostsend idxl lists.
Definition at line 518 of file fem_util.C.
References IDXL_Side::addList(), CmiMemoryCheck(), FEM_add_element(), free(), FEM_Entity::ghostSend, idx, malloc(), FEM_Mesh::node, and FEM_Node::shared.
Referenced by femMeshModify::addElementRemote().
void FEM_MUtil::removeGhostElementRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elementid, | |||
int | elemtype, | |||
int | numGhostIndex, | |||
int * | ghostIndices, | |||
int | numGhostRNIndex, | |||
int * | ghostRNIndices, | |||
int | numGhostREIndex, | |||
int * | ghostREIndices, | |||
int | numSharedIndex, | |||
int * | sharedIndices | |||
) |
Remove the ghost element from this chunk 'numGhostIndex' is the number of ghost indices that need to be removed from the idxl list here 'ghostIndices' is the list of ghost nodes that should be removed from the idxl list here 'numGhostRNIndex' is the number of local nodes that should not anymore be sent as a ghost to 'chk', so remove the entries 'ghostRNIndices' from the ghost send idxl list 'numGhostREIndex' is the number of local elements that should not anymore be sent as a ghost to 'chk', so remove the entries 'ghostREIndices' from the ghost send idxl list 'numSharedIndex' is the number of shared nodes that should be removed from the shared idxl list.
These indices are in 'sharedIndices'
Definition at line 553 of file fem_util.C.
References IDXL_Side::addList(), IDXL_Side::addNode(), CmiMemoryCheck(), FEM_Mesh::elem, FEM_remove_element_local(), FEM_remove_node_local(), IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, FEM_Mesh::node, IDXL_Side::removeNode(), and FEM_Node::shared.
Referenced by femMeshModify::removeGhostElem().
void FEM_MUtil::removeElemRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elementid, | |||
int | elemtype, | |||
int | permanent | |||
) |
Definition at line 640 of file fem_util.C.
References CmiMemoryCheck(), FEM_Mesh::elem, and FEM_remove_element().
Referenced by femMeshModify::removeElementRemote().
Translate this sharedIdx to the ghost index in the ghost Recv idxl list from 'fromChk' Remove this node as a ghost from this ghost recv IDXL list If this ghost node does not come as a ghost from any other chunk then delete this ghost node on this chunk.
Definition at line 315 of file fem_util.C.
References CmiMemoryCheck(), FEM_Print_n2e(), FEM_Print_n2n(), IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, lookup_in_IDXL(), FEM_Mesh::n2e_getAll(), FEM_Mesh::n2n_getAll(), FEM_Mesh::node, IDXL_Side::removeNode(), and FEM_Entity::set_invalid().
Referenced by femMeshModify::removeGhostNode().
A helper function which does a small part of the overall 'eating an element' process it is only called from FEM_add_element, when an element is being added with ghost conn removes oldIdx and copies all its attributes to newIdx also clears off the adjacencies of oldIdx and updates adjacencies of neighboring nodes and elements.
Definition at line 691 of file fem_util.C.
References CmiMemoryCheck(), FEM_Mesh::e2n_replace(), FEM_Interpolate::FEM_InterpolateCopyAttributes(), femMeshModify::fmLockN, femMeshModify::getfmInp(), idx, mmod, FEM_Mesh::n2e_add(), FEM_Mesh::n2e_getAll(), FEM_Mesh::n2e_removeAll(), FEM_Mesh::n2n_add(), FEM_Mesh::n2n_getAll(), FEM_Mesh::n2n_removeAll(), FEM_Mesh::n2n_replace(), FEM_Mesh::node, CkVec< T >::push_back(), FEM_Entity::set_valid(), FEM_Entity::setLength(), and FEM_Entity::size().
Referenced by FEM_add_element().
A helper function which does a small part of the overall 'eating an element' process it is only called from FEM_add_element, when an element is being added with ghost conn.
Definition at line 739 of file fem_util.C.
References IDXL_Side::addNode(), addGhostElemMsg::chk, CmiMemoryCheck(), addGhostElemMsg::connSize, FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, addGhostElemMsg::elemType, exists_in_IDXL(), femMeshModify::fmUtil, free(), getIdx(), IDXL_Side::getRec(), addGhostElemMsg::ghostIndices, FEM_Entity::ghostSend, idx, lookup_in_IDXL(), malloc(), meshMod, mmod, FEM_Mesh::n2e_getAll(), FEM_Mesh::node, addGhostElemMsg::numGhostIndex, addGhostElemMsg::numSharedIndex, IDXL_Side::removeNode(), FEM_Node::shared, and addGhostElemMsg::sharedIndices.
Referenced by femMeshModify::addToSharedList().
Definition at line 954 of file fem_util.C.
References copyElemData(), FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, exists_in_IDXL(), FEM_add_element(), FEM_Modify_LockUpdate(), FEM_purge_element(), FEM_remove_element(), femMeshModify::fmMesh, idx, meshMod, and mmod.
Referenced by FEM_AdaptL::eatIntoElement(), femMeshModify::eatIntoElement(), and FEM_AdaptL::edge_contraction_help().
Return the owner of this lock (nodeId) If 'nodeId' is local, find the owner from the smallest chunk (could be remote call) If it is a ghost, find one chunk where it is local and make a remote call on that to find the owner of the lock.
Definition at line 988 of file fem_util.C.
References exists_in_IDXL(), femMeshModify::fmMesh, femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, idx, FEM_lockN::lockOwner(), meshMod, mmod, FEM_Mesh::node, and FEM_Node::shared.
Referenced by femMeshModify::getLockOwner().
If this node is local, is it either on the ghost send or shared idxl list with 'chk' If it is a ghost index, is it on the ghost recv idxl list with 'chk'.
Definition at line 1017 of file fem_util.C.
References femMeshModify::fmMesh, IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, idx, meshMod, mmod, FEM_Mesh::node, and FEM_Node::shared.
Referenced by femMeshModify::knowsAbtNode().
'chunkl' is the list of chunks this node should be sent as a ghost to Find out all chunks where this node is being send as a ghost to Now compare the two lists and remove the ghost sends for this node from the corresponding idxl lists
Definition at line 918 of file fem_util.C.
References femMeshModify::fmMesh, IDXL_Side::getRec(), FEM_Entity::ghostSend, idx, meshMod, mmod, FEM_Mesh::node, and IDXL_Side::removeNode().
Referenced by FEM_Adapt::edge_bisect_help(), FEM_Adapt::edge_flip_help(), and femMeshModify::updateghostsend().
Definition at line 878 of file fem_util.C.
References exists_in_IDXL(), femMeshModify::fmMesh, CkVec< T >::free(), IDXL_Side::getRec(), PUP::l, mmod, FEM_Mesh::n2n_getAll(), FEM_Mesh::node, CkVec< T >::push_back(), FEM_Node::shared, and CkVec< T >::size().
Referenced by FEM_Adapt::edge_bisect_help(), FEM_Adapt::edge_flip_help(), and femMeshModify::findghostsend().
void FEM_MUtil::StructureTest | ( | FEM_Mesh * | m | ) |
A bunch of tests to verify the sanity of a mesh after a bout of adaptivity operations Mostly geometric appropriateness of the mesh Validity of nodes/elements.
Definition at line 1042 of file fem_util.C.
References verifyghostsendMsg::chunks, CpuTopoDetails::done, FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, FEM_Print_coords(), FEM_Print_e2n(), FEM_Print_n2e(), FEM_Print_n2n(), free(), verifyghostsendMsg::fromChk, IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, idx, FEM_Entity::is_valid(), PUP::l, malloc(), meshMod, FEM_Mesh::n2e_getAll(), FEM_Mesh::n2n_getAll(), FEM_Mesh::node, verifyghostsendMsg::numchks, verifyghostsendMsg::sharedIdx, FEM_Entity_Types< T >::size(), and FEM_Entity::size().
Referenced by FEM_AdaptL::structureTest(), and FEM_Adapt_Algs::tests().
The area test verifies that the area of no element is less than the SLIVERAREA.
Definition at line 1332 of file fem_util.C.
References FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, femMeshModify::fmAdaptAlgs, free(), FEM_Adapt_Algs::getArea(), malloc(), mmod, and FEM_Entity_Types< T >::size().
Referenced by FEM_Adapt_Algs::tests().
The idxllist test verifies that the size of the idxl list on corresponding chunks are equal.
Definition at line 1352 of file fem_util.C.
References FEM_Mesh::elem, IDXL_List::getDest(), IDXL_Side::getLocalList(), FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, idx, meshMod, FEM_Mesh::node, FEM_Node::shared, IDXL_List::size(), size, FEM_Entity_Types< T >::size(), IDXL_Side::size(), and type.
Referenced by FEM_Adapt_Algs::tests().
This is a helper function for the above function (called on the remote chunk).
Definition at line 1395 of file fem_util.C.
References IDXL_Side::addList(), FEM_Mesh::elem, FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, FEM_Mesh::node, FEM_Node::shared, IDXL_List::size(), and size.
Referenced by femMeshModify::verifyIdxlList().
Verifies that at the end of one adaptive operation, there are no residual locks left on any node, i.e.
all locks acquired have been freed
Definition at line 1382 of file fem_util.C.
References femMeshModify::fmIdxlLock, femMeshModify::fmLockN, FEM_Entity::is_valid(), mmod, FEM_Mesh::node, femMeshModify::numChunks, and FEM_Entity::size().
Referenced by FEM_AdaptL::residualLockTest(), and FEM_Adapt_Algs::tests().
Look up the n2n adjacency list for this node and print it out.
Definition at line 1414 of file fem_util.C.
References FEM_Mesh::n2n_getAll().
Referenced by FEM_Print_n2n(), FEM_Adapt::printAdjacencies(), removeGhostNodeRemote(), and StructureTest().
Look up the n2e adjacency list for this node and print it out.
Definition at line 1425 of file fem_util.C.
References FEM_Mesh::n2e_getAll().
Referenced by FEM_Print_n2e(), FEM_Adapt::printAdjacencies(), removeGhostNodeRemote(), and StructureTest().
Look up the e2n adjacency list for this element and print it out.
Definition at line 1436 of file fem_util.C.
References FEM_Mesh::e2n_getAll(), and FEM_Mesh::elem.
Referenced by FEM_Print_e2n(), FEM_Adapt::printAdjacencies(), and StructureTest().
Look up the e2e adjacency list for this element and print it out.
Definition at line 1447 of file fem_util.C.
References FEM_Mesh::e2e_getAll(), and FEM_Mesh::elem.
Referenced by FEM_Print_e2e(), and FEM_Adapt::printAdjacencies().
A Print function for boundary and coordinates of a node Reads directly from the mesh data attributes The node could be local or a ghost (involves a remote call).
Definition at line 1458 of file fem_util.C.
References IDXL_Share::chk, FEM_Adapt_Algs::coord_attr, PUP::d, exists_in_IDXL(), FEM_Mesh_dataP(), femMeshModify::fmAdaptAlgs, free(), getChunkNos(), intMsg::i, double2Msg::i, femMeshModify::idx, index, double2Msg::j, meshMod, and mmod.
Referenced by FEM_Interpolate::FEM_InterpolateCopyAttributes(), and StructureTest().
Lock all idxl lists with between 'chk' and this chunk on the chunk that has a smaller index of the two.
Definition at line 1489 of file fem_util.C.
References CmiMemoryCheck(), idx, idxllockLocal(), and meshMod.
Referenced by addGhostElementRemote(), FEM_add_element(), FEM_add_node(), FEM_remove_element(), splitEntityAll(), and splitEntitySharing().
Same as above, only unlock.
Definition at line 1504 of file fem_util.C.
References CmiMemoryCheck(), idx, idxlunlockLocal(), and meshMod.
Referenced by addGhostElementRemote(), FEM_add_element(), FEM_add_node(), FEM_remove_element(), splitEntityAll(), and splitEntitySharing().
The chunk locking always maintains an order, smaller chunk ID always wants to lock a larger one, thus trying to avoid deadlocks, by sequencing resources.
Definition at line 1521 of file fem_util.C.
References CmiMemoryCheck(), CthYield(), femMeshModify::fmIdxlLock, idx, and mmod.
Referenced by idxllock(), and femMeshModify::idxllockRemote().
the unlock operation just releases the lock after verifying the lock was taken
Definition at line 1538 of file fem_util.C.
References CmiMemoryCheck(), femMeshModify::fmIdxlLock, idx, and mmod.
Referenced by idxlunlock(), and femMeshModify::idxlunlockRemote().
copies the elem data from elemid to newEl Use the interpolate copy element function to do this
Definition at line 1553 of file fem_util.C.
References FEM_Interpolate::ElementArgs::e, FEM_Interpolate::ElementArgs::elType, FEM_Interpolate::FEM_InterpolateElementCopy(), femMeshModify::getfmInp(), mmod, and FEM_Interpolate::ElementArgs::oldElement.
Referenced by eatIntoElement(), FEM_Adapt::edge_bisect_help(), FEM_AdaptL::edge_contraction_help(), FEM_Adapt::edge_flip_help(), and femMeshModify::interpolateElemCopy().
void FEM_MUtil::pup | ( | PUP::er & | p | ) | [inline] |
Pup for this object.
Definition at line 2572 of file ParFUM_internals.h.
References idx.
Referenced by femMeshModify::pup().
int FEM_MUtil::getIdx | ( | ) | [inline] |
Return the chunk index this util object is attached to.
Definition at line 2576 of file ParFUM_internals.h.
References idx.
int FEM_MUtil::lookup_in_IDXL | ( | FEM_Mesh * | m, | |
int | sharedIdx, | |||
int | fromChk, | |||
int | type, | |||
int | elemType = 0 | |||
) |
Read this shared entry 'sharedIdx' in the IDXL list specified by 'type'.
void FEM_MUtil::getChunkNos | ( | int | entType, | |
int | entNo, | |||
int * | numChunks, | |||
IDXL_Share *** | chunks, | |||
int | elemType = 0 | |||
) |
Get all chunks that own this element/node.
The entType signifies what type of entity to lock. node=0, elem=1; entNo signifies the local index of the entity numChunks is the number of chunks that need to be locked to lock that entity chunks identifies the chunks that need to be locked
chunkListMsg* FEM_MUtil::getChunksSharingGhostNodeRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | sharedIdx | |||
) |
The set of chunks to which this node is sent as a ghost.
Delete this node on all remote chunks (present as shared or ghost).
void FEM_MUtil::addGhostElementRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elemType, | |||
int * | indices, | |||
int * | typeOfIndex, | |||
int | connSize | |||
) |
Add the element with this conn (indices, typeOfIndices) on this chunk (called from remote chunk).
Add a ghost element on this chunk The connectivity is defined as some ghost recv indices and some shared indices 'indices' is the shared indices from different idxl lists 'typeOfIndex' is the type of each node typeOfIndex=-1 means that the node is a new ghost and this chunk needs to create one Then find all chunks where this new ghost information should be added (remote call) and add this to the ghostRecv idxl table on this chunk for each of those chunks Finally gather the element data from the remote chunk (also remote call) After all the local indices are found, create a new ghost element on this chunk add this ghost element to the ghost recv table on this chunk.
Definition at line 585 of file util.C.
References IDXL_Side::addList(), IDXL_Side::addNode(), chunkListMsg::chunkList, FEM_Adapt_Algs::coord_attr, FEM_Mesh::elem, exists_in_IDXL(), FEM_add_element_local(), FEM_add_node_local(), FEM_Ghost_Essential_attributes(), femMeshModify::fmAdaptAlgs, free(), FEM_Entity::ghost, FEM_Entity::ghostRecv, idx, idxllock(), idxlunlock(), chunkListMsg::indexList, malloc(), meshMod, mmod, FEM_Mesh::node, chunkListMsg::numChunkList, and FEM_Node::shared.
void FEM_MUtil::removeElemRemote | ( | FEM_Mesh * | m, | |
int | chk, | |||
int | elementid, | |||
int | elemtype, | |||
int | permanent, | |||
bool | aggressive_node_removal = false | |||
) |
Remove this element on this chunk (called from remote chunk).
Remove this element, permanent specifies if this element is permanently removed.
Definition at line 629 of file util.C.
References FEM_Mesh::elem, and FEM_remove_element().
While acquiring a node (replace the oldIdx (ghost) with the newIdx).
Acquire the element specified by this ghost index.
Acquire the element (ghost) from the actual owner of this element This is implemented by removing this ghost element from the ghost send idxl list Remove this element (on this chunk and the owner chunk also) Add a new element with this connectivity ON THIS CHUNK Update the lock on any node which changes owners.
Definition at line 917 of file util.C.
References copyElemData(), FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, exists_in_IDXL(), FEM_add_element(), FEM_Modify_LockUpdate(), FEM_purge_element(), FEM_remove_element(), femMeshModify::fmMesh, idx, meshMod, mmod, and outStandingMappings.
find the set of chunks where this node should be sent as a ghost
find the set of chunks I need to send 'nodeId' as a ghost to For each adjacent node (which is not a ghost), find out which chunks each of these nodes are shared with Make a union of all these lists of chunks and return this set of chunks
Definition at line 1060 of file util.C.
References exists_in_IDXL(), femMeshModify::fmMesh, CkVec< T >::free(), IDXL_Side::getRec(), PUP::l, mmod, FEM_Mesh::n2n_getAll(), FEM_Mesh::node, CkVec< T >::push_back(), FEM_Node::shared, and CkVec< T >::size().
copies the elem data from elemid to newEl
void FEM_MUtil::packEntData | ( | char ** | data, | |
int * | size, | |||
int * | cnt, | |||
int | localIdx, | |||
bool | isnode, | |||
int | elemType | |||
) |
Pack the data from this element/node and return it.
Can be done for either a node or an element Use a pup sizer to pack the data (all atrributes) attached to this entity 'data' is the data that has been packed 'size' is the number of bytes of data that has been packed 'cnt' is the number of attributes that are packed.
Definition at line 1119 of file util.C.
References attr, count, FEM_Mesh::elem, femMeshModify::fmMesh, FEM_Attribute::getAttr(), malloc(), mmod, FEM_Mesh::node, FEM_Attribute::pupSingle(), PUP::sizer::size(), and CkVec< T >::size().
Referenced by femMeshModify::packEntData().
update the attributes of 'newIndex' with this data
Could be either a node or an element Unpack the data to this entry of the entity.
Definition at line 1163 of file util.C.
References attr, count, FEM_Mesh::elem, femMeshModify::fmMesh, FEM_Attribute::getAttr(), mmod, FEM_Mesh::node, FEM_Attribute::pupSingle(), and CkVec< T >::size().
Referenced by femMeshModify::updateAttrs().
Lock the idxl list with 'chk' (blocking call) (might be remote, if chk is smaller).
Unlock the idxl list with 'chk' (might be remote if chk is smaller).
Lock the idxl list with chk on this chunk.
Unlock the idxl list with chk on this chunk.
Print the node-to-node adjacency for this node.
Print the node-to-element adjacency for this node.
Print the element-to-node adjacency for this element.
Print the element-to-element adjacency for this element.
Print the coords and boundary for this node.
void FEM_MUtil::StructureTest | ( | FEM_Mesh * | m | ) |
A bunch of tests to verify that connectivity and geometric structure of mesh is appropriate.
Remote component of the above test (helper).
Test that there are no remaining acquired locks on this mesh.
void FEM_MUtil::unlockAll | ( | FEM_Mesh * | m | ) |
Release all currently held locks on this partition.
Remove all extant node locks in the mesh.
Probably only useful for debugging and very special cases.
Definition at line 1813 of file util.C.
References femMeshModify::fmIdxlLock, femMeshModify::fmLockN, FEM_Entity::is_valid(), mmod, FEM_Mesh::node, femMeshModify::numChunks, and FEM_Entity::size().
Referenced by FEM_AdaptL::unlockAll().
int FEM_MUtil::idx [private] |
chunk index
Definition at line 19 of file fem_util.h.
Referenced by addElemRemote(), addGhostElementRemote(), addToSharedList(), eatIntoElement(), FEM_MUtil(), getChunkNos(), getIdx(), getLockOwner(), IdxlListTest(), idxllock(), idxllockLocal(), idxlunlock(), idxlunlockLocal(), knowsAbtNode(), Replace_node_local(), splitEntitySharing(), StructureTest(), and UpdateGhostSend().
femMeshModify* FEM_MUtil::mmod [private] |
Definition at line 20 of file fem_util.h.
Referenced by addGhostElementRemote(), addToSharedList(), AreaTest(), copyElemData(), eatIntoElement(), FEM_MUtil(), FEM_Print_coords(), findGhostSend(), getChunkNos(), getLockOwner(), idxllockLocal(), idxlunlockLocal(), isShared(), knowsAbtNode(), packEntData(), removeNodeAll(), Replace_node_local(), residualLockTest(), splitEntityAll(), unlockAll(), updateAttrs(), and UpdateGhostSend().
femMeshModify* FEM_MUtil::mmod [private] |
cross-pointer to the femMeshModify object for this chunk
Definition at line 2540 of file ParFUM_internals.h.
CkVec<tuple> FEM_MUtil::outStandingMappings [private] |
vector of pairs of 'to-be-updated' mappings
Definition at line 2560 of file ParFUM_internals.h.
Referenced by eatIntoElement().