From 0d3ff1cc871815e85a886bc02638081207082df6 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Fri, 22 Aug 2014 12:49:19 +0000
Subject: [PATCH] Move mmgStep preprocess out of the solver iteration

[[Imported from SVN: r9856]]
---
 dune/gfe/mixedriemanniantrsolver.cc | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc
index 7a86d524..aaa7648d 100644
--- a/dune/gfe/mixedriemanniantrsolver.cc
+++ b/dune/gfe/mixedriemanniantrsolver.cc
@@ -428,29 +428,38 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis0,TargetSpace0,Basis1,Target
             ///////////////////////////////
             //    Solve !
             ///////////////////////////////
+            CorrectionType0 residual0 = rhs_global0;
+            CorrectionType1 residual1 = rhs_global1;
+
+            mmgStep0->setProblem(stiffnessMatrix00, corr_global0, residual0);
+            trustRegionObstacles0 = trustRegion0.obstacles();
+            mmgStep0->obstacles_ = &trustRegionObstacles0;
+
+            mmgStep0->preprocess();
+
+            mmgStep1->setProblem(stiffnessMatrix11, corr_global1, residual1);
+            trustRegionObstacles1 = trustRegion1.obstacles();
+            mmgStep1->obstacles_ = &trustRegionObstacles1;
+
+            mmgStep1->preprocess();
+
 
             std::cout << "Solve quadratic problem..." << std::endl;
             Dune::Timer solutionTimer;
             for (int ii=0; ii<200; ii++)
             {
               std::cout << "Iteration " << ii << std::endl;
-              CorrectionType0 residual0 = rhs_global0;
-              CorrectionType1 residual1 = rhs_global1;
+              residual0 = rhs_global0;
+              residual1 = rhs_global1;
 
               stiffnessMatrix01.mmv(corr_global1, residual0);
               mmgStep0->setProblem(stiffnessMatrix00, corr_global0, residual0);
-              trustRegionObstacles0 = trustRegion0.obstacles();
-              mmgStep0->obstacles_ = &trustRegionObstacles0;
 
-              mmgStep0->preprocess();
               mmgStep0->iterate();
 
               stiffnessMatrix10.mmv(corr_global0, residual1);
               mmgStep1->setProblem(stiffnessMatrix11, corr_global1, residual1);
-              trustRegionObstacles1 = trustRegion1.obstacles();
-              mmgStep1->obstacles_ = &trustRegionObstacles1;
 
-              mmgStep1->preprocess();
               mmgStep1->iterate();
 
             }
-- 
GitLab