MueLu
Version of the Day
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
44
#include "
MueLu_Details_registerLinearSolverFactory.hpp
"
45
#include "
MueLu_Details_LinearSolverFactory.hpp
"
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.
61
TPETRA_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
77
namespace
MueLu
{
78
namespace
Details {
79
80
void
81
registerLinearSolverFactory
()
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
91
::MueLu::Details::LinearSolverFactory
<
Epetra_MultiVector
,
92
Epetra_Operator
,
double
>
::registerLinearSolverFactory
();
93
#endif // HAVE_MUELU_EPETRA
94
}
95
96
}
// namespace Details
97
}
// namespace MueLu
MueLu_Details_registerLinearSolverFactory.hpp
Declaration of MueLu::Details::registerLinearSolverFactory.
MueLu::Details::LinearSolverFactory
Interface for a "factory" that creates MueLu solvers.
Definition:
MueLu_Details_LinearSolverFactory_decl.hpp:77
MueLu
Namespace for MueLu classes and methods.
Definition:
MueLu_BrickAggregationFactory_decl.hpp:76
LCL_CALL
#define LCL_CALL(SC, LO, GO, NT)
Definition:
MueLu_Details_registerLinearSolverFactory.cpp:72
MueLu_Details_LinearSolverFactory.hpp
Epetra_MultiVector
MueLu::Details::registerLinearSolverFactory
void registerLinearSolverFactory()
Register MueLu's LinearSolverFactory with the central repository, for all enabled combinations of tem...
Definition:
MueLu_Details_registerLinearSolverFactory.cpp:81
Epetra_Operator
adapters
linear_solver_factory
MueLu_Details_registerLinearSolverFactory.cpp
Generated on Thu Feb 27 2020 16:06:46 for MueLu by
1.8.16