Closed ocramz closed 8 years ago
FIXED:
vecGetVector :: Vec -> IO (V.Vector PetscScalar_)
vecGetVector v = do
p <- vecGetArrayPtr v
pf <- newForeignPtr_ p
V.freeze (VM.unsafeFromForeignPtr0 pf len)
where
len = vecSize v
vecRestoreVector :: Vec -> V.Vector PetscScalar_ -> IO ()
vecRestoreVector v w = do
p <- vecGetArrayPtr v
pf <- newForeignPtr_ p
V.copy (VM.unsafeFromForeignPtr0 pf len) w
vecRestoreArrayPtr v p
where
len = vecSize v
and
withVecGetVectorOverwrite ::
Vec ->
(V.Vector PetscScalar_ -> V.Vector PetscScalar_) ->
IO ()
withVecGetVectorOverwrite v modify = do
x <- vecGetVector v
let y = modify x
vecRestoreVector v y
vecGetArray
in Raw/PutGet works fine, but its dualvecRestoreArray
does not seem to update the C-side Vec.This behavior can be observed by running
t3
,t4
ort5
in TestMain2.hs