From 5d0b36c600f075953ca16776404ae91062e29256 Mon Sep 17 00:00:00 2001 From: Stefano Zampini <stefano.zampini@gmail.com> Date: Tue, 9 Jun 2020 18:52:43 +0300 Subject: [PATCH] BUG: Fix for the GPU case - need VecResetArray otherwise the CPU array placed will never be updated STYLE: make PetscWrappedVector constructor explicit, use default constructor --- src/petsc4Foam/utils/petscWrappedVector.H | 40 ++++++++++++++--------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/petsc4Foam/utils/petscWrappedVector.H b/src/petsc4Foam/utils/petscWrappedVector.H index 3189108..3a9a4a6 100644 --- a/src/petsc4Foam/utils/petscWrappedVector.H +++ b/src/petsc4Foam/utils/petscWrappedVector.H @@ -60,6 +60,9 @@ class PetscWrappedVector //- The PETSc vector Vec vec_; + //- Call VecResetArray on destruction? + bool reset_; + // Private Member Functions @@ -77,6 +80,7 @@ class PetscWrappedVector vec_, reinterpret_cast<scalar*>(const_cast<T*>(list.cdata())) ); + reset_ = true; } //- Wrap an OpenFOAM list of values as a PETSc vector @@ -96,8 +100,22 @@ class PetscWrappedVector reinterpret_cast<scalar*>(const_cast<T*>(list.cdata())), &vec_ ); + reset_ = false; } + + // Constructors + + //- Default construct + PetscWrappedVector() + : + vec_(), + reset_(false) + {} + + + // Generated Methods + //- No copy construct PetscWrappedVector(const PetscWrappedVector&) = delete; @@ -116,31 +134,19 @@ public: Mat mat ) : - vec_() + PetscWrappedVector() { createImpl(list, mat); } //- Wrap an OpenFOAM list of values as a PETSc vector - PetscWrappedVector + explicit PetscWrappedVector ( const UList<scalar>& list, MPI_Comm comm = PETSC_COMM_WORLD ) : - vec_() - { - createImpl(list, comm); - } - - //- Wrap an OpenFOAM list of values as a PETSc vector - PetscWrappedVector - ( - const UList<vector>& list, - MPI_Comm comm = PETSC_COMM_WORLD - ) - : - vec_() + PetscWrappedVector() { createImpl(list, comm); } @@ -149,6 +155,10 @@ public: //- Destructor ~PetscWrappedVector() { + if (reset_) + { + VecResetArray(vec_); + } VecDestroy(&vec_); } -- GitLab