diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index e2e22ba33b1672273ad745cc1dde6fd28a7d9b03..153f5d3c6694bccddb735b57ba4a0f656e2706ae 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -213,6 +213,8 @@ int main(int argc, char *argv[]) { // Set up the boundary Dune::BitSetVector<dims> velocityDirichletNodes(finestSize, false); + Dune::BitSetVector<dims> const &displacementDirichletNodes = + velocityDirichletNodes; Dune::BitSetVector<dims> accelerationDirichletNodes(finestSize, false); Dune::BitSetVector<1> neumannNodes(finestSize, false); Dune::BitSetVector<1> frictionalNodes(finestSize, false); @@ -357,9 +359,32 @@ int main(int argc, char *argv[]) { GridType>; ZeroNonlinearity<SmallVector, SmallMatrix> zeroNonlinearity; + // Solve the stationary problem VectorType u_initial(finestSize); u_initial = 0.0; + { + LinearFactoryType displacementFactory(parset.sub("solver.tnnmg"), // FIXME + refinements, 1e-12, // FIXME, + *grid, displacementDirichletNodes); + auto multigridStep = displacementFactory.getSolver(); + Solver::VerbosityMode const verbosity = + parset.get<bool>("verbose") ? Solver::FULL : Solver::QUIET; + + typename LinearFactoryType::ConvexProblemType myConvexProblem( + 1.0, A, zeroNonlinearity, ell, u_initial); + typename LinearFactoryType::BlockProblemType initialDisplacementProblem( + parset, myConvexProblem); + + multigridStep->setProblem(u_initial, initialDisplacementProblem); + LoopSolver<VectorType> initialDisplacementProblemSolver( + multigridStep, + parset.get<size_t>("solver.tnnmg.maxiterations"), // FIXME + 1e-12, // FIXME + &ANorm, verbosity, false); // absolute error + initialDisplacementProblemSolver.preprocess(); + initialDisplacementProblemSolver.solve(); + } VectorType v_initial(finestSize); { // Prescribe a homogeneous velocity field in the x-direction