[petsc-dev] MatCopy to zero preallocated matrix

Vaclav Hapla vaclav.hapla at vsb.cz
Thu Mar 1 17:14:50 CST 2012


This is what I used before for a long time until now when I updated 
PETSc and it started to complain "New nonzero caused a malloc!" when I 
wanted to add some new nonzero outside of the original nnz-pattern. 
MatDuplicate is always retaining the pattern, isn't it?
Vaclav

On 03/02/2012 12:06 AM, Matthew Knepley wrote:
> On Thu, Mar 1, 2012 at 5:03 PM, Vaclav Hapla <vaclav.hapla at vsb.cz 
> <mailto: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


-- 

Vaclav Hapla
Research assistant
SPOMECH project <http://spomech.vsb.cz/>
Centre of Excellence IT4Innovations <http://www.it4i.eu/>

tel.: (+420) 59 732 6291
VSB-Technical University of Ostrava
17.listopadu 15/2172
708 33 Ostrava-Poruba
Czech Republic

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120302/a072d1b8/attachment.html>


More information about the petsc-dev mailing list