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