diff --git a/dune/tectonic/spatial-solving/makelinearsolver.hh b/dune/tectonic/spatial-solving/makelinearsolver.hh index ada0083548dbc7f95c8b3f69092d72fd301f8ae6..3c5fc0297486ec06e3e149142e202a4313ae3383 100644 --- a/dune/tectonic/spatial-solving/makelinearsolver.hh +++ b/dune/tectonic/spatial-solving/makelinearsolver.hh @@ -57,8 +57,8 @@ auto makeLinearSolver(const Dune::ParameterTree& parset, const ContactNetwork& c auto linearSolver = std::make_shared<LinearSolver>(cgStep, parset_.template get<int>("solver.tnnmg.main.multi"), parset_.template get<double>("solver.tnnmg.preconditioner.basesolver.tolerance"), norm, Solver::QUIET); */ - // set multigrid solver - auto smoother = TruncatedBlockGSStep<Matrix, Vector>(); + + // transfer operators need to be recomputed on change due to setDeformation() using TransferOperator = NBodyContactTransfer<ContactNetwork, Vector>; @@ -76,11 +76,9 @@ auto makeLinearSolver(const Dune::ParameterTree& parset, const ContactNetwork& c auto linearMultigridStep = std::make_shared<Dune::Solvers::MultigridStep<Matrix, Vector> >(); linearMultigridStep->setMGType(1, 3, 3); - linearMultigridStep->setSmoother(smoother); + linearMultigridStep->setSmoother(TruncatedBlockGSStep<Matrix, Vector>()); linearMultigridStep->setTransferOperators(transfer); - Norm norm(*linearMultigridStep); - - return std::make_shared<LinearSolver>(linearMultigridStep, parset.template get<int>("solver.tnnmg.main.multi"), parset.template get<double>("solver.tnnmg.preconditioner.basesolver.tolerance"), norm, Solver::QUIET); + return std::make_shared<LinearSolver>(linearMultigridStep, parset.template get<int>("solver.tnnmg.main.multi"), parset.template get<double>("solver.tnnmg.preconditioner.basesolver.tolerance"), Norm(*linearMultigridStep), Solver::QUIET); } #endif