PPL Logo

FEM_MUtil Class Reference
[ParFUM Unstructured Mesh Framework]

A utility class with helper functions for adaptivity. More...

#include <fem_util.h>

Collaboration diagram for FEM_MUtil:

Collaboration graph
[legend]

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)
chunkListMsggetChunksSharingGhostNodeRemote (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)
chunkListMsggetChunksSharingGhostNodeRemote (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
femMeshModifymmod
femMeshModifymmod
 cross-pointer to the femMeshModify object for this chunk
CkVec< tupleoutStandingMappings
 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...

Detailed Description

A utility class with helper functions for adaptivity.

Definition at line 18 of file fem_util.h.


Constructor & Destructor Documentation

FEM_MUtil::FEM_MUtil (  )  [inline]

Definition at line 23 of file fem_util.h.

FEM_MUtil::FEM_MUtil ( int  i,
femMeshModify m 
)

Definition at line 13 of file fem_util.C.

References idx, and mmod.

FEM_MUtil::~FEM_MUtil (  ) 

Definition at line 18 of file fem_util.C.

FEM_MUtil::FEM_MUtil (  )  [inline]

default constructor

Definition at line 2564 of file ParFUM_internals.h.

FEM_MUtil::FEM_MUtil ( int  i,
femMeshModify m 
)

constructor

FEM_MUtil::FEM_MUtil ( femMeshModify m  ) 

constructor

Definition at line 17 of file util.C.

References mmod.

FEM_MUtil::~FEM_MUtil (  ) 

destructor


Member Function Documentation

int FEM_MUtil::getIdx (  )  [inline]

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().

Here is the call graph for this function:

Here is the caller graph for this function:

bool FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

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.

Here is the call graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::removeNodeRemote ( FEM_Mesh m,
int  chk,
int  sharedIdx 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::exists_in_IDXL ( FEM_Mesh m,
int  localIdx,
int  chk,
int  type,
int  elemType = 0 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::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.

Definition at line 677 of file fem_util.C.

References CmiMemoryCheck(), FEM_Mesh::elem, and size.

Referenced by FEM_Adapt_Algs::refine_element_leb().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::addGhostElementRemote ( FEM_Mesh m,
int  chk,
int  elemType,
int  numGhostIndices,
int ghostIndices,
int  numSharedIndices,
int sharedIndices,
int  connSize 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::eatIntoElement ( int  localIdx  ) 

int FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

bool FEM_MUtil::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'.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::findGhostSend ( int  nodeId,
int **  chunkl,
int numchunkl 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::AreaTest ( FEM_Mesh m  ) 

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::IdxlListTest ( FEM_Mesh m  ) 

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::verifyIdxlListRemote ( FEM_Mesh m,
int  fromChk,
int  fsize,
int  type 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::residualLockTest ( FEM_Mesh m  ) 

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::FEM_Print_n2n ( FEM_Mesh m,
int  nodeid 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::FEM_Print_n2e ( FEM_Mesh m,
int  nodeid 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::FEM_Print_e2n ( FEM_Mesh m,
int  eid 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::FEM_Print_e2e ( FEM_Mesh m,
int  eid 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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).

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::idxlunlock ( FEM_Mesh m,
int  chk,
int  type 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::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.

Definition at line 1521 of file fem_util.C.

References CmiMemoryCheck(), CthYield(), femMeshModify::fmIdxlLock, idx, and mmod.

Referenced by idxllock(), and femMeshModify::idxllockRemote().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::idxlunlockLocal ( FEM_Mesh m,
int  toChk,
int  type 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::copyElemData ( int  etype,
int  elemid,
int  newEl 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the caller graph for this function:

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::getRemoteIdx ( FEM_Mesh m,
int  elementid,
int  elemtype 
)

Get the shared ghost recv index in IDXL list for this element on one chunk.

bool FEM_MUtil::isShared ( int  index  ) 

Is this node shared among chunks.

int FEM_MUtil::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 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

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 
)

build a table of mappings of the which chunk knows about which node (given by conn)

chunkListMsg* FEM_MUtil::getChunksSharingGhostNodeRemote ( FEM_Mesh m,
int  chk,
int  sharedIdx 
)

The set of chunks to which this node is sent as a ghost.

void FEM_MUtil::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 FEM_MUtil::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 FEM_MUtil::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 FEM_MUtil::removeNodeAll ( FEM_Mesh m,
int  localIdx 
)

Delete this node on all remote chunks (present as shared or ghost).

void FEM_MUtil::removeNodeRemote ( FEM_Mesh m,
int  chk,
int  sharedIdx 
)

Remove this node from shared IDXL list and delete node (remote helper of above function).

void FEM_MUtil::removeGhostNodeRemote ( FEM_Mesh m,
int  fromChk,
int  sharedIdx 
)

Remove this ghost node on this chunk (called from remote chunk).

int FEM_MUtil::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 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.

Here is the call graph for this function:

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().

Here is the call graph for this function:

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 this ghost element on this chunk, also delete some ghost nodes and elements.

int FEM_MUtil::Replace_node_local ( FEM_Mesh m,
int  oldIdx,
int  newIdx 
)

While acquiring a node (replace the oldIdx (ghost) with the newIdx).

void FEM_MUtil::addToSharedList ( FEM_Mesh m,
int  fromChk,
int  sharedIdx 
)

Add this node to the shared Idxl list (called from remote chunk).

int FEM_MUtil::eatIntoElement ( int  localIdx,
bool  aggressive_node_removal = false 
)

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.

Here is the call graph for this function:

bool FEM_MUtil::knowsAbtNode ( int  chk,
int  nodeId 
)

Does this chunk know about this node index (on any idxl list with 'chk').

void FEM_MUtil::UpdateGhostSend ( int  nodeId,
int chunkl,
int  numchunkl 
)

get rid of unnecessary node sends to some chunks for a node

void FEM_MUtil::findGhostSend ( int  nodeId,
int *&  chunkl,
int numchunkl 
)

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().

Here is the call graph for this function:

void FEM_MUtil::copyElemData ( int  etype,
int  elemid,
int  newEl 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

void FEM_MUtil::updateAttrs ( char *  data,
int  size,
int  newIndex,
bool  isnode,
int  elemType 
)

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().

Here is the call graph for this function:

Here is the caller graph for this function:

int FEM_MUtil::getLockOwner ( int  nodeId  ) 

Return the owner of this lock (specified by nodeid).

void FEM_MUtil::idxllock ( FEM_Mesh m,
int  chk,
int  type 
)

Lock the idxl list with 'chk' (blocking call) (might be remote, if chk is smaller).

void FEM_MUtil::idxlunlock ( FEM_Mesh m,
int  chk,
int  type 
)

Unlock the idxl list with 'chk' (might be remote if chk is smaller).

void FEM_MUtil::idxllockLocal ( FEM_Mesh m,
int  toChk,
int  type 
)

Lock the idxl list with chk on this chunk.

void FEM_MUtil::idxlunlockLocal ( FEM_Mesh m,
int  toChk,
int  type 
)

Unlock the idxl list with chk on this chunk.

void FEM_MUtil::FEM_Print_n2n ( FEM_Mesh m,
int  nodeid 
)

Print the node-to-node adjacency for this node.

void FEM_MUtil::FEM_Print_n2e ( FEM_Mesh m,
int  nodeid 
)

Print the node-to-element adjacency for this node.

void FEM_MUtil::FEM_Print_e2n ( FEM_Mesh m,
int  eid 
)

Print the element-to-node adjacency for this element.

void FEM_MUtil::FEM_Print_e2e ( FEM_Mesh m,
int  eid 
)

Print the element-to-element adjacency for this element.

void FEM_MUtil::FEM_Print_coords ( FEM_Mesh m,
int  nodeid 
)

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.

int FEM_MUtil::AreaTest ( FEM_Mesh m  ) 

Test if the area of all elements is more than zero.

int FEM_MUtil::IdxlListTest ( FEM_Mesh m  ) 

Test if the Idxl lists are consistent on all chunks.

void FEM_MUtil::verifyIdxlListRemote ( FEM_Mesh m,
int  fromChk,
int  fsize,
int  type 
)

Remote component of the above test (helper).

int FEM_MUtil::residualLockTest ( FEM_Mesh m  ) 

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().

Here is the call graph for this function:

Here is the caller graph for this function:


Field Documentation

int FEM_MUtil::idx [private]

cross-pointer to the femMeshModify object for this chunk

Definition at line 2540 of file ParFUM_internals.h.

vector of pairs of 'to-be-updated' mappings

Definition at line 2560 of file ParFUM_internals.h.

Referenced by eatIntoElement().


The documentation for this class was generated from the following files:

Generated on Mon Sep 21 08:24:46 2020 for Charm++ by  doxygen 1.5.5