42#ifndef TPETRA_MMHELPERS_DEF_HPP
43#define TPETRA_MMHELPERS_DEF_HPP
46#include "Teuchos_VerboseObject.hpp"
54template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
55CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::CrsMatrixStruct()
59template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
60CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::~CrsMatrixStruct()
65template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
66void CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
70 origMatrix = Teuchos::null;
73template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
74BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::BlockCrsMatrixStruct(
const LocalOrdinal blocksize_)
75 : blocksize(blocksize_)
79template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
80BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::~BlockCrsMatrixStruct()
85template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
86void BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
90 origMatrix = Teuchos::null;
93template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
94int dumpCrsMatrixStruct (
const CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M)
96 std::cout <<
"proc " << M.rowMap->Comm().MyPID()<<std::endl;
97 std::cout <<
"numRows: " << M.numRows<<std::endl;
98 for(LocalOrdinal i=0; i<M.numRows; ++i) {
99 for(LocalOrdinal j=0; j<M.numEntriesPerRow[i]; ++j) {
100 std::cout <<
" "<<M.rowMap->GID(i)<<
" "
101 <<M.colMap->GID(M.indices[i][j])<<
" "<<M.values[i][j]<<std::endl;
108template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
109CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
110CrsWrapper_CrsMatrix (CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& crsmatrix)
111 : crsmat_ (crsmatrix)
115template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
116CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::~CrsWrapper_CrsMatrix()
120template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
121Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
122CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::getRowMap()
const
124 return crsmat_.getRowMap();
127template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
128bool CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
131 return crsmat_.isFillComplete ();
134template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
136CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
137insertGlobalValues (GlobalOrdinal globalRow,
138 const Teuchos::ArrayView<const GlobalOrdinal> &indices,
139 const Teuchos::ArrayView<const Scalar> &values)
141 crsmat_.insertGlobalValues (globalRow, indices, values);
144template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
146CrsWrapper_CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
147sumIntoGlobalValues (GlobalOrdinal globalRow,
148 const Teuchos::ArrayView<const GlobalOrdinal> &indices,
149 const Teuchos::ArrayView<const Scalar> &values)
151 crsmat_.sumIntoGlobalValues (globalRow, indices, values);
156template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
157CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
158CrsWrapper_GraphBuilder (
const Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node> >& map)
163 Teuchos::ArrayView<const GlobalOrdinal> rows = map->getLocalElementList ();
164 const LocalOrdinal numRows =
static_cast<LocalOrdinal
> (rows.size ());
165 for (LocalOrdinal i = 0; i < numRows; ++i) {
166 graph_[rows[i]] =
new std::set<GlobalOrdinal>;
170template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
171CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
172~CrsWrapper_GraphBuilder ()
174 typename std::map<GlobalOrdinal,std::set<GlobalOrdinal>*>::iterator
175 iter = graph_.begin(), iter_end = graph_.end();
176 for (; iter != iter_end; ++iter) {
182template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
183bool CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isFillComplete()
188template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
190CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
191insertGlobalValues (GlobalOrdinal globalRow,
192 const Teuchos::ArrayView<const GlobalOrdinal> &indices,
193 const Teuchos::ArrayView<const Scalar> &)
195 typename std::map<GlobalOrdinal,std::set<GlobalOrdinal>*>::iterator
196 iter = graph_.find (globalRow);
198 TEUCHOS_TEST_FOR_EXCEPTION(
199 iter == graph_.end(), std::runtime_error,
200 "Tpetra::CrsWrapper_GraphBuilder::insertGlobalValues could not find row "
201 << globalRow <<
" in the graph. Super bummer man. Hope you figure it out.");
203 std::set<GlobalOrdinal>& cols = * (iter->second);
205 for (
typename Teuchos::ArrayView<const GlobalOrdinal>::size_type i = 0;
206 i < indices.size (); ++i) {
207 cols.insert (indices[i]);
211 if (row_length > max_row_length_) {
212 max_row_length_ = row_length;
216template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
218CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
219sumIntoGlobalValues (GlobalOrdinal globalRow,
220 const Teuchos::ArrayView<const GlobalOrdinal> &indices,
221 const Teuchos::ArrayView<const Scalar> &values)
223 insertGlobalValues (globalRow, indices, values);
226template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
227std::map<GlobalOrdinal,std::set<GlobalOrdinal>*>&
228CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>::get_graph ()
233template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
235insert_matrix_locations (CrsWrapper_GraphBuilder<Scalar, LocalOrdinal, GlobalOrdinal, Node>& graphbuilder,
236 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C)
238 global_size_t max_row_length = graphbuilder.get_max_row_length();
239 if (max_row_length < 1)
return;
241 Teuchos::Array<GlobalOrdinal> indices(max_row_length);
242 Teuchos::Array<Scalar> zeros(max_row_length, Teuchos::ScalarTraits<Scalar>::zero());
244 typedef std::map<GlobalOrdinal,std::set<GlobalOrdinal>*> Graph;
245 typedef typename Graph::iterator GraphIter;
246 Graph& graph = graphbuilder.get_graph ();
248 const GraphIter iter_end = graph.end ();
249 for (GraphIter iter = graph.begin (); iter != iter_end; ++iter) {
250 const GlobalOrdinal row = iter->first;
251 const std::set<GlobalOrdinal>& cols = * (iter->second);
253 const size_t num_entries = std::copy (cols.begin (), cols.end (), indices.begin ()) - indices.begin ();
255 C.insertGlobalValues (row, indices (0, num_entries), zeros (0, num_entries));
267#define TPETRA_CRSMATRIXSTRUCT_INSTANT(SCALAR,LO,GO,NODE) \
269 template class CrsMatrixStruct< SCALAR , LO , GO , NODE >;
271#define TPETRA_BLOCKCRSMATRIXSTRUCT_INSTANT(SCALAR,LO,GO,NODE) \
273 template class BlockCrsMatrixStruct< SCALAR , LO , GO , NODE >;
275#define TPETRA_CRSWRAPPER_INSTANT(SCALAR,LO,GO,NODE) \
277 template class CrsWrapper< SCALAR , LO , GO , NODE >;
279#define TPETRA_CRSWRAPPER_CRSMATRIX_INSTANT(SCALAR,LO,GO,NODE) \
281 template class CrsWrapper_CrsMatrix< SCALAR , LO , GO , NODE >;
283#define TPETRA_CRSWRAPPER_GRAPHBUILDER_INSTANT(SCALAR,LO,GO,NODE) \
285 template class CrsWrapper_GraphBuilder< SCALAR , LO , GO , NODE >;
Declaration of Tpetra::MMMultiMultiply and nonmember constructors.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
size_t global_size_t
Global size_t object.