MueLu Version of the Day
Loading...
Searching...
No Matches
MueLu_Details_registerLinearSolverFactory.cpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// MueLu: A package for multigrid based preconditioning
6// Copyright 2011 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 Michael A. Heroux (maherou@sandia.gov)
39//
40// ***********************************************************************
41//
42// @HEADER
43
46// TODO amk: Does MueLu have a required dependency on Tpetra?
47#ifdef HAVE_MUELU_TPETRA
48# include "Tpetra_MultiVector.hpp"
49# include "Tpetra_Operator.hpp"
50#endif // HAVE_MUELU_TPETRA
51#ifdef HAVE_MUELU_EPETRA
52# include "Epetra_MultiVector.h"
53# include "Epetra_Operator.h"
54#endif
55#include "TpetraCore_ETIHelperMacros.h"
56
57// Define Tpetra instantiation macros and typedefs that make the
58// macros work. The fix for Bug 6380 makes this work whether or not
59// ETI is ON. We use the Tpetra macros because MueLu doesn't have
60// its own macos.
61TPETRA_ETI_MANGLING_TYPEDEFS()
62
63// Macro that registers MueLu's LinearSolverFactory for Tpetra
64// objects, for the given four template parameters (Scalar = SC,
65// LocalOrdinal = LO, GlobalOrdinal = GO, Node = NT). The macro is
66// local to this file.
67//
68// NOTE: This macro does NOT do explicit instantiation! That's why I
69// call it LCL_CALL and not LCL_INST. We are just using the macros to
70// invoke this class method over the set of enabled template
71// parameters.
72#define LCL_CALL( SC, LO, GO, NT ) \
73 ::MueLu::Details::LinearSolverFactory<Tpetra::MultiVector<SC, LO, GO, NT>, \
74 Tpetra::Operator<SC, LO, GO, NT>, \
75 typename Tpetra::MultiVector<SC, LO, GO, NT>::mag_type>::registerLinearSolverFactory ();
76
77namespace MueLu {
78namespace Details {
79
80void
82{
83 // Fill in the body of the function with all the type-specific
84 // run-time registration functions, for registering MueLu's
85 // LinearSolverFactory with Tpetra objects.
86 TPETRA_INSTANTIATE_SLGN_NO_ORDINAL_SCALAR( LCL_CALL )
87
88 // If Epetra is enabled in MueLu, also register MueLu's
89 // LinearSolverFactory for Epetra objects.
90#ifdef HAVE_MUELU_EPETRA
93#endif // HAVE_MUELU_EPETRA
94}
95
96} // namespace Details
97} // namespace MueLu
#define LCL_CALL(SC, LO, GO, NT)
Declaration of MueLu::Details::registerLinearSolverFactory.
Interface for a "factory" that creates MueLu solvers.
void registerLinearSolverFactory()
Register MueLu's LinearSolverFactory with the central repository, for all enabled combinations of tem...
Namespace for MueLu classes and methods.