FEI Package Browser (Single Doxygen Collection)  Version of the Day
fei_NodeDatabase.hpp
Go to the documentation of this file.
1 #ifndef _NodeDatabase_hpp_
2 #define _NodeDatabase_hpp_
3 
4 /*--------------------------------------------------------------------*/
5 /* Copyright 2005 Sandia Corporation. */
6 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
7 /* non-exclusive license for use of this work by or on behalf */
8 /* of the U.S. Government. Export of this program may require */
9 /* a license from the United States Government. */
10 /*--------------------------------------------------------------------*/
11 
12 #include "fei_macros.hpp"
13 #include "fei_fwd.hpp"
14 #include "fei_defs.h"
15 #include "fei_NodeDescriptor.hpp"
16 #include "fei_Pool_alloc.hpp"
17 #include "fei_mpi.h"
18 
19 #include <map>
20 
66 class NodeDatabase {
67  public:
69  NodeDatabase(std::map<int,int>* fieldDatabase,
70  NodeCommMgr* nodeCommMgr);
71 
73  virtual ~NodeDatabase();
74 
78  int getNumNodeDescriptors() const { return( nodePtrs_.size() ); };
79 
83  std::map<GlobalID,int>& getNodeIDs() { return( nodeIDs_ ); };
84 
94  int getNodeWithID(GlobalID nodeID, const NodeDescriptor*& node) const;
95  int getNodeWithID(GlobalID nodeID, NodeDescriptor*& node);
96 
106  int getNodeWithNumber(int nodeNumber, const NodeDescriptor*& node) const;
107 
114  int getNodeWithEqn(int eqnNumber, const NodeDescriptor*& node) const;
115 
121  void getNodeAtIndex(int i, const NodeDescriptor*& node) const;
122  void getNodeAtIndex(int i, NodeDescriptor*& node);
123 
129  int countLocalNodalEqns(int localRank);
130 
137  int countLocalNodeDescriptors(int localRank);
138 
144  int getIndexOfID(GlobalID nodeID) const;
145 
153  int initNodeID(GlobalID nodeID);
154 
162  int initNodeIDs(GlobalID* nodeIDs, int numNodes);
163 
177  int synchronize(int firstLocalNodeNumber,
178  int firstLocalEqn,
179  int localRank,
180  MPI_Comm comm);
181 
185  int getAssociatedNodeNumber(int eqnNumber);
186 
190  int getAssociatedFieldID(int eqnNumber);
191 
193  bool isSynchronized() { return( synchronized_ ); };
194 
195  private:
196  NodeDatabase(const NodeDatabase& src);
197  NodeDatabase& operator=(const NodeDatabase& src);
198 
199  void deleteMemory();
200 
201  std::vector<NodeDescriptor*> nodePtrs_;
202 
203  std::vector<int> eqnNumbers_; //eqnNumbers_ will be a sorted list of the
204  //first global equation number at each node
205  //in nodePtrs_.
206  //the relationship between eqnNumbers_ and
207  std::vector<int> eqnNodeIndices_; //eqnNodeIndices_ is like this:
208  //if eqn == eqnNumbers_[i], then
209  // nodePtrs_[eqnNodeIndices_[i]] points to
210  // the node with 'eqn'
211 
212  std::map<GlobalID,int> nodeIDs_; //nodeIDs_ maps node-ID to an index into
213  //the nodePtrs_ array of NodeDescriptors.
214 
215  std::map<int,int> nodeNumbers_;
216 
219 
220  std::map<int,int>* fieldDB_;
222 
225 
227 };
228 
229 #endif
fei_NodeDescriptor.hpp
NodeDatabase::deleteMemory
void deleteMemory()
Definition: fei_NodeDatabase.cpp:46
NodeDatabase::firstLocalNodeNumber_
int firstLocalNodeNumber_
Definition: fei_NodeDatabase.hpp:224
NodeDatabase::nodePool_
fei_Pool_alloc< NodeDescriptor > nodePool_
Definition: fei_NodeDatabase.hpp:226
NodeDatabase::need_to_alloc_and_sync_
bool need_to_alloc_and_sync_
Definition: fei_NodeDatabase.hpp:218
NodeDatabase::synchronized_
bool synchronized_
Definition: fei_NodeDatabase.hpp:217
NodeDatabase::countLocalNodalEqns
int countLocalNodalEqns(int localRank)
Definition: fei_NodeDatabase.cpp:161
NodeDatabase::isSynchronized
bool isSynchronized()
Definition: fei_NodeDatabase.hpp:193
NodeDatabase::lastLocalNodeNumber_
int lastLocalNodeNumber_
Definition: fei_NodeDatabase.hpp:224
NodeDatabase::initNodeID
int initNodeID(GlobalID nodeID)
Definition: fei_NodeDatabase.cpp:206
fei_macros.hpp
fei_fwd.hpp
NodeDatabase::getNodeWithNumber
int getNodeWithNumber(int nodeNumber, const NodeDescriptor *&node) const
Definition: fei_NodeDatabase.cpp:81
NodeDatabase::synchronize
int synchronize(int firstLocalNodeNumber, int firstLocalEqn, int localRank, MPI_Comm comm)
Definition: fei_NodeDatabase.cpp:243
NodeDatabase::getNodeAtIndex
void getNodeAtIndex(int i, const NodeDescriptor *&node) const
Definition: fei_NodeDatabase.cpp:137
fei_Pool_alloc.hpp
NodeDatabase::nodePtrs_
std::vector< NodeDescriptor * > nodePtrs_
Definition: fei_NodeDatabase.hpp:201
NodeDatabase::initNodeIDs
int initNodeIDs(GlobalID *nodeIDs, int numNodes)
Definition: fei_NodeDatabase.cpp:231
NodeDatabase::getNodeIDs
std::map< GlobalID, int > & getNodeIDs()
Definition: fei_NodeDatabase.hpp:83
NodeDatabase::nodeNumbers_
std::map< int, int > nodeNumbers_
Definition: fei_NodeDatabase.hpp:215
NodeDatabase::getAssociatedNodeNumber
int getAssociatedNodeNumber(int eqnNumber)
Definition: fei_NodeDatabase.cpp:344
NodeDatabase::getAssociatedFieldID
int getAssociatedFieldID(int eqnNumber)
Definition: fei_NodeDatabase.cpp:380
NodeDatabase::getNodeWithID
int getNodeWithID(GlobalID nodeID, const NodeDescriptor *&node) const
Definition: fei_NodeDatabase.cpp:55
NodeCommMgr
Definition: fei_NodeCommMgr.hpp:37
NodeDatabase::eqnNumbers_
std::vector< int > eqnNumbers_
Definition: fei_NodeDatabase.hpp:203
fei_mpi.h
NodeDatabase::getNumNodeDescriptors
int getNumNodeDescriptors() const
Definition: fei_NodeDatabase.hpp:78
GlobalID
int GlobalID
Definition: fei_defs.h:60
NodeDatabase::nodeIDs_
std::map< GlobalID, int > nodeIDs_
Definition: fei_NodeDatabase.hpp:212
NodeDescriptor
Definition: fei_NodeDescriptor.hpp:36
NodeDatabase::getNodeWithEqn
int getNodeWithEqn(int eqnNumber, const NodeDescriptor *&node) const
Definition: fei_NodeDatabase.cpp:100
NodeDatabase::nodeCommMgr_
NodeCommMgr * nodeCommMgr_
Definition: fei_NodeDatabase.hpp:221
fei_defs.h
NodeDatabase::~NodeDatabase
virtual ~NodeDatabase()
Definition: fei_NodeDatabase.cpp:40
MPI_Comm
#define MPI_Comm
Definition: fei_mpi.h:56
NodeDatabase::countLocalNodeDescriptors
int countLocalNodeDescriptors(int localRank)
Definition: fei_NodeDatabase.cpp:184
NodeDatabase
Definition: fei_NodeDatabase.hpp:66
NodeDatabase::NodeDatabase
NodeDatabase(std::map< int, int > *fieldDatabase, NodeCommMgr *nodeCommMgr)
Definition: fei_NodeDatabase.cpp:23
NodeDatabase::operator=
NodeDatabase & operator=(const NodeDatabase &src)
NodeDatabase::numLocalNodes_
int numLocalNodes_
Definition: fei_NodeDatabase.hpp:223
NodeDatabase::fieldDB_
std::map< int, int > * fieldDB_
Definition: fei_NodeDatabase.hpp:220
fei_Pool_alloc< NodeDescriptor >
NodeDatabase::eqnNodeIndices_
std::vector< int > eqnNodeIndices_
Definition: fei_NodeDatabase.hpp:207
NodeDatabase::getIndexOfID
int getIndexOfID(GlobalID nodeID) const
Definition: fei_NodeDatabase.cpp:195