[petsc-users] efficiency of MatSetValues

Matthew Knepley knepley at gmail.com
Fri Feb 3 17:27:40 CST 2012


On Fri, Feb 3, 2012 at 5:05 PM, Margarita Satraki <
margarita.satraki at gmail.com> wrote:

> Does the same happen with MatDuplicate? It overwrites the
> MatSeqAIJSetPreallocation?
>

Yes.


> In this case, can I redefine the nonzero places?
>

No.


> I need it for the case of creating the preconditioner by changing the
> jacobian slightly.
>

The right way to do this is just fully allocate the preconditioner. We have
benchmarked
this hundreds of times, and it is negligible.

  Thanks,

     Matt


> Margarita
>
> On 3 February 2012 22:58, Matthew Knepley <knepley at gmail.com> wrote:
>
>> On Fri, Feb 3, 2012 at 4:46 PM, Margarita Satraki <
>> margarita.satraki at gmail.com> wrote:
>>
>>> Hi Jed,
>>>
>>> Thanks for the reply.
>>> I've defined 2 nonzeros per row so it should consider them to be in the
>>> correct place (1 for diagonal and 1 for the 1st off diagonal). I do not
>>> want to delete anything, just experiment with inserting new entries. This
>>> is a simple example to demonstrate my problem with a more complicated code
>>> of nonlinear elasticity.
>>
>>
>> Assembly of a matrix compresses it, throwing away extra allocated places
>> that were not used.
>>
>>    Matt
>>
>>
>>
>>> Margarita
>>>
>>>
>>> On 3 February 2012 22:41, Jed Brown <jedbrown at mcs.anl.gov> wrote:
>>>
>>>> On Sat, Feb 4, 2012 at 01:35, Margarita Satraki <
>>>> margarita.satraki at gmail.com> wrote:
>>>>
>>>>> It seems that only the 1st case gives good results in the sense that
>>>>> by increasing the size of the matrix you increase the time needed by
>>>>> MatSetValues linearly. Both the 2nd and the 3rd case give similar results,
>>>>> much worse than the 1st. I understand that the 1st case has the advantage
>>>>> because of accurate memory allocation but shouldn't the 2ndcase be better
>>>>> than the 3rd since it at least defines the number of nonzeros per row so it
>>>>> again allocates memory more accurately?
>>>>
>>>>
>>>> Those nonzeros are in the wrong place and PETSc does not know that you
>>>> want to "delete" the old entries.
>>>>
>>>> Just preallocate the correct number of nonzeros and it will be fast,
>>>> don't bother with copying in a "similar" matrix.
>>>>
>>>
>>>
>>
>>
>> --
>> 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
>>
>
>


-- 
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-users/attachments/20120203/a74df842/attachment-0001.htm>


More information about the petsc-users mailing list