ParFUM Unstructured Mesh Framework

Collaboration diagram for ParFUM Unstructured Mesh Framework:
Charm++ ParFUM Framework: C++ interface file. More...

Data Structures

class  dynChunk
 A dynamic (growing) representation of a chunk. More...
class  splitter
 Splitter is a big utility class used to separate an FEM_Mesh into pieces. More...
class  FEM_Entity_numberer
 Reassemble entities based on their global numbers. More...
struct  ParFUM_collider
 ParFUM Collision Interface File. More...
class  FEM_Comm_Holder
 We want the FEM_Comm/IDXL_Side's to be accessible to *both* FEM routines (via these data structures) and IDXL routines (via an idxl->addStatic registration). More...
class  FEM_Sym_Desc
 Describes one kind of symmetry condition. More...
class  FEM_Sym_Linear
 Describes a linear-periodic (space shift) symmetry:. More...
class  FEM_Sym_List
 Describes all the different kinds of symmetries that apply to this mesh. More...
class  BasicTable2d< T >
 This is a simple 2D table. More...
class  AllocTable2d< T >
 A heap-allocatable, resizable BasicTable2d. More...
class  FEM_Attribute
 Describes an FEM entity's "attribute"--a user-visible, user-settable 2D table. More...
class  FEM_Entity
 Describes an entire class of "entities"--nodes, elements, or sparse data records. More...
class  FEM_Node
 FEM_Node is a type of FEM_Entity, which refers to nodes. More...
class  FEM_Userdata_item
 Describes one piece of generic unassociated mesh data. More...
class  FEM_Userdata_list
 Describes all the unassociated data in a mesh. More...
class  FEM_Entity_Types< T >
 This class describes several different types of a certain kind of entity. More...
class  FEM_Mesh
 A FEM_Mesh is a collection of entities. More...
class  l2g_t
 This class describes a local-to-global index mapping, used in FEM_Print. More...
class  NumberedVec< T >
 Map (user-assigned) numbers to T's. More...
class  ArrayPtrT< T >
 Smart pointer-to-new[]'d array-of-T. More...
class  marshallNewHeapCopy< T >
 Unmarshall into a heap-allocated copy. More...
class  FEM_T_List< T >
 Keeps a list of dynamically-allocated T objects, indexed by a user-carried, persistent "int". More...
class  FEM_Mesh_list
class  FEM_chunk
 A collection of meshes on one processor. More...
class  FEM_Ghost_Layer
 Describes a single layer of ghost elements. More...
class  FEM_Ghost_Stencil
 Describes a set of required adjacent elements for this kind of element, stored as an explicit adjacency list. More...
class  FEM_Ghost_Region
 Describes a way to grow a set of ghosts. More...
class  FEM_Partition
 Describes all the data needed for partitioning a mesh. More...
class  FEM_Mesh_Output
class  FEM_ElemAdj_Layer
 This stores the types of faces for each element type. More...
class  DefaultListEntry< T, PUP_EVERY_ELEMENT >
class  ElemList< T >
class  UniqElemList< T >
class  NodeElem
class  MeshElem
 This class is an MSA Entity. More...
class  Hashnode
struct  conndata
struct  partconndata
 Structure to store connectivity data after the global element partition has been returned by parmetis. More...
struct  ghostdata
 structure for storing the ghost layers More...
class  elemList
class  tupleTable
class  chunkList
class  FEM_MUtil
 A utility class with helper functions for adaptivity. More...
class  vector2d
class  CkThresholdTimer
 Time a sequence of operations, printing out the names and times of any operations that exceed a threshold. More...
class  NList
class  Nodes
class  Graph

Typedefs

typedef void(* FEM_Update_mesh_fn )(int userTag)
typedef void(* FEM_Update_mesh_fortran_fn )(int *userTag)
typedef void(* FEM_PupFn )(pup_er, void *)
typedef void(* FEM_Mesh_alloc_fn )(void *param, int *size, int *maxSize)
typedef int FEM_Comm_t
 This should be MPI_Comm, but I want it for Fortran too.
typedef void(* FEM_Userdata_fn )(pup_er p, void *data)
typedef IDXL_Side FEM_Comm
typedef IDXL_List FEM_Comm_List
typedef IDXL_Rec FEM_Comm_Rec
typedef unsigned char FEM_Symmetries_t
 This datatype is how the framework stores symmetries internally.
typedef ArrayPtrT< intintArrayPtr
typedef marshallNewHeapCopy
< FEM_Mesh
marshallMeshChunk
typedef MSA2D< int,
DefaultEntry< int >
, MSA_DEFAULT_ENTRIES_PER_PAGE,
MSA_ROW_MAJOR > 
MSA2DRM
typedef MSA1D< int,
DefaultEntry< int >
, MSA_DEFAULT_ENTRIES_PER_PAGE > 
MSA1DINT
typedef UniqElemList< intIntList
typedef MSA1D< IntList,
DefaultListEntry< IntList,
true >
, MSA_DEFAULT_ENTRIES_PER_PAGE > 
MSA1DINTLIST
typedef UniqElemList< NodeElemNodeList
typedef MSA1D< NodeList,
DefaultListEntry< NodeList,
true >
, MSA_DEFAULT_ENTRIES_PER_PAGE > 
MSA1DNODELIST
typedef MSA1D< MeshElem,
DefaultEntry< MeshElem, true >, 1 > 
MSA1DFEMMESH
typedef double Real
typedef int idxtype

Enumerations

enum  { FEM_globalID = 33 }
enum  PartitionMode { SerialPartitionMode = 1, ParallelPartitionMode = 2, ManualPartitionMode }
enum  MetisGraphType { NodeNeighborMode, FaceNeighborMode }
enum  { FEM_globalID = 33 }

Functions

CDECL void fem_impl_call_init (void)
FDECL void FTN_NAME (INIT, init)
static void checkEquality (const char *what, int v1, const char *src1, int v2, const char *src2)
static void checkRange (const char *what, int v, int max)
static void checkArrayEntries (const int *arr, int nArr, int max, const char *what)
static void check (const FEM_Mesh *mesh)
static void check (const FEM_Partition &partition, const FEM_Mesh *mesh)
void FEM_Mesh_split (FEM_Mesh *mesh, int nChunks, const FEM_Partition &partition, FEM_Mesh_Output *out)
CkHashCode CkHashFunction_ints (const void *keyData, size_t keyLen)
int CkHashCompare_ints (const void *k1, const void *k2, size_t keyLen)
int ck_fem_map_compare_int (const void *a, const void *b)
static void renumberConn (const FEM_Elem &src_e, int l, FEM_Elem &dest_e, int g, const FEM_Mesh &mesh)
FEM_MeshFEM_Mesh_assemble (int nchunks, FEM_Mesh **chunks)
 Reassemble split chunks into a single mesh.
int is_shared (FEM_Mesh *m, int node)
 A wrapper to simplify the lookup to determine whether a node is shared.
CDECL void FEM_Print_n2n (int mesh, int nodeid)
CDECL void FEM_Print_n2e (int mesh, int eid)
CDECL void FEM_Print_e2n (int mesh, int eid)
CDECL void FEM_Print_e2e (int mesh, int eid)
CDECL void FEM_Print_Mesh_Summary (int mesh)
 Prints the mesh summary, i.e.
