From e7bf2b60180de11fb15f47a3491e9488a3d51fa5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simone=20Bn=C3=A0?= <s.bn@cineca.it>
Date: Mon, 6 Jul 2020 10:45:35 +0200
Subject: [PATCH] BUG: Use ctx.performance instead of local solverPerf (fixes
 #13)

---
 src/petsc4Foam/solvers/petscSolver.C | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/petsc4Foam/solvers/petscSolver.C b/src/petsc4Foam/solvers/petscSolver.C
index a55c35d..6718ff6 100644
--- a/src/petsc4Foam/solvers/petscSolver.C
+++ b/src/petsc4Foam/solvers/petscSolver.C
@@ -230,6 +230,9 @@ Foam::solverPerformance Foam::petscSolver::scalarSolve
         fieldName_
     );
 
+    // Retain copy of solverPerformance
+    ctx.performance = solverPerf;
+
     // Create solution and rhs vectors for PETSc
     // We could create these once, and call PlaceArray/ResetArray instead
     PetscWrappedVector petsc_psi(psi, Amat);
@@ -247,7 +250,7 @@ Foam::solverPerformance Foam::petscSolver::scalarSolve
     if (usePetscResidualNorm)
     {
         // Add monitor to record initial residual
-        solverPerf.initialResidual() = 0;
+        ctx.performance.initialResidual() = 0;
         KSPMonitorSet
         (
             ksp,
@@ -293,22 +296,19 @@ Foam::solverPerformance Foam::petscSolver::scalarSolve
     // Set nIterations and final residual
     PetscInt nIters;
     KSPGetIterationNumber(ksp, &nIters);
-    solverPerf.nIterations() = nIters;
+    ctx.performance.nIterations() = nIters;
 
     if (usePetscResidualNorm)
     {
         PetscReal rnorm;
         KSPGetResidualNorm(ksp, &rnorm);
-        solverPerf.finalResidual() = rnorm;
+        ctx.performance.finalResidual() = rnorm;
     }
 
-    // Retain copy of solverPerformance
-    ctx.performance = solverPerf;
-
     ctx.caching.eventEnd();
 
     // Return solver performance to OpenFOAM
-    return solverPerf;
+    return ctx.performance;
 }
 
 
-- 
GitLab