10#ifndef MUELU_SHIFTEDLAPLACIAN_DEF_HPP
11#define MUELU_SHIFTEDLAPLACIAN_DEF_HPP
15#if defined(HAVE_MUELU_IFPACK2) and defined(HAVE_MUELU_TPETRA)
17#include <MueLu_AmalgamationFactory.hpp>
18#include <MueLu_CoalesceDropFactory.hpp>
19#include <MueLu_CoarseMapFactory.hpp>
20#include <MueLu_CoupledRBMFactory.hpp>
21#include <MueLu_DirectSolver.hpp>
22#include <MueLu_GenericRFactory.hpp>
23#include <MueLu_Hierarchy.hpp>
24#include <MueLu_Ifpack2Smoother.hpp>
25#include <MueLu_PFactory.hpp>
26#include <MueLu_PgPFactory.hpp>
27#include <MueLu_RAPFactory.hpp>
28#include <MueLu_RAPShiftFactory.hpp>
29#include <MueLu_SaPFactory.hpp>
30#include <MueLu_ShiftedLaplacian.hpp>
31#include <MueLu_ShiftedLaplacianOperator.hpp>
32#include <MueLu_SmootherFactory.hpp>
33#include <MueLu_SmootherPrototype.hpp>
34#include <MueLu_TentativePFactory.hpp>
35#include <MueLu_TransPFactory.hpp>
36#include <MueLu_UncoupledAggregationFactory.hpp>
37#include <MueLu_Utilities.hpp>
42template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
46template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
50 numLevels_ = paramList->get(
"MueLu: levels", 3);
51 int stype = paramList->get(
"MueLu: smoother", 8);
54 }
else if (stype == 2) {
56 }
else if (stype == 3) {
58 }
else if (stype == 4) {
60 }
else if (stype == 5) {
62 }
else if (stype == 6) {
64 }
else if (stype == 7) {
66 }
else if (stype == 8) {
68 }
else if (stype == 9) {
70 }
else if (stype == 10) {
77 ncycles_ = paramList->get(
"MueLu: cycles", 1);
78 iters_ = paramList->get(
"MueLu: iterations", 500);
79 solverType_ = paramList->get(
"MueLu: solver type", 1);
91 int combinemode = paramList->get(
"MueLu: combine mode", 1);
92 if (combinemode == 0) {
97 tol_ = paramList->get(
"MueLu: tolerance", 0.001);
100template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
103 if (
A_ != Teuchos::null)
109template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
116template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
122template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
124 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraP));
125 P_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
129template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
134template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
136 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraK));
137 K_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
140template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
145template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
147 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraM));
148 M_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
151template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
156template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
161template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
168template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
183 Teuchos::ParameterList params;
184 params.set(
"lightweight wrap",
true);
185 params.set(
"aggregation: drop scheme",
"classical");
203 precList_.set(
"relaxation: type",
"Jacobi");
206 }
else if (
Smoother_ ==
"gauss-seidel") {
208 precList_.set(
"relaxation: type",
"Gauss-Seidel");
211 }
else if (
Smoother_ ==
"symmetric gauss-seidel") {
213 precList_.set(
"relaxation: type",
"Symmetric Gauss-Seidel");
222 precList_.set(
"krylov: residual tolerance", 1.0e-8);
274#if defined(HAVE_MUELU_AMESOS2) and defined(HAVE_AMESOS2_SUPERLU)
276#elif defined(HAVE_MUELU_AMESOS2) and defined(HAVE_AMESOS2_KLU2)
278#elif defined(HAVE_MUELU_AMESOS2) and defined(HAVE_AMESOS2_SUPERLUDIST)
291 if (
K_ != Teuchos::null) {
292 Manager_->SetFactory(
"Smoother", Teuchos::null);
293 Manager_->SetFactory(
"CoarseSolver", Teuchos::null);
325 BelosList_ = rcp(
new Teuchos::ParameterList(
"GMRES"));
328 BelosList_->set(
"Verbosity", Belos::Errors + Belos::Warnings + Belos::StatusTestDetails);
330 BelosList_->set(
"Output Style", Belos::Brief);
336template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
347template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
364template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
380template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
390 std::string solverName;
393 solverName =
"Block GMRES";
395 solverName =
"Recycling GMRES";
397 solverName =
"Flexible GMRES";
404template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
410template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
419template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
421 RCP<MultiVector>& X) {
427template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
429 RCP<Tpetra::MultiVector<SC, LO, GO, NO> >& X) {
430 Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > XpetraX = Teuchos::rcp(
new Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(X));
431 Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > XpetraB = Teuchos::rcp(
new Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(B));
433 Hierarchy_->Iterate(*XpetraB, *XpetraX, 1,
true, 0);
437template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
444template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
445typename Teuchos::ScalarTraits<Scalar>::magnitudeType
447 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType MT;
454#define MUELU_SHIFTEDLAPLACIAN_SHORT
AmalgamationFactory for subblocks of strided map based amalgamation data.
Factory for creating a graph based on a given matrix.
Factory for generating coarse level map. Used by TentativePFactory.
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
This class specifies the default factory that should generate some data on a Level if the data does n...
Factory for building restriction operators using a prolongator factory.
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Class that encapsulates Ifpack2 smoothers.
Factory for building Petrov-Galerkin Smoothed Aggregation prolongators.
Factory for building coarse matrices.
Factory for building coarse grid matrices, when the matrix is of the form K+a*M. Useful when you want...
Factory for building Smoothed Aggregation prolongators.
void setPreconditioningMatrix(RCP< Matrix > &P)
RCP< TransPFactory > TransPfact_
RCP< MultiVector > NullSpace_
void setmass(RCP< Matrix > &M)
RCP< Tpetra::CrsMatrix< SC, LO, GO, NO > > TpetraA_
double ilu_diagpivotthresh_
std::string ilu_normtype_
int krylov_preconditioner_
RCP< CoarseMapFactory > CoarseMapfact_
std::string ilu_milutype_
RCP< GenericRFactory > Rfact_
void resetLinearProblem()
RCP< MultiVector > Coords_
RCP< LinearProblem > LinearProblem_
void setNullSpace(RCP< MultiVector > NullSpace)
RCP< RAPFactory > Acfact_
RCP< MueLu::ShiftedLaplacianOperator< SC, LO, GO, NO > > MueLuOp_
RCP< SmootherPrototype > coarsestSmooProto_
std::vector< SC > levelshifts_
RCP< RAPShiftFactory > Acshift_
void setcoords(RCP< MultiVector > &Coords)
Belos::LinearProblem< SC, TMV, OP > LinearProblem
Teuchos::ScalarTraits< Scalar >::magnitudeType GetResidual()
RCP< TentativePFactory > TentPfact_
Teuchos::ParameterList precList_
RCP< UncoupledAggregationFactory > UCaggfact_
RCP< SmootherPrototype > smooProto_
RCP< SmootherFactory > smooFact_
void setLevelShifts(std::vector< Scalar > levelshifts)
void setParameters(Teuchos::RCP< Teuchos::ParameterList > paramList)
std::string schwarz_ordermethod_
RCP< FactoryManager > Manager_
virtual ~ShiftedLaplacian()
RCP< SolverManager > SolverManager_
void setstiff(RCP< Matrix > &K)
void setProblemMatrix(RCP< Matrix > &A)
void multigrid_apply(const RCP< MultiVector > B, RCP< MultiVector > &X)
Teuchos::ParameterList coarsestSmooList_
RCP< Hierarchy > Hierarchy_
Belos::SolverFactory< SC, TMV, OP > SolverFactory
RCP< SolverFactory > SolverFactory_
RCP< Teuchos::ParameterList > BelosList_
RCP< AmalgamationFactory > Amalgfact_
std::string ilu_drop_rule_
RCP< CoalesceDropFactory > Dropfact_
RCP< SmootherFactory > coarsestSmooFact_
RCP< PgPFactory > PgPfact_
Tpetra::CombineMode schwarz_combinemode_
Belos::ReturnType solve(const RCP< TMV > B, RCP< TMV > &X)
Wraps an existing MueLu::Hierarchy as a Tpetra::Operator, with an optional two-level correction....
Generic Smoother Factory for generating the smoothers of the MG hierarchy.
Factory for building tentative prolongator.
Factory for building restriction operators.
Factory for building uncoupled aggregates.
Namespace for MueLu classes and methods.