CDECL int FEM_add_node (int mesh, int *adjacent_nodes, int num_adjacent_nodes, int *chunks, int numChunks, int forceShared)
CDECL void FEM_remove_node (int mesh, int node)
CDECL int FEM_add_element (int mesh, int *conn, int conn_size, int elem_type, int chunkNo)
CDECL int FEM_remove_element (int mesh, int element, int elem_type, int permanent)
CDECL int FEM_purge_element (int mesh, int element, int elem_type)
int FEM_add_node_local (FEM_Mesh *m, bool addGhost, bool doLocking, bool doAdjacencies)
 Add a node to this mesh 'm', could be ghost/local decided by 'addGhost' basically, this function finds an empty row in the nodelist and clears its adjacencies then, it creates a lock for this node, if this node is new (i.e.
int FEM_add_node (FEM_Mesh *m, int *adjacentNodes, int numAdjacentNodes, int *chunks, int numChunks, int forceShared)
 'adjacentNodes' specifies the set of nodes between which this new node is to be added.
void FEM_add_shared_node_remote (FEM_Mesh *m, int chk, int nBetween, int *between)
 The function called by the entry method on the remote chunk Adds a node on this chunk between the nodes specified in 'between'.
void FEM_remove_node_local (FEM_Mesh *m, int node)
 This function invalidates a node entry and if there are any entries in the IDXL lists (ghost/local) then, these entries are cleared both on the local as well as the remote chunk and then the node is invalidated and any lock it might be holding is reset The pre-condition which is asserted here that the node should not have any adjacency entries, n2e or n2n.
void FEM_remove_node (FEM_Mesh *m, int node)
 remove a local or shared node, but NOT a ghost node Should probably be able to handle ghosts someday, but here we interpret it as deleting the entry in the ghost list.
void update_new_element_e2e (FEM_Mesh *m, int newEl, int elemType)
 A helper function for FEM_add_element_local below Will only work with the same element type as the one given, may crash otherwise.
void FEM_update_new_element_e2e (FEM_Mesh *m, int newEl, int elemType)
int FEM_add_element_local (FEM_Mesh *m, int *conn, int connSize, int elemType, bool addGhost, bool create_adjacencies)
 A helper function that adds the local element, and updates adjacencies.
int FEM_add_element (FEM_Mesh *m, int *conn, int connSize, int elemType, int chunkNo)
 This addds an element with the given 'conn' connecitivity and 'connSize' number of nodes in e2n to the mesh 'm'.
void FEM_remove_element_local (FEM_Mesh *m, int element, int etype)
 Remove a local element from any of the adjacency tables that use it, namely the n2e, e2e and e2n tables of the neighbors.
int FEM_remove_element (FEM_Mesh *m, int elementid, int elemtype, int permanent)
 Can be called on local or ghost elements removes the connectivity of the element on this chunk as well as all chunks on which it is a ghost 'permanent' is -1 if the element is to be deleted, e.g.
int FEM_purge_element (FEM_Mesh *m, int elementid, int elemtype)
 Purge an element works for both local and ghost elements.
CDECL int FEM_Modify_Lock (int mesh, int *affectedNodes, int numAffectedNodes, int *affectedElts, int numAffectedElts, int elemtype)
CDECL int FEM_Modify_Unlock (int mesh)
CDECL int FEM_Modify_LockN (int mesh, int nodeId, int readLock)
CDECL int FEM_Modify_UnlockN (int mesh, int nodeId, int readLock)
int FEM_Modify_Lock (FEM_Mesh *m, int *affectedNodes, int numAffectedNodes, int *affectedElts, int numAffectedElts, int elemtype)
 coarse lock (lock chunks) find out which all chunks these nodes belong to and lock them all
int FEM_Modify_Unlock (FEM_Mesh *m)
 Unlock all chunks that was being held by a lock originating from here.
int FEM_Modify_LockN (FEM_Mesh *m, int nodeId, int readlock)
 Lock a node get a 'read/write lock on 'nodeId' we find the chunk with the smallest id that owns/shares this node and lock this node on this chunk.
int FEM_Modify_UnlockN (FEM_Mesh *m, int nodeId, int readlock)
 Unlock this node find the chunk that holds the lock and unlock it on that chunk the type of the lock is also considered while unlocking a lock.
void FEM_Modify_LockAll (FEM_Mesh *m, int nodeId, bool lockall)
 When a chunk is losing a node, the lock might need to be reassigned lock it on the minchunk other than 'this chunk' should only be called when 'this chunk' is losing the node as local/shared.
void FEM_Modify_LockUpdate (FEM_Mesh *m, int nodeId, bool lockall)
 Deprecated: Update the lock on this node (by locking the newly formed node The locks will be cleared later must be a local node, lock it & then unlock it if needed.
void FEM_Modify_correctLockN (FEM_Mesh *m, int nodeId)
 Deprecated: For the newly acquired node, correct the lock by removing superfluous locks Should always be called on the new node to correct the locks should make sure that it is called before unlocking, i.e.
void FEM_Mesh_dataP (FEM_Mesh *fem_mesh, int entity, int attr, void *data, int firstItem, int length, int datatype, int width)
 wrapper function that takes a 'mesh pointer' instead of meshId, and gets/sets the data corresponding to the this 'attr' of this 'entity' 'firstItem' is the starting point in the list, 'length' is the number of entries 'datatype' is the type of data while 'width' is the size of each data entry
void FEM_Mesh_data_layoutP (FEM_Mesh *fem_mesh, int entity, int attr, void *data, int firstItem, int length, IDXL_Layout_t layout)
 similar to the above function, but takes a 'layout' instead of datatype and width
void FEM_Mesh_data_layoutP (FEM_Mesh *m, int entity, int attr, void *data, int firstItem, int length, const IDXL_Layout &layout)
 The helper function that both the above functions call does the actual setting/getting of the data in/from the mesh.
void FEM_Ghost_Essential_attributes (FEM_Mesh *m, int coord_attr, int bc_attr, int nodeid)
 Copy the essential attributes for this ghost node from remote chunks This would be only done for attributes of a node, currently for coords & boundary.
void clearPartition (void)
int FEM_Mesh_Parallel_broadcast (int fem_mesh, int masterRank, FEM_Comm_t comm_context)
int FEM_master_parallel_part (int fem_mesh, int masterRank, FEM_Comm_t comm_context)
int FEM_slave_parallel_part (int fem_mesh, int masterRank, FEM_Comm_t comm_context)
struct partconndataFEM_call_parmetis (int nelem, MSA1DINT::Read &rPtr, MSA1DINT::Read &rInd, FEM_Comm_t comm_context)
void FEM_write_nodepart (MSA1DINTLIST::Accum &nodepart, struct partconndata *data, MPI_Comm comm_context)
void FEM_write_part2node (MSA1DINTLIST::Read &nodepart, MSA1DNODELIST::Accum &part2node, struct partconndata *data, MPI_Comm comm_context)
void FEM_write_part2elem (MSA1DINTLIST::Accum &part2elem, struct partconndata *data, MPI_Comm comm_context)
FEM_MeshFEM_break_mesh (FEM_Mesh *m, int numElements, int numChunks)
void sendBrokenMeshes (FEM_Mesh *mesh_array, FEM_Comm_t comm_context)
void FEM_write_part2mesh (MSA1DFEMMESH::Accum &part2mesh, struct partconndata *partdata, struct conndata *data, MSA1DINTLIST::Read &nodepart, int numChunks, int myChunk, FEM_Mesh *m)
void sortNodeList (NodeList &lnodes)
void addIDXLists (FEM_Mesh *m, NodeList &lnodes, int myChunk)
struct ghostdatagatherGhosts ()
void makeGhosts (FEM_Mesh *m, MPI_Comm comm, int masterRank, int numLayers, FEM_Ghost_Layer **layers)
bool listContains (FEM_Comm_List &list, int entry)
void makeGhost (FEM_Mesh *m, MPI_Comm comm, int masterRank, int totalShared, FEM_Ghost_Layer *layer, CkHashtableT< CkHashtableAdaptorT< int >, char > &sharedNode, CkHashtableT< CkHashtableAdaptorT< int >, int > &global2local)
bool sharedWith (int lnode, int chunk, FEM_Mesh *m)
void FEM_Abort (const char *msg)
void FEM_Abort (const char *caller, const char *sprintf_msg, int int0, int int1, int int2)
CDECL void pupFEM_Chunk (pup_er cp)
CDECL void FEM_Init (FEM_Comm_t defaultCommunicator)
 Initialize the FEM framework (must have called MPI_Init).
 FORTRAN_AS_C (FEM_INIT, FEM_Init, fem_init,(int *comm),(*comm)) void FEM_Mesh_list
CDECL int FEM_Mesh_allocate (void)
 mesh creation functions
 FORTRAN_AS_C_RETURN (int, FEM_MESH_ALLOCATE, FEM_Mesh_allocate, fem_mesh_allocate,(void),())
 Return a new'd copy of this class, by calling pup.
CDECL int FEM_Mesh_copy (int fem_mesh)
 build new mesh
 FORTRAN_AS_C_RETURN (int, FEM_MESH_COPY, FEM_Mesh_copy, fem_mesh_copy,(int *m),(*m)) CDECL void FEM_Mesh_deallocate(int fem_mesh)
 FORTRAN_AS_C (FEM_MESH_DEALLOCATE, FEM_Mesh_deallocate, fem_mesh_deallocate,(int *m),(*m)) CDECL int FEM_Mesh_read(const char *prefix
CDECL void FEM_Mesh_partition (int fem_mesh, int nParts, int *destMeshes)
 FORTRAN_AS_C (FEM_MESH_PARTITION, FEM_Mesh_partition, fem_mesh_partition,(int *mesh, int *nParts, int *dest),(*mesh,*nParts, dest)) CDECL int FEM_Mesh_recv(int fromRank
CDECL int FEM_Mesh_broadcast (int fem_mesh, int masterRank, FEM_Comm_t comm_context)
 FORTRAN_AS_C_RETURN (int, FEM_MESH_BROADCAST, FEM_Mesh_broadcast, fem_mesh_broadcast,(int *mesh, int *rank, int *comm),(*mesh,*rank,*comm)) CDECL void FEM_Mesh_copy_globalno(int src_mesh
 n (n_)
 addNodes (addNodes_)
 ends (new int[n])
 adj (new int[2 *userEnds[n-1]])
CDECL void FEM_Add_ghost_stencil_type (int elType, int nElts, int addNodes, const int *ends, const int *adj2)
FDECL void FTN_NAME (FEM_ADD_GHOST_STENCIL_TYPE, fem_add_ghost_stencil_type)
int globalElem2elType (const FEM_Mesh *m, int globalElem)
CDECL void FEM_Add_ghost_stencil (int nElts, int addNodes, const int *ends, const int *adj)
FDECL void FTN_NAME (FEM_ADD_GHOST_STENCIL, fem_add_ghost_stencil)
CDECL void FEM_Add_ghost_layer (int nodesPerTuple, int doAddNodes)
FDECL void FTN_NAME (FEM_ADD_GHOST_LAYER, fem_add_ghost_layer)
static void add_ghost_elem (int elType, int tuplesPerElem, const int *elem2tuple, int idxBase)
CDECL void FEM_Add_ghost_elem (int elType, int tuplesPerElem, const int *elem2tuple)
FDECL void FTN_NAME (FEM_ADD_GHOST_ELEM, fem_add_ghost_elem)
CDECL void FEM_Update_ghost_field (int fid, int elType, void *v_data)
FDECL void FTN_NAME (FEM_UPDATE_GHOST_FIELD, fem_update_ghost_field)
CDECL void FEM_Exchange_ghost_lists (int elemType, int nIdx, const int *localIdx)
FDECL void FTN_NAME (FEM_EXCHANGE_GHOST_LISTS, fem_exchange_ghost_lists)
CDECL int FEM_Get_ghost_list_length (void)
FDECL int FTN_NAME (FEM_GET_GHOST_LIST_LENGTH, fem_get_ghost_list_length)
CDECL void FEM_Get_ghost_list (int *dest)
FDECL void FTN_NAME (FEM_GET_GHOST_LIST, fem_get_ghost_list)
static void getRoccomPconn (IDXL_Side_t is, int bias, CkVec< int > &pconn, const int *paneFmChunk)
 Extract an IDXL_Side_t into Roccom format.
static CkVec< intgetRoccomPconn (int fem_mesh, int *ghost_len, const int *paneFmChunk)
 Extract all FEM communication information into Roccom format.
CDECL void FEM_Get_roccom_pconn_size (int fem_mesh, int *total_len, int *ghost_len)
 FORTRAN_AS_C (FEM_GET_ROCCOM_PCONN_SIZE, FEM_Get_roccom_pconn_size, fem_get_roccom_pconn_size,(int *mesh, int *tl, int *gl),(*mesh, tl, gl)) CDECL void FEM_Get_roccom_pconn(int fem_mesh
int commState (int entityNo, const IDXL_Side &s)
CDECL void FEM_Make_node_globalno (int fem_mesh, FEM_Comm_t comm_context)
 Based on shared node communication list, compute FEM_NODE FEM_GLOBALNO and FEM_NODE_PRIMARY.
 FORTRAN_AS_C (FEM_MAKE_NODE_GLOBALNO, FEM_Make_node_globalno, fem_make_node_globalno,(int *mesh, int *comm),(*mesh,*comm)) class localToGlobal
CDECL void FEM_Add_elem2face_tuples (int fem_mesh, int elem_type, int nodesPerTuple, int tuplesPerElem, const int *elem2tuple)
 Register a set of tuples for a single element type Must be called once for each element type.
void _registerParFUM (void)
void FEM_Done (void)
int FEM_My_partition (void)
 Utility functions.
int FEM_Num_partitions (void)
double FEM_Timer (void)
void FEM_Print (const char *str)
void FEM_Print_partition (void)
void FEM_Mesh_deallocate (int fem_mesh)
 copy existing mesh
int FEM_Mesh_read (const char *prefix, int partNo, int nParts)
 delete this mesh
void FEM_Mesh_write (int fem_mesh, const char *prefix, int partNo, int nParts)
int FEM_Mesh_assemble (int nParts, const int *srcMeshes)
int FEM_Mesh_recv (int fromRank, int tag, FEM_Comm_t comm_context)
void FEM_Mesh_send (int fem_mesh, int toRank, int tag, FEM_Comm_t comm_context)
int FEM_Mesh_reduce (int fem_mesh, int toRank, FEM_Comm_t comm_context)
void FEM_Mesh_copy_globalno (int src_mesh, int dest_mesh)
void FEM_Mesh_print (int fem_mesh)
void FEM_Mesh_set_conn (int fem_mesh, int entity, const int *conn, int firstItem, int length, int width)
void FEM_Mesh_get_conn (int fem_mesh, int entity, int *conn, int firstItem, int length, int width)
void FEM_Mesh_set_data (int fem_mesh, int entity, int attr, const void *data, int firstItem, int length, int datatype, int width)
void FEM_Mesh_get_data (int fem_mesh, int entity, int attr, void *data, int firstItem, int length, int datatype, int width)
void FEM_Mesh_conn (int fem_mesh, int entity, int *conn, int firstItem, int length, int width)
int FEM_Mesh_get_length (int fem_mesh, int entity)
void FEM_Mesh_data (int fem_mesh, int entity, int attr, void *data, int firstItem, int length, int datatype, int width)
void FEM_Mesh_data_layout (int fem_mesh, int entity, int attr, void *data, int firstItem, int length, IDXL_Layout_t layout)
void FEM_Mesh_data_offset (int fem_mesh, int entity, int attr, void *data, int firstItem, int length, int type, int width, int offsetBytes, int distanceBytes, int skewBytes)
void FEM_Register_array (int fem_mesh, int entity, int attr, void *data, int datatype, int width)
void FEM_Register_array_layout (int fem_mesh, int entity, int attr, void *data, IDXL_Layout_t layout)
void FEM_Register_entity (int fem_mesh, int entity, void *data, int len, int max, FEM_Mesh_alloc_fn fn)
void FEM_Mesh_set_length (int fem_mesh, int entity, int newLength)
int FEM_Mesh_get_width (int fem_mesh, int entity, int attr)
void FEM_Mesh_set_width (int fem_mesh, int entity, int attr, int newWidth)
int FEM_Mesh_get_datatype (int fem_mesh, int entity, int attr)
int FEM_Mesh_get_entities (int fem_mesh, int *entities)
int FEM_Mesh_get_attributes (int fem_mesh, int entity, int *attributes)
const char * FEM_Get_entity_name (int entity, char *storage)
 Return the human-readable version of this entity code, like "FEM_NODE".
const char * FEM_Get_attr_name (int attr, char *storage)
 Return the human-readable version of this attribute code, like "FEM_CONN".
const char * FEM_Get_datatype_name (int datatype, char *storage)
int FEM_Mesh_is_get (int fem_mesh)
int FEM_Mesh_is_set (int fem_mesh)
void FEM_Mesh_become_get (int fem_mesh)
void FEM_Mesh_become_set (int fem_mesh)
void FEM_Mesh_pup (int fem_mesh, int dataTag, FEM_Userdata_fn fn, void *data)
void FEM_Add_linear_periodicity (int nFaces, int nPer, const int *facesA, const int *facesB, int nNodes, const double *nodeLocs)
void FEM_Sym_coordinates (int who, double *d_locs)
void FEM_Set_sym_nodes (const int *canon, const int *sym)
void FEM_Get_sym (int who, int *destSym)
IDXL_Layout_t FEM_Create_simple_field (int base_type, int vec_len)
IDXL_Layout_t FEM_Create_field (int base_type, int vec_len, int init_offset, int distance)
IDXL_t FEM_Comm_shared (int fem_mesh, int entity)
IDXL_t FEM_Comm_ghost (int fem_mesh, int entity)
void FEM_Get_roccom_pconn (int fem_mesh, const int *paneFmChunk, int *pconn)
void FEM_Set_roccom_pconn (int fem_mesh, const int *paneFmChunk, const int *src, int total_len, int ghost_len)
int FEM_Register (void *userData, FEM_PupFn _pup_ud)
void FEM_Migrate (void)
void * FEM_Get_userdata (int n)
void FEM_Barrier (void)
void init (void)
void driver (void)
void FEM_Mesh_create_node_elem_adjacency (int fem_mesh)
void FEM_Mesh_create_node_node_adjacency (int fem_mesh)
void FEM_Mesh_create_elem_elem_adjacency (int fem_mesh)
void FEM_Mesh_allocate_valid_attr (int fem_mesh, int entity_type)
void FEM_set_entity_valid (int mesh, int entityType, int entityIdx)
void FEM_set_entity_invalid (int mesh, int entityType, int entityIdx)
int FEM_is_valid (int mesh, int entityType, int entityIdx)
int FEM_count_valid (int mesh, int entityType)
int FEM_is_node_shared (int mesh, int idx)
int FEM_find_node_owner (int mesh, int idx)
void FEM_Mesh_detect_features (int fem_mesh)
void FEM_set_entity_coord2 (int mesh, int entityType, int entityIdx, double x, double y)
void FEM_set_entity_coord3 (int mesh, int entityType, int entityIdx, double x, double y, double z)
void FEM_Mesh_Become_Setting (int mesh)
void FEM_Mesh_Become_Getting (int mesh)
int FEM_Mesh_default_read (void)
int FEM_Mesh_default_write (void)
void FEM_Mesh_set_default_read (int fem_mesh)
void FEM_Mesh_set_default_write (int fem_mesh)
void FEM_Update_field (int fid, void *nodes)
void FEM_Reduce_field (int fid, const void *nodes, void *outbuf, int op)
void FEM_Reduce (int fid, const void *inbuf, void *outbuf, int op)
void FEM_Read_field (int fid, void *nodes, const char *fname)
void FEM_Set_node (int nNodes, int doublePerNode)
void FEM_Set_node_data (const double *data)
void FEM_Set_elem (int elType, int nElem, int doublePerElem, int nodePerElem)
void FEM_Set_elem_data (int elType, const double *data)
void FEM_Set_elem_conn (int elType, const int *conn)
void FEM_Set_sparse (int uniqueIdentifier, int nRecords, const int *nodes, int nodesPerRec, const void *data, int dataPerRec, int dataType)
void FEM_Set_sparse_elem (int uniqueIdentifier, const int *rec2elem)
void FEM_Get_node (int *nNodes, int *doublePerNode)
void FEM_Get_node_data (double *data)
void FEM_Get_elem (int elType, int *nElem, int *doublePerElem, int *nodePerElem)
void FEM_Get_elem_data (int elType, double *data)
void FEM_Get_elem_conn (int elType, int *conn)
int FEM_Get_sparse_length (int uniqueIdentifier)
void FEM_Get_sparse (int uniqueIdentifier, int *nodes, void *data)
void FEM_Set_mesh (int nelem, int nnodes, int nodePerElem, int *conn)
int FEM_Get_node_ghost (void)
int FEM_Get_elem_ghost (int elemType)
void FEM_Update_mesh (FEM_Update_mesh_fn callFn, int userValue, int doWhat)
void FEM_Set_partition (int *elem2chunk)
void FEM_REF_INIT (int mesh)
void FEM_Serial_split (int nchunks)
void FEM_Serial_begin (int chunkNo)
void FEM_Serial_read (int chunkNo, int nChunks)
void FEM_Serial_assemble (void)
int FEM_Get_comm_partners (void)
int FEM_Get_comm_partner (int partnerNo)
int FEM_Get_comm_count (int partnerNo)
void FEM_Get_comm_nodes (int partnerNo, int *nodeNos)
ParFUM_collider ParFUM_Collide_Init (int dimension)
 ParFUM_Collide_init() will initialize the collision library.
int ParFUM_Collide (ParFUM_collider *c, double box_padding=0.0)
 ParFUM_Collide() will create bounding boxes for each element in the local mesh chunk.
void ParFUM_Collide_GetCollisions (ParFUM_collider *c, void *results)
 ParFUM_Collide_GetCollisions() is used to get the data for any remote elements which It should be called after Collide even if ParFUM_Collide returned 0.
void ParFUM_Collide_Destroy (ParFUM_collider *c)
void FEM_ADAPT_Init (int meshID)
 User functions for adaptivity.
FDECL void FTN_NAME (FEM_ADAPT_INIT, fem_adapt_init)(int *meshID)
void FEM_ADAPT_Refine (int meshID, int qm, int method, double factor, double *sizes)
FDECL void FTN_NAME (FEM_ADAPT_REFINE, fem_adapt_refine)(int *meshID
void FEM_ADAPT_Coarsen (int meshID, int qm, int method, double factor, double *sizes)
FDECL void FTN_NAME (FEM_ADAPT_COARSEN, fem_adapt_coarsen)(int *meshID
void FEM_ADAPT_AdaptMesh (int meshID, int qm, int method, double factor, double *sizes)
FDECL void FTN_NAME (FEM_ADAPT_ADAPTMESH, fem_adapt_adaptmesh)(int *meshID
void FEM_ADAPT_SetElementSizeField (int meshID, int elem, double size)
FDECL void FTN_NAME (FEM_ADAPT_SETELEMENTSIZEFIELD, fem_adapt_setelementsizefield)(int *meshID
void FEM_ADAPT_SetElementsSizeField (int meshID, double *sizes)
FDECL void FTN_NAME (FEM_ADAPT_SETELEMENTSSIZEFIELD, fem_adapt_setelementssizefield)(int *meshID
void FEM_ADAPT_SetReferenceMesh (int meshID)
FDECL void FTN_NAME (FEM_ADAPT_SETREFERENCEMESH, fem_adapt_setreferencemesh)(int *meshID)
void FEM_ADAPT_GradateMesh (int meshID, double smoothness)
FDECL void FTN_NAME (FEM_ADAPT_GRADATEMESH, fem_adapt_gradatemesh)(int *meshID
void FEM_ADAPT_TestMesh (int meshID)
FDECL void FTN_NAME (FEM_ADAPT_TESTMESH, fem_adapt_testmesh)(int *meshID)
int FEM_ADAPT_SimpleRefineMesh (int meshID, double targetA, double xmin=0.0, double ymin=0.0, double xmax=1.0, double ymax=1.0)
FDECL void FTN_NAME (FEM_ADAPT_SIMPLEREFINEMESH, fem_adapt_simplerefinemesh)(int *meshID
int FEM_ADAPT_SimpleCoarsenMesh (int meshID, double targetA, double xmin=0.0, double ymin=0.0, double xmax=1.0, double ymax=1.0)
FDECL void FTN_NAME (FEM_ADAPT_SIMPLECOARSENMESH, fem_adapt_simplecoarsenmesh)(int *meshID
void ParFUM_SA_Init (int meshId)
 User functions for parfum initialization.
FDECL void FTN_NAME (PARFUM_SA_INIT, parfum_sa_init)(int *meshId)
 CtvExtern (FEM_Adapt_Algs *, _adaptAlgs)
 PUPmarshall (FEM_Attribute) class FEM_DataAttribute
 A single table of user data associated with an entity.
 PUPmarshall (FEM_DataAttribute) class FEM_IndexAttribute
 The FEM_Attribute is of type integer indices.
 PUPmarshall (FEM_IndexAttribute) class FEM_VarIndexAttribute
 The FEM_Attribute is a variable set of integer indices.
 PUPmarshall (FEM_Entity) inline int FEM_Attribute
 PUPmarshall (FEM_Node) class FEM_Elem
 FEM_Elem is a type of FEM_Entity, which refers to elems.
 PUPmarshall (FEM_Elem) class FEM_Sparse
 FEM_Sparse is a type of FEM_Entity, which refers to edges.
 PUPmarshall (FEM_Sparse) class FEM_Userdata_pupfn
 Describes a user function to pup a piece of mesh data.
void FEM_Index_Check (const char *caller, const char *entityType, int type, int maxType)
void FEM_Is_NULL (const char *caller, const char *entityType, int type)
int zeroToMinusOne (int i)
 Map fortran element (>=1) or node (0) marker to C version (>=1, -1).
 PUPmarshall (FEM_Mesh) FEM_Mesh *FEM_Mesh_lookup(int fem_mesh
FEM_EntityFEM_Entity_lookup (int fem_mesh, int entity, const char *caller)
FEM_AttributeFEM_Attribute_lookup (int fem_mesh, int entity, int attr, const char *caller)
void FEM_Mesh_data_layout (int fem_mesh, int entity, int attr, void *data, int firstItem, int length, const IDXL_Layout &layout)
void FEM_Register_array_layout (int fem_mesh, int entity, int attr, void *data, int firstItem, const IDXL_Layout &layout)
void FEM_Register_entity_impl (int fem_mesh, int entity, void *args, int len, int max, FEM_Mesh_alloc_fn fn)
FILE * FEM_openMeshFile (const char *prefix, int chunkNo, int nchunks, bool forRead)
FEM_MeshFEM_readMesh (const char *prefix, int chunkNo, int nChunks)
void FEM_writeMesh (FEM_Mesh *m, const char *prefix, int chunkNo, int nChunks)
FEM_PartitionFEM_curPartition (void)
void FEM_Mesh_partition (const FEM_Mesh *mesh, int nchunks, int *elem2chunk, bool faceGraph=false)
intCkCopyArray (const int *src, int len, int indexBase)
void mesh2graph (const FEM_Mesh *m, Graph *g)
void mesh2graph_face (const FEM_Mesh *m, Graph *g)
 Given an FEM_Mesh, determine all pairs of elements which share a common face, and add them as edges to the provided graph.
void METIS_PartGraphRecursive (int *, int *, int *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *)
void METIS_PartGraphKway (int *nv, int *xadj, int *adjncy, int *vwgt, int *adjwgt, int *wgtflag, int *numflag, int *nparts, int *options, int *edgecut, int *part)
void FEM_Ghost_Stencil::check (const FEM_Mesh &mesh) const
 Make sure this stencil makes sense for this mesh.
 splitter::splitter (FEM_Mesh *mesh_, const int *elem2chunk_, int nChunks_)
 splitter::~splitter ()
void splitter::buildCommLists (void)
void splitter::aboutToCreate (void)
FEM_Meshsplitter::createMesh (int c)
void splitter::copySparseChunks (const FEM_Sparse &src, int s, bool forGhost)
 Copy the global sparse record src[s] into all the chunks it belongs in.
void splitter::separateSparse (bool forGhost)
void splitter::addGhosts (const FEM_Partition &partition)
void splitter::addStencil (const FEM_Ghost_Stencil &s, const FEM_Partition &partition)
 Add a ghost stencil: an explicit list of needed ghosts.
void splitter::addGlobalGhost (int srcType, int srcNum, int destType, int destNum, bool addNodes)
 Add the real element (srcType,srcNum) as a ghost for use by (destType,destNum).
void splitter::addLayer (const FEM_Ghost_Layer &g, const FEM_Partition &partition)
 Add an entire layer of ghost elements.
bool splitter::addTuple (int *dest, FEM_Symmetries_t *destSym, const int *elem2tuple, int nodesPerTuple, const int *conn) const
 Return an elemList entry if this tuple should be a ghost:.
void splitter::addSymmetryGhost (const elemList &a)
 Add this ghost, which arrises because of a mirror symmetry condition.
void splitter::addGhostPair (const elemList &src, const elemList &dest, bool addNodes)
 Check if src should be added as a ghost on dest's chunk.
int splitter::addGhostElement (int t, int gNo, int srcChunk, int destChunk, FEM_Symmetries_t sym)
 Add this global element as a ghost between src and dest, or return -1.
int splitter::addGhostNode (int gnNo, int srcChunk, int destChunk, FEM_Symmetries_t sym)
 Add this global node as a ghost between src and dest, or return -1.
int splitter::addGhostInner (const FEM_Entity &gEnt, int gNo, chunkList &gDest, int srcChunk, FEM_Entity &srcEnt, int destChunk, FEM_Entity &destEnt, FEM_Symmetries_t sym, int isNode, int t)
 Utility used by addGhostNode and addGhostElement.
void splitter::consistencyCheck (void)
 femMeshModify::femMeshModify (femMeshModMsg *fm)
 femMeshModify::femMeshModify (CkMigrateMessage *m)
 femMeshModify::~femMeshModify ()
void femMeshModify::pup (PUP::er &p)
 Pup to transfer this object's data.
void femMeshModify::ckJustMigrated (void)
 This function is overloaded, it is called on this object just after migration.
void femMeshModify::setPointersAfterMigrate (FEM_Mesh *m)
 Set the mesh pointer after the migration.
void femMeshModify::setFemMesh (FEMMeshMsg *fm)
 Part of the initialization phase, create all the new objects Populate all data structures, include all locks It also computes all the fixed nodes and populates a data structure with it.
intMsgfemMeshModify::lockRemoteChunk (int2Msg *i2msg)
intMsgfemMeshModify::unlockRemoteChunk (int2Msg *i2msg)
intMsgfemMeshModify::lockRemoteNode (int sharedIdx, int fromChk, int isGhost, int readLock)
intMsgfemMeshModify::unlockRemoteNode (int sharedIdx, int fromChk, int isGhost, int readLock)
chunkListMsgfemMeshModify::getChunksSharingGhostNode (int2Msg *)
intMsgfemMeshModify::addNodeRemote (addNodeMsg *fm)
void femMeshModify::addSharedNodeRemote (sharedNodeMsg *fm)
void femMeshModify::removeSharedNodeRemote (removeSharedNodeMsg *fm)
void femMeshModify::removeGhostNode (int fromChk, int sharedIdx)
void femMeshModify::addGhostElem (addGhostElemMsg *fm)
void femMeshModify::addElementRemote (addElemMsg *fm)
void femMeshModify::removeGhostElem (removeGhostElemMsg *fm)
void femMeshModify::removeElementRemote (removeElemMsg *fm)
intMsgfemMeshModify::eatIntoElement (int fromChk, int sharedIdx)
intMsgfemMeshModify::getLockOwner (int fromChk, int sharedIdx)
boolMsgfemMeshModify::knowsAbtNode (int fromChk, int toChk, int sharedIdx)
void femMeshModify::refine_flip_element_leb (int fromChk, int propElemT, int propNodeT, int newNodeT, int nbrOpNodeT, int nbrghost, double longEdgeLen)
void femMeshModify::addToSharedList (int fromChk, int sharedIdx)
void femMeshModify::updateAttrs (updateAttrsMsg *umsg)
 update the attributes of the node with this data
void femMeshModify::updateghostsend (verifyghostsendMsg *vmsg)
findgsMsgfemMeshModify::findghostsend (int fromChk, int sharedIdx)
intMsgfemMeshModify::getIdxGhostSend (int fromChk, int idxshared, int toChk)
double2MsgfemMeshModify::getRemoteCoord (int fromChk, int ghostIdx)
intMsgfemMeshModify::getRemoteBound (int fromChk, int ghostIdx)
void femMeshModify::updateIdxlList (int fromChk, int idxTrans, int transChk)
void femMeshModify::removeIDXLRemote (int fromChk, int sharedIdx, int type)
void femMeshModify::addTransIDXLRemote (int fromChk, int sharedIdx, int type)
void femMeshModify::verifyIdxlList (int fromChk, int size, int type)
void femMeshModify::idxllockRemote (int fromChk, int type)
void femMeshModify::idxlunlockRemote (int fromChk, int type)
intMsgfemMeshModify::hasLockRemoteNode (int sharedIdx, int fromChk, int isGhost)
void femMeshModify::modifyLockAll (int fromChk, int sharedIdx)
boolMsgfemMeshModify::verifyLock (int fromChk, int sharedIdx, int isGhost)
void femMeshModify::verifyghostsend (verifyghostsendMsg *vmsg)
boolMsgfemMeshModify::shouldLoseGhost (int fromChk, int sharedIdx, int toChk)
void femMeshModify::addghostsendl (int fromChk, int sharedIdx, int toChk, int transIdx)
 The node index is the sharedIdx with 'fromChk' This local node index is then to be send as a ghost to 'toChk'.
void femMeshModify::addghostsendl1 (int fromChk, int transChk, int transIdx)
 The node index is obtained as a the ghost received from 'transChk' at 'transIdx'.
void femMeshModify::addghostsendr (int fromChk, int sharedIdx, int toChk, int transIdx)
 The node is the obtained on the ghost recv list from 'fromChk' at 'sharedIdx' index.
void femMeshModify::addghostsendr1 (int fromChk, int transChk, int transIdx)
 The local node index is obtained on the shared list of 'transChk' at 'transIdx'.
boolMsgfemMeshModify::willItLose (int fromChk, int sharedIdx)
void femMeshModify::interpolateElemCopy (int fromChk, int sharedIdx1, int sharedIdx2)
 The two local elements indices are obtained from the ghost send list to 'fromChk' Data is copied from the first element to the second.
void femMeshModify::cleanupIDXL (int fromChk, int sharedIdx)
void femMeshModify::purgeElement (int fromChk, int sharedIdx)
entDataMsgfemMeshModify::packEntData (int fromChk, int sharedIdx, bool isnode=false, int elemType=0)
 Pack the data from this element/node and return it.
boolMsgfemMeshModify::isFixedNodeRemote (int fromChk, int sharedIdx)
 Is this node a fixed node on this chunk.
void femMeshModify::finish (void)
void femMeshModify::finish1 (void)
static FEM_chunkFEM_chunk::get (const char *caller)
 Return this thread's single static FEM_chunk instance:.
void FEM_chunk::exchangeGhostLists (int elemType, int inLen, const int *inList, int idxbase)
void FEM_Entity::print (const char *type, const IDXL_Print_Map &map)
void FEM_Node::print (const char *type, const IDXL_Print_Map &map)
void FEM_Mesh::print (int idxBase)
void FEM_chunk::print (int fem_mesh, int idxBase)
int FEM_Attribute::getRealLength (void) const
int FEM_Attribute::getMax ()
static int NList::cmp (const void *v1, const void *v2)
void NList::add (int elt)
int NList::found (int elt)
 Nodes::Nodes (int _nnodes)
void Nodes::add (int node, int elem)
 Graph::Graph (int elems)
void Graph::add (int elem1, int elem2)
void Graph::toAdjList (int *&adjStart, int *&adjList)

Variables

CProxy_femMeshModify meshMod
 File: fem_mesh_modify.C Authors: Nilesh Choudhury, Isaac Dooley.
double elemlistaccTime = 0
 This file contains code for parallely partitioning the initial mesh into multiple chunks It uses PARMETIS to do the actual partitioning.
double listSearchTime = 0
double sharedSearchTime = 0
int femVersion = 1
static FEM_Partitionmypartition = NULL
PartitionMode FEM_Partition_Mode = SerialPartitionMode
MetisGraphType FEM_Partition_Graph_Type = NodeNeighborMode
int partNo
int tag
const intpaneFmChunk
FDECL void intqm
FDECL void int intmethod
FDECL void int int double * factor
FDECL void int int double double * sizes
FDECL void intelem
FDECL void int double * size
FDECL void double * smoothness
FDECL void double * targetA
FDECL void double double * xmin
FDECL void double double double * ymin
FDECL void double double
double double * 
xmax
FDECL void double double
double double double * 
ymax
CProxy_femMeshModify meshMod
 File: fem_mesh_modify.C Authors: Nilesh Choudhury, Isaac Dooley.
const char * caller
double elemlistaccTime
 This file contains code for parallely partitioning the initial mesh into multiple chunks It uses PARMETIS to do the actual partitioning.
static FEM_Symmetries_t noSymmetries = (FEM_Symmetries_t)0
FDECL void intqm
FDECL void int intmethod
FDECL void int int double * factor
size_t sizes []

Detailed Description

Charm++ ParFUM Framework: C++ interface file.


Typedef Documentation

typedef void(* FEM_Update_mesh_fn)(int userTag)

Definition at line 73 of file ParFUM.h.

typedef void(* FEM_Update_mesh_fortran_fn)(int *userTag)

Definition at line 74 of file ParFUM.h.

typedef void(* FEM_PupFn)(pup_er, void *)

Definition at line 76 of file ParFUM.h.

typedef void(* FEM_Mesh_alloc_fn)(void *param, int *size, int *maxSize)

Definition at line 78 of file ParFUM.h.

typedef int FEM_Comm_t

This should be MPI_Comm, but I want it for Fortran too.

Definition at line 81 of file ParFUM.h.

typedef void(* FEM_Userdata_fn)(pup_er p, void *data)

Definition at line 209 of file ParFUM.h.

Definition at line 79 of file ParFUM_internals.h.

Definition at line 80 of file ParFUM_internals.h.

typedef IDXL_Rec FEM_Comm_Rec

Definition at line 81 of file ParFUM_internals.h.

typedef unsigned char FEM_Symmetries_t

This datatype is how the framework stores symmetries internally.

Each bit of this type describes a different symmetry. There must be enough bits to accomidate several simulatanious symmetries.

Definition at line 109 of file ParFUM_internals.h.

Definition at line 1608 of file ParFUM_internals.h.

Definition at line 1630 of file ParFUM_internals.h.

typedef MSA2D<int, DefaultEntry<int>, MSA_DEFAULT_ENTRIES_PER_PAGE, MSA_ROW_MAJOR> MSA2DRM

Definition at line 2427 of file ParFUM_internals.h.

typedef MSA1D<int, DefaultEntry<int>, MSA_DEFAULT_ENTRIES_PER_PAGE> MSA1DINT

Definition at line 2429 of file ParFUM_internals.h.

Definition at line 2431 of file ParFUM_internals.h.

typedef MSA1D<IntList, DefaultListEntry<IntList,true>,MSA_DEFAULT_ENTRIES_PER_PAGE> MSA1DINTLIST

Definition at line 2432 of file ParFUM_internals.h.

Definition at line 2434 of file ParFUM_internals.h.

typedef MSA1D<NodeList, DefaultListEntry<NodeList,true>,MSA_DEFAULT_ENTRIES_PER_PAGE> MSA1DNODELIST

Definition at line 2435 of file ParFUM_internals.h.

Definition at line 2437 of file ParFUM_internals.h.

typedef double Real

Definition at line 2900 of file ParFUM_internals.h.

typedef int idxtype

Definition at line 287 of file partition.C.


Enumeration Type Documentation

anonymous enum

Enumerator:
FEM_globalID 

Definition at line 2210 of file mesh_modify.C.

Enumerator:
SerialPartitionMode 
ParallelPartitionMode 
ManualPartitionMode 

Definition at line 21 of file ParFUM.C.

Enumerator:
NodeNeighborMode 
FaceNeighborMode 

Definition at line 28 of file ParFUM.C.

anonymous enum

Enumerator:
FEM_globalID 

Definition at line 54 of file ParFUM.C.


Function Documentation

CDECL void fem_impl_call_init ( void   ) 

Definition at line 13 of file call_init.c.

References init().

Referenced by FTN_NAME().

FDECL void FTN_NAME ( INIT  ,
init   
)

static void checkEquality ( const char *  what,
int  v1,
const char *  src1,
int  v2,
const char *  src2 
) [static]

Definition at line 35 of file map.C.

static void checkRange ( const char *  what,
int  v,
int  max 
) [static]

Definition at line 45 of file map.C.

static void checkArrayEntries ( const int arr,
int  nArr,
int  max,
const char *  what 
) [static]

Definition at line 54 of file map.C.

References checkRange().

static void check ( const FEM_Mesh mesh  )  [static]

static void check ( const FEM_Partition partition,
const FEM_Mesh mesh 
) [static]

void FEM_Mesh_split ( FEM_Mesh mesh,
int  nChunks,
const FEM_Partition partition,
FEM_Mesh_Output out 
)

CkHashCode CkHashFunction_ints ( const void *  keyData,
size_t  keyLen 
)

Definition at line 563 of file map.C.

References circleShift().

int CkHashCompare_ints ( const void *  k1,
const void *  k2,
size_t  keyLen 
)

Definition at line 573 of file map.C.

int ck_fem_map_compare_int ( const void *  a,
const void *  b 
)

Definition at line 583 of file map.C.

static void renumberConn ( const FEM_Elem &  src_e,
int  l,
FEM_Elem &  dest_e,
int  g,
const FEM_Mesh mesh 
) [static]

Definition at line 1029 of file map.C.

References FEM_Entity::getGlobalno(), and FEM_Mesh::node.

FEM_Mesh* FEM_Mesh_assemble ( int  nChunks,
FEM_Mesh **  chunks 
)

int is_shared ( FEM_Mesh m,
int  node 
) [inline]

A wrapper to simplify the lookup to determine whether a node is shared.

Definition at line 26 of file mesh_modify.C.

References FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), and FEM_MUtil::isShared().

CDECL void FEM_Print_n2n ( int  mesh,
int  nodeid 
)

CDECL void FEM_Print_n2e ( int  mesh,
int  eid 
)

CDECL void FEM_Print_e2n ( int  mesh,
int  eid 
)

CDECL void FEM_Print_e2e ( int  mesh,
int  eid 
)

CDECL void FEM_Print_Mesh_Summary ( int  mesh  ) 

Prints the mesh summary, i.e.

number of valid nodes/elements (local/ghost)

Definition at line 53 of file mesh_modify.C.

References FEM_Entity::count_valid(), FEM_Mesh::elem, FEM_Entity::getGhost(), FEM_Entity_Types< T >::has(), FEM_Mesh::node, FEM_Entity_Types< T >::size(), and FEM_Entity::size().

int FEM_add_node ( int  mesh,
int adjacent_nodes,
int  num_adjacent_nodes,
int chunks,
int  numChunks,
int  forceShared 
)

Definition at line 77 of file mesh_modify.C.

References FEM_add_node().

CDECL void FEM_remove_node ( int  mesh,
int  node 
)

CDECL int FEM_add_element ( int  mesh,
int conn,
int  conn_size,
int  elem_type,
int  chunkNo 
)

CDECL int FEM_remove_element ( int  mesh,
int  element,
int  elem_type,
int  permanent 
)

CDECL int FEM_purge_element ( int  mesh,
int  element,
int  elem_type 
)

int FEM_add_node_local ( FEM_Mesh m,
bool  addGhost,
bool  doLocking,
bool  doAdjacencies 
)

Add a node to this mesh 'm', could be ghost/local decided by 'addGhost' basically, this function finds an empty row in the nodelist and clears its adjacencies then, it creates a lock for this node, if this node is new (i.e.

Update adjacencies for this new node, and attach a lock to it.

unused) otherwise, the existing lock is reset

Definition at line 104 of file mesh_modify.C.

References femMeshModify::fmLockN, FEM_Entity::get_next_invalid(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_Entity::getGhost(), FEM_MUtil::getIdx(), FEM_Mesh::n2e_removeAll(), FEM_Mesh::n2n_removeAll(), FEM_Mesh::node, CkVec< T >::push_back(), and CkVec< T >::size().

int FEM_add_node ( FEM_Mesh m,
int adjacentNodes,
int  numAdjacentNodes,
int chunks,
int  numChunks,
int  forceShared 
)

'adjacentNodes' specifies the set of nodes between which this new node is to be added.

Add a node between some adjacent nodes on this mesh.

'forceshared' is used to convey extra information. Sometimes, we know that the new node will not be shared, i.e. if the two nodes are shared, but the two elements on two sides of this node belong to the same chunk, then this node will not be shared. (in spite of the two nodes being shared by the same set of chunks 'numChunks' is the number of entries in 'chunks'. 'chunks' contains the chunk index where this node is to be added. This is populated when the operation originates from edge_bisect and the operation knows which all chunks this node needs to be added to. Returns the index of the new node that was added

Definition at line 149 of file mesh_modify.C.

References FEM_Interpolate::NodalArgs::addNode, IDXL_Side::addNode(), addNodeMsg::between, addNodeMsg::chk, addNodeMsg::chunks, FEM_MUtil::exists_in_IDXL(), FEM_add_node_local(), FEM_Interpolate::FEM_InterpolateNodeOnEdge(), FEM_Interpolate::NodalArgs::frac, femMeshModify::getfmInp(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), femMeshModify::getIdx(), FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_MUtil::idxllock(), FEM_MUtil::idxlunlock(), is_shared(), meshMod, FEM_Interpolate::NodalArgs::n, addNodeMsg::nBetween, FEM_Mesh::node, FEM_Interpolate::NodalArgs::nodes, addNodeMsg::numChunks, and FEM_MUtil::splitEntitySharing().

void FEM_add_shared_node_remote ( FEM_Mesh m,
int  chk,
int  nBetween,
int between 
)

The function called by the entry method on the remote chunk Adds a node on this chunk between the nodes specified in 'between'.

Definition at line 218 of file mesh_modify.C.

References FEM_add_node_local(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), and FEM_MUtil::splitEntityRemote().

void FEM_remove_node_local ( FEM_Mesh m,
int  node 
)

This function invalidates a node entry and if there are any entries in the IDXL lists (ghost/local) then, these entries are cleared both on the local as well as the remote chunk and then the node is invalidated and any lock it might be holding is reset The pre-condition which is asserted here that the node should not have any adjacency entries, n2e or n2n.

Get rid of idxl entries for this node and clear adjacencies, invalidate node.

Definition at line 237 of file mesh_modify.C.

References CmiMemoryCheck(), femMeshModify::fmLockN, free(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_MUtil::getIdx(), femMeshModify::getIdx(), IDXL_Side::getRec(), FEM_Entity::ghost, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, malloc(), meshMod, FEM_Mesh::n2e_getAll(), FEM_Mesh::n2n_getAll(), FEM_Mesh::node, IDXL_Side::removeNode(), FEM_Entity::set_invalid(), and size.

void FEM_remove_node ( FEM_Mesh m,
int  node 
)

remove a local or shared node, but NOT a ghost node Should probably be able to handle ghosts someday, but here we interpret it as deleting the entry in the ghost list.

Remove a node on this mesh.

Definition at line 320 of file mesh_modify.C.

References CmiMemoryCheck(), FEM_remove_node_local(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_Entity::ghost, is_shared(), FEM_Entity::is_valid(), FEM_Mesh::n2e_getAll(), FEM_Mesh::n2n_getAll(), FEM_Mesh::node, and FEM_MUtil::removeNodeAll().

void update_new_element_e2e ( FEM_Mesh m,
int  newEl,
int  elemType 
)

A helper function for FEM_add_element_local below Will only work with the same element type as the one given, may crash otherwise.

Regenerate the e2e connectivity for the given element.

Currently supports multiple element types.

A helper function for FEM_add_element_local below Will only work with the same element type as the one given, may crash otherwise.

Currently supports multiple element types.

A list of all elements adjacent to one of the nodes

Definition at line 863 of file fem_mesh_modify.C.

References tupleTable::addTuple(), tupleTable::beginLookup(), CmiMemoryCheck(), conn, FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, FEM_ElemAdj_Layer::elem, FEM_Entity_Types< T >::get(), BasicTable2d< T >::getData(), FEM_Mesh::getElemAdjLayer(), FEM_ElemAdj_Layer::initialized, CkVec< T >::length(), tupleTable::lookupNext(), tupleTable::MAX_TUPLE, FEM_Mesh::n2e_getAll(), elemList::next, FEM_ElemAdj_Layer::nodesPerTuple, CkVec< T >::push_back(), and sz.

Referenced by FEM_add_element_local(), and FEM_update_new_element_e2e().

void FEM_update_new_element_e2e ( FEM_Mesh m,
int  newEl,
int  elemType 
)

Definition at line 364 of file mesh_modify.C.

References update_new_element_e2e().

int FEM_add_element_local ( FEM_Mesh m,
int conn,
int  connSize,
int  elemType,
bool  addGhost,
bool  create_adjacencies 
)

A helper function that adds the local element, and updates adjacencies.

Update adjacencies for this element and all surrounding nodes/elements.

Definition at line 486 of file mesh_modify.C.

References FEM_Mesh::e2e_getAll(), FEM_Mesh::e2e_removeAll(), FEM_Mesh::elem, FEM_Adapt_Algs::ensureQuality(), femMeshModify::fmAdaptAlgs, FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_MUtil::getIdx(), FEM_Mesh::n2e_add(), FEM_Mesh::n2n_add(), FEM_Mesh::n2n_exists(), and update_new_element_e2e().

int FEM_add_element ( FEM_Mesh m,
int conn,
int  connSize,
int  elemType,
int  chunkNo 
)

This addds an element with the given 'conn' connecitivity and 'connSize' number of nodes in e2n to the mesh 'm'.

Add an element on this mesh with this connectivity.

'chunkNo' denotes the chunk the new element should be added to. If it is -1, then this function decides which chunk this new element should belong to, based on its node connectivity. It returns the index of the newly created element

Definition at line 550 of file mesh_modify.C.

References IDXL_Side::addNode(), boolMsg::b, FEM_MUtil::buildChunkToNodeTable(), addGhostElemMsg::chk, IDXL_Share::chk, addElemMsg::chk, CmiMemoryCheck(), addElemMsg::conn, addGhostElemMsg::connSize, addElemMsg::connSize, FEM_Mesh::elem, addGhostElemMsg::elemType, addElemMsg::elemtype, FEM_MUtil::exists_in_IDXL(), FEM_add_element_local(), FEM_Modify_LockUpdate(), FEM_remove_node_local(), femMeshModify::fmfixedNodes, CkVec< T >::free(), free(), FEM_MUtil::getChunkNos(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), femMeshModify::getIdx(), IDXL_Side::getRec(), FEM_Entity::ghost, addGhostElemMsg::ghostIndices, addElemMsg::ghostIndices, FEM_Entity::ghostRecv, FEM_Entity::ghostSend, intMsg::i, idx, FEM_MUtil::idxllock(), FEM_MUtil::idxlunlock(), addGhostElemMsg::indices, is_shared(), malloc(), meshMod, FEM_Mesh::node, addGhostElemMsg::numGhostIndex, addElemMsg::numGhostIndex, addGhostElemMsg::numSharedIndex, CkVec< T >::push_back(), IDXL_Side::removeNode(), FEM_MUtil::Replace_node_local(), FEM_Node::shared, addGhostElemMsg::sharedIndices, IDXL_List::size(), size, and addGhostElemMsg::typeOfIndex.

void FEM_remove_element_local ( FEM_Mesh m,
int  element,
int  etype 
)

Remove a local element from any of the adjacency tables that use it, namely the n2e, e2e and e2n tables of the neighbors.

Clear up the adjacencies.

e2n of the neighbors does not change all tables for this element get deleted anyway when it is marked invalid, which is now done in the purge step

Definition at line 1002 of file mesh_modify.C.

References CmiMemoryCheck(), FEM_Mesh::e2e_getAll(), FEM_Mesh::e2e_replace(), FEM_Mesh::e2n_getAll(), FEM_Mesh::elem, FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_MUtil::getIdx(), FEM_Mesh::n2e_remove(), FEM_Mesh::n2n_add(), FEM_Mesh::n2n_exists(), and FEM_Mesh::n2n_remove().

int FEM_remove_element ( FEM_Mesh m,
int  elementid,
int  elemtype,
int  permanent 
)

Can be called on local or ghost elements removes the connectivity of the element on this chunk as well as all chunks on which it is a ghost 'permanent' is -1 if the element is to be deleted, e.g.

Remove an element on this mesh.

in a coarsen operation, one element is deleted permanently.. for a refine however the existing elements are eaten by the new ones 'permanent' is the id of the chunk which wants to be the owner (i.e. wants to eat it) this is done just to save deleting some things when it would be immediately added again, when the element is deleted on one and added on another chunk The return value is the chunk on which this element was local Removing an element is a two step process, FEM_remove_element and FEM_purge_element This step will get rid of all adjacencies info, but the idxl information will not be deleted, just ghostsend on this junk and receive info on the remote chunk. The idxl info will be deleted in Purge, that way shared chunks could still refer to it, needed for solution transfer

Definition at line 1079 of file mesh_modify.C.

References IDXL_Side::addList(), IDXL_Side::addNode(), boolMsg::b, removeGhostElemMsg::chk, removeElemMsg::chk, CmiMemoryCheck(), FEM_Mesh::e2n_getAll(), FEM_Mesh::e2n_replace(), FEM_Mesh::elem, removeGhostElemMsg::elementid, removeElemMsg::elementid, removeGhostElemMsg::elemtype, removeElemMsg::elemtype, FEM_MUtil::exists_in_IDXL(), FEM_add_node_local(), FEM_Modify_LockAll(), FEM_remove_element_local(), FEM_remove_node_local(), femMeshModify::fmfixedNodes, femMeshModify::fmUtil, free(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_MUtil::getIdx(), IDXL_Side::getRec(), FEM_Entity::ghost, removeGhostElemMsg::ghostIndices, FEM_Entity::ghostRecv, removeGhostElemMsg::ghostREIndices, removeGhostElemMsg::ghostRNIndices, FEM_Entity::ghostSend, FEM_MUtil::idxllock(), FEM_MUtil::idxlunlock(), malloc(), meshMod, n1, FEM_Mesh::n2e_add(), FEM_Mesh::n2e_getAll(), FEM_Mesh::n2e_remove(), FEM_Mesh::n2n_add(), FEM_Mesh::n2n_getAll(), FEM_Mesh::n2n_remove(), FEM_Mesh::n2n_replace(), FEM_Mesh::node, nodes, removeGhostElemMsg::numGhostIndex, removeGhostElemMsg::numGhostREIndex, removeGhostElemMsg::numGhostRNIndex, removeGhostElemMsg::numSharedIndex, removeElemMsg::permanent, CkVec< T >::push_back(), CkVec< T >::remove(), IDXL_Side::removeNode(), FEM_Node::shared, removeGhostElemMsg::sharedIndices, CkVec< T >::size(), IDXL_List::size(), and size.

int FEM_purge_element ( FEM_Mesh m,
int  elementid,
int  elemtype 
)

Purge an element works for both local and ghost elements.

Purge the element from this mesh (invalidate entry).

Gets rid of any IDXL connectivity that might be left behind and cleans it on all chunks. Then it invalidates the element entry in the element table

Definition at line 1600 of file mesh_modify.C.

References FEM_Mesh::elem, free(), FEM_Mesh::getfmMM(), femMeshModify::idx, malloc(), and meshMod.

CDECL int FEM_Modify_Lock ( int  mesh,
int affectedNodes,
int  numAffectedNodes,
int affectedElts,
int  numAffectedElts,
int  elemtype 
)

Definition at line 1653 of file mesh_modify.C.

References FEM_Modify_Lock().

Referenced by FEM_Modify_Lock().

CDECL int FEM_Modify_Unlock ( int  mesh  ) 

Definition at line 1656 of file mesh_modify.C.

References FEM_Modify_Unlock().

Referenced by FEM_Modify_Unlock().

CDECL int FEM_Modify_LockN ( int  mesh,
int  nodeId,
int  readLock 
)

CDECL int FEM_Modify_UnlockN ( int  mesh,
int  nodeId,
int  readLock 
)

int FEM_Modify_Lock ( FEM_Mesh m,
int affectedNodes,
int  numAffectedNodes,
int affectedElts,
int  numAffectedElts,
int  elemtype 
)

coarse lock (lock chunks) find out which all chunks these nodes belong to and lock them all

Deprecated: locks all chunks for the nodes and elements specified.

Definition at line 1671 of file mesh_modify.C.

References femMeshModify::getfmLock(), FEM_Mesh::getfmMM(), and FEM_lock::lock().

int FEM_Modify_Unlock ( FEM_Mesh m  ) 

Unlock all chunks that was being held by a lock originating from here.

Deprecated: Unlock all chunks that have been locked by this mesh.

Definition at line 1677 of file mesh_modify.C.

References femMeshModify::getfmLock(), FEM_Mesh::getfmMM(), and FEM_lock::unlock().

int FEM_Modify_LockN ( FEM_Mesh m,
int  nodeId,
int  readlock 
)

Lock a node get a 'read/write lock on 'nodeId' we find the chunk with the smallest id that owns/shares this node and lock this node on this chunk.

Lock this node on this mesh with a read/write lock.

This decreases the amount of communication and the number of contention points for a single lock, as well as any chance of a deadlock since there is only a single resource to be acquired for a request

Definition at line 1688 of file mesh_modify.C.

References IDXL_Share::chk, CmiMemoryCheck(), FEM_MUtil::exists_in_IDXL(), femMeshModify::fmLockN, free(), FEM_MUtil::getChunkNos(), femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), femMeshModify::getIdx(), intMsg::i, is_shared(), meshMod, FEM_lockN::rlock(), FEM_lockN::verifyLock(), and FEM_lockN::wlock().

int FEM_Modify_UnlockN ( FEM_Mesh m,
int  nodeId,
int  readlock 
)

Unlock this node find the chunk that holds the lock and unlock it on that chunk the type of the lock is also considered while unlocking a lock.

Lock the read/write lock for this node on this mesh.

Definition at line 1791 of file mesh_modify.C.

References IDXL_Share::chk, CmiMemoryCheck(), FEM_MUtil::exists_in_IDXL(), femMeshModify::fmLockN, free(), FEM_MUtil::getChunkNos(), femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), femMeshModify::getIdx(), intMsg::i, is_shared(), meshMod, FEM_lockN::runlock(), and FEM_lockN::wunlock().

void FEM_Modify_LockAll ( FEM_Mesh m,
int  nodeId,
bool  lockall 
)

When a chunk is losing a node, the lock might need to be reassigned lock it on the minchunk other than 'this chunk' should only be called when 'this chunk' is losing the node as local/shared.

Reassign the lock on a node when a chunk is losing a node.

Definition at line 1873 of file mesh_modify.C.

References done, femMeshModify::fmLockN, femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getIdx(), IDXL_Side::getRec(), intMsg::i, meshMod, FEM_Mesh::node, FEM_Node::shared, and FEM_lockN::wlock().

void FEM_Modify_LockUpdate ( FEM_Mesh m,
int  nodeId,
bool  lockall 
)

Deprecated: Update the lock on this node (by locking the newly formed node The locks will be cleared later must be a local node, lock it & then unlock it if needed.

Update the lock on this node (by locking the newly formed node: Deprecated.

Definition at line 1915 of file mesh_modify.C.

References femMeshModify::fmLockN, femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getIdx(), IDXL_Side::getRec(), meshMod, FEM_Mesh::node, FEM_Node::shared, and FEM_lockN::wunlock().

void FEM_Modify_correctLockN ( FEM_Mesh m,
int  nodeId 
)

Deprecated: For the newly acquired node, correct the lock by removing superfluous locks Should always be called on the new node to correct the locks should make sure that it is called before unlocking, i.e.

For the newly acquired node, correct the lock by removing superfluous locks: Deprecated.

before the entire operation completes. gets rid of the extra safety lock & makes the locks consistent

Definition at line 1972 of file mesh_modify.C.

References IDXL_Share::chk, done, FEM_MUtil::exists_in_IDXL(), femMeshModify::fmAdaptL, femMeshModify::fmLockN, free(), FEM_MUtil::getChunkNos(), femMeshModify::getfmLockN(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), femMeshModify::getIdx(), intMsg::i, is_shared(), FEM_AdaptL::lockNodes(), FEM_lockN::lockOwner(), meshMod, FEM_lockN::wlock(), and FEM_lockN::wunlock().

void FEM_Mesh_dataP ( FEM_Mesh fem_mesh,
int  entity,
int  attr,
void *  data,
int  firstItem,
int  length,
int  datatype,
int  width 
)

wrapper function that takes a 'mesh pointer' instead of meshId, and gets/sets the data corresponding to the this 'attr' of this 'entity' 'firstItem' is the starting point in the list, 'length' is the number of entries 'datatype' is the type of data while 'width' is the size of each data entry

Get the data for 'length' indices from 'fem_mesh' for the 'attr' of 'entity' starting at index 'firstItem'.

Definition at line 2078 of file mesh_modify.C.

References FEM_Mesh_data_layoutP().

void FEM_Mesh_data_layoutP ( FEM_Mesh fem_mesh,
int  entity,
int  attr,
void *  data,
int  firstItem,
int  length,
IDXL_Layout_t  layout 
)

similar to the above function, but takes a 'layout' instead of datatype and width

Get the data for 'length' indices from 'fem_mesh' for the 'attr' of 'entity' starting at index 'firstItem'.

Definition at line 2085 of file mesh_modify.C.

References caller, FEM_Mesh_data_layoutP(), and IDXL_Layout_List::get().

void FEM_Mesh_data_layoutP ( FEM_Mesh m,
int  entity,
int  attr,
void *  data,
int  firstItem,
int  length,
const IDXL_Layout layout 
)

The helper function that both the above functions call does the actual setting/getting of the data in/from the mesh.

Get the data for 'length' indices from 'fem_mesh' for the 'attr' of 'entity' starting at index 'firstItem'.

Definition at line 2093 of file mesh_modify.C.

References caller, FEM_Attribute::get(), FEM_Mesh::isSetting(), FEM_Entity::lookup(), FEM_Mesh::lookup(), and FEM_Attribute::set().

void FEM_Ghost_Essential_attributes ( FEM_Mesh m,
int  coord_attr,
int  bc_attr,
int  nodeid 
)

Copy the essential attributes for this ghost node from remote chunks This would be only done for attributes of a node, currently for coords & boundary.

Copy the essential attributes for this ghost node from remote chunks.

Definition at line 2109 of file mesh_modify.C.

References IDXL_Share::chk, FEM_Adapt_Algs::coord_attr, FEM_MUtil::exists_in_IDXL(), femMeshModify::fmAdaptAlgs, free(), FEM_Attribute::getAttr(), FEM_Entity::getAttrVec(), FEM_MUtil::getChunkNos(), FEM_Mesh::getfmMM(), femMeshModify::getfmUtil(), FEM_Entity::ghost, intMsg::i, double2Msg::i, femMeshModify::idx, double2Msg::j, meshMod, FEM_Mesh::node, and CkVec< T >::size().

void clearPartition ( void   ) 

int FEM_Mesh_Parallel_broadcast ( int  fem_mesh,
int  masterRank,
FEM_Comm_t  comm_context 
)

int FEM_master_parallel_part ( int  fem_mesh,
int  masterRank,
FEM_Comm_t  comm_context 
)

Definition at line 47 of file parallel_part.C.

References _startTime, addIDXLists(), conndata::arr1, conndata::arr2, FEM_Mesh::becomeGetting(), c, caller, Converse::CkMyPe(), CmiMaxMemoryUsage(), CmiMemoryUsage(), FEM_Mesh::elem, elemlistaccTime, MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::enroll(), FEM_break_mesh(), FEM_call_parmetis(), FEM_Mesh_copy(), FEM_write_nodepart(), FEM_write_part2elem(), FEM_write_part2mesh(), FEM_write_part2node(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::FreeMem(), gatherGhosts(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::Read::get(), FEM_chunk::get(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::get(), FEMchunk::get(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::getInitialAccum(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::getInitialWrite(), FEM_Entity_Types< T >::has(), ghostdata::layers, FEM_chunk::lookup(), FEMchunk::lookup(), MeshElem::m, makeGhosts(), FEM_chunk::meshes, FEMchunk::meshes, MPI_Bcast_pup(), MPI_Comm_size(), MPI_Recv_pup(), n, conndata::nelem, FEM_Mesh::nElems(), conndata::nnode, FEM_Mesh::node, ghostdata::numLayers, FEM_Mesh::print(), printf(), FEM_T_List< T >::put(), MSA1D< int, DefaultEntry< int >, MSA_DEFAULT_ENTRIES_PER_PAGE >::Read, sendBrokenMeshes(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::set(), FEM_Entity_Types< T >::set(), FEM_Mesh::setAbsoluteGlobalno(), FEM_Userdata_list::size(), FEM_Entity_Types< T >::size(), FEM_Entity::size(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::syncToRead(), FEM_Mesh::udata, and MSA1D< int, DefaultEntry< int >, MSA_DEFAULT_ENTRIES_PER_PAGE >::Write.

int FEM_slave_parallel_part ( int  fem_mesh,
int  masterRank,
FEM_Comm_t  comm_context 
)

struct partconndata* FEM_call_parmetis ( int  nelem,
MSA1DINT::Read &  rPtr,
MSA1DINT::Read &  rInd,
FEM_Comm_t  comm_context 
) [read]

void FEM_write_nodepart ( MSA1DINTLIST::Accum nodepart,
struct partconndata data,
MPI_Comm  comm_context 
)

void FEM_write_part2node ( MSA1DINTLIST::Read nodepart,
MSA1DNODELIST::Accum part2node,
struct partconndata data,
MPI_Comm  comm_context 
)

void FEM_write_part2elem ( MSA1DINTLIST::Accum part2elem,
struct partconndata data,
MPI_Comm  comm_context 
)

FEM_Mesh* FEM_break_mesh ( FEM_Mesh m,
int  numElements,
int  numChunks 
)

void sendBrokenMeshes ( FEM_Mesh mesh_array,
FEM_Comm_t  comm_context 
)

Definition at line 549 of file parallel_part.C.

References MPI_Comm_size(), and MPI_Send_pup().

void FEM_write_part2mesh ( MSA1DFEMMESH::Accum part2mesh,
struct partconndata partdata,
struct conndata data,
MSA1DINTLIST::Read nodepart,
int  numChunks,
int  myChunk,
FEM_Mesh m 
)

void sortNodeList ( NodeList lnodes  ) 

Definition at line 593 of file parallel_part.C.

References CkVec< T >::quickSort(), and ElemList< T >::vec.

void addIDXLists ( FEM_Mesh m,
NodeList lnodes,
int  myChunk 
)

struct ghostdata* gatherGhosts (  )  [read]

void makeGhosts ( FEM_Mesh m,
MPI_Comm  comm,
int  masterRank,
int  numLayers,
FEM_Ghost_Layer **  layers 
)

bool listContains ( FEM_Comm_List list,
int  entry 
)

Definition at line 801 of file parallel_part.C.

References _startTime, listSearchTime, and IDXL_List::size().

void makeGhost ( FEM_Mesh m,
MPI_Comm  comm,
int  masterRank,
int  totalShared,
FEM_Ghost_Layer layer,
CkHashtableT< CkHashtableAdaptorT< int >, char > &  sharedNode,
CkHashtableT< CkHashtableAdaptorT< int >, int > &  global2local 
)

Definition at line 813 of file parallel_part.C.

References MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::Accum::accumulate(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::accumulate(), IDXL_Side::addList(), FEM_Ghost_Layer::addNodes, MsaHashtable::Add::addTuple(), MsaHashtable::addTuple(), Converse::CkMyPe(), CmiMemoryCheck(), conn, FEM_Entity::copyShape(), FEM_Ghost_Layer::elem, FEM_Mesh::elem, MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::enroll(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::Read::get(), FEM_Entity_Types< T >::get(), FEM_Attribute::get(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::get(), MsaHashtable::get(), FEM_Entity::getGhost(), FEM_Entity::getGhostRecv(), FEM_Entity::getGhostSend(), FEM_Entity::getGlobalno(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::getInitialAccum(), MsaHashtable::getInitialAdd(), FEM_Entity_Types< T >::has(), listContains(), FEM_Entity::lookup(), MeshElem::m, Hashnode::tupledata::MAX_TUPLE, MPI_Barrier(), MPI_Bcast_pup(), MPI_Comm_rank(), MPI_Comm_size(), n, FEM_Mesh::nElems(), FEM_Mesh::node, FEM_Ghost_Layer::nodesPerTuple, MsaHashtable::numSlots, MsaHashtable::Read::print(), IDXL_Side::print(), MsaHashtable::print(), FEM_Mesh::print(), printf(), FEM_Entity::push_back(), IDXL_List::push_back(), CkVec< T >::push_back(), FEM_Entity::setGhostRecv(), FEM_Entity::setGhostSend(), sharedWith(), FEM_Entity::size(), CkVec< T >::size(), FEM_Entity_Types< T >::size(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::sync(), MsaHashtable::sync(), MSA1D< ENTRY, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE >::syncToRead(), MsaHashtable::syncToRead(), MsaHashtable::table, and ElemList< T >::vec.

bool sharedWith ( int  lnode,
int  chunk,
FEM_Mesh m 
)

void FEM_Abort ( const char *  msg  ) 

Definition at line 37 of file ParFUM.C.

void FEM_Abort ( const char *  caller,
const char *  sprintf_msg,
int  int0,
int  int1,
int  int2 
)

Definition at line 40 of file ParFUM.C.

References FEM_Abort(), and msg.

CDECL void pupFEM_Chunk ( pup_er  cp  ) 

CDECL void FEM_Init ( FEM_Comm_t  defaultComm  ) 

FORTRAN_AS_C ( FEM_INIT  ,
FEM_Init  ,
fem_init  ,
(int *comm)  ,
comm 
)

Definition at line 93 of file ParFUM.C.

References FEM_Abort().

CDECL int FEM_Mesh_allocate ( void   ) 

mesh creation functions

Definition at line 108 of file ParFUM.C.

References FEM_Mesh::becomeSetting(), c, caller, FEM_chunk::get(), FEMchunk::get(), FEM_chunk::meshes, FEMchunk::meshes, and FEM_T_List< T >::put().

FORTRAN_AS_C_RETURN ( int  ,
FEM_MESH_ALLOCATE  ,
FEM_Mesh_allocate  ,
fem_mesh_allocate  ,
(void)  ,
()   
)

Return a new'd copy of this class, by calling pup.

Definition at line 116 of file ParFUM.C.

References PUP::fromMemBuf(), PUP::size(), and PUP::toMemBuf().

CDECL int FEM_Mesh_copy ( int  fem_mesh  ) 

FORTRAN_AS_C_RETURN ( int  ,
FEM_MESH_COPY  ,
FEM_Mesh_copy  ,
fem_mesh_copy  ,
(int *m)  ,
m 
)

Definition at line 136 of file ParFUM.C.

References c, caller, FEM_T_List< T >::destroy(), FEM_chunk::get(), and FEM_chunk::meshes.

FORTRAN_AS_C ( FEM_MESH_DEALLOCATE  ,
FEM_Mesh_deallocate  ,
fem_mesh_deallocate  ,
(int *m)  ,
m 
) const

CDECL void FEM_Mesh_partition ( int  fem_mesh,
int  nParts,
int destMeshes 
)

FORTRAN_AS_C ( FEM_MESH_PARTITION  ,
FEM_Mesh_partition  ,
fem_mesh_partition  ,
(int *mesh, int *nParts, int *dest ,
*,*,  dest 
)

CDECL int FEM_Mesh_broadcast ( int  fem_mesh,
int  masterRank,
FEM_Comm_t  comm_context 
)

FORTRAN_AS_C_RETURN ( int  ,
FEM_MESH_BROADCAST  ,
FEM_Mesh_broadcast  ,
fem_mesh_broadcast  ,
(int *mesh, int *rank, int *comm)  ,
*,*,*  comm 
)

n ( n_   ) 

addNodes ( addNodes_   ) 

ends ( new  int[n]  ) 

adj ( new int [2 *userEnds[n-1]  ) 

Definition at line 941 of file ParFUM.C.

References adj(), and ends().

CDECL void FEM_Add_ghost_stencil_type ( int  elType,
int  nElts,
int  addNodes,
const int ends,
const int adj2 
)

Definition at line 962 of file ParFUM.C.

References FEM_Partition::addGhostStencil(), FEM_curPartition(), and s.

FDECL void FTN_NAME ( FEM_ADD_GHOST_STENCIL_TYPE  ,
fem_add_ghost_stencil_type   
)

Definition at line 970 of file ParFUM.C.

References FEM_Partition::addGhostStencil(), FEM_curPartition(), and s.

int globalElem2elType ( const FEM_Mesh m,
int  globalElem 
) [inline]

CDECL void FEM_Add_ghost_stencil ( int  nElts,
int  addNodes,
const int ends,
const int adj 
)

FDECL void FTN_NAME ( FEM_ADD_GHOST_STENCIL  ,
fem_add_ghost_stencil   
)

Definition at line 1036 of file ParFUM.C.

References adj(), and FEM_Add_ghost_stencil().

CDECL void FEM_Add_ghost_layer ( int  nodesPerTuple,
int  doAddNodes 
)

FDECL void FTN_NAME ( FEM_ADD_GHOST_LAYER  ,
fem_add_ghost_layer   
)

Definition at line 1055 of file ParFUM.C.

References FEM_Add_ghost_layer().

static void add_ghost_elem ( int  elType,
int  tuplesPerElem,
const int elem2tuple,
int  idxBase 
) [static]

CDECL void FEM_Add_ghost_elem ( int  elType,
int  tuplesPerElem,
const int elem2tuple 
)

Definition at line 1071 of file ParFUM.C.

References add_ghost_elem().

FDECL void FTN_NAME ( FEM_ADD_GHOST_ELEM  ,
fem_add_ghost_elem   
)

Definition at line 1073 of file ParFUM.C.

References add_ghost_elem().

CDECL void FEM_Update_ghost_field ( int  fid,
int  elType,
void *  v_data 
)

Definition at line 1077 of file ParFUM.C.

References data, entity, FEM_Comm_ghost(), FEM_Mesh_default_read(), and FEM_Mesh_get_length().

FDECL void FTN_NAME ( FEM_UPDATE_GHOST_FIELD  ,
fem_update_ghost_field   
)

Definition at line 1092 of file ParFUM.C.

References data, and FEM_Update_ghost_field().

CDECL void FEM_Exchange_ghost_lists ( int  elemType,
int  nIdx,
const int localIdx 
)

FDECL void FTN_NAME ( FEM_EXCHANGE_GHOST_LISTS  ,
fem_exchange_ghost_lists   
)

Definition at line 1176 of file ParFUM.C.

References FEM_chunk::exchangeGhostLists(), and FEM_chunk::get().

CDECL int FEM_Get_ghost_list_length ( void   ) 

FDECL int FTN_NAME ( FEM_GET_GHOST_LIST_LENGTH  ,
fem_get_ghost_list_length   
)

Definition at line 1187 of file ParFUM.C.

References FEM_Get_ghost_list_length().

CDECL void FEM_Get_ghost_list ( int dest  ) 

FDECL void FTN_NAME ( FEM_GET_GHOST_LIST  ,
fem_get_ghost_list   
)

static void getRoccomPconn ( IDXL_Side_t  is,
int  bias,
CkVec< int > &  pconn,
const int paneFmChunk 
) [static]

Extract an IDXL_Side_t into Roccom format.

Definition at line 1212 of file ParFUM.C.

References CkVec< T >::push_back().

static CkVec<int> getRoccomPconn ( int  fem_mesh,
int ghost_len,
const int paneFmChunk 
) [static]

Extract all FEM communication information into Roccom format.

Definition at line 1229 of file ParFUM.C.

References FEM_Comm_ghost(), FEM_Comm_shared(), FEM_Mesh_get_entities(), FEM_Mesh_get_length(), getRoccomPconn(), IDXL_Create(), and CkVec< T >::size().

CDECL void FEM_Get_roccom_pconn_size ( int  fem_mesh,
int total_len,
int ghost_len 
)

Definition at line 1269 of file ParFUM.C.

References getRoccomPconn(), and CkVec< T >::size().

FORTRAN_AS_C ( FEM_GET_ROCCOM_PCONN_SIZE  ,
FEM_Get_roccom_pconn_size  ,
fem_get_roccom_pconn_size  ,
(int *mesh, int *tl, int *gl)  ,
*,,  gl 
)

int commState ( int  entityNo,
const IDXL_Side s 
)

Type Constraints

Definition at line 1322 of file ParFUM.C.

References FEM_My_partition(), and IDXL_Side::getRec().

CDECL void FEM_Make_node_globalno ( int  fem_mesh,
FEM_Comm_t  comm_context 
)

Based on shared node communication list, compute FEM_NODE FEM_GLOBALNO and FEM_NODE_PRIMARY.

Based on shared node communication list, compute FEM_NODE FEM_GLOBALNO and FEM_NODE_PRIMARY.

Definition at line 1341 of file ParFUM.C.

References commState(), FEM_Comm_shared(), FEM_Mesh_set_data(), MPI_INT, MPI_Scan(), MPI_SUM, FEM_Mesh::node, FEM_Node::shared, and FEM_Entity::size().

FORTRAN_AS_C ( FEM_MAKE_NODE_GLOBALNO  ,
FEM_Make_node_globalno  ,
fem_make_node_globalno  ,
(int *mesh, int *comm)  ,
*,*  comm 
)

Definition at line 1394 of file ParFUM.C.

References FEM_Entity::getGlobalno().

CDECL void FEM_Add_elem2face_tuples ( int  fem_mesh,
int  elem_type,
int  nodesPerTuple,
int  tuplesPerElem,
const int elem2tuple 
)

Register a set of tuples for a single element type Must be called once for each element type.

After a sequence of calls to this function, a call should be made to FEM_Mesh_create_elem_elem_adjacency(int fem_mesh)

TODO: Make this work with multiple types of faces for a single element

Definition at line 1492 of file ParFUM.C.

References CkCopyArray(), FEM_ElemAdj_Layer::elem, FEM_Mesh::getElemAdjLayer(), FEM_ElemAdj_Layer::initialized, and FEM_ElemAdj_Layer::nodesPerTuple.

void _registerParFUM ( void   ) 

void FEM_Done ( void   ) 

int FEM_My_partition ( void   ) 

Utility functions.

int FEM_Num_partitions ( void   ) 

double FEM_Timer ( void   ) 

void FEM_Print ( const char *  str  ) 

void FEM_Print_partition ( void   ) 

void FEM_Mesh_deallocate ( int  fem_mesh  ) 

copy existing mesh

int FEM_Mesh_read ( const char *  prefix,
int  partNo,
int  nParts 
)

delete this mesh

void FEM_Mesh_write ( int  fem_mesh,
const char *  prefix,
int  partNo,
int  nParts 
)

int FEM_Mesh_assemble ( int  nParts,
const int srcMeshes 
)

int FEM_Mesh_recv ( int  fromRank,
int  tag,
FEM_Comm_t  comm_context 
)

void FEM_Mesh_send ( int  fem_mesh,
int  toRank,
int  tag,
FEM_Comm_t  comm_context 
)

int FEM_Mesh_reduce ( int  fem_mesh,
int  toRank,
FEM_Comm_t  comm_context 
)

void FEM_Mesh_copy_globalno ( int  src_mesh,
int  dest_mesh 
)

void FEM_Mesh_print ( int  fem_mesh  ) 

void FEM_Mesh_set_conn ( int  fem_mesh,
int  entity,
const int conn,
int  firstItem,
int  length,
int  width 
)

Definition at line 76 of file fem_mesh.C.

References checkIsSet(), and FEM_Mesh_conn().

void FEM_Mesh_get_conn ( int  fem_mesh,
int  entity,
int conn,
int  firstItem,
int  length,
int  width 
)

Definition at line 91 of file fem_mesh.C.

References checkIsSet(), and FEM_Mesh_conn().

void FEM_Mesh_set_data ( int  fem_mesh,
int  entity,
int  attr,
const void *  data,
int  firstItem,
int  length,
int  datatype,
int  width 
)

void FEM_Mesh_get_data ( int  fem_mesh,
int  entity,
int  attr,
void *  data,
int  firstItem,
int  length,
int  datatype,
int  width 
)

void FEM_Mesh_conn ( int  fem_mesh,
int  entity,
int conn,
int  firstItem,
int  length,
int  width 
)

Definition at line 62 of file fem_mesh.C.

References FEM_Mesh_data().

int FEM_Mesh_get_length ( int  fem_mesh,
int  entity 
)

void FEM_Mesh_data ( int  fem_mesh,
int  entity,
int  attr,
void *  data,
int  firstItem,
int  length,
int  datatype,
int  width