MueLu Version of the Day
Loading...
Searching...
No Matches
MueLu_MLParameterListInterpreter_decl.hpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// MueLu: A package for multigrid based preconditioning
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
47#ifndef MUELU_MLPARAMETERLISTINTERPRETER_DECL_HPP
48#define MUELU_MLPARAMETERLISTINTERPRETER_DECL_HPP
49
50#include <Teuchos_ParameterList.hpp>
51
52#include <Xpetra_Matrix_fwd.hpp>
53#include <Xpetra_MultiVector_fwd.hpp>
54#include <Xpetra_Operator_fwd.hpp>
55
56#include "MueLu_ConfigDefs.hpp"
59
62
81
82#if defined(HAVE_MUELU_ISORROPIA) && defined(HAVE_MPI)
89#endif
90
91namespace MueLu {
92
93 /*
94 Utility that from an existing Teuchos::ParameterList creates a new list, in
95 which level-specific parameters are replaced with sublists.
96
97 Currently, level-specific parameters that begin with "smoother:"
98 or "aggregation:" are placed in sublists. Coarse options are also placed
99 in a coarse list.
100
101 Example:
102 Input:
103 smoother: type (level 0) = symmetric Gauss-Seidel
104 smoother: sweeps (level 0) = 1
105 Output:
106 smoother: list (level 0) ->
107 smoother: type = symmetric Gauss-Seidel
108 smoother: sweeps = 1
109 */
110 // This function is a copy of ML_CreateSublists to avoid dependency on ML
111 // Throw exception on error instead of exit()
112 void CreateSublists(const ParameterList &List, ParameterList &newList);
113
114
124 template <class Scalar = DefaultScalar,
127 class Node = DefaultNode>
128 class MLParameterListInterpreter : public HierarchyManager<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
129#undef MUELU_MLPARAMETERLISTINTERPRETER_SHORT
131
132 public:
134
135
138
147 MLParameterListInterpreter(Teuchos::ParameterList & paramList, Teuchos::RCP<const Teuchos::Comm<int> > comm = Teuchos::null, std::vector<RCP<FactoryBase> > factoryList = std::vector<RCP<FactoryBase> >(0));
148
156 MLParameterListInterpreter(const std::string & xmlFileName,std::vector<RCP<FactoryBase> > factoryList = std::vector<RCP<FactoryBase> >(0));
157
160
162
164
165 void SetParameterList(const Teuchos::ParameterList & paramList);
166
168
170
172 virtual void SetupHierarchy(Hierarchy & H) const;
173
175
177
180
181
183 // @param AFact: Factory used by smoother to find 'A'
184 static RCP<SmootherFactory> GetSmootherFactory(const Teuchos::ParameterList & paramList, const RCP<FactoryBase> & AFact = Teuchos::null);
185
187
188
190
191
197 void AddTransferFactory(const RCP<FactoryBase> & factory);
198
200 size_t NumTransferFactories() const;
202
203 private:
204
207 double* nullspace_; //TODO: replace by Teuchos::ArrayRCP<>
208
210 double* xcoord_;
211 double* ycoord_;
212 double* zcoord_;
213
218 std::vector<RCP<FactoryBase> > TransferFacts_;
219
221
223 virtual void SetupOperator(Operator & Op) const;
224
227
229
230 }; // class MLParameterListInterpreter
231
232} // namespace MueLu
233
234#define MUELU_MLPARAMETERLISTINTERPRETER_SHORT
235#endif /* MUELU_MLPARAMETERLISTINTERPRETER_DECL_HPP */
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Class that accepts ML-style parameters and builds a MueLu preconditioner. This interpreter uses the s...
void AddTransferFactory(const RCP< FactoryBase > &factory)
Add transfer factory in the end of list of transfer factories for RAPFactory.
double * xcoord_
coordinates can be embedded in the ML parameter list
void SetParameterList(const Teuchos::ParameterList &paramList)
static RCP< SmootherFactory > GetSmootherFactory(const Teuchos::ParameterList &paramList, const RCP< FactoryBase > &AFact=Teuchos::null)
Read smoother options and build the corresponding smoother factory.
size_t NumTransferFactories() const
Returns number of transfer factories.
virtual void SetupHierarchy(Hierarchy &H) const
Setup Hierarchy object.
int nullspaceDim_
nullspace can be embedded in the ML parameter list
virtual void SetupOperator(Operator &Op) const
Setup Operator object.
Namespace for MueLu classes and methods.
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
void CreateSublists(const ParameterList &List, ParameterList &newList)
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar