From b215986d28691ce6a320b9f53a501a8d8b1267b3 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Fri, 31 Jan 2014 13:14:17 +0100
Subject: [PATCH] [Extend]  Report on surface behaviour

---
 src/sand-wedge.cc | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc
index c985b1f1..33be5768 100644
--- a/src/sand-wedge.cc
+++ b/src/sand-wedge.cc
@@ -201,6 +201,11 @@ int main(int argc, char *argv[]) {
     Dune::BitSetVector<1> frictionalNodes(fineVertexCount);
     frictionalBoundary.getVertices(frictionalNodes);
 
+    // Surface
+    BoundaryPatch<GridView> const &surface = myFaces.upper;
+    Dune::BitSetVector<1> surfaceNodes(fineVertexCount);
+    surface.getVertices(surfaceNodes);
+
     // Dirichlet Boundary
     Dune::BitSetVector<dims> noNodes(fineVertexCount);
     Dune::BitSetVector<dims> dirichletNodes(fineVertexCount);
@@ -353,17 +358,28 @@ int main(int argc, char *argv[]) {
         vertexCoordinates[vertexMapper.map(*it)] = geometry.corner(0);
       }
     }
+
     FrictionWriter<ScalarVector, Vector> frictionWriter(
         vertexCoordinates, frictionalNodes, "friction",
         [](LocalVector const &x) { return x[0]; });
-    auto const reportFriction = [&](Vector const &_u, Vector const &_v,
-                                    ScalarVector const &_alpha) {
+    BoundaryWriter<ScalarVector, Vector> verticalSurfaceWriter(
+        vertexCoordinates, surfaceNodes, "verticalSurface",
+        MyGeometry::verticalProjection);
+    BoundaryWriter<ScalarVector, Vector> horizontalSurfaceWriter(
+        vertexCoordinates, surfaceNodes, "horizontalSurface",
+        MyGeometry::horizontalProjection);
+
+    auto const report = [&](Vector const &_u, Vector const &_v,
+                            ScalarVector const &_alpha) {
+      horizontalSurfaceWriter.writeKinetics(_u, _v);
+      verticalSurfaceWriter.writeKinetics(_u, _v);
+
       ScalarVector c;
       myGlobalNonlinearity->coefficientOfFriction(_v, c);
       frictionWriter.writeKinetics(_u, _v);
       frictionWriter.writeOther(c, _alpha);
     };
-    reportFriction(u_initial, v_initial, alpha_initial);
+    report(u_initial, v_initial, alpha_initial);
 
     MyVTKWriter<typename MyAssembler::VertexBasis,
                 typename MyAssembler::CellBasis> const
@@ -510,7 +526,7 @@ int main(int argc, char *argv[]) {
       if (printProgress)
         std::cout << std::endl;
 
-      reportFriction(u, v, alpha);
+      report(u, v, alpha);
       iterationWriter << std::endl;
       relaxationWriter << std::endl;
 
-- 
GitLab