Xpetra Version of the Day
Xpetra_Matrix.hpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// Xpetra: A linear algebra interface package
6// Copyright 2012 Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact
39// Jonathan Hu (jhu@sandia.gov)
40// Andrey Prokopenko (aprokop@sandia.gov)
41// Ray Tuminaro (rstumin@sandia.gov)
42//
43// ***********************************************************************
44//
45// @HEADER
46
47// WARNING: This code is experimental. Backwards compatibility should not be expected.
48
49#ifndef XPETRA_MATRIX_HPP
50#define XPETRA_MATRIX_HPP
51
53
54#include "Xpetra_ConfigDefs.hpp"
55#include "Xpetra_Exceptions.hpp"
56
57#include "Xpetra_MultiVector.hpp"
58#include "Xpetra_CrsGraph.hpp"
59#include "Xpetra_CrsMatrix.hpp"
61#include "Xpetra_MatrixView.hpp"
62#include "Xpetra_Operator.hpp"
63#include "Xpetra_StridedMap.hpp"
64#include "Xpetra_StridedMapFactory.hpp"
65
67#include <Teuchos_Hashtable.hpp>
68
73namespace Xpetra {
74
91 typedef std::string viewLabel_t;
92
93 template <class Scalar,
94 class LocalOrdinal,
95 class GlobalOrdinal,
97 class Matrix : public Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > {
103
104 public:
105 typedef Scalar scalar_type;
106 typedef LocalOrdinal local_ordinal_type;
107 typedef GlobalOrdinal global_ordinal_type;
108 typedef Node node_type;
109
110#ifdef HAVE_XPETRA_KOKKOS_REFACTOR
111#ifdef HAVE_XPETRA_TPETRA
112 typedef typename CrsMatrix::local_matrix_type local_matrix_type;
113#endif
114#endif
115
117
118
119 Matrix() { }
120
122 virtual ~Matrix() { }
123
125
127
128 void CreateView(viewLabel_t viewLabel, const RCP<const Map> & rowMap, const RCP<const Map> & colMap) {
129 TEUCHOS_TEST_FOR_EXCEPTION(operatorViewTable_.containsKey(viewLabel) == true, Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.CreateView(): a view labeled '" + viewLabel + "' already exist.");
130 RCP<MatrixView> view = rcp(new MatrixView(rowMap, colMap));
131 operatorViewTable_.put(viewLabel, view);
132 }
133
134 // JG TODO: why this is a member function??
135 void CreateView(const viewLabel_t viewLabel, const RCP<const Matrix>& A, bool transposeA = false, const RCP<const Matrix>& B = Teuchos::null, bool transposeB = false) {
136 RCP<const Map> domainMap = Teuchos::null;
137 RCP<const Map> rangeMap = Teuchos::null;
138
139 const size_t blkSize = 1;
140 std::vector<size_t> stridingInfo(1, blkSize);
141 LocalOrdinal stridedBlockId = -1;
142
143
144 if (A->IsView(viewLabel)) {
145 rangeMap = transposeA ? A->getColMap(viewLabel) : A->getRowMap(viewLabel);
146 domainMap = transposeA ? A->getRowMap(viewLabel) : A->getColMap(viewLabel); // will be overwritten if B != Teuchos::null
147
148 } else {
149 rangeMap = transposeA ? A->getDomainMap() : A->getRangeMap();
150 domainMap = transposeA ? A->getRangeMap() : A->getDomainMap();
151
152 if (viewLabel == "stridedMaps") {
153 rangeMap = Xpetra::StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::Build(rangeMap, stridingInfo, stridedBlockId);
154 domainMap = Xpetra::StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::Build(domainMap, stridingInfo, stridedBlockId);
155 }
156 }
157
158 if (B != Teuchos::null ) {
159 // B has strided Maps
160
161 if (B->IsView(viewLabel)) {
162 domainMap = transposeB ? B->getRowMap(viewLabel) : B->getColMap(viewLabel);
163
164 } else {
165 domainMap = transposeB ? B->getRangeMap() : B->getDomainMap();
166
167 if (viewLabel == "stridedMaps")
168 domainMap = Xpetra::StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::Build(domainMap, stridingInfo, stridedBlockId);
169 }
170 }
171
172
173 if (IsView(viewLabel))
174 RemoveView(viewLabel);
175
176 CreateView(viewLabel, rangeMap, domainMap);
177 }
178
181 int last = out.getOutputToRootOnly();
182 Teuchos::OSTab tab(out);
183 out.setOutputToRootOnly(0);
186 operatorViewTable_.arrayify(viewLabels,viewList);
187 out << "views associated with this operator" << std::endl;
188 for (int i=0; i<viewLabels.size(); ++i)
189 out << viewLabels[i] << std::endl;
190 out.setOutputToRootOnly(last);
191 }
192
193
194 void RemoveView(const viewLabel_t viewLabel) {
195 TEUCHOS_TEST_FOR_EXCEPTION(operatorViewTable_.containsKey(viewLabel) == false, Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.RemoveView(): view '" + viewLabel + "' does not exist.");
196 TEUCHOS_TEST_FOR_EXCEPTION(viewLabel == GetDefaultViewLabel(), Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.RemoveView(): view '" + viewLabel + "' is the default view and cannot be removed.");
197 operatorViewTable_.remove(viewLabel);
198 }
199
200 const viewLabel_t SwitchToView(const viewLabel_t viewLabel) {
201 TEUCHOS_TEST_FOR_EXCEPTION(operatorViewTable_.containsKey(viewLabel) == false, Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.SwitchToView(): view '" + viewLabel + "' does not exist.");
202 viewLabel_t oldViewLabel = GetCurrentViewLabel();
203 currentViewLabel_ = viewLabel;
204 return oldViewLabel;
205 }
206
207 bool IsView(const viewLabel_t viewLabel) const {
208 return operatorViewTable_.containsKey(viewLabel);
209 }
210
212
214
216
218
220
221
223
234 virtual void insertGlobalValues(GlobalOrdinal globalRow, const ArrayView<const GlobalOrdinal> &cols, const ArrayView<const Scalar> &vals) = 0;
235
237
244 virtual void insertLocalValues(LocalOrdinal localRow, const ArrayView<const LocalOrdinal> &cols, const ArrayView<const Scalar> &vals) = 0;
245
247
252 virtual void replaceGlobalValues(GlobalOrdinal globalRow,
254 const ArrayView<const Scalar> &vals) = 0;
255
257
260 virtual void replaceLocalValues(LocalOrdinal localRow,
262 const ArrayView<const Scalar> &vals) = 0;
263
265 virtual void setAllToScalar(const Scalar &alpha)= 0;
266
268 virtual void scale(const Scalar &alpha)= 0;
269
271
273
274
283 virtual void resumeFill(const RCP< ParameterList > &params=null) = 0;
284
296 virtual void fillComplete(const RCP<const Map> &domainMap, const RCP<const Map> &rangeMap, const RCP<ParameterList> &params = null) =0;
297
311 //TODO : Get ride of "Tpetra"::OptimizeOption
312 virtual void fillComplete(const RCP<ParameterList> &params=null) =0;
313
315
317
318
320 virtual const RCP<const Map> & getRowMap() const { return getRowMap(GetCurrentViewLabel()); }
321
323 virtual const RCP<const Map> & getRowMap(viewLabel_t viewLabel) const {
324 TEUCHOS_TEST_FOR_EXCEPTION(operatorViewTable_.containsKey(viewLabel) == false, Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.GetRowMap(): view '" + viewLabel + "' does not exist.");
325 return operatorViewTable_.get(viewLabel)->GetRowMap();
326 }
327
330 virtual const RCP<const Map> & getColMap() const { return getColMap(GetCurrentViewLabel()); }
331
333 virtual const RCP<const Map> & getColMap(viewLabel_t viewLabel) const {
334 TEUCHOS_TEST_FOR_EXCEPTION(operatorViewTable_.containsKey(viewLabel) == false, Xpetra::Exceptions::RuntimeError, "Xpetra::Matrix.GetColMap(): view '" + viewLabel + "' does not exist.");
335 return operatorViewTable_.get(viewLabel)->GetColMap();
336 }
337
339
341 virtual global_size_t getGlobalNumRows() const =0;
342
344
346 virtual global_size_t getGlobalNumCols() const =0;
347
349 virtual size_t getNodeNumRows() const =0;
350
353
355 virtual size_t getNodeNumEntries() const =0;
356
358
359 virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0;
360
362
363 virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0;
364
366
368 virtual size_t getGlobalMaxNumRowEntries() const =0;
369
371
373 virtual size_t getNodeMaxNumRowEntries() const =0;
374
376 virtual bool isLocallyIndexed() const =0;
377
379 virtual bool isGloballyIndexed() const =0;
380
382 virtual bool isFillComplete() const =0;
383
385
397 virtual void getLocalRowCopy(LocalOrdinal LocalRow,
398 const ArrayView<LocalOrdinal> &Indices,
399 const ArrayView<Scalar> &Values,
400 size_t &NumEntries
401 ) const =0;
402
404
413 virtual void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView<const GlobalOrdinal> &indices, ArrayView<const Scalar> &values) const =0;
414
416
425 virtual void getLocalRowView(LocalOrdinal LocalRow, ArrayView<const LocalOrdinal> &indices, ArrayView<const Scalar> &values) const =0;
426
428
431
434
437
440
441
443 virtual bool haveGlobalConstants() const = 0;
444
445
447
449 //{@
450
453
454 // TODO: first argument of doImport/doExport should be a Xpetra::DistObject
455
457 virtual void doImport(const Matrix &source,
459
461 virtual void doExport(const Matrix &dest,
463
465 virtual void doImport(const Matrix &source,
467
469 virtual void doExport(const Matrix &dest,
471
472 // @}
473
475
476
478
479
481 virtual std::string description() const =0;
482
486
488
489 virtual void setObjectLabel( const std::string &objectLabel ) =0;
491
492 // JG: Added:
493
495 virtual bool hasCrsGraph() const =0;
496
499
500 // To keep the normal virtual matrix-multivector definition of apply before overloading with the region variant
501 using Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node >::apply;
502
506 Teuchos::ETransp mode,
507 Scalar alpha,
508 Scalar beta,
509 bool sumInterfaceValues,
510 const RCP<Import<LocalOrdinal, GlobalOrdinal, Node> >& regionInterfaceImporter,
511 const Teuchos::ArrayRCP<LocalOrdinal>& regionInterfaceLIDs ) const =0;
512
513 // ----------------------------------------------------------------------------------
514 // "TEMPORARY" VIEW MECHANISM
521 void SetFixedBlockSize(LocalOrdinal blksize, GlobalOrdinal offset=0) {
522
523 TEUCHOS_TEST_FOR_EXCEPTION(isFillComplete() == false, Exceptions::RuntimeError, "Xpetra::Matrix::SetFixedBlockSize(): operator is not filled and completed."); // TODO: do we need this? we just wanna "copy" the domain and range map
524
525 std::vector<size_t> stridingInfo;
526 stridingInfo.push_back(Teuchos::as<size_t>(blksize));
527 LocalOrdinal stridedBlockId = -1;
528
530 this->getRangeMap(),
531 stridingInfo,
532 stridedBlockId,
533 offset
534 );
536 this->getDomainMap(),
537 stridingInfo,
538 stridedBlockId,
539 offset
540 );
541
542 if(IsFixedBlockSizeSet()) RemoveView("stridedMaps");
543 CreateView("stridedMaps", stridedRangeMap, stridedDomainMap);
544 }
545
546 //==========================================================================
547
548 LocalOrdinal GetFixedBlockSize() const {
549 if(IsFixedBlockSizeSet()) {
550 Teuchos::RCP<const StridedMap<LocalOrdinal, GlobalOrdinal, Node> > rangeMap = Teuchos::rcp_dynamic_cast<const StridedMap<LocalOrdinal, GlobalOrdinal, Node> >(getRowMap("stridedMaps"));
551 Teuchos::RCP<const StridedMap<LocalOrdinal, GlobalOrdinal, Node> > domainMap = Teuchos::rcp_dynamic_cast<const StridedMap<LocalOrdinal, GlobalOrdinal, Node> >(getColMap("stridedMaps"));
552 TEUCHOS_TEST_FOR_EXCEPTION(rangeMap == Teuchos::null, Exceptions::BadCast, "Xpetra::Matrix::GetFixedBlockSize(): rangeMap is not of type StridedMap");
553 TEUCHOS_TEST_FOR_EXCEPTION(domainMap == Teuchos::null, Exceptions::BadCast, "Xpetra::Matrix::GetFixedBlockSize(): domainMap is not of type StridedMap");
554 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->getFixedBlockSize() != rangeMap->getFixedBlockSize(), Exceptions::RuntimeError, "Xpetra::Matrix::GetFixedBlockSize(): block size of rangeMap and domainMap are different.");
555 return Teuchos::as<LocalOrdinal>(domainMap->getFixedBlockSize()); // TODO: why LocalOrdinal?
556 } else
557 //TEUCHOS_TEST_FOR_EXCEPTION(false, Exceptions::RuntimeError, "Xpetra::Matrix::GetFixedBlockSize(): no strided maps available."); // TODO remove this
558 return 1;
559 }; //TODO: why LocalOrdinal?
560
562 bool IsFixedBlockSizeSet() const {
563 return IsView("stridedMaps");
564 };
565
566 // ----------------------------------------------------------------------------------
567
568 virtual void SetMaxEigenvalueEstimate(Scalar const &sigma) {
569 operatorViewTable_.get(GetCurrentViewLabel())->SetMaxEigenvalueEstimate(sigma);
570 }
571
572 // ----------------------------------------------------------------------------------
573
574 virtual Scalar GetMaxEigenvalueEstimate() const {
575 return operatorViewTable_.get(GetCurrentViewLabel())->GetMaxEigenvalueEstimate();
576 }
577
578 // ----------------------------------------------------------------------------------
579#ifdef HAVE_XPETRA_KOKKOS_REFACTOR
580#ifdef HAVE_XPETRA_TPETRA
581#ifdef TPETRA_ENABLE_DEPRECATED_CODE
582
584 virtual local_matrix_type getLocalMatrix () const = 0;
585#endif
586 virtual local_matrix_type getLocalMatrixDevice () const = 0;
587 virtual typename local_matrix_type::HostMirror getLocalMatrixHost () const = 0;
588#else
589#ifdef __GNUC__
590#warning "Xpetra Kokkos interface for CrsMatrix is enabled (HAVE_XPETRA_KOKKOS_REFACTOR) but Tpetra is disabled. The Kokkos interface needs Tpetra to be enabled, too."
591#endif
592#endif
593#endif
594 // ----------------------------------------------------------------------------------
595
600
601 protected:
602 Teuchos::Hashtable<viewLabel_t, RCP<MatrixView> > operatorViewTable_; // hashtable storing the operator views (keys = view names, values = views).
603
604 viewLabel_t defaultViewLabel_; // label of the view associated with inital Matrix construction
605 viewLabel_t currentViewLabel_; // label of the current view
606
607 }; //class Matrix
608
609} //namespace Xpetra
610
611#define XPETRA_MATRIX_SHORT
612#endif //XPETRA_MATRIX_DECL_HPP
size_type size() const
static const EVerbosityLevel verbLevel_default
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
Exception indicating invalid cast attempted.
Exception throws to report errors in the internal logical of the program.
Xpetra-specific matrix class.
virtual global_size_t getGlobalNumEntries() const =0
Returns the global number of entries in this matrix.
virtual bool haveGlobalConstants() const =0
Returns true if globalConstants have been computed; false otherwise.
Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrix
virtual size_t getNodeNumEntries() const =0
Returns the local number of entries in this matrix.
void CreateView(viewLabel_t viewLabel, const RCP< const Map > &rowMap, const RCP< const Map > &colMap)
virtual size_t getGlobalMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on all nodes.
virtual global_size_t getGlobalNumRows() const =0
Returns the number of global rows in this matrix.
virtual bool hasCrsGraph() const =0
Supports the getCrsGraph() call.
viewLabel_t currentViewLabel_
Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > CrsGraph
Xpetra::CrsMatrixFactory< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrixFactory
virtual const RCP< const Map > & getColMap(viewLabel_t viewLabel) const
Returns the Map that describes the column distribution in this matrix.
void CreateView(const viewLabel_t viewLabel, const RCP< const Matrix > &A, bool transposeA=false, const RCP< const Matrix > &B=Teuchos::null, bool transposeB=false)
LocalOrdinal local_ordinal_type
const viewLabel_t & GetCurrentViewLabel() const
void SetFixedBlockSize(LocalOrdinal blksize, GlobalOrdinal offset=0)
virtual void replaceLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Replace matrix entries, using local IDs.
virtual size_t getNodeNumRows() const =0
Returns the number of matrix rows owned on the calling node.
virtual void resumeFill(const RCP< ParameterList > &params=null)=0
virtual void getLocalRowCopy(LocalOrdinal LocalRow, const ArrayView< LocalOrdinal > &Indices, const ArrayView< Scalar > &Values, size_t &NumEntries) const =0
Extract a list of entries in a specified local row of the matrix. Put into storage allocated by calli...
virtual bool isLocallyIndexed() const =0
If matrix indices are in the local range, this function returns true. Otherwise, this function return...
virtual bool isGloballyIndexed() const =0
If matrix indices are in the global range, this function returns true. Otherwise, this function retur...
virtual Scalar GetMaxEigenvalueEstimate() const
virtual void doImport(const Matrix &source, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)=0
Import (using an Exporter).
virtual void SetMaxEigenvalueEstimate(Scalar const &sigma)
Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > Map
virtual bool isFillComplete() const =0
Returns true if fillComplete() has been called and the matrix is in compute mode.
virtual const RCP< const Map > & getColMap() const
Returns the Map that describes the column distribution in this matrix. This might be null until fillC...
virtual void residual(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &R) const =0
Compute a residual R = B - (*this) * X.
virtual void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const =0
Get a copy of the diagonal entries owned by this node, with local row indices.
virtual void setAllToScalar(const Scalar &alpha)=0
Set all matrix entries equal to scalar.
virtual void insertLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Insert matrix entries, using local IDs.
virtual size_t getNodeMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on this node.
virtual std::string description() const =0
Return a simple one-line description of this object.
virtual void fillComplete(const RCP< const Map > &domainMap, const RCP< const Map > &rangeMap, const RCP< ParameterList > &params=null)=0
Signal that data entry is complete, specifying domain and range maps.
virtual void doExport(const Matrix &dest, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)=0
Export (using an Importer).
viewLabel_t defaultViewLabel_
virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0
Returns the current number of entries on this node in the specified local row.
bool IsView(const viewLabel_t viewLabel) const
virtual void getLocalRowView(LocalOrdinal LocalRow, ArrayView< const LocalOrdinal > &indices, ArrayView< const Scalar > &values) const =0
Extract a const, non-persisting view of local indices in a specified row of the matrix.
GlobalOrdinal global_ordinal_type
virtual void fillComplete(const RCP< ParameterList > &params=null)=0
Signal that data entry is complete.
bool IsFixedBlockSizeSet() const
Returns true, if SetFixedBlockSize has been called before.
virtual void setObjectLabel(const std::string &objectLabel)=0
void RemoveView(const viewLabel_t viewLabel)
virtual ~Matrix()
Destructor.
virtual void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView< const GlobalOrdinal > &indices, ArrayView< const Scalar > &values) const =0
Extract a const, non-persisting view of global indices in a specified row of the matrix.
virtual void doImport(const Matrix &source, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)=0
Import.
virtual void leftScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Left scale matrix using the given vector entries.
virtual void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode, Scalar alpha, Scalar beta, bool sumInterfaceValues, const RCP< Import< LocalOrdinal, GlobalOrdinal, Node > > &regionInterfaceImporter, const Teuchos::ArrayRCP< LocalOrdinal > &regionInterfaceLIDs) const =0
Computes the matrix-multivector multiplication for region layout matrices.
virtual void doExport(const Matrix &dest, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)=0
Export.
Xpetra::MatrixView< Scalar, LocalOrdinal, GlobalOrdinal, Node > MatrixView
virtual const RCP< const Map > & getRowMap() const
Returns the Map that describes the row distribution in this matrix.
virtual void replaceGlobalValues(GlobalOrdinal globalRow, const ArrayView< const GlobalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Replace matrix entries, using global IDs.
void PrintViews(Teuchos::FancyOStream &out) const
Print all of the views associated with the Matrix.
const viewLabel_t & GetDefaultViewLabel() const
const viewLabel_t SwitchToView(const viewLabel_t viewLabel)
Teuchos::Hashtable< viewLabel_t, RCP< MatrixView > > operatorViewTable_
virtual RCP< const CrsGraph > getCrsGraph() const =0
Returns the CrsGraph associated with this matrix.
virtual ScalarTraits< Scalar >::magnitudeType getFrobeniusNorm() const =0
Get Frobenius norm of the matrix.
LocalOrdinal GetFixedBlockSize() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const =0
Print the object with some verbosity level to an FancyOStream object.
virtual void rightScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Right scale matrix using the given vector entries.
virtual const RCP< const Map > & getRowMap(viewLabel_t viewLabel) const
Returns the Map that describes the row distribution in this matrix.
const viewLabel_t SwitchToDefaultView()
virtual global_size_t getGlobalNumCols() const =0
Returns the number of global columns in the matrix.
virtual void scale(const Scalar &alpha)=0
Scale the current values of a matrix, this = alpha*this.
virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0
Returns the current number of entries in the specified global row.
virtual const Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const =0
Implements DistObject interface.
virtual void insertGlobalValues(GlobalOrdinal globalRow, const ArrayView< const GlobalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Insert matrix entries, using global IDs.
virtual Teuchos::RCP< const Map > getRangeMap() const=0
The Map associated with the range of this operator, which must be compatible with Y....
virtual Teuchos::RCP< const Map > getDomainMap() const=0
The Map associated with the domain of this operator, which must be compatible with X....
static RCP< Xpetra::StridedMap< LocalOrdinal, GlobalOrdinal, Node > > Build(UnderlyingLib lib, global_size_t numGlobalElements, GlobalOrdinal indexBase, std::vector< size_t > &stridingInfo, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, LocalOrdinal stridedBlockId=-1, GlobalOrdinal offset=0, LocalGlobal lg=Xpetra::GloballyDistributed)
Map constructor with Xpetra-defined contiguous uniform distribution.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra namespace
std::string viewLabel_t
size_t global_size_t
Global size_t object.
CombineMode
Xpetra::Combine Mode enumerable type.