diff --git a/src/spatial-solving/fixedpointiterator.cc b/src/spatial-solving/fixedpointiterator.cc index 54a251f07d6eb9100c7cbace9af9b5ce01f2a648..e4b62db5b2592eec139acf4171f5a538333a20d4 100644 --- a/src/spatial-solving/fixedpointiterator.cc +++ b/src/spatial-solving/fixedpointiterator.cc @@ -34,11 +34,9 @@ void FixedPointIterationCounter::operator+=( template <class Factory, class Updaters, class ErrorNorm> FixedPointIterator<Factory, Updaters, ErrorNorm>::FixedPointIterator( - const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler, Factory &factory, Dune::ParameterTree const &parset, std::shared_ptr<Nonlinearity> globalFriction, ErrorNorm const &errorNorm) - : nBodyAssembler_(nBodyAssembler), - step_(factory.getStep()), + : step_(factory.getStep()), parset_(parset), globalFriction_(globalFriction), fixedPointMaxIterations_(parset.get<size_t>("v.fpi.maximumIterations")), diff --git a/src/spatial-solving/fixedpointiterator.hh b/src/spatial-solving/fixedpointiterator.hh index 873b9b42d3f8401b96eb160e2f4ee2c5bb75890a..d2fa5ea522c74fc0f28fa3217cf6ca9547c09110 100644 --- a/src/spatial-solving/fixedpointiterator.hh +++ b/src/spatial-solving/fixedpointiterator.hh @@ -35,8 +35,7 @@ class FixedPointIterator { void relativeVelocities(std::vector<Vector>& v_m) const; public: - FixedPointIterator(const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler, - Factory &factory, const Dune::ParameterTree& parset, + FixedPointIterator(Factory &factory, const Dune::ParameterTree& parset, std::shared_ptr<Nonlinearity> globalFriction, const ErrorNorm& errorNorm); @@ -46,7 +45,7 @@ class FixedPointIterator { Vector &velocityIterate); private: - const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler_; + std::shared_ptr<typename Factory::Step> step_; Dune::ParameterTree const &parset_; std::shared_ptr<Nonlinearity> globalFriction_; diff --git a/src/spatial-solving/solverfactory.cc b/src/spatial-solving/solverfactory.cc index 06022fd96778af3ab4d5b4112d01c5b81d670439..b289e96e01d807dfdd8b918a5f303e3dc17a8bd7 100644 --- a/src/spatial-solving/solverfactory.cc +++ b/src/spatial-solving/solverfactory.cc @@ -13,15 +13,16 @@ template <size_t dim, class BlockProblem, class DeformedGrid> SolverFactory<dim, BlockProblem, DeformedGrid>::SolverFactory( - Dune::ParameterTree const &parset, const DeformedGrid& grid, + Dune::ParameterTree const &parset, const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler, Dune::BitSetVector<dim> const &ignoreNodes) - : baseEnergyNorm(linearBaseSolverStep), + : nBodyAssembler_(nBodyAssembler), + baseEnergyNorm(linearBaseSolverStep), linearBaseSolver(&linearBaseSolverStep, parset.get<size_t>("linear.maxiumumIterations"), parset.get<double>("linear.tolerance"), &baseEnergyNorm, - Solver::QUIET), + Solver::QUIET)/*, transferOperators(grid.maxLevel()), - multigridStep(std::make_shared<Step>(linearIterationStep, nonlinearSmoother)) { + multigridStep(std::make_shared<Step>(linearIterationStep, nonlinearSmoother))*/ { // linear iteration step linearIterationStep.setMGType(parset.get<int>("linear.cycle"), @@ -33,8 +34,7 @@ SolverFactory<dim, BlockProblem, DeformedGrid>::SolverFactory( // transfer operators for (auto &&x : transferOperators) x = new CompressedMultigridTransfer<Vector>; - TransferOperatorAssembler<DeformedGrid>(grid) - .assembleOperatorPointerHierarchy(transferOperators); + TransferOperatorAssembler<DeformedGrid>(grid).assembleOperatorPointerHierarchy(transferOperators); linearIterationStep.setTransferOperators(transferOperators); // tnnmg iteration step diff --git a/src/spatial-solving/solverfactory.hh b/src/spatial-solving/solverfactory.hh index c14ba311ec4de2ea51414028b734f1de2e88d8ac..464ae5392a2b07eac6339bb91aca27a3c9f84935 100644 --- a/src/spatial-solving/solverfactory.hh +++ b/src/spatial-solving/solverfactory.hh @@ -12,6 +12,8 @@ #include <dune/tnnmg/iterationsteps/genericnonlineargs.hh> //#include <dune/tnnmg/iterationsteps/tnnmgstep.hh> +#include <dune/contact/assemblers/nbodyassembler.hh> + #define USE_OLD_TNNMG //needed for old bisection.hh in tnnmg template <size_t dim, class BlockProblemTEMPLATE, class DeformedGridTEMPLATE> @@ -31,7 +33,7 @@ class SolverFactory { using Step = NonlinearSmoother; //TruncatedNonsmoothNewtonMultigrid<BlockProblem, NonlinearSmoother>; - SolverFactory(Dune::ParameterTree const &parset, const DeformedGrid& grid, + SolverFactory(Dune::ParameterTree const &parset, const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler, Dune::BitSetVector<dim> const &ignoreNodes); ~SolverFactory(); @@ -39,6 +41,8 @@ class SolverFactory { std::shared_ptr<Step> getStep(); private: + const Dune::Contact::NBodyAssembler<DeformedGrid, Vector>& nBodyAssembler_; + TruncatedBlockGSStep<Matrix, Vector> linearBaseSolverStep; EnergyNorm<Matrix, Vector> baseEnergyNorm; LoopSolver<Vector> linearBaseSolver;