diff --git a/Solver/linearSystemPETSc.h b/Solver/linearSystemPETSc.h index c2f049277bac95b3ffda755b37d13bbeabad6539..cd3caef69bd943b2f89e6299f27023d17a4815c7 100644 --- a/Solver/linearSystemPETSc.h +++ b/Solver/linearSystemPETSc.h @@ -66,8 +66,8 @@ class linearSystemPETSc : public linearSystem<scalar> { } public: linearSystemPETSc() : _isAllocated(false) {_blockSize = 0; _kspAllocated = false;} - virtual ~linearSystemPETSc(){ - clear(); + virtual ~linearSystemPETSc(){ + clear(); if (_kspAllocated) _try (KSPDestroy (_ksp)); } @@ -173,7 +173,7 @@ class linearSystemPETSc : public linearSystem<scalar> { _try(KSPSetOperators(_ksp, _a, _a, SAME_NONZERO_PATTERN)); else if (linearSystem<scalar>::_parameters["matrix_reuse"] == "same_matrix") _try(KSPSetOperators(_ksp, _a, _a, SAME_PRECONDITIONER)); - else + else _try(KSPSetOperators(_ksp, _a, _a, DIFFERENT_NONZERO_PATTERN)); _try(MatAssemblyBegin(_a, MAT_FINAL_ASSEMBLY)); _try(MatAssemblyEnd(_a, MAT_FINAL_ASSEMBLY)); @@ -184,6 +184,8 @@ class linearSystemPETSc : public linearSystem<scalar> { //PetscInt its; //_try(KSPGetIterationNumber(ksp, &its)); //Msg::Info("%d iterations", its); + // add line to destroy unused data + _try(KSPDestroy(_ksp)); return 1; } Mat &getMatrix(){ return _a; }