All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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,
69  private:
72 
73  public:
76  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &map, size_t NumVectors, ProfileType pftype=DynamicProfile) {
77  XPETRA_MONITOR("CrsGraphFactory::Build");
78 
79 #ifdef HAVE_XPETRA_TPETRA
80  if (map->lib() == UseTpetra)
81  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node> (map, NumVectors, pftype) );
82 #endif
83 
87  }
88 
93  const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc,
95  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
96  XPETRA_MONITOR("CrsGraphFactory::Build");
97 
98 #ifdef HAVE_XPETRA_TPETRA
99  if (rowMap->lib() == UseTpetra)
100  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
101 #endif
102 
103  XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
106  }
107 
108 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
109 #ifdef HAVE_XPETRA_TPETRA
134  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
135  XPETRA_MONITOR("CrsMatrixFactory::Build");
136 
137  if (rowMap->lib() == UseTpetra)
139  colMap,
140  rowPointers,
141  columnIndices,
142  plist));
143 
145  }
146 
166  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
167  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
169  const Teuchos::RCP<Teuchos::ParameterList>& params) {
170  XPETRA_MONITOR("CrsMatrixFactory::Build");
171 
172  if (rowMap->lib() == UseTpetra)
173  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap,
174  colMap,
175  lclGraph,
176  params));
177 
179  }
180 
207  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
208  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
209  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
210  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
211  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
212  XPETRA_MONITOR("CrsMatrixFactory::Build");
213 
214  if (rowMap->lib() == UseTpetra)
215  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(lclGraph,
216  rowMap,
217  colMap,
218  domainMap,
219  rangeMap,
220  params));
221 
223  }
224 #endif
225 #endif
226 
227  };
228 
229 // we need the Epetra specialization only if Epetra is enabled
230 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
231 
232  template <>
233  class CrsGraphFactory<int, int, EpetraNode> {
234 
235  typedef int LocalOrdinal;
236  typedef int GlobalOrdinal;
237  typedef EpetraNode Node;
238 
239  private:
242 
243  public:
244 
246  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &map, size_t NumVectors, ProfileType pftype=DynamicProfile) {
247  XPETRA_MONITOR("CrsGraphFactory::Build");
248 
249 #ifdef HAVE_XPETRA_TPETRA
250  if (map->lib() == UseTpetra)
251  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node> (map, NumVectors, pftype) );
252 #endif
253 
254  if (map->lib() == UseEpetra)
255  return rcp( new EpetraCrsGraphT<int, Node>(map, NumVectors, pftype) );
256 
259  }
260 
263  XPETRA_MONITOR("CrsGraphFactory::Build");
264 
265 #ifdef HAVE_XPETRA_TPETRA
266  if (rowMap->lib() == UseTpetra)
267  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
268 #endif
269 
270  if (rowMap->lib() == UseEpetra)
271  return rcp( new EpetraCrsGraphT<int, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
272 
275  }
276 
277 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
278 #ifdef HAVE_XPETRA_TPETRA
303  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
304  XPETRA_MONITOR("CrsMatrixFactory::Build");
305 
306  if (rowMap->lib() == UseTpetra)
308  colMap,
309  rowPointers,
310  columnIndices,
311  plist));
312 
314  }
315 
335  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
336  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
338  const Teuchos::RCP<Teuchos::ParameterList>& params) {
339  XPETRA_MONITOR("CrsMatrixFactory::Build");
340 
341  if (rowMap->lib() == UseTpetra)
342  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap,
343  colMap,
344  lclGraph,
345  params));
346 
348  }
349 
376  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
377  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
378  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
379  const Teuchos::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  if (rowMap->lib() == UseTpetra)
384  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(lclGraph,
385  rowMap,
386  colMap,
387  domainMap,
388  rangeMap,
389  params));
390 
392  }
393 #endif
394 #endif
395 
396  };
397 #endif
398 
399 // we need the Epetra specialization only if Epetra is enabled
400 #if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
401 
402  template <>
403  class CrsGraphFactory<int, long long, EpetraNode> {
404 
405  typedef int LocalOrdinal;
406  typedef long long GlobalOrdinal;
407  typedef EpetraNode Node;
408 
409  private:
412 
413  public:
414 
416  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &map, size_t NumVectors, ProfileType pftype=DynamicProfile) {
417  XPETRA_MONITOR("CrsGraphFactory::Build");
418 
419 #ifdef HAVE_XPETRA_TPETRA
420  if (map->lib() == UseTpetra)
421  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node> (map, NumVectors, pftype) );
422 #endif
423 
424  if (map->lib() == UseEpetra)
425  return rcp( new EpetraCrsGraphT<long long, Node>(map, NumVectors, pftype) );
426 
429  }
430 
433  XPETRA_MONITOR("CrsGraphFactory::Build");
434 
435 #ifdef HAVE_XPETRA_TPETRA
436  if (rowMap->lib() == UseTpetra)
437  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
438 #endif
439 
440  if (rowMap->lib() == UseEpetra)
441  return rcp( new EpetraCrsGraphT<long long, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
442 
445  }
446 
447 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
448 #ifdef HAVE_XPETRA_TPETRA
473  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
474  XPETRA_MONITOR("CrsMatrixFactory::Build");
475 
476  if (rowMap->lib() == UseTpetra)
478  colMap,
479  rowPointers,
480  columnIndices,
481  plist));
482 
484  }
485 
505  Build(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
506  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
508  const Teuchos::RCP<Teuchos::ParameterList>& params) {
509  XPETRA_MONITOR("CrsMatrixFactory::Build");
510 
511  if (rowMap->lib() == UseTpetra)
512  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(rowMap,
513  colMap,
514  lclGraph,
515  params));
516 
518  }
519 
546  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
547  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
548  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
549  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
550  const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
551  XPETRA_MONITOR("CrsMatrixFactory::Build");
552 
553  if (rowMap->lib() == UseTpetra)
554  return rcp( new TpetraCrsGraph<LocalOrdinal, GlobalOrdinal, Node>(lclGraph,
555  rowMap,
556  colMap,
557  domainMap,
558  rangeMap,
559  params));
560 
562  }
563 #endif
564 #endif
565 
566  };
567 #endif
568 }
569 
570 #define XPETRA_CRSGRAPHFACTORY_SHORT
571 #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 ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, ProfileType pftype=DynamicProfile)
Constructor specifying the number of non-zeros for all rows.
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, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, ProfileType pftype=DynamicProfile)
#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, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
static RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, ProfileType pftype=DynamicProfile)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
#define XPETRA_FACTORY_END
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
CrsGraphFactory()
Private constructor. This is a static class.
#define XPETRA_MONITOR(funcName)
CrsGraphFactory()
Private constructor. This is a static class.
CrsGraphFactory()
Private constructor. This is a static class.