Xpetra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Xpetra_CrsMatrixFactory.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 #ifndef XPETRA_CRSMATRIXFACTORY_HPP
47 #define XPETRA_CRSMATRIXFACTORY_HPP
48 
49 #include "Xpetra_ConfigDefs.hpp"
50 
51 #include "Xpetra_CrsMatrix.hpp"
52 
53 #ifdef HAVE_XPETRA_TPETRA
54 #include "Xpetra_TpetraCrsMatrix.hpp"
55 #include "Xpetra_TpetraBlockCrsMatrix.hpp"
56 #endif
57 
58 #ifdef HAVE_XPETRA_EPETRA
60 #endif
61 
62 #include "Xpetra_Exceptions.hpp"
63 
64 namespace Xpetra {
65 
66 template <class Scalar,
67  class LocalOrdinal,
68  class GlobalOrdinal,
69  class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
71  private:
74 
75  public:
77  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
78  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
79  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error,
80  "Can't create Xpetra::EpetraCrsMatrix with these scalar/LO/GO types");
81 #ifdef HAVE_XPETRA_TPETRA
82  if (rowMap->lib() == UseTpetra)
84 #endif
85 
87  }
88 
90  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
92  size_t maxNumEntriesPerRow,
93  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
94  XPETRA_MONITOR("CrsMatrixFactory::Build");
95 
96 #ifdef HAVE_XPETRA_TPETRA
97  if (rowMap->lib() == UseTpetra)
98  return Teuchos::rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist));
99 #endif
100 
101  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
103  }
104 
106  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
107  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
108  const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
109  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
110 #ifdef HAVE_XPETRA_TPETRA
111  if (rowMap->lib() == UseTpetra)
112  return Teuchos::rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist));
113 #endif
114 
115  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
117  }
118 
120  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
121  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
122  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
123  size_t maxNumEntriesPerRow,
124  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
125  XPETRA_MONITOR("CrsMatrixFactory::Build");
126 
127 #ifdef HAVE_XPETRA_TPETRA
128  if (rowMap->lib() == UseTpetra)
129  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
130 #endif
131 
132  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
134  }
135 
137  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap, const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
138  XPETRA_MONITOR("CrsMatrixFactory::Build");
139 
140 #ifdef HAVE_XPETRA_TPETRA
141  if (rowMap->lib() == UseTpetra)
142  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
143 #endif
144 
145  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
147  }
148 
150  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
151  XPETRA_MONITOR("CrsMatrixFactory::Build");
152 
153 #ifdef HAVE_XPETRA_TPETRA
154  if (graph->getRowMap()->lib() == UseTpetra)
156 #endif
157 
158  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
160  }
161 
163  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, typename Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::local_matrix_type::values_type& values, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
164  XPETRA_MONITOR("CrsMatrixFactory::Build");
165 
166 #ifdef HAVE_XPETRA_TPETRA
167  if (graph->getRowMap()->lib() == UseTpetra)
168  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist));
169 #endif
170 
171  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
173  }
174 
175  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
176  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
178  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
179  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
180  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
181  XPETRA_MONITOR("CrsMatrixFactory::Build");
182 
183 #ifdef HAVE_XPETRA_TPETRA
184  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
185  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, importer, domainMap, rangeMap, params));
186 #endif
187 
188  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
190  }
191 
192  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
193  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
195  const RCP<Map<LocalOrdinal, GlobalOrdinal, Scalar>>& domainMap = Teuchos::null,
196  const RCP<Map<LocalOrdinal, GlobalOrdinal, Scalar>>& rangeMap = Teuchos::null,
197  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
198  XPETRA_MONITOR("CrsMatrixFactory::Build");
199 
200 #ifdef HAVE_XPETRA_TPETRA
201  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
202  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, exporter, domainMap, rangeMap, params));
203 #endif
204 
205  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
207  }
208 
209  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
210  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
212  const RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>> DomainImporter,
213  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
214  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
215  const Teuchos::RCP<Teuchos::ParameterList>& params) {
216  XPETRA_MONITOR("CrsMatrixFactory::Build");
217 
218 #ifdef HAVE_XPETRA_TPETRA
219  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
220  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowImporter, DomainImporter, domainMap, rangeMap, params));
221 #endif
222 
223  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
225  }
226 
227  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
228  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
230  const RCP<const Export<LocalOrdinal, GlobalOrdinal, Node>> DomainExporter,
231  const RCP<Map<LocalOrdinal, GlobalOrdinal, Scalar>>& domainMap,
232  const RCP<Map<LocalOrdinal, GlobalOrdinal, Scalar>>& rangeMap,
233  const Teuchos::RCP<Teuchos::ParameterList>& params) {
234  XPETRA_MONITOR("CrsMatrixFactory::Build");
235 
236 #ifdef HAVE_XPETRA_TPETRA
237  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
238  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowExporter, DomainExporter, domainMap, rangeMap, params));
239 #endif
240 
241  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
243  }
244 
245  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
246  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
247  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
249  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
250  XPETRA_MONITOR("CrsMatrixFactory::Build");
251 
252 #ifdef HAVE_XPETRA_TPETRA
253  if (rowMap->lib() == UseTpetra)
254  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
255 #endif
256 
257  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
259  }
260 
261  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
263  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
264  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
265  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
266  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
267  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
268  XPETRA_MONITOR("CrsMatrixFactory::Build");
269 
270 #ifdef HAVE_XPETRA_TPETRA
271  if (rowMap->lib() == UseTpetra)
272  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
273 #endif
274 
275  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
277  }
278 
279  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
281  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
282  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
283  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
284  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
285  const Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>& importer,
286  const Teuchos::RCP<const Export<LocalOrdinal, GlobalOrdinal, Node>>& exporter,
287  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
288  XPETRA_MONITOR("CrsMatrixFactory::Build");
289 
290 #ifdef HAVE_XPETRA_TPETRA
291  if (rowMap->lib() == UseTpetra)
292  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
293 #endif
294 
295  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
296 
298  }
299 
300  // Builds a BlockCrsMatrix
301  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> BuildBlock(
302  const Teuchos::RCP<const Xpetra::CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& blockGraph,
303  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
304  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
305  LocalOrdinal blockSize) {
306  XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
307 
308 #ifdef HAVE_XPETRA_TPETRA
309  if (domainMap->lib() == UseTpetra) {
310  return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(blockGraph, domainMap, rangeMap, blockSize));
311  }
312 #endif
313  TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
314 
316  }
317 };
318 
319 // we need the Epetra specialization only if Epetra is enabled
320 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
321 
322 // Specializtion for SC=double, LO=int, GO=int and Node=EpetraNode
323 // Used both for Epetra and Tpetra
324 template <>
325 class CrsMatrixFactory<double, int, int, EpetraNode> {
326  typedef double Scalar;
327  typedef int LocalOrdinal;
328  typedef int GlobalOrdinal;
329  typedef EpetraNode Node;
330 
331  private:
334 
335  public:
337  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
338  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
339  XPETRA_MONITOR("CrsMatrixFactory::Build");
340 #ifdef HAVE_XPETRA_TPETRA
341  if (rowMap->lib() == UseTpetra)
343 #endif
344  if (rowMap->lib() == UseEpetra)
345  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap));
346 
348  }
349 
350  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, size_t maxNumEntriesPerRow, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
351  XPETRA_MONITOR("CrsMatrixFactory::Build");
352 
353 #ifdef HAVE_XPETRA_TPETRA
354  if (rowMap->lib() == UseTpetra)
355  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist));
356 #endif
357 
358  if (rowMap->lib() == UseEpetra)
359  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap, maxNumEntriesPerRow, plist));
360 
362  }
363 
364  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
365  XPETRA_MONITOR("CrsMatrixFactory::Build");
366 
367 #ifdef HAVE_XPETRA_TPETRA
368  if (rowMap->lib() == UseTpetra)
369  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist));
370 #endif
371 
372  if (rowMap->lib() == UseEpetra)
373  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap, NumEntriesPerRowToAlloc, plist));
374 
376  }
377 
379  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap, size_t maxNumEntriesPerRow, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
380  XPETRA_MONITOR("CrsMatrixFactory::Build");
381 
382 #ifdef HAVE_XPETRA_TPETRA
383  if (rowMap->lib() == UseTpetra)
384  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
385 #endif
386 
387  if (rowMap->lib() == UseEpetra)
388  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
389 
391  }
392 
394  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap, const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
395  XPETRA_MONITOR("CrsMatrixFactory::Build");
396 
397 #ifdef HAVE_XPETRA_TPETRA
398  if (rowMap->lib() == UseTpetra)
399  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
400 #endif
401 
402  if (rowMap->lib() == UseEpetra)
403  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
404 
406  }
407 
409  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
410  XPETRA_MONITOR("CrsMatrixFactory::Build");
411 
412 #ifdef HAVE_XPETRA_TPETRA
413  if (graph->getRowMap()->lib() == UseTpetra)
415 #endif
416 
417  if (graph->getRowMap()->lib() == UseEpetra)
418  return rcp(new EpetraCrsMatrixT<int, Node>(graph, plist));
419 
421  }
422 
424  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, typename Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::local_matrix_type::values_type& values, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
425  XPETRA_MONITOR("CrsMatrixFactory::Build");
426 
427 #ifdef HAVE_XPETRA_TPETRA
428  if (graph->getRowMap()->lib() == UseTpetra)
429  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist));
430 #endif
431 
432  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
434  }
435 
437  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
438  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
440  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
441  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
442  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
443  XPETRA_MONITOR("CrsMatrixFactory::Build");
444 
445 #ifdef HAVE_XPETRA_TPETRA
446  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
447  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, importer, domainMap, rangeMap, params));
448 #endif
449 
450  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
451  return rcp(new EpetraCrsMatrixT<int, Node>(sourceMatrix, importer, domainMap, rangeMap, params));
452 
454  }
455 
457  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
458  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
460  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
461  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
462  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
463  XPETRA_MONITOR("CrsMatrixFactory::Build");
464 
465 #ifdef HAVE_XPETRA_TPETRA
466  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
467  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, exporter, domainMap, rangeMap, params));
468 #endif
469 
470  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
471  return rcp(new EpetraCrsMatrixT<int, Node>(sourceMatrix, exporter, domainMap, rangeMap, params));
472 
474  }
475 
477  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
478  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
480  const RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>> DomainImporter,
481  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
482  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
483  const Teuchos::RCP<Teuchos::ParameterList>& params) {
484  XPETRA_MONITOR("CrsMatrixFactory::Build");
485 
486 #ifdef HAVE_XPETRA_TPETRA
487  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
488  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowImporter, DomainImporter, domainMap, rangeMap, params));
489 #endif
490 
491  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
492  return rcp(new EpetraCrsMatrixT<int, Node>(sourceMatrix, RowImporter, DomainImporter, domainMap, rangeMap, params));
493 
495  }
496 
498  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
499  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
501  const RCP<const Export<LocalOrdinal, GlobalOrdinal, Node>> DomainExporter,
502  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
503  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
504  const Teuchos::RCP<Teuchos::ParameterList>& params) {
505  XPETRA_MONITOR("CrsMatrixFactory::Build");
506 
507 #ifdef HAVE_XPETRA_TPETRA
508  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
509  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowExporter, DomainExporter, domainMap, rangeMap, params));
510 #endif
511 
512  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
513  return rcp(new EpetraCrsMatrixT<int, Node>(sourceMatrix, RowExporter, DomainExporter, domainMap, rangeMap, params));
514 
516  }
517 
518  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
519  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
520  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
522  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
523  XPETRA_MONITOR("CrsMatrixFactory::Build");
524 
525 #ifdef HAVE_XPETRA_TPETRA
526  if (rowMap->lib() == UseTpetra)
527  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
528 #endif
529 
530  if (rowMap->lib() == UseEpetra)
531  return rcp(new EpetraCrsMatrixT<int, Node>(rowMap, colMap, lclMatrix, params));
532 
534  }
535 
536  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
538  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
539  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
540  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
541  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
542  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
543  XPETRA_MONITOR("CrsMatrixFactory::Build");
544 
545 #ifdef HAVE_XPETRA_TPETRA
546  if (rowMap->lib() == UseTpetra)
547  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
548 #endif
549 
550  if (rowMap->lib() == UseEpetra)
551  return rcp(new EpetraCrsMatrixT<int, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
552 
554  }
555 
556  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
558  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
559  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
560  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
561  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
562  const Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>& importer,
563  const Teuchos::RCP<const Export<LocalOrdinal, GlobalOrdinal, Node>>& exporter,
564  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
565  XPETRA_MONITOR("CrsMatrixFactory::Build");
566 
567 #ifdef HAVE_XPETRA_TPETRA
568  if (rowMap->lib() == UseTpetra)
569  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
570 #endif
571 
572  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
573 
575  }
576 
578  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> BuildBlock(
579  const Teuchos::RCP<const Xpetra::CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& blockGraph,
580  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
581  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
582  LocalOrdinal blockSize) {
583  XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
584 #ifdef HAVE_XPETRA_TPETRA
585  if (domainMap->lib() == UseTpetra)
586  return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(blockGraph, domainMap, rangeMap, blockSize));
587 #endif
588  TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
589 
591  }
592 };
593 #endif
594 
595 // we need the Epetra specialization only if Epetra is enabled
596 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
597 
598 template <>
599 class CrsMatrixFactory<double, int, long long, EpetraNode> {
600  typedef double Scalar;
601  typedef int LocalOrdinal;
602  typedef long long GlobalOrdinal;
603  typedef EpetraNode Node;
604 
605  private:
608 
609  public:
611  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
612  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
613  XPETRA_MONITOR("CrsMatrixFactory::Build");
614 #ifdef HAVE_XPETRA_TPETRA
615  if (rowMap->lib() == UseTpetra)
617 #endif
618 #ifdef HAVE_XPETRA_EPETRA
619  if (rowMap->lib() == UseEpetra)
620  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, 0));
621 #endif
623  }
624 
625  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, size_t maxNumEntriesPerRow, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
626  XPETRA_MONITOR("CrsMatrixFactory::Build");
627 
628 #ifdef HAVE_XPETRA_TPETRA
629  if (rowMap->lib() == UseTpetra)
630  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist));
631 #endif
632 
633  if (rowMap->lib() == UseEpetra)
634  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, maxNumEntriesPerRow, plist));
635 
637  }
638 
639  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
640  XPETRA_MONITOR("CrsMatrixFactory::Build");
641 
642 #ifdef HAVE_XPETRA_TPETRA
643  if (rowMap->lib() == UseTpetra)
644  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist));
645 #endif
646 
647  if (rowMap->lib() == UseEpetra)
648  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, NumEntriesPerRowToAlloc, plist));
649 
651  }
652 
654  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap, size_t maxNumEntriesPerRow, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
655  XPETRA_MONITOR("CrsMatrixFactory::Build");
656 
657 #ifdef HAVE_XPETRA_TPETRA
658  if (rowMap->lib() == UseTpetra)
659  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
660 #endif
661 
662  if (rowMap->lib() == UseEpetra)
663  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
664 
666  }
667 
669  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap, const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap, const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
670  XPETRA_MONITOR("CrsMatrixFactory::Build");
671 
672 #ifdef HAVE_XPETRA_TPETRA
673  if (rowMap->lib() == UseTpetra)
674  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
675 #endif
676 
677  if (rowMap->lib() == UseEpetra)
678  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
679 
681  }
682 
684  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
685  XPETRA_MONITOR("CrsMatrixFactory::Build");
686 
687 #ifdef HAVE_XPETRA_TPETRA
688  if (graph->getRowMap()->lib() == UseTpetra)
690 #endif
691 
692  if (graph->getRowMap()->lib() == UseEpetra)
693  return rcp(new EpetraCrsMatrixT<long long, Node>(graph, plist));
694 
696  }
697 
699  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(const Teuchos::RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& graph, typename Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::local_matrix_type::values_type& values, const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
700  XPETRA_MONITOR("CrsMatrixFactory::Build");
701 
702 #ifdef HAVE_XPETRA_TPETRA
703  if (graph->getRowMap()->lib() == UseTpetra) {
704  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist));
705  }
706 #endif
707 
708  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
710  }
711 
713  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
714  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
716  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
717  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
718  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
719  XPETRA_MONITOR("CrsMatrixFactory::Build");
720 
721 #ifdef HAVE_XPETRA_TPETRA
722  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
723  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, importer, domainMap, rangeMap, params));
724 #endif
725 
726  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
727  return rcp(new EpetraCrsMatrixT<long long, Node>(sourceMatrix, importer, domainMap, rangeMap, params));
728 
730  }
731 
733  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
734  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
736  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
737  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
738  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
739  XPETRA_MONITOR("CrsMatrixFactory::Build");
740 
741 #ifdef HAVE_XPETRA_TPETRA
742  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
743  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, exporter, domainMap, rangeMap, params));
744 #endif
745 
746  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
747  return rcp(new EpetraCrsMatrixT<long long, Node>(sourceMatrix, exporter, domainMap, rangeMap, params));
748 
750  }
751 
753  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
754  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
756  const RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>> DomainImporter,
757  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
758  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
759  const Teuchos::RCP<Teuchos::ParameterList>& params) {
760  XPETRA_MONITOR("CrsMatrixFactory::Build");
761 
762 #ifdef HAVE_XPETRA_TPETRA
763  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
764  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowImporter, DomainImporter, domainMap, rangeMap, params));
765 #endif
766 
767  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
768  return rcp(new EpetraCrsMatrixT<long long, Node>(sourceMatrix, RowImporter, DomainImporter, domainMap, rangeMap, params));
769 
771  }
772 
774  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
775  const Teuchos::RCP<const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>& sourceMatrix,
777  const RCP<const Export<LocalOrdinal, GlobalOrdinal, Node>> DomainExporter,
778  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
779  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
780  const Teuchos::RCP<Teuchos::ParameterList>& params) {
781  XPETRA_MONITOR("CrsMatrixFactory::Build");
782 
783 #ifdef HAVE_XPETRA_TPETRA
784  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
785  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix, RowExporter, DomainExporter, domainMap, rangeMap, params));
786 #endif
787 
788  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
789  return rcp(new EpetraCrsMatrixT<long long, Node>(sourceMatrix, RowExporter, DomainExporter, domainMap, rangeMap, params));
790 
792  }
793 
794  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
795  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
796  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
798  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
799  XPETRA_MONITOR("CrsMatrixFactory::Build");
800 
801 #ifdef HAVE_XPETRA_TPETRA
802  if (rowMap->lib() == UseTpetra)
803  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
804 #endif
805 
806  if (rowMap->lib() == UseEpetra)
807  return rcp(new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, lclMatrix, params));
808 
810  }
811  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> Build(
813  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
814  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
815  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
816  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
817  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
818  XPETRA_MONITOR("CrsMatrixFactory::Build");
819 
820 #ifdef HAVE_XPETRA_TPETRA
821  if (rowMap->lib() == UseTpetra)
822  return rcp(new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
823 #endif
824 
825  if (rowMap->lib() == UseEpetra)
826  return rcp(new EpetraCrsMatrixT<long long, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
827 
829  }
830 
832  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> BuildBlock(
833  const Teuchos::RCP<const Xpetra::CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& blockGraph,
834  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap,
835  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap,
836  LocalOrdinal blockSize) {
837  XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
838 
839 #ifdef HAVE_XPETRA_TPETRA
840  if (domainMap->lib() == UseTpetra) {
841  return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(blockGraph, domainMap, rangemap, blockSize));
842  }
843 #endif
844  TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
845 
847  }
848 };
849 #endif
850 
851 } // namespace Xpetra
852 
853 #define XPETRA_CRSMATRIXFACTORY_SHORT
854 #endif
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node >> &importer, const Teuchos::RCP< const Export< LocalOrdinal, GlobalOrdinal, Node >> &exporter, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &RowExporter, const RCP< const Export< LocalOrdinal, GlobalOrdinal, Node >> DomainExporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &RowImporter, const RCP< const Import< LocalOrdinal, GlobalOrdinal, Node >> DomainImporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty matrix (intended use is an import/export target - can&#39;t insert entries directly...
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedImport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildBlock(const Teuchos::RCP< const Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &blockGraph, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, LocalOrdinal blockSize)
Build a BlockCrsMatrix.
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and fixed number of entries for each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &RowImporter, const RCP< const Import< LocalOrdinal, GlobalOrdinal, Node >> DomainImporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor using FusedImport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type::values_type &values, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph and values array.
CrsMatrixFactory()
Private constructor. This is a static class.
CrsMatrixFactory()
Private constructor. This is a static class.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type::values_type &values, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph and values array.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and fixed number of entries for each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildBlock(const Teuchos::RCP< const Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &blockGraph, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, LocalOrdinal blockSize)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
CrsMatrixFactory()
Private constructor. This is a static class.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &RowExporter, const RCP< const Export< LocalOrdinal, GlobalOrdinal, Node >> DomainExporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedImport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node >> &importer, const Teuchos::RCP< const Export< LocalOrdinal, GlobalOrdinal, Node >> &exporter, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty matrix (intended use is an import/export target - can&#39;t insert entries directly...
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const RCP< Map< LocalOrdinal, GlobalOrdinal, Scalar >> &domainMap=Teuchos::null, const RCP< Map< LocalOrdinal, GlobalOrdinal, Scalar >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &RowExporter, const RCP< const Export< LocalOrdinal, GlobalOrdinal, Node >> DomainExporter, const RCP< Map< LocalOrdinal, GlobalOrdinal, Scalar >> &domainMap, const RCP< Map< LocalOrdinal, GlobalOrdinal, Scalar >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty matrix (intended use is an import/export target - can&#39;t insert entries directly...
#define XPETRA_FACTORY_END
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type::values_type &values, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph and values array.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying (possibly different) number of entries in each row.
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying fixed number of entries for each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< Teuchos::ParameterList > &params=null)
#define XPETRA_MONITOR(funcName)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and fixed number of entries for each row.
KokkosSparse::CrsMatrix< impl_scalar_type, LocalOrdinal, execution_space, void, typename local_graph_type::size_type > local_matrix_type
The specialization of Kokkos::CrsMatrix that represents the part of the sparse matrix on each MPI pro...
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >> &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &RowImporter, const RCP< const Import< LocalOrdinal, GlobalOrdinal, Node >> DomainImporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor using FusedImport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildBlock(const Teuchos::RCP< const Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &blockGraph, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap, LocalOrdinal blockSize)
Build a BlockCrsMatrix.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node >::local_matrix_type &lclMatrix, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=null)