Xpetra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Xpetra_CrsGraphFactory.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_CRSGRAPHFACTORY_HPP
47 #define XPETRA_CRSGRAPHFACTORY_HPP
48 
49 #include "Xpetra_ConfigDefs.hpp"
50 
51 #include "Xpetra_CrsGraph.hpp"
52 
53 #ifdef HAVE_XPETRA_TPETRA
54 #include "Xpetra_TpetraCrsGraph.hpp"
55 #endif
56 
57 #ifdef HAVE_XPETRA_EPETRA
59 #endif
60 
61 #include "Xpetra_Exceptions.hpp"
62 
63 namespace Xpetra {
64 
65 template <class LocalOrdinal,
66  class GlobalOrdinal,
67  class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
69  private:
72 
73  public:
75  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
76  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
77  TEUCHOS_TEST_FOR_EXCEPTION(rowMap->lib() == UseEpetra, std::logic_error,
78  "Can't create Xpetra::EpetraCrsMatrix with these scalar/LO/GO types");
79 #ifdef HAVE_XPETRA_TPETRA
80  if (rowMap->lib() == UseTpetra)
81  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, 0));
82 #endif
83 
85  }
86 
88  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
89  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& map, size_t maxNumEntriesPerRow) {
90  XPETRA_MONITOR("CrsGraphFactory::Build");
91 
92 #ifdef HAVE_XPETRA_TPETRA
93  if (map->lib() == UseTpetra)
94  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(map, maxNumEntriesPerRow));
95 #endif
96 
99  TEUCHOS_UNREACHABLE_RETURN(null);
100  }
101 
103  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
104  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
105  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
106  size_t maxNumEntriesPerRow,
107  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
108  XPETRA_MONITOR("CrsGraphFactory::Build");
109 
110 #ifdef HAVE_XPETRA_TPETRA
111  if (rowMap->lib() == UseTpetra)
112  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
113 #endif
114 
115  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
117  TEUCHOS_UNREACHABLE_RETURN(null);
118  }
119 
121  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
122  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
123  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
124  const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
125  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
126  XPETRA_MONITOR("CrsGraphFactory::Build");
127 
128 #ifdef HAVE_XPETRA_TPETRA
129  if (rowMap->lib() == UseTpetra)
130  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
131 #endif
132 
133  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
135  TEUCHOS_UNREACHABLE_RETURN(null);
136  }
137 
139  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
140  Build(const RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& sourceGraph,
142  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
143  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
144  const RCP<Teuchos::ParameterList>& params = Teuchos::null) {
145 #ifdef HAVE_XPETRA_TPETRA
146  if (sourceGraph->getRowMap()->lib() == UseTpetra)
147  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(sourceGraph, importer, domainMap, rangeMap, params));
148 #endif
149 
150  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceGraph()->getRowMap()->lib());
152  TEUCHOS_UNREACHABLE_RETURN(null);
153  }
154 
155 #ifdef HAVE_XPETRA_TPETRA
156  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
176  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
177  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
180  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
181  XPETRA_MONITOR("CrsMatrixFactory::Build");
182 
183  if (rowMap->lib() == UseTpetra)
185  colMap,
186  rowPointers,
187  columnIndices,
188  plist));
189 
191  }
192 
211  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
212  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
213  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
215  const Teuchos::RCP<Teuchos::ParameterList>& params) {
216  XPETRA_MONITOR("CrsMatrixFactory::Build");
217 
218  if (rowMap->lib() == UseTpetra)
220  colMap,
221  lclGraph,
222  params));
223 
225  }
226 
251  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
253  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
254  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
255  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
256  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
257  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
258  XPETRA_MONITOR("CrsMatrixFactory::Build");
259 
260  if (rowMap->lib() == UseTpetra)
262  rowMap,
263  colMap,
264  domainMap,
265  rangeMap,
266  params));
267 
269  }
270 #endif
271 
291  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
292  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
293  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
294  const Teuchos::ArrayRCP<size_t>& rowPointers,
295  const Teuchos::ArrayRCP<LocalOrdinal>& columnIndices,
296  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
297  XPETRA_MONITOR("CrsMatrixFactory::Build");
298 
299  if (rowMap->lib() == UseTpetra)
301  colMap,
302  rowPointers,
303  columnIndices,
304  plist));
305 
307  }
308 };
309 
310 // we need the Epetra specialization only if Epetra is enabled
311 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
312 
313 template <>
314 class CrsGraphFactory<int, int, EpetraNode> {
315  typedef int LocalOrdinal;
316  typedef int GlobalOrdinal;
317  typedef EpetraNode Node;
318 
319  private:
322 
323  public:
325  static RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
326  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
327  XPETRA_MONITOR("CrsMatrixFactory::Build");
328 #ifdef HAVE_XPETRA_TPETRA
329  if (rowMap->lib() == UseTpetra)
330  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, 0));
331 #endif
332 #ifdef HAVE_XPETRA_EPETRA
333  if (rowMap->lib() == UseEpetra)
334  return rcp(new EpetraCrsGraphT<int, Node>(rowMap));
335 #endif
337  }
338 
339  static RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
340  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& map, size_t maxNumEntriesPerRow) {
341  XPETRA_MONITOR("CrsGraphFactory::Build");
342 
343 #ifdef HAVE_XPETRA_TPETRA
344  if (map->lib() == UseTpetra)
345  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(map, maxNumEntriesPerRow));
346 #endif
347 
348  if (map->lib() == UseEpetra)
349  return rcp(new EpetraCrsGraphT<int, Node>(map, maxNumEntriesPerRow));
350 
352  TEUCHOS_UNREACHABLE_RETURN(null);
353  }
354 
355  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
356  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) {
357  XPETRA_MONITOR("CrsGraphFactory::Build");
358 
359 #ifdef HAVE_XPETRA_TPETRA
360  if (rowMap->lib() == UseTpetra)
361  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
362 #endif
363 
364  if (rowMap->lib() == UseEpetra)
365  return rcp(new EpetraCrsGraphT<int, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
366 
368  TEUCHOS_UNREACHABLE_RETURN(null);
369  }
370 
372  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
373  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
374  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
375  size_t maxNumEntriesPerRow,
376  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
377  XPETRA_MONITOR("CrsGraphFactory::Build");
378 
379 #ifdef HAVE_XPETRA_TPETRA
380  if (rowMap->lib() == UseTpetra)
381  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
382 #endif
383  if (rowMap->lib() == UseEpetra)
384  return rcp(new EpetraCrsGraphT<int, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
385 
387  TEUCHOS_UNREACHABLE_RETURN(null);
388  }
389 
391  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
392  Build(const RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& sourceGraph,
394  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
395  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
396  const RCP<Teuchos::ParameterList>& params = Teuchos::null) {
397 #ifdef HAVE_XPETRA_TPETRA
398  if (sourceGraph->getRowMap()->lib() == UseTpetra)
399  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(sourceGraph, importer, domainMap, rangeMap, params));
400 #endif
401  if (sourceGraph->getRowMap()->lib() == UseEpetra)
402  return rcp(new EpetraCrsGraphT<int, Node>(sourceGraph, importer, domainMap, rangeMap, params));
403 
405  TEUCHOS_UNREACHABLE_RETURN(null);
406  }
407 
408 #ifdef HAVE_XPETRA_TPETRA
409  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
429  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
430  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
433  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
434  XPETRA_MONITOR("CrsMatrixFactory::Build");
435 
436  if (rowMap->lib() == UseTpetra)
438  colMap,
439  rowPointers,
440  columnIndices,
441  plist));
442 
444  }
445 
464  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
465  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
466  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
468  const Teuchos::RCP<Teuchos::ParameterList>& params) {
469  XPETRA_MONITOR("CrsMatrixFactory::Build");
470 
471  if (rowMap->lib() == UseTpetra)
473  colMap,
474  lclGraph,
475  params));
476 
478  }
479 
504  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
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 = Teuchos::null) {
511  XPETRA_MONITOR("CrsMatrixFactory::Build");
512 
513  if (rowMap->lib() == UseTpetra)
515  rowMap,
516  colMap,
517  domainMap,
518  rangeMap,
519  params));
520 
522  }
523 #endif
524 
544  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
545  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
546  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
547  const Teuchos::ArrayRCP<size_t>& rowPointers,
548  const Teuchos::ArrayRCP<LocalOrdinal>& columnIndices,
549  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
550  XPETRA_MONITOR("CrsMatrixFactory::Build");
551 
552  if (rowMap->lib() == UseTpetra)
554  colMap,
555  rowPointers,
556  columnIndices,
557  plist));
558 
560  }
561 };
562 #endif
563 
564 // we need the Epetra specialization only if Epetra is enabled
565 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
566 
567 template <>
568 class CrsGraphFactory<int, long long, EpetraNode> {
569  typedef int LocalOrdinal;
570  typedef long long GlobalOrdinal;
571  typedef EpetraNode Node;
572 
573  private:
576 
577  public:
579  static RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
580  Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap) {
581  XPETRA_MONITOR("CrsMatrixFactory::Build");
582 #ifdef HAVE_XPETRA_TPETRA
583  if (rowMap->lib() == UseTpetra)
584  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, 0));
585 #endif
586 #ifdef HAVE_XPETRA_EPETRA
587  if (rowMap->lib() == UseEpetra)
588  return rcp(new EpetraCrsGraphT<long long, Node>(rowMap));
589 #endif
591  }
592 
593  static RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
594  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& map, size_t maxNumEntriesPerRow) {
595  XPETRA_MONITOR("CrsGraphFactory::Build");
596 
597 #ifdef HAVE_XPETRA_TPETRA
598  if (map->lib() == UseTpetra)
599  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(map, maxNumEntriesPerRow));
600 #endif
601 
602  if (map->lib() == UseEpetra)
603  return rcp(new EpetraCrsGraphT<long long, Node>(map, maxNumEntriesPerRow));
604 
606  TEUCHOS_UNREACHABLE_RETURN(null);
607  }
608 
609  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
610  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) {
611  XPETRA_MONITOR("CrsGraphFactory::Build");
612 
613 #ifdef HAVE_XPETRA_TPETRA
614  if (rowMap->lib() == UseTpetra)
615  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
616 #endif
617 
618  if (rowMap->lib() == UseEpetra)
619  return rcp(new EpetraCrsGraphT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, plist));
620 
622  TEUCHOS_UNREACHABLE_RETURN(null);
623  }
624 
626  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
627  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
628  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
629  size_t maxNumEntriesPerRow,
630  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
631  XPETRA_MONITOR("CrsGraphFactory::Build");
632 
633 #ifdef HAVE_XPETRA_TPETRA
634  if (rowMap->lib() == UseTpetra)
635  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
636 #endif
637  if (rowMap->lib() == UseEpetra)
638  return rcp(new EpetraCrsGraphT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, plist));
639 
641  TEUCHOS_UNREACHABLE_RETURN(null);
642  }
643 
645  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
646  Build(const RCP<const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>& sourceGraph,
648  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
649  const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
650  const RCP<Teuchos::ParameterList>& params = Teuchos::null) {
651 #ifdef HAVE_XPETRA_TPETRA
652  if (sourceGraph->getRowMap()->lib() == UseTpetra)
653  return rcp(new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(sourceGraph, importer, domainMap, rangeMap, params));
654 #endif
655  if (sourceGraph->getRowMap()->lib() == UseTpetra)
656  return rcp(new EpetraCrsGraphT<long long, Node><LocalOrdinal, GlobalOrdinal, Node>(sourceGraph, importer, domainMap, rangeMap, params));
657 
659  TEUCHOS_UNREACHABLE_RETURN(null);
660  }
661 
662 #ifdef HAVE_XPETRA_TPETRA
663  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
683  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
684  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
687  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
688  XPETRA_MONITOR("CrsMatrixFactory::Build");
689 
690  if (rowMap->lib() == UseTpetra)
692  colMap,
693  rowPointers,
694  columnIndices,
695  plist));
696 
698  }
699 
718  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
719  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
720  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
722  const Teuchos::RCP<Teuchos::ParameterList>& params) {
723  XPETRA_MONITOR("CrsMatrixFactory::Build");
724 
725  if (rowMap->lib() == UseTpetra)
727  colMap,
728  lclGraph,
729  params));
730 
732  }
733 
758  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
760  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
761  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
762  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& domainMap = Teuchos::null,
763  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rangeMap = Teuchos::null,
764  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
765  XPETRA_MONITOR("CrsMatrixFactory::Build");
766 
767  if (rowMap->lib() == UseTpetra)
769  rowMap,
770  colMap,
771  domainMap,
772  rangeMap,
773  params));
774 
776  }
777 #endif
778 
798  static Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
799  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& rowMap,
800  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& colMap,
801  const Teuchos::ArrayRCP<size_t>& rowPointers,
802  const Teuchos::ArrayRCP<LocalOrdinal>& columnIndices,
803  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null) {
804  XPETRA_MONITOR("CrsMatrixFactory::Build");
805 
806  if (rowMap->lib() == UseTpetra)
808  colMap,
809  rowPointers,
810  columnIndices,
811  plist));
812 
814  }
815 };
816 #endif
817 } // namespace Xpetra
818 
819 #define XPETRA_CRSGRAPHFACTORY_SHORT
820 #endif
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor specifying column Map and a local (sorted) graph, which the resulting CrsGraph views...
Kokkos::StaticCrsGraph< LocalOrdinal, Kokkos::LayoutLeft, device_type, void, size_t > local_graph_type
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::row_map_type &rowPointers, const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::entries_type::non_const_type &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::row_map_type &rowPointers, const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::entries_type::non_const_type &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &sourceGraph, 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 RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using fused import.
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
static Teuchos::RCP< CrsGraph< 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 Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &sourceGraph, 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 RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using fused import.
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::row_map_type &rowPointers, const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type::entries_type::non_const_type &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...
static Teuchos::RCP< CrsGraph< 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)
static Teuchos::RCP< CrsGraph< 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)
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty graph (intended use is an import/export target - can&#39;t insert entries directly)...
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &map, size_t maxNumEntriesPerRow)
Constructor specifying the number of non-zeros for all rows.
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, 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=Teuchos::null)
Constructor specifying column, domain and range maps, and a local (sorted) graph, which the resulting...
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty graph (intended use is an import/export target - can&#39;t insert entries directly)...
#define XPETRA_FACTORY_END
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &map, size_t maxNumEntriesPerRow)
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor specifying column Map and a local (sorted) graph, which the resulting CrsGraph views...
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap)
Constructor for empty graph (intended use is an import/export target - can&#39;t insert entries directly)...
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::ArrayRCP< size_t > &rowPointers, const Teuchos::ArrayRCP< LocalOrdinal > &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...
static Teuchos::RCP< CrsGraph< 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 number of entries per row.
static Teuchos::RCP< CrsGraph< 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 number of entries per row.
CrsGraphFactory()
Private constructor. This is a static class.
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, 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=Teuchos::null)
Constructor specifying column, domain and range maps, and a local (sorted) graph, which the resulting...
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &map, size_t maxNumEntriesPerRow)
#define XPETRA_MONITOR(funcName)
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::ArrayRCP< size_t > &rowPointers, const Teuchos::ArrayRCP< LocalOrdinal > &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...
CrsGraphFactory()
Private constructor. This is a static class.
CrsGraphFactory()
Private constructor. This is a static class.
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node >> &sourceGraph, 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 RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using fused import.
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const typename Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, 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=Teuchos::null)
Constructor specifying column, domain and range maps, and a local (sorted) graph, which the resulting...
static Teuchos::RCP< CrsGraph< 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 number of entries per row.
static Teuchos::RCP< CrsGraph< 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::CrsGraph< LocalOrdinal, GlobalOrdinal, Node >::local_graph_type &lclGraph, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor specifying column Map and a local (sorted) graph, which the resulting CrsGraph views...
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &colMap, const Teuchos::ArrayRCP< size_t > &rowPointers, const Teuchos::ArrayRCP< LocalOrdinal > &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and arrays containing the graph in sorted, local ids...