24#define fei_file "fei_Lookup_Impl.cpp"
63 std::map<int,fei::Record<int>*>::iterator
70 std::vector<int>& eqnNums =
vspace_->getEqnNumbers();
71 int* eqnNumbers = eqnNums.size() > 0 ? &eqnNums[0] : NULL;
72 if (eqnNumbers == NULL) {
73 throw std::runtime_error(
"Fatal error in fei::Lookup_Impl::getEqnNumber");
79 return(eqnNumbers[offset]);
88 std::map<int,fei::Record<int>*>::iterator
101 std::map<int,fei::Record<int>*>::iterator
108 return( node->
getID() );
114 std::map<int,fei::Record<int>*>::iterator
122 const std::vector<int>& fieldIDs = fm->
getFieldIDs();
125 const std::vector<int>& eqnNumbers =
vspace_->getEqnNumbers();
130 if (baseEqnOffset + numNodalEqns > (
int)eqnNumbers.size()) {
131 throw std::runtime_error(
"fei::Lookup_Impl::getAssociatedFieldID ERROR, nodal eqn offset out of range.");
135 int eqn = eqnNumbers[baseEqnOffset];
136 while(eqn < eqnNumber && offset < numNodalEqns) {
137 eqn = eqnNumbers[baseEqnOffset + ++offset];
140 if (eqn != eqnNumber) {
141 throw std::runtime_error(
"fei::Lookup_Impl::getAssociatedFieldID ERROR, eqnNumber not found");
144 int fieldSize_total = 0;
145 for(
size_t i=0; i<fieldSizes.size(); ++i) {
146 fieldSize_total += fieldSizes[i];
147 if (fieldSize_total > offset) {
158 std::map<int,std::vector<int>* >::iterator
164 std::map<int,fei::Record<int>*>::iterator
174 std::map<int,fei::Record<int>*>::iterator
198 std::vector<int>& vspcEqnNumbers =
vspace_->getEqnNumbers();
200 std::vector<fei::Record<int> >& rvec = collection->
getRecords();
202 for(
size_t i=0; i<rvec.size(); ++i) {
205 std::pair<int,fei::Record<int>* > int_node_pair(node->
getNumber(), node);
210 int* eqnNumbers = &vspcEqnNumbers[0]
213 for(
int eq=0; eq<numEqns; ++eq) {
214 std::pair<int,fei::Record<int>* > eqn_node_pair(eqnNumbers[eq], node);
221 int numLocalLagrangeConstraints =
matGraph_->getLagrangeConstraints().size();
223 int numGlobalLagrangeConstraints = 0;
224 fei::GlobalSum(comm, numLocalLagrangeConstraints, numGlobalLagrangeConstraints);
226 bool noconstraints = numGlobalLagrangeConstraints<1 ? true :
false;
231 if (noconstraints ==
false) {
234 if (
vspace_->ownerPatterns_.size() > 0 &&
vspace_->sharerPatterns_.size() > 0) {
247 subdomainIDs = sharedIDs;
254 sd_iter = sdIDTable.begin(),
255 sd_end = sdIDTable.end();
257 for(
int i=0; sd_iter != sd_end; ++i, ++sd_iter) {
258 int id = sd_iter->first;
259 std::set<int>& procList = sd_iter->second;
266 std::vector<int>* newarray =
new std::vector<int>;
267 std::set<int>::const_iterator
268 p_iter = procList.begin(), p_end = procList.end();
270 for(; p_iter != p_end; ++p_iter) {
272 newarray->push_back(proc);
std::vector< int > & getFieldSizes()
std::vector< int > & getFieldIDs()
int getFieldEqnOffset(int fieldID, int &offset) const
int getNumIndices() const
int getOffsetIntoBlkEqn(int blkEqn, int ptEqn)
std::map< int, fei::Record< int > * > eqnnumPairs_
bool isInLocalElement(int nodeNumber)
int getAssociatedFieldID(int eqnNumber)
int getEqnNumber(int nodeNumber, int fieldID)
std::map< int, std::vector< int > * > nodenumSubdomainDB_
std::vector< GlobalID > elemBlockIDs_
fei::SharedPtr< fei::MatrixGraph > matGraph_
fei::SharedPtr< fei::VectorSpace > vspace_
int getAssociatedNodeID(int eqnNumber)
int getAssociatedNodeNumber(int eqnNumber)
std::vector< int > workspace_
Lookup_Impl(fei::SharedPtr< fei::MatrixGraph > matGraph, int nodeIDType)
std::vector< int > fieldIDs_
std::vector< const int * > fieldIDs_2D_
std::vector< int > fieldSizes_
std::map< int, fei::Record< int > * > nodenumPairs_
snl_fei::PointBlockMap * ptBlkMap_
fei::FieldMask * getFieldMask()
GlobalIDType getID() const
int getOffsetIntoEqnNumbers() const
GlobalIDType getNumber() const
map_type & getSharedIDs()
std::map< T, std::set< int > > map_type
std::vector< fei::Record< int > > & getRecords()
fei::Record< int > * getRecordWithID(int ID)
void setRecvPattern(fei::comm_map *pattern)
void setSendPattern(fei::comm_map *pattern)
int localProc(MPI_Comm comm)
void destroyValues(MAP_TYPE &map_obj)
int exchange(MPI_Comm comm, MessageHandler< T > *msgHandler)
int sortedListInsert(const T &item, std::vector< T > &list)
int GlobalSum(MPI_Comm comm, std::vector< T > &local, std::vector< T > &global)