[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