From 8526bdc3da0b6f6404e597f1476acb0254ef0532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Sun, 13 Dec 2020 17:38:54 +0100
Subject: [PATCH] Fix memory leaks when using PETSc

---
 src/algebra/LinearSolver.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/algebra/LinearSolver.cpp b/src/algebra/LinearSolver.cpp
index 1965a9966..b3a4d9816 100644
--- a/src/algebra/LinearSolver.cpp
+++ b/src/algebra/LinearSolver.cpp
@@ -179,12 +179,6 @@ struct LinearSolver::Internals
     Vec petscX;
     VecCreateMPIWithArray(PETSC_COMM_WORLD, 1, x.size(), x.size(), &x[0], &petscX);
 
-    Mat petscMat;
-    MatCreate(PETSC_COMM_WORLD, &petscMat);
-    MatSetSizes(petscMat, PETSC_DECIDE, PETSC_DECIDE, x.size(), x.size());
-
-    MatSetType(petscMat, MATAIJ);
-
     Array<PetscScalar> values = copy(A.values());
 
     const auto A_row_indices = A.rowIndices();
@@ -202,6 +196,7 @@ struct LinearSolver::Internals
       }
     }
 
+    Mat petscMat;
     MatCreateSeqAIJWithArrays(PETSC_COMM_WORLD, x.size(), x.size(), &row_indices[0], &column_indices[0], &values[0],
                               &petscMat);
 
@@ -292,7 +287,12 @@ struct LinearSolver::Internals
     }
 
     KSPSolve(ksp, petscB, petscX);
+
+    // free used memory
     MatDestroy(&petscMat);
+    VecDestroy(&petscB);
+    VecDestroy(&petscX);
+    KSPDestroy(&ksp);
   }
 
 #else   // PUGS_HAS_PETSC
-- 
GitLab