Xpetra Version of the Day
Loading...
Searching...
No Matches
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
64namespace Xpetra {
65
66 template <class Scalar,
67 class LocalOrdinal,
68 class GlobalOrdinal,
71 private:
74
75 public:
79 {
80 TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error,
81 "Can't create Xpetra::EpetraCrsMatrix with these scalar/LO/GO types");
82#ifdef HAVE_XPETRA_TPETRA
83 if (rowMap->lib() == UseTpetra)
85#endif
86
88 }
89
93 size_t maxNumEntriesPerRow,
94 const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
95 {
96 XPETRA_MONITOR("CrsMatrixFactory::Build");
97
98#ifdef HAVE_XPETRA_TPETRA
99 if (rowMap->lib() == UseTpetra)
100 return Teuchos::rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
101#endif
102
103 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
105 }
106
110 const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
111 const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
112 {
113#ifdef HAVE_XPETRA_TPETRA
114 if (rowMap->lib() == UseTpetra)
115 return Teuchos::rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
116#endif
117
118 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
120 }
121
126 size_t maxNumEntriesPerRow,
127 const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
128 {
129 XPETRA_MONITOR("CrsMatrixFactory::Build");
130
131#ifdef HAVE_XPETRA_TPETRA
132 if (rowMap->lib() == UseTpetra)
133 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
134#endif
135
136 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
138 }
139
142 XPETRA_MONITOR("CrsMatrixFactory::Build");
143
144#ifdef HAVE_XPETRA_TPETRA
145 if (rowMap->lib() == UseTpetra)
146 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
147#endif
148
149 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
151 }
152
155 XPETRA_MONITOR("CrsMatrixFactory::Build");
156
157#ifdef HAVE_XPETRA_TPETRA
158 if (graph->getRowMap()->lib() == UseTpetra)
160#endif
161
162 XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
164 }
165
166
170 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
171 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
172 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
173 XPETRA_MONITOR("CrsMatrixFactory::Build");
174
175#ifdef HAVE_XPETRA_TPETRA
176 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
177 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params));
178#endif
179
180 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
182 }
183
187 const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap = Teuchos::null,
188 const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap = Teuchos::null,
189 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
190 XPETRA_MONITOR("CrsMatrixFactory::Build");
191
192#ifdef HAVE_XPETRA_TPETRA
193 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
194 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params));
195#endif
196
197 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
199 }
200
204 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
205 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
206 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
208 XPETRA_MONITOR("CrsMatrixFactory::Build");
209
210#ifdef HAVE_XPETRA_TPETRA
211 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
212 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params));
213#endif
214
215 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
217 }
218
222 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
226 XPETRA_MONITOR("CrsMatrixFactory::Build");
227
228#ifdef HAVE_XPETRA_TPETRA
229 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
230 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params));
231#endif
232
233 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
235 }
236
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
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
275 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
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
292 // Builds a BlockCrsMatrix
295 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
297 LocalOrdinal blockSize) {
298
299 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
300
301#ifdef HAVE_XPETRA_TPETRA
302 if (domainMap->lib() == UseTpetra) {
303 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangeMap,blockSize) );
304 }
305#endif
306 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
307
309 }
310
311 };
312
313// we need the Epetra specialization only if Epetra is enabled
314#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
315
316 // Specializtion for SC=double, LO=int, GO=int and Node=EpetraNode
317 // Used both for Epetra and Tpetra
318 template <>
319 class CrsMatrixFactory<double, int, int, EpetraNode> {
320 typedef double Scalar;
321 typedef int LocalOrdinal;
322 typedef int GlobalOrdinal;
324
325 private:
328
329 public:
333 {
334 XPETRA_MONITOR("CrsMatrixFactory::Build");
335#ifdef HAVE_XPETRA_TPETRA
336 if (rowMap->lib() == UseTpetra)
338#endif
339 if(rowMap->lib() == UseEpetra)
340 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap));
341
343 }
344
346 XPETRA_MONITOR("CrsMatrixFactory::Build");
347
348#ifdef HAVE_XPETRA_TPETRA
349 if (rowMap->lib() == UseTpetra)
350 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
351#endif
352
353 if (rowMap->lib() == UseEpetra)
354 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, maxNumEntriesPerRow, plist) );
355
357 }
358
360 XPETRA_MONITOR("CrsMatrixFactory::Build");
361
362#ifdef HAVE_XPETRA_TPETRA
363 if (rowMap->lib() == UseTpetra)
364 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
365#endif
366
367 if (rowMap->lib() == UseEpetra)
368 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
369
371 }
372
375 XPETRA_MONITOR("CrsMatrixFactory::Build");
376
377#ifdef HAVE_XPETRA_TPETRA
378 if (rowMap->lib() == UseTpetra)
379 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
380#endif
381
382 if (rowMap->lib() == UseEpetra)
383 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
384
386 }
387
390 XPETRA_MONITOR("CrsMatrixFactory::Build");
391
392#ifdef HAVE_XPETRA_TPETRA
393 if (rowMap->lib() == UseTpetra)
394 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
395#endif
396
397 if (rowMap->lib() == UseEpetra)
398 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
399
401 }
402
405 XPETRA_MONITOR("CrsMatrixFactory::Build");
406
407#ifdef HAVE_XPETRA_TPETRA
408 if (graph->getRowMap()->lib() == UseTpetra)
410#endif
411
412 if (graph->getRowMap()->lib() == UseEpetra)
413 return rcp( new EpetraCrsMatrixT<int,Node>(graph, plist) );
414
416 }
417
418
423 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
424 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
425 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
426 XPETRA_MONITOR("CrsMatrixFactory::Build");
427
428#ifdef HAVE_XPETRA_TPETRA
429 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
430 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
431#endif
432
433 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
434 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
435
437 }
438
443 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
444 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
445 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
446 XPETRA_MONITOR("CrsMatrixFactory::Build");
447
448#ifdef HAVE_XPETRA_TPETRA
449 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
450 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
451#endif
452
453 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
454 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
455
457 }
458
462 const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
463 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
464 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
465 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
467 XPETRA_MONITOR("CrsMatrixFactory::Build");
468
469#ifdef HAVE_XPETRA_TPETRA
470 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
471 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
472#endif
473
474 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
475 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
476
478 }
479
484 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
485 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
486 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
488 XPETRA_MONITOR("CrsMatrixFactory::Build");
489
490#ifdef HAVE_XPETRA_TPETRA
491 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
492 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
493#endif
494
495 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
496 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
497
499 }
500
501
506 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
507 XPETRA_MONITOR("CrsMatrixFactory::Build");
508
509#ifdef HAVE_XPETRA_TPETRA
510 if (rowMap->lib() == UseTpetra)
511 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
512#endif
513
514 if (rowMap->lib() == UseEpetra)
515 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, lclMatrix, params) );
516
518 }
519
524 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
525 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
526 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
527 XPETRA_MONITOR("CrsMatrixFactory::Build");
528
529#ifdef HAVE_XPETRA_TPETRA
530 if (rowMap->lib() == UseTpetra)
531 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
532#endif
533
534 if (rowMap->lib() == UseEpetra)
535 return rcp( new EpetraCrsMatrixT<int,Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
536
538 }
539
544 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
548 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
549 XPETRA_MONITOR("CrsMatrixFactory::Build");
550
551#ifdef HAVE_XPETRA_TPETRA
552 if (rowMap->lib() == UseTpetra)
553 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
554#endif
555
556 TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
557
559 }
560
564 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
566 LocalOrdinal blockSize) {
567
568 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
569#ifdef HAVE_XPETRA_TPETRA
570 if (domainMap->lib() == UseTpetra)
571 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangeMap,blockSize) );
572#endif
573 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
574
576 }
577
578 };
579#endif
580
581// we need the Epetra specialization only if Epetra is enabled
582#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
583
584 template <>
585 class CrsMatrixFactory<double, int, long long, EpetraNode> {
586 typedef double Scalar;
587 typedef int LocalOrdinal;
588 typedef long long GlobalOrdinal;
590
591 private:
594
595 public:
599 {
600 XPETRA_MONITOR("CrsMatrixFactory::Build");
601#ifdef HAVE_XPETRA_TPETRA
602 if (rowMap->lib() == UseTpetra)
604#endif
605#ifdef HAVE_XPETRA_EPETRA
606 if(rowMap->lib() == UseEpetra)
607 return rcp( new EpetraCrsMatrixT<long long,Node>(rowMap,0));
608#endif
610 }
611
613 XPETRA_MONITOR("CrsMatrixFactory::Build");
614
615#ifdef HAVE_XPETRA_TPETRA
616 if (rowMap->lib() == UseTpetra)
617 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
618#endif
619
620 if (rowMap->lib() == UseEpetra)
621 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, maxNumEntriesPerRow, plist) );
622
624 }
625
627 XPETRA_MONITOR("CrsMatrixFactory::Build");
628
629#ifdef HAVE_XPETRA_TPETRA
630 if (rowMap->lib() == UseTpetra)
631 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
632#endif
633
634 if (rowMap->lib() == UseEpetra)
635 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
636
638 }
639
642 XPETRA_MONITOR("CrsMatrixFactory::Build");
643
644#ifdef HAVE_XPETRA_TPETRA
645 if (rowMap->lib() == UseTpetra)
646 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
647#endif
648
649 if (rowMap->lib() == UseEpetra)
650 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
651
653 }
654
657 XPETRA_MONITOR("CrsMatrixFactory::Build");
658
659#ifdef HAVE_XPETRA_TPETRA
660 if (rowMap->lib() == UseTpetra)
661 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
662#endif
663
664 if (rowMap->lib() == UseEpetra)
665 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
666
668 }
669
672 XPETRA_MONITOR("CrsMatrixFactory::Build");
673
674#ifdef HAVE_XPETRA_TPETRA
675 if (graph->getRowMap()->lib() == UseTpetra)
677#endif
678
679 if (graph->getRowMap()->lib() == UseEpetra)
680 return rcp( new EpetraCrsMatrixT<long long, Node>(graph, plist) );
681
683 }
684
685
690 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
691 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
692 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
693 XPETRA_MONITOR("CrsMatrixFactory::Build");
694
695#ifdef HAVE_XPETRA_TPETRA
696 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
697 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
698#endif
699
700 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
701 return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
702
704 }
705
710 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
711 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
712 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
713 XPETRA_MONITOR("CrsMatrixFactory::Build");
714
715#ifdef HAVE_XPETRA_TPETRA
716 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
717 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
718#endif
719
720 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
721 return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
722
724 }
725
729 const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
730 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
731 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
732 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
734 XPETRA_MONITOR("CrsMatrixFactory::Build");
735
736#ifdef HAVE_XPETRA_TPETRA
737 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
738 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
739#endif
740
741 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
742 return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
743
745 }
746
751 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
752 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
753 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
755 XPETRA_MONITOR("CrsMatrixFactory::Build");
756
757#ifdef HAVE_XPETRA_TPETRA
758 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
759 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
760#endif
761
762 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
763 return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
764
766 }
767
772 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
773 XPETRA_MONITOR("CrsMatrixFactory::Build");
774
775#ifdef HAVE_XPETRA_TPETRA
776 if (rowMap->lib() == UseTpetra)
777 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
778#endif
779
780 if (rowMap->lib() == UseEpetra)
781 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, lclMatrix, params) );
782
784 }
789 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
790 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
791 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
792 XPETRA_MONITOR("CrsMatrixFactory::Build");
793
794#ifdef HAVE_XPETRA_TPETRA
795 if (rowMap->lib() == UseTpetra)
796 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
797#endif
798
799 if (rowMap->lib() == UseEpetra)
800 return rcp( new EpetraCrsMatrixT<long long, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
801
803 }
804
805
809 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
811 LocalOrdinal blockSize) {
812
813 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
814
815#ifdef HAVE_XPETRA_TPETRA
816 if (domainMap->lib() == UseTpetra) {
817 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangemap,blockSize) );
818 }
819#endif
820 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
821
823 }
824
825
826
827 };
828#endif
829
830}
831
832#define XPETRA_CRSMATRIXFACTORY_SHORT
833#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 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 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, 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 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 > > 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 Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::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 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 > > 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 > > 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, 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 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 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 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 > > 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 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 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 > > 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 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 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 > > 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 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 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 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 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.
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 > > 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 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 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 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 > > 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.
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, 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 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 CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
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...
#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