On May 27, 2012, at 10:06 AM, Hui Zhang wrote: > Since the values I want to take from v[] are not contiguous in v[], I found > even with > MatSetValuesLocal I can not avoid to make a copy of the values(that I want to > take) in > a new array vnew[].
That extra copy is inexpensive compared to all the other overheads of MatSetValues() it will be barely noticeable. Barry > > On May 27, 2012, at 2:12 PM, Dmitry Karpeev wrote: > >> Have you looked at MatSetValuesLocal() >> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValuesLocal.html? >> >> That routine might be close enough to what you need. >> Dmitry. >> >> On Sun, May 27, 2012 at 4:01 AM, Hui Zhang <mike.hui.zhang at hotmail.com> >> wrote: >> Also, in the case that only a *subset* of v[] is used, the new function >> sounds easy to me. >> >> >> >>> Current MatSetValues is >>> MatSetValues(Mat mat,PetscInt m,const PetscInt idxm[],PetscInt n,const >>> PetscInt idxn[],const PetscScalar v[],InsertMode addv) >>> I want something like >>> MatSetValues(Mat mat,PetscInt m,const PetscInt idxm[],PetscInt n,const >>> PetscInt idxn[],const PetscScalar v[], const PetscInt idxv[], InsertMode >>> addv) >>> ----------------------- >>> add a new parameter >>> >>> >>> >>> >>> such that the values v[0..m*n] are first reordered to v[idxv[0..m*n]] >>> before set to the mat. >>> We may first do permutation on v before passing to current MatSetValues. >>> But won't the >>> >>> >>> >>> new function be easier to use? >>> >>> In the case that idxm[], idxn[] are obtained from a certain application >>> ordering >>> but not the ordering of v[], I think I need the new function. >>> Of course, this new function sounds unnecessary because reordering v is >>> equivalent to reordering >>> >>> >>> >>> idxm[] and idxn[]. But the second method seems not an easy task to me, is >>> it? >>> >>> Thanks! >>> >>> >>> >> >> >
