From e0238768a5a3e0deebb779cb57079d724915d580 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Mon, 17 Sep 2012 10:19:53 +0200
Subject: [PATCH] Pass computed normalstress to nonlinearity asm

---
 src/assemblers.cc      | 5 +++--
 src/assemblers.hh      | 3 ++-
 src/assemblers_tmpl.cc | 3 ++-
 src/one-body-sample.cc | 7 ++++---
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/assemblers.cc b/src/assemblers.cc
index 347a8481..1527c790 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -57,7 +57,8 @@ Dune::shared_ptr<Dune::GlobalNonlinearity<MatrixType, VectorType> const>
 assemble_nonlinearity(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
-    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state) {
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
+    double scalarNormalStress) {
   auto const size = nodalIntegrals.size();
 
   typedef Dune::BlockVector<Dune::FieldVector<double, 1>> SingletonVectorType;
@@ -66,7 +67,7 @@ assemble_nonlinearity(
   mu = parset.get<double>("mu");
 
   SingletonVectorType normalStress(size);
-  normalStress = parset.get<double>("normalstress");
+  normalStress = scalarNormalStress;
 
   switch (parset.get<Config::model>("model")) {
     case Config::Exponential: {
diff --git a/src/assemblers.hh b/src/assemblers.hh
index e5d8b316..12b49c1f 100644
--- a/src/assemblers.hh
+++ b/src/assemblers.hh
@@ -27,6 +27,7 @@ Dune::shared_ptr<Dune::GlobalNonlinearity<MatrixType, VectorType> const>
 assemble_nonlinearity(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
-    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state);
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
+    double scalarNormalStress);
 
 #endif
diff --git a/src/assemblers_tmpl.cc b/src/assemblers_tmpl.cc
index af3ff384..f40d6c09 100644
--- a/src/assemblers_tmpl.cc
+++ b/src/assemblers_tmpl.cc
@@ -32,4 +32,5 @@ template Dune::shared_ptr<
 assemble_nonlinearity<MatrixType, VectorType>(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
-    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state);
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
+    double scalarNormalStress);
diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 717c2619..a3d4c215 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -167,6 +167,7 @@ int main(int argc, char *argv[]) {
     P0Basis const p0Basis(leafView);
     P1Basis const p1Basis(leafView);
 
+    double normalStress;
     MatrixType massMatrix;
     VectorType gravityFunctional;
     {
@@ -190,8 +191,7 @@ int main(int argc, char *argv[]) {
           area *= (upperRight[i] - lowerLeft[i]);
 
       double const gravity = 9.81;
-      double const normalStress =
-          parset.get<double>("boundary.friction.normalstress");
+      normalStress = parset.get<double>("boundary.friction.normalstress");
 
       // rho    = sigma     * A       / V   / g
       // kg/m^d = N/m^(d-1) * m^(d-1) / m^d / (N/kg)
@@ -344,7 +344,8 @@ int main(int argc, char *argv[]) {
         for (size_t state_fpi = 1; state_fpi <= state_fpi_max; ++state_fpi) {
           auto myGlobalNonlinearity =
               assemble_nonlinearity<MatrixType, VectorType>(
-                  parset.sub("boundary.friction"), *nodalIntegrals, alpha);
+                  parset.sub("boundary.friction"), *nodalIntegrals, alpha,
+                  normalStress);
 
           MyConvexProblemType const myConvexProblem(
               problem_A, *myGlobalNonlinearity, problem_rhs);
-- 
GitLab