Skip to content
Snippets Groups Projects
fixedpointiterator.hh 2.71 KiB
Newer Older
podlesny's avatar
.  
podlesny committed
#ifndef SRC_SPATIAL_SOLVING_FIXEDPOINTITERATOR_HH
#define SRC_SPATIAL_SOLVING_FIXEDPOINTITERATOR_HH

#include <memory>

#include <dune/common/parametertree.hh>
podlesny's avatar
.  
podlesny committed
#include <dune/common/bitsetvector.hh>
podlesny's avatar
.  
podlesny committed

#include <dune/solvers/norms/norm.hh>
#include <dune/solvers/solvers/solver.hh>

podlesny's avatar
.  
podlesny committed
#include <dune/fufem/boundarypatch.hh>
podlesny's avatar
.  
podlesny committed

podlesny's avatar
.  
podlesny committed
#include <dune/contact/assemblers/nbodyassembler.hh>
podlesny's avatar
.  
podlesny committed

podlesny's avatar
.  
podlesny committed
#include "solverfactory.hh"

podlesny's avatar
.  
podlesny committed
struct FixedPointIterationCounter {
  size_t iterations = 0;
  size_t multigridIterations = 0;

  void operator+=(FixedPointIterationCounter const &other);
};

std::ostream &operator<<(std::ostream &stream,
                         FixedPointIterationCounter const &fpic);

podlesny's avatar
podlesny committed
template <class Factory, class NBodyAssembler, class Updaters, class ErrorNorms>
podlesny's avatar
.  
podlesny committed
class FixedPointIterator {
  using ScalarVector = typename Updaters::StateUpdater::ScalarVector;
  using Vector = typename Factory::Vector;
  using Matrix = typename Factory::Matrix;
podlesny's avatar
.  
podlesny committed

  using Nonlinearity = typename Factory::Functional::Nonlinearity;
podlesny's avatar
podlesny committed

  const static int dims = Vector::block_type::dimension;
podlesny's avatar
.  
podlesny committed

podlesny's avatar
.  
podlesny committed
  using IgnoreVector = typename Factory::BitVector;
podlesny's avatar
.  
podlesny committed
 // using Nonlinearity = typename ConvexProblem::NonlinearityType;
podlesny's avatar
podlesny committed
 //  using DeformedGrid = typename Factory::DeformedGrid;
podlesny's avatar
.  
podlesny committed

podlesny's avatar
.  
podlesny committed
public:
podlesny's avatar
.  
podlesny committed
  using GlobalFriction = Nonlinearity;
  using BitVector = Dune::BitSetVector<1>;
podlesny's avatar
.  
podlesny committed

private:
podlesny's avatar
podlesny committed
  void split(const Vector& v, std::vector<Vector>& v_rel) const;
  bool displacementCriterion(const Updaters& updaters, std::vector<Vector>& last_u) const;
  bool stateCriterion(const std::vector<ScalarVector>& alpha, const std::vector<ScalarVector>& newAlpha) const;
podlesny's avatar
.  
podlesny committed

podlesny's avatar
.  
podlesny committed
public:
podlesny's avatar
podlesny committed
  FixedPointIterator(const Dune::ParameterTree& parset,
podlesny's avatar
podlesny committed
                     const NBodyAssembler& nBodyAssembler,
podlesny's avatar
.  
podlesny committed
                     const IgnoreVector& ignoreNodes,
podlesny's avatar
.  
podlesny committed
                     GlobalFriction& globalFriction,
                     const std::vector<const BitVector*>& bodywiseNonmortarBoundaries,
podlesny's avatar
.  
podlesny committed
                     const ErrorNorms& errorNorms);
podlesny's avatar
.  
podlesny committed

podlesny's avatar
podlesny committed
  template <class LinearSolver>
podlesny's avatar
.  
podlesny committed
  FixedPointIterationCounter run(Updaters updaters,
podlesny's avatar
podlesny committed
                                 std::shared_ptr<LinearSolver>& linearSolver,
podlesny's avatar
.  
podlesny committed
                                 const std::vector<Matrix>& velocityMatrices,
podlesny's avatar
.  
podlesny committed
                                 const std::vector<Vector>& velocityRHSs,
                                 std::vector<Vector>& velocityIterates);
podlesny's avatar
.  
podlesny committed

private:
podlesny's avatar
.  
podlesny committed
  const Dune::ParameterTree& parset_;
podlesny's avatar
podlesny committed
  const NBodyAssembler& nBodyAssembler_;
podlesny's avatar
.  
podlesny committed
  const IgnoreVector& ignoreNodes_;

podlesny's avatar
.  
podlesny committed
  GlobalFriction& globalFriction_;
  const std::vector<const BitVector*>& bodywiseNonmortarBoundaries_;

podlesny's avatar
.  
podlesny committed

  size_t fixedPointMaxIterations_;
  double fixedPointTolerance_;
  double lambda_;
  const Dune::ParameterTree& solverParset_;

podlesny's avatar
.  
podlesny committed
  const ErrorNorms& errorNorms_;
podlesny's avatar
.  
podlesny committed
};
podlesny's avatar
.  
podlesny committed
#endif