[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