diff --git a/src/algebra/LinearSolver.cpp b/src/algebra/LinearSolver.cpp index 1965a9966cafdf181b366feb1e41909077edd8ac..b3a4d9816f6bc6634f73a80b70ba304f82ed60b1 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