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