[petsc-dev] MatCopy to zero preallocated matrix

Matthew Knepley knepley at gmail.com
Thu Mar 1 17:06:53 CST 2012


On Thu, Mar 1, 2012 at 5:03 PM, Vaclav Hapla <vaclav.hapla at vsb.cz> wrote:

> Dear PETSc team,
> why I am not able to do this:
>
> ...
> MatCreate(PETSC_COMM_SELF, &Kreg);
> MatSetSizes(Kreg,m,n,m,n);
> MatSetType(Kreg, MATSEQAIJ);
> MatSeqAIJSetPreallocation(**Kreg,0,nnz);
> MatAssemblyBegin(Kreg, MAT_FINAL_ASSEMBLY);
> MatAssemblyEnd(   Kreg, MAT_FINAL_ASSEMBLY);
> PetscFree(nnz);
> {
>    PetscInt nz_Kreg;
>    MatGetRow(Kreg, 0, &nz_Kreg, PETSC_IGNORE, PETSC_IGNORE);
>    PetscPrintf(PETSC_COMM_SELF, "nnz %d  Kreg %d\n", nnz[0], nz_Kreg);  //
> prints nnz 11  Kreg 0 !!!
> }
> MatCopy(K_loc, Kreg, DIFFERENT_NONZERO_PATTERN); //fails: New nonzero at
> (0,0) caused a malloc!
>

I think you want

http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDuplicate.html

which does it in one line.

   Matt


>
> PETSc complains about new nonzero - not surprisingly because
> MatAssemblyBegin/End filters zeros as I understand.
> But when I comment out MatAssemblyBegin/End, MatCopy complains that it is
> only for assembled matrices.
>
> I think that to call MatSetValues on all allocated nonzeros just to make
> them survive MatAssemblyBegin/End or to replace MatCopy call by loop over
> raw array is both quite awkward.
> Maybe one should be able to turn the filter in MatAssemblyBegin/End off.
> Or is there any other way out?
>
> BTW, what I need is to make a copy Kreg of given matrix K_loc but with few
> additional preallocated positions which are filled later. Is there some
> other convenient solution?
>
> Cheers,
> Vaclav Hapla
>



-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120301/80013715/attachment.html>


More information about the petsc-dev mailing list