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,
69 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
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
169 XPETRA_MONITOR("CrsMatrixFactory::Build");
170
171#ifdef HAVE_XPETRA_TPETRA
172 if (graph->getRowMap()->lib() == UseTpetra)
173 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist) );
174#endif
175
176 XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
178 }
179
183 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
184 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
185 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
186 XPETRA_MONITOR("CrsMatrixFactory::Build");
187
188#ifdef HAVE_XPETRA_TPETRA
189 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
190 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params));
191#endif
192
193 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
195 }
196
200 const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap = Teuchos::null,
201 const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap = Teuchos::null,
202 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
203 XPETRA_MONITOR("CrsMatrixFactory::Build");
204
205#ifdef HAVE_XPETRA_TPETRA
206 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
207 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params));
208#endif
209
210 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
212 }
213
217 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
218 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
219 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
221 XPETRA_MONITOR("CrsMatrixFactory::Build");
222
223#ifdef HAVE_XPETRA_TPETRA
224 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
225 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params));
226#endif
227
228 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
230 }
231
235 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
239 XPETRA_MONITOR("CrsMatrixFactory::Build");
240
241#ifdef HAVE_XPETRA_TPETRA
242 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
243 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params));
244#endif
245
246 XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
248 }
249
254 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
255 XPETRA_MONITOR("CrsMatrixFactory::Build");
256
257#ifdef HAVE_XPETRA_TPETRA
258 if (rowMap->lib() == UseTpetra)
259 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
260#endif
261
262 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
264 }
265
270 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
271 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
272 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
273 XPETRA_MONITOR("CrsMatrixFactory::Build");
274
275#ifdef HAVE_XPETRA_TPETRA
276 if (rowMap->lib() == UseTpetra)
277 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
278#endif
279
280 XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
282 }
283
288 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
292 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
293 XPETRA_MONITOR("CrsMatrixFactory::Build");
294
295#ifdef HAVE_XPETRA_TPETRA
296 if (rowMap->lib() == UseTpetra)
297 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
298#endif
299
300 TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
301
303 }
304
305 // Builds a BlockCrsMatrix
308 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
310 LocalOrdinal blockSize) {
311
312 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
313
314#ifdef HAVE_XPETRA_TPETRA
315 if (domainMap->lib() == UseTpetra) {
316 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangeMap,blockSize) );
317 }
318#endif
319 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
320
322 }
323
324 };
325
326// we need the Epetra specialization only if Epetra is enabled
327#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
328
329 // Specializtion for SC=double, LO=int, GO=int and Node=EpetraNode
330 // Used both for Epetra and Tpetra
331 template <>
332 class CrsMatrixFactory<double, int, int, EpetraNode> {
333 typedef double Scalar;
334 typedef int LocalOrdinal;
335 typedef int GlobalOrdinal;
337
338 private:
341
342 public:
346 {
347 XPETRA_MONITOR("CrsMatrixFactory::Build");
348#ifdef HAVE_XPETRA_TPETRA
349 if (rowMap->lib() == UseTpetra)
351#endif
352 if(rowMap->lib() == UseEpetra)
353 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap));
354
356 }
357
359 XPETRA_MONITOR("CrsMatrixFactory::Build");
360
361#ifdef HAVE_XPETRA_TPETRA
362 if (rowMap->lib() == UseTpetra)
363 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, plist) );
364#endif
365
366 if (rowMap->lib() == UseEpetra)
367 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, maxNumEntriesPerRow, plist) );
368
370 }
371
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, NumEntriesPerRowToAlloc, plist) );
378#endif
379
380 if (rowMap->lib() == UseEpetra)
381 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
382
384 }
385
388 XPETRA_MONITOR("CrsMatrixFactory::Build");
389
390#ifdef HAVE_XPETRA_TPETRA
391 if (rowMap->lib() == UseTpetra)
392 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
393#endif
394
395 if (rowMap->lib() == UseEpetra)
396 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
397
399 }
400
403 XPETRA_MONITOR("CrsMatrixFactory::Build");
404
405#ifdef HAVE_XPETRA_TPETRA
406 if (rowMap->lib() == UseTpetra)
407 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
408#endif
409
410 if (rowMap->lib() == UseEpetra)
411 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
412
414 }
415
418 XPETRA_MONITOR("CrsMatrixFactory::Build");
419
420#ifdef HAVE_XPETRA_TPETRA
421 if (graph->getRowMap()->lib() == UseTpetra)
423#endif
424
425 if (graph->getRowMap()->lib() == UseEpetra)
426 return rcp( new EpetraCrsMatrixT<int,Node>(graph, plist) );
427
429 }
430
431
434 XPETRA_MONITOR("CrsMatrixFactory::Build");
435
436#ifdef HAVE_XPETRA_TPETRA
437 if (graph->getRowMap()->lib() == UseTpetra)
438 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist) );
439#endif
440
441 XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
443 }
444
445
446
447
452 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
453 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
454 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
455 XPETRA_MONITOR("CrsMatrixFactory::Build");
456
457#ifdef HAVE_XPETRA_TPETRA
458 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
459 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
460#endif
461
462 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
463 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
464
466 }
467
472 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
473 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
474 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
475 XPETRA_MONITOR("CrsMatrixFactory::Build");
476
477#ifdef HAVE_XPETRA_TPETRA
478 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
479 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
480#endif
481
482 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
483 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
484
486 }
487
491 const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
492 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
493 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
494 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
496 XPETRA_MONITOR("CrsMatrixFactory::Build");
497
498#ifdef HAVE_XPETRA_TPETRA
499 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
500 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
501#endif
502
503 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
504 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
505
507 }
508
513 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
514 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
515 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
517 XPETRA_MONITOR("CrsMatrixFactory::Build");
518
519#ifdef HAVE_XPETRA_TPETRA
520 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
521 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
522#endif
523
524 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
525 return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
526
528 }
529
530
535 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
536 XPETRA_MONITOR("CrsMatrixFactory::Build");
537
538#ifdef HAVE_XPETRA_TPETRA
539 if (rowMap->lib() == UseTpetra)
540 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
541#endif
542
543 if (rowMap->lib() == UseEpetra)
544 return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, lclMatrix, params) );
545
547 }
548
553 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
554 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
555 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
556 XPETRA_MONITOR("CrsMatrixFactory::Build");
557
558#ifdef HAVE_XPETRA_TPETRA
559 if (rowMap->lib() == UseTpetra)
560 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
561#endif
562
563 if (rowMap->lib() == UseEpetra)
564 return rcp( new EpetraCrsMatrixT<int,Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
565
567 }
568
573 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
577 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
578 XPETRA_MONITOR("CrsMatrixFactory::Build");
579
580#ifdef HAVE_XPETRA_TPETRA
581 if (rowMap->lib() == UseTpetra)
582 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, importer, exporter, params));
583#endif
584
585 TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
586
588 }
589
593 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
595 LocalOrdinal blockSize) {
596
597 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
598#ifdef HAVE_XPETRA_TPETRA
599 if (domainMap->lib() == UseTpetra)
600 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangeMap,blockSize) );
601#endif
602 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
603
605 }
606
607 };
608#endif
609
610// we need the Epetra specialization only if Epetra is enabled
611#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
612
613 template <>
614 class CrsMatrixFactory<double, int, long long, EpetraNode> {
615 typedef double Scalar;
616 typedef int LocalOrdinal;
617 typedef long long GlobalOrdinal;
619
620 private:
623
624 public:
628 {
629 XPETRA_MONITOR("CrsMatrixFactory::Build");
630#ifdef HAVE_XPETRA_TPETRA
631 if (rowMap->lib() == UseTpetra)
633#endif
634#ifdef HAVE_XPETRA_EPETRA
635 if(rowMap->lib() == UseEpetra)
636 return rcp( new EpetraCrsMatrixT<long long,Node>(rowMap,0));
637#endif
639 }
640
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, maxNumEntriesPerRow, plist) );
647#endif
648
649 if (rowMap->lib() == UseEpetra)
650 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, maxNumEntriesPerRow, plist) );
651
653 }
654
656 XPETRA_MONITOR("CrsMatrixFactory::Build");
657
658#ifdef HAVE_XPETRA_TPETRA
659 if (rowMap->lib() == UseTpetra)
660 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
661#endif
662
663 if (rowMap->lib() == UseEpetra)
664 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, NumEntriesPerRowToAlloc, plist) );
665
667 }
668
671 XPETRA_MONITOR("CrsMatrixFactory::Build");
672
673#ifdef HAVE_XPETRA_TPETRA
674 if (rowMap->lib() == UseTpetra)
675 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
676#endif
677
678 if (rowMap->lib() == UseEpetra)
679 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, plist) );
680
682 }
683
686 XPETRA_MONITOR("CrsMatrixFactory::Build");
687
688#ifdef HAVE_XPETRA_TPETRA
689 if (rowMap->lib() == UseTpetra)
690 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
691#endif
692
693 if (rowMap->lib() == UseEpetra)
694 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist) );
695
697 }
698
701 XPETRA_MONITOR("CrsMatrixFactory::Build");
702
703#ifdef HAVE_XPETRA_TPETRA
704 if (graph->getRowMap()->lib() == UseTpetra)
706#endif
707
708 if (graph->getRowMap()->lib() == UseEpetra)
709 return rcp( new EpetraCrsMatrixT<long long, Node>(graph, plist) );
710
712 }
713
714
717 XPETRA_MONITOR("CrsMatrixFactory::Build");
718
719#ifdef HAVE_XPETRA_TPETRA
720 if (graph->getRowMap()->lib() == UseTpetra) {
721 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, values, plist) );
722 }
723#endif
724
725 XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
727 }
728
729
730
735 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
736 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
737 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
738 XPETRA_MONITOR("CrsMatrixFactory::Build");
739
740#ifdef HAVE_XPETRA_TPETRA
741 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
742 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
743#endif
744
745 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
746 return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
747
749 }
750
755 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
756 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
757 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
758 XPETRA_MONITOR("CrsMatrixFactory::Build");
759
760#ifdef HAVE_XPETRA_TPETRA
761 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
762 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
763#endif
764
765 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
766 return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
767
769 }
770
774 const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
775 const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
776 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
777 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
779 XPETRA_MONITOR("CrsMatrixFactory::Build");
780
781#ifdef HAVE_XPETRA_TPETRA
782 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
783 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
784#endif
785
786 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
787 return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
788
790 }
791
796 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
797 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
798 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
800 XPETRA_MONITOR("CrsMatrixFactory::Build");
801
802#ifdef HAVE_XPETRA_TPETRA
803 if (sourceMatrix->getRowMap()->lib() == UseTpetra)
804 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
805#endif
806
807 if (sourceMatrix->getRowMap()->lib() == UseEpetra)
808 return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
809
811 }
812
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>(rowMap, colMap, lclMatrix, params));
823#endif
824
825 if (rowMap->lib() == UseEpetra)
826 return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, lclMatrix, params) );
827
829 }
834 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
835 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
836 const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
837 XPETRA_MONITOR("CrsMatrixFactory::Build");
838
839#ifdef HAVE_XPETRA_TPETRA
840 if (rowMap->lib() == UseTpetra)
841 return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
842#endif
843
844 if (rowMap->lib() == UseEpetra)
845 return rcp( new EpetraCrsMatrixT<long long, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
846
848 }
849
850
854 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap,
856 LocalOrdinal blockSize) {
857
858 XPETRA_MONITOR("CrsMatrixFactory::BuildBlock");
859
860#ifdef HAVE_XPETRA_TPETRA
861 if (domainMap->lib() == UseTpetra) {
862 return rcp(new Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>(blockGraph,domainMap,rangemap,blockSize) );
863 }
864#endif
865 TEUCHOS_TEST_FOR_EXCEPTION(domainMap->lib() == UseEpetra, std::logic_error, "Epetra doesn't support this matrix constructor");
866
868 }
869
870
871
872 };
873#endif
874
875}
876
877#define XPETRA_CRSMATRIXFACTORY_SHORT
878#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, 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 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 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 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 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 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
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)