FEI Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
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"
16#include "fei_Pool_alloc.hpp"
17#include "fei_mpi.h"
18
19#include <map>
20
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:
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
std::vector< NodeDescriptor * > nodePtrs_
int getIndexOfID(GlobalID nodeID) const
int synchronize(int firstLocalNodeNumber, int firstLocalEqn, int localRank, MPI_Comm comm)
int getNodeWithID(GlobalID nodeID, const NodeDescriptor *&node) const
int getNodeWithNumber(int nodeNumber, const NodeDescriptor *&node) const
NodeDatabase(const NodeDatabase &src)
virtual ~NodeDatabase()
std::vector< int > eqnNodeIndices_
NodeDatabase & operator=(const NodeDatabase &src)
int getAssociatedNodeNumber(int eqnNumber)
NodeCommMgr * nodeCommMgr_
std::map< int, int > * fieldDB_
int getNodeWithEqn(int eqnNumber, const NodeDescriptor *&node) const
int initNodeIDs(GlobalID *nodeIDs, int numNodes)
std::map< GlobalID, int > & getNodeIDs()
NodeDatabase(std::map< int, int > *fieldDatabase, NodeCommMgr *nodeCommMgr)
int countLocalNodalEqns(int localRank)
void getNodeAtIndex(int i, const NodeDescriptor *&node) const
std::vector< int > eqnNumbers_
std::map< int, int > nodeNumbers_
int getAssociatedFieldID(int eqnNumber)
int getNumNodeDescriptors() const
int initNodeID(GlobalID nodeID)
int countLocalNodeDescriptors(int localRank)
fei_Pool_alloc< NodeDescriptor > nodePool_
std::map< GlobalID, int > nodeIDs_
int GlobalID
Definition fei_defs.h:60
#define MPI_Comm
Definition fei_mpi.h:56