Skip to content
Snippets Groups Projects
pdelab-1.1.0.patch 5.01 KiB
Newer Older
diff --git a/dune/pdelab/backend/istlvectorbackend.hh b/dune/pdelab/backend/istlvectorbackend.hh
index ad2419e..ef219f3 100644
--- a/dune/pdelab/backend/istlvectorbackend.hh
+++ b/dune/pdelab/backend/istlvectorbackend.hh
@@ -30,6 +30,8 @@ namespace Dune {
       typedef typename ContainerType::size_type size_type;
       typedef ISTLVectorBackend<BLOCKSIZE> Backend;
 
+      ISTLBlockVectorContainer ()
+      {}
       ISTLBlockVectorContainer (const T& t_) : container(t_.globalSize()/BLOCKSIZE)
       {}
       ISTLBlockVectorContainer (const T& t_, const E& e) : container(t_.globalSize()/BLOCKSIZE)
@@ -89,6 +91,11 @@ namespace Dune {
         return container.two_norm();
       }
 
+      typename Dune::template FieldTraits<E>::real_type two_norm2() const
+      {
+        return container.two_norm2();
+      }
+
       typename Dune::template FieldTraits<E>::real_type one_norm() const
       {
         return container.one_norm();
@@ -163,6 +170,16 @@ namespace Dune {
         return container.size()*BLOCKSIZE;
       }
 
+      size_t size() const
+      {
+        return container.size();
+      }
+
+      void resize(size_t n)
+      {
+        container.resize(n);
+      }
+
       template<typename X>
       void std_copy_to (std::vector<X>& x) const
       {
diff --git a/dune/pdelab/backend/novlpistlsolverbackend.hh b/dune/pdelab/backend/novlpistlsolverbackend.hh
index 49a0080..9bf1eae 100644
--- a/dune/pdelab/backend/novlpistlsolverbackend.hh
+++ b/dune/pdelab/backend/novlpistlsolverbackend.hh
@@ -1251,7 +1251,7 @@ namespace Dune {
                             int verbose_=1, bool reuse_=false,
                             bool usesuperlu_=true)
         : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_),
-          params(15,2000,1.2,1.6,Dune::Amg::atOnceAccu),
+          params(15,2000,1.2,1.6,Dune::Amg::noAccu/*Dune::Amg::atOnceAccu*/),
           verbose(verbose_), reuse(reuse_), firstapply(true),
           usesuperlu(usesuperlu_)
       {
@@ -1314,10 +1314,10 @@ namespace Dune {
         \param[in] r right hand side
         \param[in] reduction to be achieved
       */
-      void apply(M& A, V& z, V& r, typename V::ElementType reduction)
+      void apply(MatrixType& A, V& z, V& r, typename V::ElementType reduction)
       {
         Timer watch;
-        MatrixType& mat=A.base();
+        MatrixType& mat=A;
         typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
           Dune::Amg::FirstDiagonal> > Criterion;
 #if HAVE_MPI
diff --git a/dune/pdelab/backend/ovlpistlsolverbackend.hh b/dune/pdelab/backend/ovlpistlsolverbackend.hh
index 107a831..40c252f 100644
--- a/dune/pdelab/backend/ovlpistlsolverbackend.hh
+++ b/dune/pdelab/backend/ovlpistlsolverbackend.hh
@@ -803,7 +803,7 @@ namespace Dune {
       ISTLBackend_AMG(const GFS& gfs_, unsigned maxiter_=5000, 
                       int verbose_=1, bool reuse_=false,
                       bool usesuperlu_=true)
-        : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), params(15,2000),
+        : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), params(15,2000,1.2,1.6,Dune::Amg::atOnceAccu),
           verbose(verbose_), reuse(reuse_), firstapply(true),
           usesuperlu(usesuperlu_)
       {
@@ -864,11 +864,12 @@ namespace Dune {
         \param[in] r right hand side
         \param[in] reduction to be achieved
       */
-      void apply(M& A, V& z, V& r, typename V::ElementType reduction)
+      template <class Vector>
+      void apply(MatrixType& A, Vector& z, Vector& r, typename V::ElementType reduction)
       {
         Timer watch;
         Comm oocc(gfs.gridView().comm());
-        MatrixType& mat=A.base();
+        MatrixType& mat=A;
         typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
           Dune::Amg::FirstDiagonal> > Criterion;
 #if HAVE_MPI
@@ -900,8 +901,7 @@ namespace Dune {
         Solver<VectorType> solver(oop,sp,*amg,reduction,maxiter,verb);
         Dune::InverseOperatorResult stat;
         
-        solver.apply(BlockProcessor<GFS,skipBlocksizeCheck>::getVector(z),
-            BlockProcessor<GFS,skipBlocksizeCheck>::getVector(r),stat);
+        solver.apply(z,r,stat);
         stats.tsolve= watch.elapsed();
         res.converged  = stat.converged;
         res.iterations = stat.iterations;
diff --git a/dune/pdelab/backend/seqistlsolverbackend.hh b/dune/pdelab/backend/seqistlsolverbackend.hh
index 4d69622..a54c27c 100644
--- a/dune/pdelab/backend/seqistlsolverbackend.hh
+++ b/dune/pdelab/backend/seqistlsolverbackend.hh
@@ -543,10 +543,10 @@ namespace Dune {
         \param[in] r right hand side
         \param[in] reduction to be achieved
       */
-      void apply(M& A, V& z, V& r, typename V::ElementType reduction)
+      void apply(MatrixType& A, V& z, V& r, typename V::ElementType reduction)
       {
         Timer watch;
-        MatrixType& mat=A.base();
+        MatrixType& mat=A;
         typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
           Dune::Amg::FirstDiagonal> > Criterion;
         SmootherArgs smootherArgs;