Finite Element Domain Decomposition Library
FEDDLib
Loading...
Searching...
No Matches
Map_def.hpp
1#ifndef MAP_DEF_hpp
2#define MAP_DEF_hpp
3#include "Map_decl.hpp"
4
11
12namespace FEDD {
13template < class LO, class GO, class NO>
14Map<LO,GO,NO>::Map():
15map_()
16{
17
18}
19
20template <class LO, class GO, class NO>
21Map<LO,GO,NO>::Map( TpetraMapConstPtrConst_Type& tpetraMapPtrIn ):
22map_( tpetraMapPtrIn )
23{
24
25}
26
27template < class LO, class GO, class NO>
28Map<LO,GO,NO>::Map( const Map_Type& mapIn ):
29map_()
30{
31 //mapX_ = Xpetra::MapFactory<LO,GO,NO>::Build( mapIn.getUnderlyingLib(), mapIn.getGlobalNumElements(), mapIn.getNodeElementList(), mapIn.getIndexBase(), mapIn.getComm() );
32 map_ = Teuchos::RCP(new TpetraMap_Type(mapIn.getGlobalNumElements(), mapIn.getNodeElementList(),mapIn.getIndexBase(), mapIn.getComm()));
33
34}
35
36template < class LO, class GO, class NO>
37Map<LO,GO,NO>::Map(GO numGlobalElements,
38 const Teuchos::ArrayView<const GO> &elementList,
39 GO indexBase,
40 const CommConstPtr_Type &comm):
41map_()
42{
43 map_ = Teuchos::RCP(new TpetraMap_Type(numGlobalElements, elementList, indexBase, comm));
44}
45
46template < class LO, class GO, class NO>
47Map<LO,GO,NO>::Map(GO numGlobalElements,
48 LO numLocalElements,
49 GO indexBase,
50 const CommConstPtr_Type &comm):
51map_()
52{
53 map_ = Teuchos::RCP(new TpetraMap_Type(numGlobalElements, numLocalElements, indexBase, comm));
54
55}
56
57template < class LO, class GO, class NO>
58Map<LO,GO,NO>::~Map(){
59
60}
61
62
63template < class LO, class GO, class NO>
64GO Map<LO,GO,NO>::getGlobalElement(LO id) const{
65 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
66 return map_->getGlobalElement(id);
67}
68
69template < class LO, class GO, class NO>
70LO Map<LO,GO,NO>::getLocalElement(GO id) const{
71 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
72 return map_->getLocalElement(id);
73}
74
75template < class LO, class GO, class NO>
76LO Map<LO,GO,NO>::getNodeNumElements() const{
77 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
78 return map_->getLocalNumElements();
79}
80
81template < class LO, class GO, class NO>
82GO Map<LO,GO,NO>::getGlobalNumElements() const{
83 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
84 return map_->getGlobalNumElements();
85}
86
87template < class LO, class GO, class NO>
88typename Map<LO,GO,NO>::CommConstPtr_Type Map<LO,GO,NO>::getComm() const{
89
90 return map_->getComm();
91}
92
93template <class LO,class GO,class NO>
94GO Map<LO,GO,NO>::getIndexBase() const{
95 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
96 return map_->getIndexBase();
97}
98
99template < class LO, class GO, class NO>
100Teuchos::ArrayView< const GO > Map<LO,GO,NO>::getNodeElementList() const{
101 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
102 return map_->getLocalElementList();
103}
104
105template < class LO, class GO, class NO>
106std::string Map<LO,GO,NO>::getUnderlyingLib( ) const{
107 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
108 std::string uLib;
109
110 uLib = "Tpetra";
111
112 return uLib;
113}
114
115template < class LO, class GO, class NO>
116typename Map<LO,GO,NO>::MapPtr_Type Map<LO,GO,NO>::buildVecFieldMap(UN numDofs, std::string ordering) const{
117
118 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
119 TEUCHOS_TEST_FOR_EXCEPTION(ordering.compare("NodeWise"), std::logic_error,"Select a valid ordering: NodeWise");
120 Teuchos::ArrayView<const GO> elementList = map_->getLocalElementList();
121 Teuchos::Array<GO> elementListField( numDofs * elementList.size() );
122 for (UN i=0; i<elementList.size(); i++) {
123 for (UN dof=0; dof<numDofs; dof++)
124 elementListField[ numDofs * i + dof ] = numDofs * elementList[i] + dof;
125 }
126 typedef Teuchos::OrdinalTraits<GO> GOOT;
127 return Teuchos::rcp(new Map_Type(GOOT::invalid(), elementListField(), map_->getIndexBase(), map_->getComm() ) );
128}
129
130
131template < class LO, class GO, class NO>
132typename Map<LO,GO,NO>::TpetraMapConstPtr_Type Map<LO,GO,NO>::getTpetraMap() const{
133
134 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"getTpetraMap(): map_ is null.");
135
136 return map_;
137}
138
139template < class LO, class GO, class NO>
140typename Map<LO,GO,NO>::XpetraMapConstPtr_Type Map<LO,GO,NO>::getXpetraMap() {
141
142 TEUCHOS_TEST_FOR_EXCEPTION(mapX_.is_null(),std::runtime_error,"getXpetraMap(): map_ is null.");
143
144 return mapX_;
145}
146
147template < class LO, class GO, class NO>
148GO Map<LO,GO,NO>::getMaxAllGlobalIndex() const{
149 return map_->getMaxAllGlobalIndex();
150}
151
152template < class LO, class GO, class NO>
153LO Map<LO,GO,NO>::getMaxLocalIndex() const{
154 return map_->getMaxLocalIndex();
155}
156
157template < class LO, class GO, class NO>
158void Map<LO,GO,NO>::print(Teuchos::EVerbosityLevel verbLevel) const{
159
160 Teuchos::RCP<Teuchos::FancyOStream> out = Teuchos::VerboseObjectBase::getDefaultOStream();
161 map_->describe(*out,verbLevel);
162}
163
164template < class LO, class GO, class NO>
165typename Map<LO,GO,NO>::ThyraVSBConstPtr_Type Map<LO,GO,NO>::getThyraVectorSpaceBase() const{
166
167 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"getThyraVectorSpaceBase(): map_ is null.");
168 //RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > tpMap = tpetraMap->getTpetra_Map();
169 Teuchos::RCP<Thyra::TpetraVectorSpace<default_sc,LO,GO,NO> > thyraTpetraMap = Thyra::tpetraVectorSpace<default_sc,LO,GO,NO>(map_);
170 return thyraTpetraMap;
171}
172
173template < class LO, class GO, class NO>
174typename Map<LO,GO,NO>::CommPtr_Type Map<LO,GO,NO>::getCommNonConst() {
175 CommConstPtr_Type commConst = map_->getComm();
176 return Teuchos::rcp_const_cast<Comm_Type>(commConst);
177}
178
179template <class LO,class GO,class NO>
180Teuchos::RCP<Map<LO,GO,NO> > Map<LO,GO,NO>::buildUniqueMap( int numFreeProcs ) const
181{
182 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
183 if (numFreeProcs==0) {
184
185 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > myIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(map_));
186 myIndices->putScalar(map_->getComm()->getRank()+1);
187
188 TpetraMapPtr_Type linearMap = Teuchos::RCP(new TpetraMap_Type( map_->getMaxAllGlobalIndex()+1, 0, map_->getComm()));
189 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > globalIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(linearMap));
190
191 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>( map_,linearMap));
192 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer2 = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>(linearMap, map_));
193 globalIndices->doImport(*myIndices,*importer,Tpetra::INSERT);
194 myIndices->putScalar(0);
195 myIndices->doImport(*globalIndices,*importer2,Tpetra::ADD);
196
197 Teuchos::Array<GO> uniqueVector;
198 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
199 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
200 uniqueVector.push_back(map_->getGlobalElement(i));
201 }
202 }
203 TpetraMapPtr_Type mapTpetra = Teuchos::RCP(new TpetraMap_Type(-1, uniqueVector(),0,map_->getComm()));
204 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapTpetra ) );
205 return map;
206 }
207 else{
208 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > myIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(map_));
209 myIndices->putScalar(map_->getComm()->getRank()+1);
210 GO maxGID = map_->getMaxAllGlobalIndex();
211 int numAvailableRanks = map_->getComm()->getSize() - numFreeProcs;
212 int numElementsForAvailRank = (int) ( ( (maxGID+1) / numAvailableRanks ) + 100.*std::numeric_limits<double>::epsilon() );
213
214 int remainingElement = maxGID+1 - numAvailableRanks * numElementsForAvailRank;
215 bool hasOneMoreElement = false;
216
217 if ( remainingElement > map_->getComm()->getRank() ) {
218 numElementsForAvailRank++;
219 hasOneMoreElement = true;
220 }
221
222 if ( map_->getComm()->getRank() + 1 > map_->getComm()->getSize() - numFreeProcs){
223 numElementsForAvailRank = 0;
224 }
225
226 Teuchos::Array<GO> myElements( numElementsForAvailRank );
227 GO offset = numElementsForAvailRank * map_->getComm()->getRank();
228 if (!hasOneMoreElement) {
229 offset += remainingElement;
230 }
231 for (int i=0; i<myElements.size(); i++) {
232 myElements[i] = i + offset;
233 }
234
235 TpetraMapPtr_Type linearMapAvailRanks = Teuchos::RCP(new TpetraMap_Type(Teuchos::OrdinalTraits<GO>::invalid(), myElements(), 0, map_->getComm()));
236 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > globalIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(linearMapAvailRanks));
237
238 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>(map_, linearMapAvailRanks ));
239 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer2 = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>( linearMapAvailRanks, map_));
240
241 globalIndices->doImport(*myIndices,*importer,Tpetra::INSERT);
242
243 myIndices->putScalar(0);
244 myIndices->doImport(*globalIndices,*importer2,Tpetra::ADD);
245
246 Teuchos::Array<GO> uniqueVector;
247 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
248 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
249 uniqueVector.push_back(map_->getGlobalElement(i));
250 }
251 }
252 TpetraMapPtr_Type mapTpetra = Teuchos::RCP(new TpetraMap_Type(-1, uniqueVector(),0,map_->getComm()));
253 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapTpetra ) );
254 return map;
255 }
256
257}
258
259//merge with above function
260template <class LO,class GO,class NO>
261Teuchos::RCP<Map<LO,GO,NO> > Map<LO,GO,NO>::buildUniqueMap( tuple_intint_Type rankRange ) const
262{
263 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
264 int rank = map_->getComm()->getRank();
265 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > myIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(map_));
266
267 myIndices->putScalar(rank + 1);
268 GO maxGID = map_->getMaxAllGlobalIndex();
269
270 int numAvailableRanks = std::get<1>(rankRange) - std::get<0>(rankRange) + 1;
271 int numElementsForAvailRank = (int) ( ( (maxGID+1) / numAvailableRanks ) + 100.*std::numeric_limits<double>::epsilon() );
272
273 int remainingElement = maxGID+1 - numAvailableRanks * numElementsForAvailRank;
274 bool hasOneMoreElement = false;
275
276 if ( remainingElement > map_->getComm()->getRank() - std::get<0>(rankRange) ) {
277 numElementsForAvailRank++;
278 hasOneMoreElement = true;
279 }
280 if ( map_->getComm()->getRank() < std::get<0>(rankRange) || map_->getComm()->getRank() > std::get<1>(rankRange) )
281 numElementsForAvailRank = 0;
282
283
284 Teuchos::Array<GO> myElements( numElementsForAvailRank );
285 GO offset = numElementsForAvailRank * ( map_->getComm()->getRank() - std::get<0>(rankRange) );
286
287 if (!hasOneMoreElement)
288 offset += remainingElement;
289
290 for (int i=0; i<myElements.size(); i++)
291 myElements[i] = i + offset;
292
293 TpetraMapPtr_Type linearMapAvailRanks = Teuchos::RCP(new TpetraMap_Type( Teuchos::OrdinalTraits<GO>::invalid(), myElements(), 0, map_->getComm()));
294 Teuchos::RCP<Tpetra::Vector<GO,LO,GO,NO> > globalIndices = Teuchos::RCP( new Tpetra::Vector<GO,LO,GO,NO>(linearMapAvailRanks));
295
296 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>( map_,linearMapAvailRanks));
297 Teuchos::RCP<Tpetra::Import<LO,GO,NO> > importer2 = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>(linearMapAvailRanks, map_));
298
299 globalIndices->doImport(*myIndices,*importer,Tpetra::INSERT);
300
301 myIndices->putScalar(0);
302 myIndices->doImport(*globalIndices,*importer2,Tpetra::ADD);
303
304 Teuchos::Array<GO> uniqueVector;
305 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
306 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
307 uniqueVector.push_back(map_->getGlobalElement(i));
308 }
309 }
310
311 TpetraMapPtr_Type mapTpetra = Teuchos::RCP(new TpetraMap_Type(-1, uniqueVector(),0,map_->getComm()));
312 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapTpetra ) );
313 return map;
314
315}
316/*
317
318template <class LO,class GO,class NO>
319Teuchos::RCP<Map<LO,GO,NO> > Map<LO,GO,NO>::buildUniqueMap( int numFreeProcs ) const
320{
321 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
322 if (numFreeProcs==0) {
323
324 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > myIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(map_);
325 myIndices->putScalar(map_->getComm()->getRank()+1);
326
327 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > linearMap = Xpetra::MapFactory<LO,GO,NO>::Build(map_->lib(),map_->getMaxAllGlobalIndex()+1,0,map_->getComm());
328 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > globalIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(linearMap);
329
330 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer = Xpetra::ImportFactory<LO,GO,NO>::Build(map_,linearMap);
331 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer2 = Xpetra::ImportFactory<LO,GO,NO>::Build(linearMap,map_);
332 globalIndices->doImport(*myIndices,*importer,Xpetra::INSERT);
333 myIndices->putScalar(0);
334 myIndices->doImport(*globalIndices,*importer2,Xpetra::ADD);
335
336 Teuchos::Array<GO> uniqueVector;
337 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
338 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
339 uniqueVector.push_back(map_->getGlobalElement(i));
340 }
341 }
342 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > mapXpetra = Xpetra::MapFactory<LO,GO,NO>::Build(map_->lib(),-1,uniqueVector(),0,map_->getComm());
343 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapXpetra ) );
344 return map;
345 }
346 else{
347 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > myIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(map_);
348 myIndices->putScalar(map_->getComm()->getRank()+1);
349 GO maxGID = map_->getMaxAllGlobalIndex();
350 int numAvailableRanks = map_->getComm()->getSize() - numFreeProcs;
351 int numElementsForAvailRank = (int) ( ( (maxGID+1) / numAvailableRanks ) + 100.*std::numeric_limits<double>::epsilon() );
352
353 int remainingElement = maxGID+1 - numAvailableRanks * numElementsForAvailRank;
354 bool hasOneMoreElement = false;
355
356 if ( remainingElement > map_->getComm()->getRank() ) {
357 numElementsForAvailRank++;
358 hasOneMoreElement = true;
359 }
360
361 if ( map_->getComm()->getRank() + 1 > map_->getComm()->getSize() - numFreeProcs){
362 numElementsForAvailRank = 0;
363 }
364
365 Teuchos::Array<GO> myElements( numElementsForAvailRank );
366 GO offset = numElementsForAvailRank * map_->getComm()->getRank();
367 if (!hasOneMoreElement) {
368 offset += remainingElement;
369 }
370 for (int i=0; i<myElements.size(); i++) {
371 myElements[i] = i + offset;
372 }
373
374 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > linearMapAvailRanks = Xpetra::MapFactory<LO,GO,NO>::Build( map_->lib(),Teuchos::OrdinalTraits<GO>::invalid(), myElements(), 0, map_->getComm() );
375
376 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > globalIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(linearMapAvailRanks);
377
378 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer = Xpetra::ImportFactory<LO,GO,NO>::Build( map_, linearMapAvailRanks );
379 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer2 = Xpetra::ImportFactory<LO,GO,NO>::Build( linearMapAvailRanks, map_ );
380
381 globalIndices->doImport(*myIndices,*importer,Xpetra::INSERT);
382
383 myIndices->putScalar(0);
384 myIndices->doImport(*globalIndices,*importer2,Xpetra::ADD);
385
386 Teuchos::Array<GO> uniqueVector;
387 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
388 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
389 uniqueVector.push_back(map_->getGlobalElement(i));
390 }
391 }
392 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > mapXpetra = Xpetra::MapFactory<LO,GO,NO>::Build(map_->lib(),-1,uniqueVector(),0,map_->getComm());
393 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapXpetra ) );
394 return map;
395 }
396
397}
398
399//merge with above function
400template <class LO,class GO,class NO>
401Teuchos::RCP<Map<LO,GO,NO> > Map<LO,GO,NO>::buildUniqueMap( tuple_intint_Type rankRange ) const
402{
403 TEUCHOS_TEST_FOR_EXCEPTION(map_.is_null(),std::runtime_error,"map is null.");
404 int rank = map_->getComm()->getRank();
405 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > myIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(map_);
406 myIndices->putScalar(rank + 1);
407 GO maxGID = map_->getMaxAllGlobalIndex();
408
409 int numAvailableRanks = std::get<1>(rankRange) - std::get<0>(rankRange) + 1;
410 int numElementsForAvailRank = (int) ( ( (maxGID+1) / numAvailableRanks ) + 100.*std::numeric_limits<double>::epsilon() );
411
412 int remainingElement = maxGID+1 - numAvailableRanks * numElementsForAvailRank;
413 bool hasOneMoreElement = false;
414
415 if ( remainingElement > map_->getComm()->getRank() - std::get<0>(rankRange) ) {
416 numElementsForAvailRank++;
417 hasOneMoreElement = true;
418 }
419 if ( map_->getComm()->getRank() < std::get<0>(rankRange) || map_->getComm()->getRank() > std::get<1>(rankRange) )
420 numElementsForAvailRank = 0;
421
422
423 Teuchos::Array<GO> myElements( numElementsForAvailRank );
424 GO offset = numElementsForAvailRank * ( map_->getComm()->getRank() - std::get<0>(rankRange) );
425
426 if (!hasOneMoreElement)
427 offset += remainingElement;
428
429 for (int i=0; i<myElements.size(); i++)
430 myElements[i] = i + offset;
431
432
433 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > linearMapAvailRanks = Xpetra::MapFactory<LO,GO,NO>::Build( map_->lib(),Teuchos::OrdinalTraits<GO>::invalid(), myElements(), 0, map_->getComm() );
434
435 Teuchos::RCP<Xpetra::Vector<GO,LO,GO,NO> > globalIndices = Xpetra::VectorFactory<GO,LO,GO,NO>::Build(linearMapAvailRanks);
436
437 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer = Xpetra::ImportFactory<LO,GO,NO>::Build( map_, linearMapAvailRanks );
438 Teuchos::RCP<Xpetra::Import<LO,GO,NO> > importer2 = Xpetra::ImportFactory<LO,GO,NO>::Build( linearMapAvailRanks, map_ );
439
440 globalIndices->doImport(*myIndices,*importer,Xpetra::INSERT);
441
442 myIndices->putScalar(0);
443 myIndices->doImport(*globalIndices,*importer2,Xpetra::ADD);
444
445 Teuchos::Array<GO> uniqueVector;
446 for (unsigned i=0; i<myIndices->getLocalLength(); i++) {
447 if (myIndices->getData(0)[i] == map_->getComm()->getRank()+1) {
448 uniqueVector.push_back(map_->getGlobalElement(i));
449 }
450 }
451 Teuchos::RCP<Xpetra::Map<LO,GO,NO> > mapXpetra = Xpetra::MapFactory<LO,GO,NO>::Build(map_->lib(),-1,uniqueVector(),0,map_->getComm());
452 Teuchos::RCP<Map<LO,GO,NO> > map = Teuchos::rcp( new Map<LO,GO,NO>( mapXpetra ) );
453
454 return map;
455
456}*/
457
458
459}
460#endif
Teuchos::RCP< Map< LO, GO, NO > > buildUniqueMap(int numFreeProcs=0) const
Definition Map_def.hpp:180
Adaptive Mesh Refinement.
Definition AdaptiveMeshRefinement.cpp:5