[petsc-users] Modify matrix nonzero structure

Adrian Croucher a.croucher at auckland.ac.nz
Sun May 19 21:44:47 CDT 2024


Great, it sounds like this might be easier than I expected. Thanks very 
much.

Did you have any thoughts on my diagnosis of the problem (the poor 
nonlinear solver convergence being caused by missing Jacobian elements 
representing interaction between the sources)?

- Adrian

On 20/05/24 12:41 pm, Matthew Knepley wrote:
> On Sun, May 19, 2024 at 8:25 PM Barry Smith <bsmith at petsc.dev> wrote:
>
>     You can call MatSetOption(mat,MAT_NEW_NONZERO_LOCATION_ERR) then
>     insert the new values. If it is just a handful of new insertions
>     the extra time should be small. Making a copy of the matrix won't
>     give you a new matrix that is any faster to
>     ZjQcmQRYFpfptBannerStart
>     This Message Is From an External Sender
>     This message came from outside your organization.
>     ZjQcmQRYFpfptBannerEnd
>
>        You can call MatSetOption(mat,MAT_NEW_NONZERO_LOCATION_ERR)
>     then insert the new values. If it is just a handful of new
>     insertions the extra time should be small.
>
>         Making a copy of the matrix won't give you a new matrix that
>     is any faster to insert into so best to just use the same matrix.
>
>
> Let me add to Barry's answer. The preallocation infrastructure is now 
> not strictly necessary. It is possible to just add all your nonzeros 
> in and assembly,  and the performance will be pretty good (uses 
> hashing etc). So if just adding a few nonzeros does not work, we can 
> go this route.
>
>   Thanks,
>
>      Matt
>
>       Barry
>
>
>>     On May 19, 2024, at 7:44 PM, Adrian Croucher
>>     <a.croucher at auckland.ac.nz> wrote:
>>
>>     This Message Is From an External Sender
>>     This message came from outside your organization.
>>     hi,
>>
>>     I have a Jacobian matrix created using DMCreateMatrix(). What would be
>>     the best way to add extra nonzero entries into it?
>>
>>     I'm guessing that DMCreateMatrix() allocates the storage so the nonzero
>>     structure can't really be easily modified. Would it be a case of
>>     creating a new matrix, copying the nonzero entries from the original one
>>     and then adding the extra ones, before calling MatSetUp() or similar? If
>>     so, how exactly would you copy the nonzero structure from the original
>>     matrix?
>>
>>     Background: the flow problem I'm solving (on a DMPlex with finite volume
>>     method) has complex source terms that depend on the solution (e.g.
>>     pressure), and can also depend on other source terms. A simple example
>>     is when fluid is extracted from one location, with a pressure-dependent
>>     flow rate, and some of it is then reinjected in another location. This
>>     can result in poor nonlinear solver convergence. I think the reason is
>>     that there are effectively missing Jacobian entries in the row for the
>>     reinjection cell, which should have an additional dependence on the
>>     solution in the cell where fluid is extracted.
>>
>>     - Adrian
>
>
-- 
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
Waipapa Taumata Rau / University of Auckland, New Zealand
email:a.croucher at auckland.ac.nz
tel: +64 (0)9 923 4611
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20240520/b7bfceb8/attachment-0001.html>


More information about the petsc-users mailing list