Xpetra  Version of the Day
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 #endif
56 
57 #ifdef HAVE_XPETRA_EPETRA
59 #endif
60 
61 #include "Xpetra_Exceptions.hpp"
62 
63 namespace Xpetra {
64 
65  template <class Scalar,
66  class LocalOrdinal,
67  class GlobalOrdinal,
70  private:
73 
74  public:
78  {
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 
92  size_t maxNumEntriesPerRow,
93  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
94  {
95  XPETRA_MONITOR("CrsMatrixFactory::Build");
96 
97 #ifdef HAVE_XPETRA_TPETRA
98  if (rowMap->lib() == UseTpetra)
99  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
100 #endif
101 
102  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
104  }
105 
109  const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
110  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
111  {
112 #ifdef HAVE_XPETRA_TPETRA
113  if (rowMap->lib() == UseTpetra)
114  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
115 #endif
116 
117  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
119  }
120 
125  size_t maxNumEntriesPerRow,
126  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
127  {
128  XPETRA_MONITOR("CrsMatrixFactory::Build");
129 
130 #ifdef HAVE_XPETRA_TPETRA
131  if (rowMap->lib() == UseTpetra)
132  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
133 #endif
134 
135  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
137  }
138 
141  XPETRA_MONITOR("CrsMatrixFactory::Build");
142 
143 #ifdef HAVE_XPETRA_TPETRA
144  if (rowMap->lib() == UseTpetra)
145  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
146 #endif
147 
148  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
150  }
151 
154  XPETRA_MONITOR("CrsMatrixFactory::Build");
155 
156 #ifdef HAVE_XPETRA_TPETRA
157  if (graph->getRowMap()->lib() == UseTpetra)
159 #endif
160 
161  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
163  }
164 
165 
169  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
170  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
171  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
172  XPETRA_MONITOR("CrsMatrixFactory::Build");
173 
174 #ifdef HAVE_XPETRA_TPETRA
175  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
176  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params));
177 #endif
178 
179  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
181  }
182 
186  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap = Teuchos::null,
187  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap = Teuchos::null,
188  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
189  XPETRA_MONITOR("CrsMatrixFactory::Build");
190 
191 #ifdef HAVE_XPETRA_TPETRA
192  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
193  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params));
194 #endif
195 
196  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
198  }
199 
202  const Import<LocalOrdinal,GlobalOrdinal,Node> &RowImporter,
203  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
204  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
205  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
206  const Teuchos::RCP<Teuchos::ParameterList>& params) {
207  XPETRA_MONITOR("CrsMatrixFactory::Build");
208 
209 #ifdef HAVE_XPETRA_TPETRA
210  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
211  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params));
212 #endif
213 
214  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
216  }
217 
220  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
221  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
222  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap,
223  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap,
224  const Teuchos::RCP<Teuchos::ParameterList>& params) {
225  XPETRA_MONITOR("CrsMatrixFactory::Build");
226 
227 #ifdef HAVE_XPETRA_TPETRA
228  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
229  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params));
230 #endif
231 
232  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
234  }
235 
236 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
241  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
242  XPETRA_MONITOR("CrsMatrixFactory::Build");
243 
244 #ifdef HAVE_XPETRA_TPETRA
245  if (rowMap->lib() == UseTpetra)
246  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
247 #endif
248 
249  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
251  }
252 
253  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
255  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
256  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
257  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
258  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
259  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
260  XPETRA_MONITOR("CrsMatrixFactory::Build");
261 
262 #ifdef HAVE_XPETRA_TPETRA
263  if (rowMap->lib() == UseTpetra)
264  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
265 #endif
266 
267  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
269  }
270 
271  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
273  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
274  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
275  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
276  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap,
277  const Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node>>& importer,
278  const Teuchos::RCP<const Export<LocalOrdinal,GlobalOrdinal,Node>>& exporter,
279  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
280  XPETRA_MONITOR("CrsMatrixFactory::Build");
281 
282 #ifdef HAVE_XPETRA_TPETRA
283  if (rowMap->lib() == UseTpetra)
284  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
285 #endif
286 
287  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
288 
290  }
291 #endif
292 
293  };
294 
295 // we need the Epetra specialization only if Epetra is enabled
296 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
297 
298  // Specializtion for SC=double, LO=int, GO=int and Node=EpetraNode
299  // Used both for Epetra and Tpetra
300  template <>
301  class CrsMatrixFactory<double, int, int, EpetraNode> {
302  typedef double Scalar;
303  typedef int LocalOrdinal;
304  typedef int GlobalOrdinal;
305  typedef EpetraNode Node;
306 
307  private:
310 
311  public:
315  {
316  XPETRA_MONITOR("CrsMatrixFactory::Build");
317 #ifdef HAVE_XPETRA_TPETRA
318  if (rowMap->lib() == UseTpetra)
320 #endif
321 #ifdef HAVE_XPETRA_EPETRA
322  if(rowMap->lib() == UseEpetra)
323  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap));
324 #endif
326  }
327 
328  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) {
329  XPETRA_MONITOR("CrsMatrixFactory::Build");
330 
331 #ifdef HAVE_XPETRA_TPETRA
332  if (rowMap->lib() == UseTpetra)
333  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
334 #endif
335 
336  if (rowMap->lib() == UseEpetra)
337  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, maxNumEntriesPerRow, plist) );
338 
340  }
341 
343  XPETRA_MONITOR("CrsMatrixFactory::Build");
344 
345 #ifdef HAVE_XPETRA_TPETRA
346  if (rowMap->lib() == UseTpetra)
347  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
348 #endif
349 
350  if (rowMap->lib() == UseEpetra)
351  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
352 
354  }
355 
358  XPETRA_MONITOR("CrsMatrixFactory::Build");
359 
360 #ifdef HAVE_XPETRA_TPETRA
361  if (rowMap->lib() == UseTpetra)
362  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
363 #endif
364 
365  if (rowMap->lib() == UseEpetra)
366  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
367 
369  }
370 
373  XPETRA_MONITOR("CrsMatrixFactory::Build");
374 
375 #ifdef HAVE_XPETRA_TPETRA
376  if (rowMap->lib() == UseTpetra)
377  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
378 #endif
379 
380  if (rowMap->lib() == UseEpetra)
381  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
382 
384  }
385 
388  XPETRA_MONITOR("CrsMatrixFactory::Build");
389 
390 #ifdef HAVE_XPETRA_TPETRA
391  if (graph->getRowMap()->lib() == UseTpetra)
393 #endif
394 
395  if (graph->getRowMap()->lib() == UseEpetra)
396  return rcp( new EpetraCrsMatrixT<int,Node>(graph, plist) );
397 
399  }
400 
401 
406  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
407  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
408  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
409  XPETRA_MONITOR("CrsMatrixFactory::Build");
410 
411 #ifdef HAVE_XPETRA_TPETRA
412  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
413  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
414 #endif
415 
416  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
417  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
418 
420  }
421 
426  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
427  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
428  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
429  XPETRA_MONITOR("CrsMatrixFactory::Build");
430 
431 #ifdef HAVE_XPETRA_TPETRA
432  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
433  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
434 #endif
435 
436  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
437  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
438 
440  }
441 
445  const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
446  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
447  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
448  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
449  const Teuchos::RCP<Teuchos::ParameterList>& params) {
450  XPETRA_MONITOR("CrsMatrixFactory::Build");
451 
452 #ifdef HAVE_XPETRA_TPETRA
453  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
454  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
455 #endif
456 
457  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
458  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
459 
461  }
462 
466  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
467  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
468  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
469  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
470  const Teuchos::RCP<Teuchos::ParameterList>& params) {
471  XPETRA_MONITOR("CrsMatrixFactory::Build");
472 
473 #ifdef HAVE_XPETRA_TPETRA
474  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
475  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
476 #endif
477 
478  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
479  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
480 
482  }
483 
484 
485 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
490  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
491  XPETRA_MONITOR("CrsMatrixFactory::Build");
492 
493 #ifdef HAVE_XPETRA_TPETRA
494  if (rowMap->lib() == UseTpetra)
495  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
496 #endif
497 
498  if (rowMap->lib() == UseEpetra)
499  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, lclMatrix, params) );
500 
502  }
503 
504  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
506  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
507  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
508  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
509  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
510  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
511  XPETRA_MONITOR("CrsMatrixFactory::Build");
512 
513 #ifdef HAVE_XPETRA_TPETRA
514  if (rowMap->lib() == UseTpetra)
515  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
516 #endif
517 
518  if (rowMap->lib() == UseEpetra)
519  return rcp( new EpetraCrsMatrixT<int,Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
520 
522  }
523 
524  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
526  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
527  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
528  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
529  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap,
530  const Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node>>& importer,
531  const Teuchos::RCP<const Export<LocalOrdinal,GlobalOrdinal,Node>>& exporter,
532  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
533  XPETRA_MONITOR("CrsMatrixFactory::Build");
534 
535 #ifdef HAVE_XPETRA_TPETRA
536  if (rowMap->lib() == UseTpetra)
537  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
538 #endif
539 
540  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
541 
543  }
544 #endif
545 
546  };
547 #endif
548 
549 // we need the Epetra specialization only if Epetra is enabled
550 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
551 
552  template <>
553  class CrsMatrixFactory<double, int, long long, EpetraNode> {
554  typedef double Scalar;
555  typedef int LocalOrdinal;
556  typedef long long GlobalOrdinal;
557  typedef EpetraNode Node;
558 
559  private:
562 
563  public:
567  {
568  XPETRA_MONITOR("CrsMatrixFactory::Build");
569 #ifdef HAVE_XPETRA_TPETRA
570  if (rowMap->lib() == UseTpetra)
572 #endif
573 #ifdef HAVE_XPETRA_EPETRA
574  if(rowMap->lib() == UseEpetra)
575  return rcp( new EpetraCrsMatrixT<long long,Node>(rowMap,0));
576 #endif
578  }
579 
580  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) {
581  XPETRA_MONITOR("CrsMatrixFactory::Build");
582 
583 #ifdef HAVE_XPETRA_TPETRA
584  if (rowMap->lib() == UseTpetra)
585  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
586 #endif
587 
588  if (rowMap->lib() == UseEpetra)
589  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, maxNumEntriesPerRow, plist) );
590 
592  }
593 
595  XPETRA_MONITOR("CrsMatrixFactory::Build");
596 
597 #ifdef HAVE_XPETRA_TPETRA
598  if (rowMap->lib() == UseTpetra)
599  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
600 #endif
601 
602  if (rowMap->lib() == UseEpetra)
603  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
604 
606  }
607 
610  XPETRA_MONITOR("CrsMatrixFactory::Build");
611 
612 #ifdef HAVE_XPETRA_TPETRA
613  if (rowMap->lib() == UseTpetra)
614  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
615 #endif
616 
617  if (rowMap->lib() == UseEpetra)
618  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
619 
621  }
622 
625  XPETRA_MONITOR("CrsMatrixFactory::Build");
626 
627 #ifdef HAVE_XPETRA_TPETRA
628  if (rowMap->lib() == UseTpetra)
629  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
630 #endif
631 
632  if (rowMap->lib() == UseEpetra)
633  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
634 
636  }
637 
640  XPETRA_MONITOR("CrsMatrixFactory::Build");
641 
642 #ifdef HAVE_XPETRA_TPETRA
643  if (graph->getRowMap()->lib() == UseTpetra)
645 #endif
646 
647  if (graph->getRowMap()->lib() == UseEpetra)
648  return rcp( new EpetraCrsMatrixT<long long, Node>(graph, plist) );
649 
651  }
652 
653 
658  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
659  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
660  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
661  XPETRA_MONITOR("CrsMatrixFactory::Build");
662 
663 #ifdef HAVE_XPETRA_TPETRA
664  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
665  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
666 #endif
667 
668  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
669  return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
670 
672  }
673 
678  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
679  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
680  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
681  XPETRA_MONITOR("CrsMatrixFactory::Build");
682 
683 #ifdef HAVE_XPETRA_TPETRA
684  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
685  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
686 #endif
687 
688  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
689  return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
690 
692  }
693 
697  const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
698  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
699  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
700  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
701  const Teuchos::RCP<Teuchos::ParameterList>& params) {
702  XPETRA_MONITOR("CrsMatrixFactory::Build");
703 
704 #ifdef HAVE_XPETRA_TPETRA
705  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
706  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
707 #endif
708 
709  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
710  return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
711 
713  }
714 
718  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
719  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
720  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
721  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
722  const Teuchos::RCP<Teuchos::ParameterList>& params) {
723  XPETRA_MONITOR("CrsMatrixFactory::Build");
724 
725 #ifdef HAVE_XPETRA_TPETRA
726  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
727  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
728 #endif
729 
730  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
731  return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
732 
734  }
735 
736 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
741  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
742  XPETRA_MONITOR("CrsMatrixFactory::Build");
743 
744 #ifdef HAVE_XPETRA_TPETRA
745  if (rowMap->lib() == UseTpetra)
746  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
747 #endif
748 
749  if (rowMap->lib() == UseEpetra)
750  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, lclMatrix, params) );
751 
753  }
754  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
756  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
757  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
758  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
759  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
760  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
761  XPETRA_MONITOR("CrsMatrixFactory::Build");
762 
763 #ifdef HAVE_XPETRA_TPETRA
764  if (rowMap->lib() == UseTpetra)
765  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
766 #endif
767 
768  if (rowMap->lib() == UseEpetra)
769  return rcp( new EpetraCrsMatrixT<long long, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
770 
772  }
773 #endif
774 
775  };
776 #endif
777 
778 }
779 
780 #define XPETRA_CRSMATRIXFACTORY_SHORT
781 #endif
#define XPETRA_MONITOR(funcName)
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
#define XPETRA_FACTORY_END
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't insert entries directly...
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 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, 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 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.
CrsMatrixFactory()
Private constructor. This is a static class.
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 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, 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 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 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 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 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 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 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 RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap)
Constructor for empty matrix (intended use is an import/export target - can't insert entries directly...
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 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< 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 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.
CrsMatrixFactory()
Private constructor. This is a static class.
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 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 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 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 ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying (possibly different) number of entries in each row.
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< 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 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 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't insert entries directly...
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 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)
#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