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
63namespace 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
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,
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
221 const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
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;
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
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,
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
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,
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;
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
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,
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
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,
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 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 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 > > 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 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 > > 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.
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 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 > > 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 > &RowImporter, const RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > DomainImporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > &params)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, 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 Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
#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