Skip to content
Snippets Groups Projects
solverfactory.hh 1.74 KiB
Newer Older
#ifndef SRC_SOLVERFACTORY_HH
#define SRC_SOLVERFACTORY_HH

#include <dune/common/bitsetvector.hh>
#include <dune/common/parametertree.hh>

Elias Pipping's avatar
Elias Pipping committed
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsign-compare"
#include <dune/solvers/iterationsteps/multigridstep.hh>
Elias Pipping's avatar
Elias Pipping committed
#pragma clang diagnostic pop

#include <dune/solvers/iterationsteps/truncatedblockgsstep.hh>
#include <dune/solvers/norms/energynorm.hh>
#include <dune/solvers/solvers/loopsolver.hh>
#include <dune/solvers/transferoperators/compressedmultigridtransfer.hh>
#include <dune/tnnmg/iterationsteps/genericnonlineargs.hh>
#include <dune/tnnmg/iterationsteps/tnnmgstep.hh>

template <size_t dim, class BlockProblemTEMPLATE, class Grid>
class SolverFactory {
  using BlockProblem = BlockProblemTEMPLATE;
  using ConvexProblem = typename BlockProblem::ConvexProblemType;
  using Vector = typename BlockProblem::VectorType;
  using Matrix = typename BlockProblem::MatrixType;
  using NonlinearSmoother = GenericNonlinearGS<BlockProblem>;
  using Solver =
      TruncatedNonsmoothNewtonMultigrid<BlockProblem, NonlinearSmoother>;
  SolverFactory(Dune::ParameterTree const &parset, size_t refinements,
                Grid const &grid, Dune::BitSetVector<dim> const &ignoreNodes);
  ~SolverFactory();
  Solver *getSolver();
  TruncatedBlockGSStep<Matrix, Vector> linearBaseSolverStep;
  EnergyNorm<Matrix, Vector> baseEnergyNorm;
  LoopSolver<Vector> linearBaseSolver;
  TruncatedBlockGSStep<Matrix, Vector> linearPresmoother;
  TruncatedBlockGSStep<Matrix, Vector> linearPostsmoother;
  MultigridStep<Matrix, Vector> linearIterationStep;
  std::vector<CompressedMultigridTransfer<Vector> *> transferOperators;
  NonlinearSmoother nonlinearSmoother;
  Solver *multigridStep;