@@ -230,6 +230,15 @@ namespace las
230230 CHKERRABORT (LAS_COMM_WORLD, ierr);
231231 return reinterpret_cast <las::Vec*>(v);
232232 }
233+ LAS_INLINE las::Vec * createPetscVector (scalar * data, unsigned l, unsigned bs, MPI_Comm cm = LAS_COMM_WORLD)
234+ {
235+ ::Vec * v = new ::Vec;
236+ PetscErrorCode ierr = VecCreateMPIWithArray (cm, bs, l,PETSC_DECIDE,data, v);
237+ CHKERRABORT (LAS_COMM_WORLD, ierr);
238+ ierr = VecSetOption (*v,VEC_IGNORE_NEGATIVE_INDICES,PETSC_TRUE);
239+ CHKERRABORT (LAS_COMM_WORLD, ierr);
240+ return reinterpret_cast <las::Vec*>(v);
241+ }
233242 LAS_INLINE void destroyPetscVec (las::Vec * v)
234243 {
235244 PetscErrorCode ierr = VecDestroy (getPetscVec (v));
@@ -255,6 +264,10 @@ namespace las
255264 {
256265 return createPetscVector (lcl,bs,cm);
257266 }
267+ virtual Vec * create (scalar * data, unsigned lcl, unsigned bs, MPI_Comm cm)
268+ {
269+ return createPetscVector (data, lcl,bs,cm);
270+ }
258271 virtual Vec * createRHS (Mat * m)
259272 {
260273 return createRHSVec (m);
@@ -490,6 +503,7 @@ namespace las
490503 if (c == nullptr )
491504 {
492505 PetscErrorCode ierr = ::MatScale (*getPetscMat (a), s);
506+ CHKERRABORT (LAS_COMM_WORLD, ierr);
493507 }
494508 else
495509 {
0 commit comments