Finite Element Domain Decomposition Library
FEDDLib
Loading...
Searching...
No Matches
MultiVector_def.hpp
1#ifndef MULTIVECTOR_DEF_hpp
2#define MULTIVECTOR_DEF_hpp
3#include "MultiVector_decl.hpp"
4
13
14namespace FEDD {
15
17
18template <class SC, class LO, class GO, class NO>
19MultiVector<SC,LO,GO,NO>::MultiVector():
20multiVector_(),
21map_(),
22importer_(),
23exporter_()
24{
25
26}
27
28
29template <class SC, class LO, class GO, class NO>
30MultiVector<SC,LO,GO,NO>::MultiVector( MapConstPtr_Type map, UN nmbVectors ):
31multiVector_( ),
32map_(map),
33importer_(),
34exporter_()
35{
36 multiVector_ = Teuchos::RCP( new TpetraMultiVector_Type( map->getTpetraMap(), nmbVectors ));
37}
38
39template <class SC, class LO, class GO, class NO>
40MultiVector<SC,LO,GO,NO>::MultiVector( TpetraMultiVectorPtr_Type& tpetraMVPtrIn ):
41multiVector_( tpetraMVPtrIn ),
42map_(),
43importer_(),
44exporter_()
45{
46
47 map_.reset( new Map_Type( tpetraMVPtrIn->getMap() ) );
48
49 FEDDLIB_WARNING("MultiVector_def", this->getMap()->getComm()->getRank() == 0, " MultiVector(TpetraMultiVectorPtr_Type& tpetraMVPtrIn) -- this is not a deep copy of the contents of the MV.");
50
51}
52
53template <class SC, class LO, class GO, class NO>
54MultiVector<SC,LO,GO,NO>::MultiVector( MultiVectorConstPtr_Type mvIn ):
55multiVector_( ),
56map_(),
57importer_(),
58exporter_()
59{
60 //FEDDLIB_NOTIFICATION("MultiVector_def", mvIn->getMap()->getComm()->getRank() == 0, " MultiVector(MultiVectorConstPtr_Type mvIn) new multivector is created based on the input mv data");
61
62 multiVector_ =Teuchos::RCP( new TpetraMultiVector_Type( mvIn->getMap()->getTpetraMap(), mvIn->getNumVectors() ));
63 map_.reset( new Map_Type( *mvIn->getMap() ) );
64 for (UN j=0; j<this->getNumVectors(); j++) {
65 Teuchos::ArrayRCP< const SC > valuesIn = mvIn->getData(j);
66 Teuchos::ArrayRCP< SC > valuesThis = this->getDataNonConst(j);
67 for (UN i=0; i<valuesThis.size(); i++)//can this be quicker?
68 valuesThis[i] = valuesIn[i];
69 }
70
71}
72
73template <class SC, class LO, class GO, class NO>
77
78template <class SC, class LO, class GO, class NO>
79typename MultiVector<SC,LO,GO,NO>::MapConstPtr_Type MultiVector<SC,LO,GO,NO>::getMap() const{
80 return map_;
81}
82
83template <class SC, class LO, class GO, class NO>
84typename MultiVector<SC,LO,GO,NO>::MapPtr_Type MultiVector<SC,LO,GO,NO>::getMapNonConst() {
85 return Teuchos::rcp_const_cast<Map_Type>( map_ );
86}
87
88template <class SC, class LO, class GO, class NO>
89typename MultiVector<SC,LO,GO,NO>::TpetraMapConstPtr_Type MultiVector<SC,LO,GO,NO>::getMapTpetra() const{
90 TEUCHOS_TEST_FOR_EXCEPTION(multiVector_.is_null(),std::runtime_error,"RCP<MultiVector> is null.");
91
92 return multiVector_->getMap();
93}
94
95// checking whether multivector is null
96template <class SC, class LO, class GO, class NO>
98 return multiVector_.is_null();
99}
100
101template <class SC, class LO, class GO, class NO>
102void MultiVector<SC,LO,GO,NO>::replaceGlobalValue (GO globalRow, UN vectorIndex, const SC &value){
103 multiVector_->replaceGlobalValue( globalRow, vectorIndex, value );
104}
106template <class SC, class LO, class GO, class NO>
107void MultiVector<SC,LO,GO,NO>::replaceLocalValue (LO localRow, UN vectorIndex, const SC &value){
108 multiVector_->replaceLocalValue( localRow, vectorIndex, value );
109}
110
111template <class SC, class LO, class GO, class NO>
112void MultiVector<SC,LO,GO,NO>::sumIntoGlobalValue (GO globalRow, UN vectorIndex, const SC &value){
113 multiVector_->sumIntoGlobalValue( globalRow, vectorIndex, value );
114}
115
116template <class SC, class LO, class GO, class NO>
117LO MultiVector<SC,LO,GO,NO>::getLocalLength() const{
118 return multiVector_->getLocalLength();
119}
120
121template <class SC, class LO, class GO, class NO>
122Teuchos::ArrayRCP< const SC > MultiVector<SC,LO,GO,NO>::getData(UN i) const{
123 return multiVector_->getData(i);
124}
125
126template <class SC, class LO, class GO, class NO>
127Teuchos::ArrayRCP< SC > MultiVector<SC,LO,GO,NO>::getDataNonConst(UN i) const{
128 return multiVector_->getDataNonConst(i);
129}
131
132template <class SC, class LO, class GO, class NO>
134 return multiVector_->getNumVectors();
135}
136
137template <class SC, class LO, class GO, class NO>
138typename MultiVector<SC,LO,GO,NO>::TpetraMultiVectorConstPtr_Type MultiVector<SC,LO,GO,NO>::getTpetraMultiVector() const{
139 return multiVector_;
140}
141
142template <class SC, class LO, class GO, class NO>
143typename MultiVector<SC,LO,GO,NO>::TpetraMultiVectorPtr_Type MultiVector<SC,LO,GO,NO>::getTpetraMultiVectorNonConst() {
144 return multiVector_;
145}
146
147template <class SC, class LO, class GO, class NO>
148void MultiVector<SC,LO,GO,NO>::print(Teuchos::EVerbosityLevel verbLevel) const{
150 Teuchos::RCP<Teuchos::FancyOStream> out = Teuchos::VerboseObjectBase::getDefaultOStream();
151 multiVector_->describe(*out,verbLevel);
152}
153
154template <class SC, class LO, class GO, class NO>
155Teuchos::RCP<Thyra::MultiVectorBase<SC> > MultiVector<SC,LO,GO,NO>::getThyraMultiVector( ) {
156 // Teuchos::RCP<Thyra::MultiVectorBase<SC> > mv = Teuchos::rcp_const_cast<Thyra::MultiVectorBase<SC> >(Xpetra::ThyraUtils<SC,LO,GO,NO>::toThyraMultiVector(multiVector_));
157
158 auto thyTpMap = Thyra::tpetraVectorSpace<SC,LO,GO,NO>(multiVector_->getMap()); //Thyra::tpetraVectorSpace<SC,LO,GO,NO>(Teuchos::rcp_dynamic_cast<const TpetraMap_Type>(multiVector_->getMap())->getTpetraMap());
159 Teuchos::RCP<Tpetra::MultiVector<SC,LO,GO,NO>> tpMV = multiVector_;
160 auto thyDomMap =Thyra::tpetraVectorSpace<SC,LO,GO,NO>(Tpetra::createLocalMapWithNode<LO,GO,NO>(multiVector_->getNumVectors(), multiVector_->getMap()->getComm()));
161 auto thyMV = rcp(new Thyra::TpetraMultiVector<SC,LO,GO,NO>());
162 thyMV->initialize(thyTpMap, thyDomMap, tpMV);
163
164 return thyMV;
165}
166
167
168template <class SC, class LO, class GO, class NO>
169Teuchos::RCP<const Thyra::MultiVectorBase<SC> > MultiVector<SC,LO,GO,NO>::getThyraMultiVectorConst( ) const{
170
171 //Teuchos::RCP<Thyra::MultiVectorBase<SC> > mv;
172 //return Xpetra::ThyraUtils<SC,LO,GO,NO>::toThyraMultiVector( multiVector_ );
173 auto thyTpMap = Thyra::tpetraVectorSpace<SC,LO,GO,NO>(multiVector_->getMap()); //Thyra::tpetraVectorSpace<SC,LO,GO,NO>(Teuchos::rcp_dynamic_cast<const TpetraMap_Type>(multiVector_->getMap())->getTpetraMap());
174 Teuchos::RCP<Tpetra::MultiVector<SC,LO,GO,NO>> tpMV = multiVector_;
175 auto thyDomMap =Thyra::tpetraVectorSpace<SC,LO,GO,NO>(Tpetra::createLocalMapWithNode<LO,GO,NO>(multiVector_->getNumVectors(), multiVector_->getMap()->getComm()));
176 auto thyMV = rcp(new Thyra::TpetraMultiVector<SC,LO,GO,NO>());
177 thyMV->initialize(thyTpMap, thyDomMap, tpMV);
178
179 return thyMV;
180}
181
182template <class SC, class LO, class GO, class NO>
183void MultiVector<SC,LO,GO,NO>::fromThyraMultiVector( Teuchos::RCP< Thyra::MultiVectorBase<SC> > thyraMV){
184
185 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector is null but we need to know the underlying lib for function fromThyraMultiVector().");
186
187 typedef Thyra::TpetraOperatorVectorExtraction<SC,LO,GO,NO> TOVE_Type;
188
189 Teuchos::RCP<TpetraMultiVector_Type> tMV = TOVE_Type::getTpetraMultiVector( thyraMV );
190 multiVector_ = tMV;
191
192}
193
194template <class SC, class LO, class GO, class NO>
195void MultiVector<SC,LO,GO,NO>::norm2(const Teuchos::ArrayView< typename Teuchos::ScalarTraits<SC>::magnitudeType> &norms) const {
196 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in norm2 is null.");
197 multiVector_->norm2(norms);
198}
199
200// Inf Norm of Multivector
201template <class SC, class LO, class GO, class NO>
202void MultiVector<SC,LO,GO,NO>::normInf(const Teuchos::ArrayView< typename Teuchos::ScalarTraits<SC>::magnitudeType> &normsInf) const {
203 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in normInf is null.");
204 multiVector_->normInf(normsInf);
205
206}
207
208template <class SC, class LO, class GO, class NO>
209void MultiVector<SC,LO,GO,NO>::abs(MultiVectorConstPtr_Type a) {
210 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in abs is null.");
211 multiVector_->abs( *a->getTpetraMultiVector());
212}
213
214template <class SC, class LO, class GO, class NO>
215void MultiVector<SC,LO,GO,NO>::dot(MultiVectorConstPtr_Type a, const Teuchos::ArrayView< typename Teuchos::ScalarTraits<SC>::magnitudeType> &dots) const {
216 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in dot is null.");
217 multiVector_->dot( *a->getTpetraMultiVector(), dots );
218}
219
220template <class SC, class LO, class GO, class NO>
221void MultiVector<SC,LO,GO,NO>::update( const SC& alpha, const MultiVector_Type& A, const SC& beta) {
222 TEUCHOS_TEST_FOR_EXCEPTION( getNumVectors() != A.getNumVectors(), std::logic_error,"MultiVectors for update have different number of vectors.");
223 multiVector_->update( alpha, *A.getTpetraMultiVector(), beta );
224
225}
226
227template <class SC, class LO, class GO, class NO>
228void MultiVector<SC,LO,GO,NO>::update( const SC& alpha, const MultiVector_Type& A, const SC& beta , const MultiVector_Type& B, const SC& gamma) {
229 TEUCHOS_TEST_FOR_EXCEPTION( getNumVectors() != A.getNumVectors(), std::logic_error,"MultiVectors for update have different number of vectors.");
230
231 multiVector_->update( alpha, *A.getTpetraMultiVector(), beta, *B.getTpetraMultiVector(), gamma );
232
233}
234
235template <class SC, class LO, class GO, class NO>
236void MultiVector<SC,LO,GO,NO>::putScalar( const SC& alpha ){
237 multiVector_->putScalar( alpha );
238}
239
240template <class SC, class LO, class GO, class NO>
241void MultiVector<SC,LO,GO,NO>::scale( const SC& alpha ){
242 multiVector_->scale( alpha );
243}
244
245template <class SC, class LO, class GO, class NO>
246void MultiVector<SC,LO,GO,NO>::multiply(Teuchos::ETransp transA, Teuchos::ETransp transB, const SC &alpha, MultiVectorConstPtr_Type &A, MultiVectorConstPtr_Type &B, const SC &beta){
247 multiVector_->multiply( transA, transB, alpha, *A->getTpetraMultiVector(), *B->getTpetraMultiVector(), beta );
248}
249template <class SC, class LO, class GO, class NO>
250void MultiVector<SC,LO,GO,NO>::multiply(Teuchos::ETransp transA, Teuchos::ETransp transB, const SC &alpha, BlockMultiVectorConstPtr_Type &A, BlockMultiVectorConstPtr_Type &B, const SC &beta){
251// if (this->getMap()->getCommNonConst()->getRank()==0)
252// std::cout << "### For testing purposes only." << std::endl;
253
254 for (int i=0; i<A->size(); i++){
255 MultiVectorConstPtr_Type a = A->getBlock(i);
256 MultiVectorConstPtr_Type b = B->getBlock(i);
257 if ( i==0 )
258 this->multiply( transA, transB, alpha, a, b, beta );
259 else
260 this->multiply( transA, transB, alpha, a, b, Teuchos::ScalarTraits<SC>::one() );
261 }
262
263}
264
265template <class SC, class LO, class GO, class NO>
266void MultiVector<SC,LO,GO,NO>::importFromVector( MultiVectorConstPtr_Type mvIn, bool reuseImport, std::string combineMode, std::string type) {
267
268 TEUCHOS_TEST_FOR_EXCEPTION( getNumVectors() != mvIn->getNumVectors(), std::logic_error,"MultiVectors for fillFromVector have different number of vectors.");
269
270 if ( importer_.is_null() || !reuseImport) {
271 if (type=="Forward")
272 importer_ = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>(mvIn->getMapTpetra(), this->getMapTpetra() ));
273 else if(type=="Reverse")
274 importer_ = Teuchos::RCP(new Tpetra::Import<LO, GO, NO>(this->getMapTpetra(), mvIn->getMapTpetra() ));
275 else
276 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown type for import. Choose Forward or Reverse");
277 }
278 else{
279 TEUCHOS_TEST_FOR_EXCEPTION( !importer_->getSourceMap()->isSameAs( *mvIn->getMap()->getTpetraMap() ), std::logic_error,"Source maps of Importer and Multivector are not the same.");
280 TEUCHOS_TEST_FOR_EXCEPTION( !importer_->getTargetMap()->isSameAs( *this->getMap()->getTpetraMap() ), std::logic_error,"Target maps of Importer and Multivector are not the same.");
281 }
282
283
284 if (type=="Forward") {
285 if ( !combineMode.compare("Insert") )
286 multiVector_->doImport ( *mvIn->getTpetraMultiVector(), *importer_, Tpetra::INSERT);
287 else if ( !combineMode.compare("Add") )
288 multiVector_->doImport ( *mvIn->getTpetraMultiVector(), *importer_, Tpetra::ADD);
289 else
290 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown combine mode.");
291 }
292 else if(type=="Reverse"){
293 if ( !combineMode.compare("Insert") )
294 multiVector_->doExport ( *mvIn->getTpetraMultiVector(), *importer_, Tpetra::INSERT);
295 else if ( !combineMode.compare("Add") )
296 multiVector_->doExport ( *mvIn->getTpetraMultiVector(), *importer_, Tpetra::ADD);
297 else
298 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown combine mode.");
299 }
300 else
301 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown type for import. Choose Forward or Reverse");
302}
303
304template <class SC, class LO, class GO, class NO>
305void MultiVector<SC,LO,GO,NO>::exportFromVector( MultiVectorConstPtr_Type mvIn, bool reuseExport, std::string combineMode, std::string type) {
306 TEUCHOS_TEST_FOR_EXCEPTION( getNumVectors() != mvIn->getNumVectors(), std::logic_error,"MultiVectors for exportToVector have different number of vectors.");
307
308 if ( exporter_.is_null() || !reuseExport) {
309 if (type=="Forward")
310 exporter_ = Teuchos::RCP(new Tpetra::Export<LO, GO, NO>(mvIn->getMapTpetra(), this->getMapTpetra() ));
311 else if(type=="Reverse")
312 exporter_ = Teuchos::RCP(new Tpetra::Export<LO, GO, NO>(this->getMapTpetra(), mvIn->getMapTpetra() ));
313 else
314 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown type for export. Choose Forward or Reverse");
315 }
316 else{
317 TEUCHOS_TEST_FOR_EXCEPTION( !exporter_->getSourceMap()->isSameAs( *this->getMap()->getTpetraMap() ), std::logic_error,"Source maps of Exporter and Multivector are not the same.");
318 TEUCHOS_TEST_FOR_EXCEPTION( !exporter_->getTargetMap()->isSameAs( *mvIn->getMap()->getTpetraMap() ), std::logic_error,"Target maps of Exporter and Multivector are not the same.");
319 }
320 if (type=="Forward") {
321 if ( !combineMode.compare("Insert") )
322 multiVector_->doExport ( *mvIn->getTpetraMultiVector(), *exporter_, Tpetra::INSERT);
323 else if ( !combineMode.compare("Add") )
324 multiVector_->doExport ( *mvIn->getTpetraMultiVector(), *exporter_, Tpetra::ADD);
325 else
326 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown combine mode.");
327 }
328 else if (type=="Reverse") {
329 if ( !combineMode.compare("Insert") )
330 multiVector_->doImport ( *mvIn->getTpetraMultiVector(), *exporter_, Tpetra::INSERT);
331 else if ( !combineMode.compare("Add") )
332 multiVector_->doImport ( *mvIn->getTpetraMultiVector(), *exporter_, Tpetra::ADD);
333 else
334 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown combine mode.");
335 }
336 else
337 TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,"Unknown type for export. Choose Forward or Reverse");
338}
339
340template <class SC, class LO, class GO, class NO>
341void MultiVector<SC,LO,GO,NO>::writeMM(std::string fileName) const{
342 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in writeMM is null.");
343
344 typedef Tpetra::CrsMatrix<SC,LO,GO,NO> TpetraCrsMatrix;
345
346 /*typedef Tpetra::MultiVector<SC,LO,GO,NO> TpetraMultiVector;
347 typedef Teuchos::RCP<TpetraMultiVector> TpetraMultiVectorPtr;
348
349 const Xpetra::TpetraMultiVector<SC,LO,GO,NO>& xTpetraMultiVector = dynamic_cast<const Xpetra::TpetraMultiVector<SC,LO,GO,NO> &>(*multiVector_);
350
351 TpetraMultiVectorPtr tpetraMultiVector = xTpetraMultiVector.getTpetra_MultiVector();*/
352
353 Tpetra::MatrixMarket::Writer< TpetraCrsMatrix > tpetraWriter;
354
355 tpetraWriter.writeDenseFile(fileName, multiVector_, "multivector", "");
356}
357
358
359template <class SC, class LO, class GO, class NO>
360void MultiVector<SC,LO,GO,NO>::readMM(std::string fileName) const{
361 TEUCHOS_TEST_FOR_EXCEPTION( multiVector_.is_null(), std::runtime_error,"MultiVector in writeMM is null.");
362
363 typedef Tpetra::CrsMatrix<SC,LO,GO,NO> TpetraCrsMatrix;
364 typedef Teuchos::RCP<TpetraCrsMatrix> TpetraCrsMatrixPtr;
365
366 typedef Tpetra::MultiVector<SC,LO,GO,NO> TpetraMultiVector;
367 typedef Teuchos::RCP<TpetraMultiVector> TpetraMultiVectorPtr;
368
369 typedef Tpetra::Map<LO,GO,NO> TpetraMap;
370 typedef Teuchos::RCP<TpetraMap> TpetraMapPtr;
371
372 Teuchos::RCP<Teuchos::FancyOStream> out = Teuchos::VerboseObjectBase::getDefaultOStream();
373
374 // Xpetra::TpetraMultiVector<SC,LO,GO,NO>& xTpetraMultiVector = dynamic_cast<Xpetra::TpetraMultiVector<SC,LO,GO,NO> &>(*multiVector_);
375 TpetraMultiVectorPtr tpetraMultiVector = multiVector_; //xTpetraMultiVector.getTpetra_MultiVector();
376
377 Teuchos::RCP<const Tpetra::Map<LO,GO,NO> > tpetraMap = tpetraMultiVector->getMap();
378
379 Tpetra::MatrixMarket::Reader< TpetraCrsMatrix > tpetraReader;
380
381 tpetraMultiVector = tpetraReader.readDenseFile(fileName, multiVector_->getMap()->getComm() ,tpetraMap);
382
383 for (UN j=0; j<this->getNumVectors(); j++) {
384 Teuchos::ArrayRCP< const SC > valuesIn = tpetraMultiVector->getData(j);
385 Teuchos::ArrayRCP< SC > valuesThis = this->getDataNonConst(j);
386 for (UN i=0; i<valuesThis.size(); i++)//can this be quicker?
387 valuesThis[i] = valuesIn[i];
388 }
389
390 //multiVector_->describe(*out,Teuchos::VERB_EXTREME);
391}
392
393
394template <class SC, class LO, class GO, class NO>
395typename MultiVector<SC,LO,GO,NO>::MultiVectorConstPtr_Type MultiVector<SC,LO,GO,NO>::getVector( int i ) const{
396
397 TpetraMultiVectorConstPtr_Type tpetraMV = multiVector_->getVector( i );
398 TpetraMultiVectorPtr_Type tpetraMVNonConst = Teuchos::rcp_const_cast<TpetraMultiVector_Type>( tpetraMV );
399 MultiVectorConstPtr_Type singleMV = Teuchos::rcp( new const MultiVector_Type ( tpetraMVNonConst ) );
400 return singleMV;
401
402}
403
404template <class SC, class LO, class GO, class NO>
405typename MultiVector<SC,LO,GO,NO>::MultiVectorPtr_Type MultiVector<SC,LO,GO,NO>::sumColumns() const{
406
407 MultiVectorPtr_Type sumMV = Teuchos::rcp( new MultiVector_Type ( map_, 1 ) );
408 sumMV->putScalar(0.);
409 for (int i=0; i<this->getNumVectors(); i++)
410 sumMV->getTpetraMultiVectorNonConst()->getVectorNonConst(0)->update( 1., *multiVector_->getVector(i), 1. );
411
412 return sumMV;
413}
414
415template <class SC, class LO, class GO, class NO>
416SC MultiVector<SC,LO,GO,NO>::getMax() const{
417 TEUCHOS_TEST_FOR_EXCEPTION( this->getNumVectors() > 1, std::runtime_error, "numMultiVector>1: max function not implemented!");
418 return multiVector_->getVector(0)->normInf();
419}
420
421//typename MultiVector<SC,LO,GO,NO>::ThyraLinOpPtr_Type MultiVector<SC,LO,GO,NO>::getThyraLinOp(){
422//
423// return ;
424//}
425
426}
427#endif
Definition MultiVector_decl.hpp:36
void replaceLocalValue(LO localRow, UN vectorIndex, const SC &value)
Definition MultiVector_def.hpp:107
Teuchos::ArrayRCP< const SC > getData(UN i) const
Get data of multivector.
Definition MultiVector_def.hpp:122
Teuchos::ArrayRCP< SC > getDataNonConst(UN i) const
Get data of multivector.
Definition MultiVector_def.hpp:127
bool is_null() const
checking whether the multiVector exists
Definition MultiVector_def.hpp:97
MapPtr_Type getMapNonConst()
Return non constant version of underlying map.
Definition MultiVector_def.hpp:84
MapConstPtr_Type getMap() const
Return underlying map.
Definition MultiVector_def.hpp:79
TpetraMapConstPtr_Type getMapTpetra() const
Return direct tpetra map of underlying map.
Definition MultiVector_def.hpp:89
void replaceGlobalValue(GO globalRow, UN vectorIndex, const SC &value)
Replace global value in mv.
Definition MultiVector_def.hpp:102
void sumIntoGlobalValue(GO globalRow, UN vectorIndex, const SC &value)
Update (+=) a value in host memory, using global row index.
Definition MultiVector_def.hpp:112
~MultiVector()
Destructor.
Definition MultiVector_def.hpp:74
UN getNumVectors() const
Get number of multivector (columns)
Definition MultiVector_def.hpp:133
void print(Teuchos::EVerbosityLevel verbLevel=Teuchos::VERB_EXTREME) const
Printing mv. Depending on verbosity level, output increases.
Definition MultiVector_def.hpp:148
Adaptive Mesh Refinement.
Definition AdaptiveMeshRefinement.cpp:5