All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Xpetra_CrsMatrixFactory.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Xpetra: A linear algebra interface package
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 #ifndef XPETRA_CRSMATRIXFACTORY_HPP
47 #define XPETRA_CRSMATRIXFACTORY_HPP
48 
49 #include "Xpetra_ConfigDefs.hpp"
50 
51 #include "Xpetra_CrsMatrix.hpp"
52 
53 #ifdef HAVE_XPETRA_TPETRA
54 #include "Xpetra_TpetraCrsMatrix.hpp"
55 #endif
56 
57 #ifdef HAVE_XPETRA_EPETRA
59 #endif
60 
61 #include "Xpetra_Exceptions.hpp"
62 
63 namespace Xpetra {
64 
65  template <class Scalar,
66  class LocalOrdinal,
67  class GlobalOrdinal,
70  private:
73 
74  public:
78  size_t maxNumEntriesPerRow,
80  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
81  {
82  XPETRA_MONITOR("CrsMatrixFactory::Build");
83 
84 #ifdef HAVE_XPETRA_TPETRA
85  if (rowMap->lib() == UseTpetra)
86  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
87 #endif
88 
89  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
91  }
92 
96  const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
98  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
99  {
100 #ifdef HAVE_XPETRA_TPETRA
101  if (rowMap->lib() == UseTpetra)
102  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
103 #endif
104 
105  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
107  }
108 
113  size_t maxNumEntriesPerRow,
114  ProfileType pftype = DynamicProfile,
115  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
116  {
117  XPETRA_MONITOR("CrsMatrixFactory::Build");
118 
119 #ifdef HAVE_XPETRA_TPETRA
120  if (rowMap->lib() == UseTpetra)
121  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
122 #endif
123 
124  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
126  }
127 
130  XPETRA_MONITOR("CrsMatrixFactory::Build");
131 
132 #ifdef HAVE_XPETRA_TPETRA
133  if (rowMap->lib() == UseTpetra)
134  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
135 #endif
136 
137  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
139  }
140 
143  XPETRA_MONITOR("CrsMatrixFactory::Build");
144 
145 #ifdef HAVE_XPETRA_TPETRA
146  if (graph->getRowMap()->lib() == UseTpetra)
148 #endif
149 
150  XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
152  }
153 
154 
158  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
159  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
160  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
161  XPETRA_MONITOR("CrsMatrixFactory::Build");
162 
163 #ifdef HAVE_XPETRA_TPETRA
164  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
165  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params));
166 #endif
167 
168  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
170  }
171 
175  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap = Teuchos::null,
176  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap = Teuchos::null,
177  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
178  XPETRA_MONITOR("CrsMatrixFactory::Build");
179 
180 #ifdef HAVE_XPETRA_TPETRA
181  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
182  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params));
183 #endif
184 
185  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
187  }
188 
191  const Import<LocalOrdinal,GlobalOrdinal,Node> &RowImporter,
192  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
193  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
194  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
195  const Teuchos::RCP<Teuchos::ParameterList>& params) {
196  XPETRA_MONITOR("CrsMatrixFactory::Build");
197 
198 #ifdef HAVE_XPETRA_TPETRA
199  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
200  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params));
201 #endif
202 
203  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
205  }
206 
209  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
210  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
211  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap,
212  const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap,
213  const Teuchos::RCP<Teuchos::ParameterList>& params) {
214  XPETRA_MONITOR("CrsMatrixFactory::Build");
215 
216 #ifdef HAVE_XPETRA_TPETRA
217  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
218  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params));
219 #endif
220 
221  XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
223  }
224 
225 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
230  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
231  XPETRA_MONITOR("CrsMatrixFactory::Build");
232 
233 #ifdef HAVE_XPETRA_TPETRA
234  if (rowMap->lib() == UseTpetra)
235  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
236 #endif
237 
238  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
240  }
241  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
243  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
244  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
245  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
246  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
247  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
248  XPETRA_MONITOR("CrsMatrixFactory::Build");
249 
250 #ifdef HAVE_XPETRA_TPETRA
251  if (rowMap->lib() == UseTpetra)
252  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
253 #endif
254 
255  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
257  }
258 #endif
259 
260  };
261 
262 // we need the Epetra specialization only if Epetra is enabled
263 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
264 
265  // Specializtion for SC=double, LO=int, GO=int and Node=EpetraNode
266  // Used both for Epetra and Tpetra
267  template <>
268  class CrsMatrixFactory<double, int, int, EpetraNode> {
269  typedef double Scalar;
270  typedef int LocalOrdinal;
271  typedef int GlobalOrdinal;
272  typedef EpetraNode Node;
273 
274  private:
277 
278  public:
279 
281  XPETRA_MONITOR("CrsMatrixFactory::Build");
282 
283 #ifdef HAVE_XPETRA_TPETRA
284  if (rowMap->lib() == UseTpetra)
285  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
286 #endif
287 
288  if (rowMap->lib() == UseEpetra)
289  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
290 
292  }
293 
295  XPETRA_MONITOR("CrsMatrixFactory::Build");
296 
297 #ifdef HAVE_XPETRA_TPETRA
298  if (rowMap->lib() == UseTpetra)
299  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
300 #endif
301 
302  if (rowMap->lib() == UseEpetra)
303  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
304 
306  }
307 
310  XPETRA_MONITOR("CrsMatrixFactory::Build");
311 
312 #ifdef HAVE_XPETRA_TPETRA
313  if (rowMap->lib() == UseTpetra)
314  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
315 #endif
316 
317  if (rowMap->lib() == UseEpetra)
318  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
319 
321  }
322 
325  XPETRA_MONITOR("CrsMatrixFactory::Build");
326 
327 #ifdef HAVE_XPETRA_TPETRA
328  if (rowMap->lib() == UseTpetra)
329  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
330 #endif
331 
332  if (rowMap->lib() == UseEpetra)
333  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
334 
336  }
337 
340  XPETRA_MONITOR("CrsMatrixFactory::Build");
341 
342 #ifdef HAVE_XPETRA_TPETRA
343  if (graph->getRowMap()->lib() == UseTpetra)
345 #endif
346 
347  if (graph->getRowMap()->lib() == UseEpetra)
348  return rcp( new EpetraCrsMatrixT<int,Node>(graph, plist) );
349 
351  }
352 
353 
358  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
359  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
360  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
361  XPETRA_MONITOR("CrsMatrixFactory::Build");
362 
363 #ifdef HAVE_XPETRA_TPETRA
364  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
365  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
366 #endif
367 
368  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
369  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
370 
372  }
373 
378  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
379  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
380  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
381  XPETRA_MONITOR("CrsMatrixFactory::Build");
382 
383 #ifdef HAVE_XPETRA_TPETRA
384  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
385  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
386 #endif
387 
388  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
389  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
390 
392  }
393 
397  const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
398  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
399  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
400  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
401  const Teuchos::RCP<Teuchos::ParameterList>& params) {
402  XPETRA_MONITOR("CrsMatrixFactory::Build");
403 
404 #ifdef HAVE_XPETRA_TPETRA
405  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
406  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
407 #endif
408 
409  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
410  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
411 
413  }
414 
418  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
419  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
420  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
421  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
422  const Teuchos::RCP<Teuchos::ParameterList>& params) {
423  XPETRA_MONITOR("CrsMatrixFactory::Build");
424 
425 #ifdef HAVE_XPETRA_TPETRA
426  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
427  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
428 #endif
429 
430  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
431  return rcp( new EpetraCrsMatrixT<int,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
432 
434  }
435 
436 
437 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
442  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
443  XPETRA_MONITOR("CrsMatrixFactory::Build");
444 
445 #ifdef HAVE_XPETRA_TPETRA
446  if (rowMap->lib() == UseTpetra)
447  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
448 #endif
449 
450  if (rowMap->lib() == UseEpetra)
451  return rcp( new EpetraCrsMatrixT<int,Node>(rowMap, colMap, lclMatrix, params) );
452 
454  }
455  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
457  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
458  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
459  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
460  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
461  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
462  XPETRA_MONITOR("CrsMatrixFactory::Build");
463 
464 #ifdef HAVE_XPETRA_TPETRA
465  if (rowMap->lib() == UseTpetra)
466  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
467 #endif
468 
469  if (rowMap->lib() == UseEpetra)
470  return rcp( new EpetraCrsMatrixT<int,Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
471 
473  }
474 #endif
475 
476  };
477 #endif
478 
479 // we need the Epetra specialization only if Epetra is enabled
480 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
481 
482  template <>
483  class CrsMatrixFactory<double, int, long long, EpetraNode> {
484  typedef double Scalar;
485  typedef int LocalOrdinal;
486  typedef long long GlobalOrdinal;
487  typedef EpetraNode Node;
488 
489  private:
492 
493  public:
494 
496  XPETRA_MONITOR("CrsMatrixFactory::Build");
497 
498 #ifdef HAVE_XPETRA_TPETRA
499  if (rowMap->lib() == UseTpetra)
500  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
501 #endif
502 
503  if (rowMap->lib() == UseEpetra)
504  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
505 
507  }
508 
510  XPETRA_MONITOR("CrsMatrixFactory::Build");
511 
512 #ifdef HAVE_XPETRA_TPETRA
513  if (rowMap->lib() == UseTpetra)
514  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
515 #endif
516 
517  if (rowMap->lib() == UseEpetra)
518  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
519 
521  }
522 
525  XPETRA_MONITOR("CrsMatrixFactory::Build");
526 
527 #ifdef HAVE_XPETRA_TPETRA
528  if (rowMap->lib() == UseTpetra)
529  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
530 #endif
531 
532  if (rowMap->lib() == UseEpetra)
533  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
534 
536  }
537 
540  XPETRA_MONITOR("CrsMatrixFactory::Build");
541 
542 #ifdef HAVE_XPETRA_TPETRA
543  if (rowMap->lib() == UseTpetra)
544  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
545 #endif
546 
547  if (rowMap->lib() == UseEpetra)
548  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
549 
551  }
552 
555  XPETRA_MONITOR("CrsMatrixFactory::Build");
556 
557 #ifdef HAVE_XPETRA_TPETRA
558  if (graph->getRowMap()->lib() == UseTpetra)
560 #endif
561 
562  if (graph->getRowMap()->lib() == UseEpetra)
563  return rcp( new EpetraCrsMatrixT<long long, Node>(graph, plist) );
564 
566  }
567 
568 
573  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
574  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
575  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
576  XPETRA_MONITOR("CrsMatrixFactory::Build");
577 
578 #ifdef HAVE_XPETRA_TPETRA
579  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
580  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
581 #endif
582 
583  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
584  return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
585 
587  }
588 
593  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null,
594  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,
595  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
596  XPETRA_MONITOR("CrsMatrixFactory::Build");
597 
598 #ifdef HAVE_XPETRA_TPETRA
599  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
600  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
601 #endif
602 
603  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
604  return rcp( new EpetraCrsMatrixT<long long, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
605 
607  }
608 
612  const Import<LocalOrdinal,GlobalOrdinal,Node> & RowImporter,
613  const RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > DomainImporter,
614  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
615  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
616  const Teuchos::RCP<Teuchos::ParameterList>& params) {
617  XPETRA_MONITOR("CrsMatrixFactory::Build");
618 
619 #ifdef HAVE_XPETRA_TPETRA
620  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
621  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
622 #endif
623 
624  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
625  return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowImporter,DomainImporter,domainMap,rangeMap,params) );
626 
628  }
629 
633  const Export<LocalOrdinal,GlobalOrdinal,Node> &RowExporter,
634  const RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> > DomainExporter,
635  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap,
636  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap,
637  const Teuchos::RCP<Teuchos::ParameterList>& params) {
638  XPETRA_MONITOR("CrsMatrixFactory::Build");
639 
640 #ifdef HAVE_XPETRA_TPETRA
641  if (sourceMatrix->getRowMap()->lib() == UseTpetra)
642  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
643 #endif
644 
645  if (sourceMatrix->getRowMap()->lib() == UseEpetra)
646  return rcp( new EpetraCrsMatrixT<long long,Node>(sourceMatrix,RowExporter,DomainExporter,domainMap,rangeMap,params) );
647 
649  }
650 
651 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
656  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
657  XPETRA_MONITOR("CrsMatrixFactory::Build");
658 
659 #ifdef HAVE_XPETRA_TPETRA
660  if (rowMap->lib() == UseTpetra)
661  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, lclMatrix, params));
662 #endif
663 
664  if (rowMap->lib() == UseEpetra)
665  return rcp( new EpetraCrsMatrixT<long long, Node>(rowMap, colMap, lclMatrix, params) );
666 
668  }
669  static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build (
671  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rowMap,
672  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& colMap,
673  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& domainMap = Teuchos::null,
674  const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >& rangeMap = Teuchos::null,
675  const Teuchos::RCP<Teuchos::ParameterList>& params = null) {
676  XPETRA_MONITOR("CrsMatrixFactory::Build");
677 
678 #ifdef HAVE_XPETRA_TPETRA
679  if (rowMap->lib() == UseTpetra)
680  return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params));
681 #endif
682 
683  if (rowMap->lib() == UseEpetra)
684  return rcp( new EpetraCrsMatrixT<long long, Node>(lclMatrix, rowMap, colMap, domainMap, rangeMap, params) );
685 
687  }
688 #endif
689 
690  };
691 #endif
692 
693 }
694 
695 #define XPETRA_CRSMATRIXFACTORY_SHORT
696 #endif
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Import< LocalOrdinal, GlobalOrdinal, Node > &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, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype=Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying fixed number of entries for each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, size_t maxNumEntriesPerRow, ProfileType pftype=DynamicProfile, 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 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 Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=Xpetra::DynamicProfile, 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 > &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.
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying a previously constructed graph.
CrsMatrixFactory()
Private constructor. This is a static class.
CrsMatrixFactory()
Private constructor. This is a static class.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, size_t maxNumEntriesPerRow, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and fixed number of entries for each row.
CrsMatrixFactory()
Private constructor. This is a static class.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
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 > &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 RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype=Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
#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 > &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 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 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 > &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 Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, 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 > &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.
#define XPETRA_MONITOR(funcName)
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap=Teuchos::null, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Constructor using FusedExport.
static RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const 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 RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype=Xpetra::DynamicProfile, 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, ProfileType pftype=DynamicProfile, 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, ProfileType pftype=Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying (possibly different) number of entries in each row.