00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef XPETRA_CRSMATRIX_HPP
00047 #define XPETRA_CRSMATRIX_HPP
00048
00049
00050
00051 #include <Kokkos_DefaultNode.hpp>
00052 #include "Xpetra_ConfigDefs.hpp"
00053 #include "Xpetra_RowMatrix.hpp"
00054 #include "Xpetra_DistObject.hpp"
00055 #include "Xpetra_CrsGraph.hpp"
00056 #include "Xpetra_Vector.hpp"
00057
00058 namespace Xpetra {
00059
00060 template <class Scalar = double,
00061 class LocalOrdinal = CrsGraph<>::local_ordinal_type,
00062 class GlobalOrdinal =
00063 typename CrsGraph<LocalOrdinal>::global_ordinal_type,
00064 class Node =
00065 typename CrsGraph<LocalOrdinal, GlobalOrdinal>::node_type>
00066 class CrsMatrix
00067 : public RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>,
00068 public DistObject<char, LocalOrdinal,GlobalOrdinal,Node>
00069 {
00070 public:
00071 typedef Scalar scalar_type;
00072 typedef LocalOrdinal local_ordinal_type;
00073 typedef GlobalOrdinal global_ordinal_type;
00074 typedef Node node_type;
00075
00077
00078
00080 virtual ~CrsMatrix() { }
00081
00083
00084
00085
00087 virtual void
00088 insertGlobalValues (GlobalOrdinal globalRow,
00089 const ArrayView<const GlobalOrdinal>& cols,
00090 const ArrayView<const Scalar>& vals) = 0;
00091
00093 virtual void insertLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)= 0;
00094
00096 virtual void replaceGlobalValues(GlobalOrdinal globalRow, const ArrayView< const GlobalOrdinal > &cols, const ArrayView< const Scalar > &vals)= 0;
00097
00099 virtual void replaceLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)= 0;
00100
00102 virtual void setAllToScalar(const Scalar &alpha)= 0;
00103
00105 virtual void scale(const Scalar &alpha)= 0;
00106
00108
00109 virtual void allocateAllValues(size_t numNonZeros,ArrayRCP<size_t> & rowptr, ArrayRCP<LocalOrdinal> & colind, ArrayRCP<Scalar> & values)=0;
00110
00112 virtual void setAllValues(const ArrayRCP<size_t> & rowptr, const ArrayRCP<LocalOrdinal> & colind, const ArrayRCP<Scalar> & values)=0;
00113
00115 virtual void getAllValues(ArrayRCP<const size_t>& rowptr, ArrayRCP<const LocalOrdinal>& colind, ArrayRCP<const Scalar>& values) const = 0;
00116
00118
00120
00121
00123 virtual void resumeFill(const RCP< ParameterList > ¶ms=null)= 0;
00124
00126 virtual void fillComplete(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap, const RCP< ParameterList > ¶ms=null)= 0;
00127
00129 virtual void fillComplete(const RCP< ParameterList > ¶ms=null)= 0;
00130
00132 virtual void replaceDomainMapAndImporter(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > >& newDomainMap, Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > & newImporter)=0;
00133
00135 virtual void expertStaticFillComplete(const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
00136 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
00137 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > &importer=Teuchos::null,
00138 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > &exporter=Teuchos::null,
00139 const RCP<ParameterList> ¶ms=Teuchos::null) = 0;
00141
00143
00144
00146 virtual const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRowMap() const = 0;
00147
00149 virtual const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getColMap() const = 0;
00150
00152 virtual RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > getCrsGraph() const = 0;
00153
00155 virtual global_size_t getGlobalNumRows() const = 0;
00156
00158 virtual global_size_t getGlobalNumCols() const = 0;
00159
00161 virtual size_t getNodeNumRows() const = 0;
00162
00164 virtual global_size_t getGlobalNumEntries() const = 0;
00165
00167 virtual size_t getNodeNumEntries() const = 0;
00168
00170 virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const = 0;
00171
00173 virtual global_size_t getGlobalNumDiags() const = 0;
00174
00176 virtual size_t getNodeNumDiags() const = 0;
00177
00179 virtual size_t getGlobalMaxNumRowEntries() const = 0;
00180
00182 virtual size_t getNodeMaxNumRowEntries() const = 0;
00183
00185 virtual bool isLocallyIndexed() const = 0;
00186
00188 virtual bool isGloballyIndexed() const = 0;
00189
00191 virtual bool isFillComplete() const = 0;
00192
00194 virtual bool isFillActive() const = 0;
00195
00197 virtual typename ScalarTraits< Scalar >::magnitudeType getFrobeniusNorm() const = 0;
00198
00200 virtual bool supportsRowViews() const = 0;
00201
00203 virtual void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView< const GlobalOrdinal > &indices, ArrayView< const Scalar > &values) const = 0;
00204
00206 virtual void getGlobalRowCopy(GlobalOrdinal GlobalRow, const ArrayView<GlobalOrdinal> &indices, const ArrayView<Scalar> &values, size_t &numEntries) const = 0;
00207
00209 virtual void getLocalRowView(LocalOrdinal LocalRow, ArrayView< const LocalOrdinal > &indices, ArrayView< const Scalar > &values) const = 0;
00210
00212 virtual void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const = 0;
00213
00215 virtual void getLocalDiagOffsets(Teuchos::ArrayRCP<size_t> &offsets) const = 0;
00216
00218 virtual void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag, const Teuchos::ArrayView<const size_t> &offsets) const = 0;
00219
00220 virtual void removeEmptyProcessesInPlace(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& newMap) = 0;
00221
00223
00225
00226
00228 virtual void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=ScalarTraits< Scalar >::one(), Scalar beta=ScalarTraits< Scalar >::zero()) const = 0;
00229
00231 virtual const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const = 0;
00232
00234 virtual const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const = 0;
00235
00237
00239
00240
00242 virtual std::string description() const = 0;
00243
00245 virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const = 0;
00246
00248
00249
00251 virtual size_t getNodeNumCols() const = 0;
00252
00254 virtual void getLocalRowCopy(LocalOrdinal LocalRow, const ArrayView< LocalOrdinal > &Indices, const ArrayView< Scalar > &Values, size_t &NumEntries) const = 0;
00255
00257 virtual bool hasMatrix() const = 0;
00258
00259
00260 };
00261
00262 }
00263
00264 #define XPETRA_CRSMATRIX_SHORT
00265 #endif // XPETRA_CRSMATRIX_HPP