[petsc-dev] MatCopy to zero preallocated matrix

Vaclav Hapla vaclav.hapla at vsb.cz
Thu Mar 1 17:39:58 CST 2012


OK, but:
1. I don't understand what's the use case for MatCopy.
2. I think it's not good that I can't do the thing without reallocations 
though I have an apriori information where the new nonzeros will lie.
3. Documentation of MatAssemblyBegin/End should definitely contain the 
information about the zero filter.

But OK, 2. is not a problem in my case :-)
Thank you,
Vaclav


On 03/02/2012 12:18 AM, Matthew Knepley wrote:
> On Thu, Mar 1, 2012 at 5:14 PM, Vaclav Hapla <vaclav.hapla at vsb.cz 
> <mailto:vaclav.hapla at vsb.cz>> wrote:
>
>     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
>
>
> You can turn off this message using MatSetOption(). We put it there so 
> people know when allocation is being done since it
> can be slow.
>
>   Thanks,
>
>     Matt
>
>     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 <tel:%28%2B420%29%2059%20732%206291>
>     VSB-Technical University of Ostrava
>     17.listopadu 15/2172
>     708 33 Ostrava-Poruba
>     Czech Republic
>
>
>
>
> -- 
> 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/7d89869f/attachment.html>


More information about the petsc-dev mailing list