51 std::vector<Scalar> weights, coarse_vals, coarse_x, coarse_y;
52 std::vector<Matrix<Scalar>> Amatrices, Rmatrices;
53 std::vector<std::vector<int> > PcolIndices;
54 std::vector<std::vector<Scalar> > invDiags;
58 using DuneMat = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar, 1, 1> >;
59 using DuneVec = Dune::BlockVector<Dune::FieldVector<Scalar, 1> >;
60 using MatrixOperator = Dune::MatrixAdapter<DuneMat, DuneVec, DuneVec>;
61 using DuneAmg = Dune::Amg::MatrixHierarchy<MatrixOperator, Dune::Amg::SequentialInformation>;
62 std::unique_ptr<DuneAmg> dune_amg;
63 std::unique_ptr<DuneMat> dune_coarse;
64 std::shared_ptr<MatrixOperator> dune_op;
65 std::vector<int> level_sizes;
66 std::vector<std::vector<int> > diagIndices;
67 std::conditional_t<std::is_same_v<Scalar,double>,
69 bool always_recalculate_aggregates =
false;
70 bool recalculate_aggregates =
true;
71 const int pressure_idx = 1;
72 unsigned num_pre_smooth_steps;
73 unsigned num_post_smooth_steps;
76 void analyzeHierarchy();
80 void analyzeAggregateMaps();