diff --git a/src/petsc4Foam/solvers/petscSolver.C b/src/petsc4Foam/solvers/petscSolver.C index a55c35d8287db834ea7b04fcc61050f22d8ff6bb..6718ff6deb026573c3e276bd26809c2563e347a9 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; }