From 8decb9fb271ca8d2fea12d119981e77614ec956b Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Fri, 3 Aug 2007 13:58:56 +0000
Subject: [PATCH] improved instrumentation

[[Imported from SVN: r1473]]
---
 src/rodsolver.cc | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/src/rodsolver.cc b/src/rodsolver.cc
index 888b38ff..8f14d5c7 100644
--- a/src/rodsolver.cc
+++ b/src/rodsolver.cc
@@ -122,7 +122,7 @@ void RodSolver<GridType>::setup(const GridType& grid,
     mmgStep->postsmoother_      = postsmoother;    
     mmgStep->hasObstacle_       = &hasObstacle_;
     mmgStep->obstacles_         = &trustRegionObstacles_;
-    mmgStep->verbosity_         = Solver::FULL;
+    mmgStep->verbosity_         = Solver::QUIET;
 
     // //////////////////////////////////////////////////////////////////////////////////////
     //   Assemble a Laplace matrix to create a norm that's equivalent to the H1-norm
@@ -147,7 +147,7 @@ void RodSolver<GridType>::setup(const GridType& grid,
 
     // Write all intermediate solutions, if requested
     if (instrumented_)
-        mmgSolver_->historyBuffer_ = "tmp/";
+        mmgSolver_->historyBuffer_ = "tmp/mgHistory";
 
     // ////////////////////////////////////////////////////////////
     //    Create Hessian matrix and its occupation structure
@@ -227,10 +227,14 @@ void RodSolver<GridType>::solve()
         //rodAssembler.setParameters(0,0,0,1,1,1);
         std::cout << "Rod energy: " <<rodAssembler_->computeEnergy(x_) << std::endl;
         rodAssembler_->assembleGradient(x_, rhs);
+        std::cout << "Gradient assembled!\n";
         rodAssembler_->assembleMatrix(x_, *hessianMatrix_);
+        std::cout << "matrix assembled!\n";
 
         gradientFDCheck(x_, rhs, *rodAssembler_);
+        std::cout << "Gradient checked!\n";
         hessianFDCheck(x_, *hessianMatrix_, *rodAssembler_);
+        std::cout << "matrix checked!\n";
 
 #if 0
         for (int j=0; j<hessianMatrix_->N(); j++) {
@@ -304,7 +308,7 @@ void RodSolver<GridType>::solve()
                 CorrectionType intermediateSol(grid_->size(1));
                 intermediateSol = 0;
                 char iSolFilename[100];
-                sprintf(iSolFilename, "tmp/intermediatesolution_%04d", j);
+                sprintf(iSolFilename, "tmp/mgHistory/intermediatesolution_%04d", j);
                 
                 FILE* fpInt = fopen(iSolFilename, "rb");
                 if (!fpInt)
@@ -421,6 +425,34 @@ void RodSolver<GridType>::solve()
         
         //  Write current energy
         std::cout << "--- Current energy: " << energy << " ---" << std::endl;
+
+        // /////////////////////////////////////////////////////////////////////
+        //   Write the iterate to disk for later convergence rate measurement
+        // /////////////////////////////////////////////////////////////////////
+
+        if (instrumented_) {
+
+            char iRodFilename[100];
+            sprintf(iRodFilename, "tmp/intermediateSolution_%04d", i);
+
+            FILE* fpRod = fopen(iRodFilename, "wb");
+            if (!fpRod)
+                DUNE_THROW(SolverError, "Couldn't open file " << iRodFilename << " for writing");
+            
+            for (int j=0; j<x_.size(); j++) {
+
+                for (int k=0; k<3; k++)
+                    fwrite(&x_[j].r[k], sizeof(double), 1, fpRod);
+
+                for (int k=0; k<4; k++)  // 3d hardwired here!
+                    fwrite(&x_[j].q[k], sizeof(double), 1, fpRod);
+
+            }
+
+            fclose(fpRod);
+
+        }
+
     }
 
     // //////////////////////////////////////////////
-- 
GitLab