From 8581e8c5655c26051ac2a5784542a10d2a29e022 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Wed, 17 Jul 2013 19:17:48 +0200
Subject: [PATCH] [Problem] Compute initial displacement from stationary
 problem

---
 src/one-body-sample.cc | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index e2e22ba3..153f5d3c 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
-- 
GitLab