From 6e7f46a6190e155ef5610c7b7ccf39b06487b400 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Wed, 12 Dec 2012 16:49:31 +0100
Subject: [PATCH] Plot all data with their coordinates

---
 src/one-body-sample.cc | 43 +++++++++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 19 deletions(-)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 27aa3e4f..e76d5db4 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -188,7 +188,6 @@ int main(int argc, char *argv[]) {
     P1Basis const p1Basis(leafView);
 
     // Set up the boundary
-    size_t specialNode = finestSize;
     Dune::BitSetVector<dims> ignoreNodes(finestSize, false);
     Dune::BitSetVector<1> neumannNodes(finestSize, false);
     Dune::BitSetVector<1> frictionalNodes(finestSize, false);
@@ -204,10 +203,6 @@ int main(int argc, char *argv[]) {
         coordinates[id] = it->geometry().corner(0);
         auto const &localCoordinates = coordinates[id];
 
-        // Find the lower left corner
-        if (localCoordinates == lowerLeft)
-          specialNode = id;
-
         // lower face
         if (localCoordinates[1] == lowerLeft[1]) {
           frictionalNodes[id] = true;
@@ -226,9 +221,6 @@ int main(int argc, char *argv[]) {
         else if (localCoordinates[0] == lowerLeft[0])
           ;
       }
-      // Make sure that specialNode was set and points to a frictional node
-      assert(specialNode != finestSize);
-      assert(frictionalNodes[specialNode][0]);
     };
 
     // Set up functions for time-dependent boundary conditions
@@ -320,10 +312,16 @@ int main(int argc, char *argv[]) {
     Solver::VerbosityMode const verbosity =
         parset.get<bool>("verbose") ? Solver::FULL : Solver::QUIET;
 
-    std::fstream state_writer("state", std::fstream::out);
-    std::fstream displacement_writer("displacement", std::fstream::out);
-    std::fstream velocity_writer("velocity", std::fstream::out);
-    std::fstream coefficient_writer("coefficient", std::fstream::out);
+    std::fstream coordinate_writer("coordinates", std::fstream::out);
+    for (size_t i = 0; i < frictionalNodes.size(); ++i)
+      if (frictionalNodes[i][0])
+        coordinate_writer << coordinates[i] << std::endl;
+    coordinate_writer.close();
+
+    std::fstream state_writer("states", std::fstream::out);
+    std::fstream displacement_writer("displacements", std::fstream::out);
+    std::fstream velocity_writer("velocities", std::fstream::out);
+    std::fstream coefficient_writer("coefficients", std::fstream::out);
     ;
 
     auto timeSteppingScheme =
@@ -419,13 +417,20 @@ int main(int argc, char *argv[]) {
         std::cerr << std::endl;
       ;
 
-      state_writer << alpha[specialNode][0] << " " << std::endl;
-      displacement_writer << u[specialNode][0] << " " << std::endl;
-      velocity_writer << ud[specialNode][0] << " " << std::endl;
-      coefficient_writer << mu + a *std::log(ud[specialNode].two_norm() / V0) +
-                                b * (alpha[specialNode] + std::log(V0 / L))
-                         << " " << std::endl;
-      ;
+      for (size_t i = 0; i < frictionalNodes.size(); ++i)
+        if (frictionalNodes[i][0]) {
+          state_writer << alpha[i][0] << " ";
+          displacement_writer << u[i][0] << " ";
+          velocity_writer << ud[i][0] << " ";
+          coefficient_writer << mu + a *std::log(ud[i].two_norm() / V0) +
+                                    b * (alpha[i] + std::log(V0 / L)) << " ";
+        }
+
+      state_writer << std::endl;
+      displacement_writer << std::endl;
+      velocity_writer << std::endl;
+      coefficient_writer << std::endl;
+
       if (parset.get<bool>("writeVTK")) {
         SingletonVectorType vonMisesStress;
         VonMisesStressAssembler<GridType> localStressAssembler(
-- 
GitLab