10#ifndef MUELU_SHIFTEDLAPLACIAN_DEF_HPP
11#define MUELU_SHIFTEDLAPLACIAN_DEF_HPP
15#include <MueLu_AmalgamationFactory.hpp>
16#include <MueLu_CoalesceDropFactory.hpp>
17#include <MueLu_CoarseMapFactory.hpp>
18#include <MueLu_CoupledRBMFactory.hpp>
19#include <MueLu_DirectSolver.hpp>
20#include <MueLu_GenericRFactory.hpp>
21#include <MueLu_Hierarchy.hpp>
22#include <MueLu_Ifpack2Smoother.hpp>
23#include <MueLu_PFactory.hpp>
24#include <MueLu_PgPFactory.hpp>
25#include <MueLu_RAPFactory.hpp>
26#include <MueLu_RAPShiftFactory.hpp>
27#include <MueLu_SaPFactory.hpp>
28#include <MueLu_ShiftedLaplacian.hpp>
29#include <MueLu_ShiftedLaplacianOperator.hpp>
30#include <MueLu_SmootherFactory.hpp>
31#include <MueLu_SmootherPrototype.hpp>
32#include <MueLu_TentativePFactory.hpp>
33#include <MueLu_TransPFactory.hpp>
34#include <MueLu_UncoupledAggregationFactory.hpp>
35#include <MueLu_Utilities.hpp>
40template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
44template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
48 numLevels_ = paramList->get(
"MueLu: levels", 3);
49 int stype = paramList->get(
"MueLu: smoother", 8);
52 }
else if (stype == 2) {
54 }
else if (stype == 3) {
56 }
else if (stype == 4) {
58 }
else if (stype == 5) {
60 }
else if (stype == 6) {
62 }
else if (stype == 7) {
64 }
else if (stype == 8) {
66 }
else if (stype == 9) {
68 }
else if (stype == 10) {
75 ncycles_ = paramList->get(
"MueLu: cycles", 1);
76 iters_ = paramList->get(
"MueLu: iterations", 500);
77 solverType_ = paramList->get(
"MueLu: solver type", 1);
89 int combinemode = paramList->get(
"MueLu: combine mode", 1);
90 if (combinemode == 0) {
95 tol_ = paramList->get(
"MueLu: tolerance", 0.001);
98template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
101 if (
A_ != Teuchos::null)
107template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
114template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
122 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraP));
123 P_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
127template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
134 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraK));
135 K_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
138template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
143template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
145 RCP<Xpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Atmp = rcp(
new Xpetra::TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(TpetraM));
146 M_ = rcp(
new Xpetra::CrsMatrixWrap<Scalar, LocalOrdinal, GlobalOrdinal, Node>(Atmp));
149template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
154template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
159template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
166template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
181 Teuchos::ParameterList params;
182 params.set(
"lightweight wrap",
true);
183 params.set(
"aggregation: drop scheme",
"classical");
201 precList_.set(
"relaxation: type",
"Jacobi");
204 }
else if (
Smoother_ ==
"gauss-seidel") {
206 precList_.set(
"relaxation: type",
"Gauss-Seidel");
209 }
else if (
Smoother_ ==
"symmetric gauss-seidel") {
211 precList_.set(
"relaxation: type",
"Symmetric Gauss-Seidel");
220 precList_.set(
"krylov: residual tolerance", 1.0e-8);
272#if defined(HAVE_AMESOS2_SUPERLU)
274#elif defined(HAVE_AMESOS2_KLU2)
276#elif defined(HAVE_AMESOS2_SUPERLUDIST)
289 if (
K_ != Teuchos::null) {
290 Manager_->SetFactory(
"Smoother", Teuchos::null);
291 Manager_->SetFactory(
"CoarseSolver", Teuchos::null);
323 BelosList_ = rcp(
new Teuchos::ParameterList(
"GMRES"));
326 BelosList_->set(
"Verbosity", Belos::Errors + Belos::Warnings + Belos::StatusTestDetails);
328 BelosList_->set(
"Output Style", Belos::Brief);
334template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
345template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
362template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
378template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
388 std::string solverName;
391 solverName =
"Block GMRES";
393 solverName =
"Recycling GMRES";
395 solverName =
"Flexible GMRES";
402template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
408template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
417template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
419 RCP<MultiVector>& X) {
425template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
427 RCP<Tpetra::MultiVector<SC, LO, GO, NO> >& X) {
428 Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > XpetraX = Teuchos::rcp(
new Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(X));
429 Teuchos::RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> > XpetraB = Teuchos::rcp(
new Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(B));
431 Hierarchy_->Iterate(*XpetraB, *XpetraX, 1,
true, 0);
435template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
442template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
443typename Teuchos::ScalarTraits<Scalar>::magnitudeType
445 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType MT;
452#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.