<div dir="ltr"><div dir="ltr">On Thu, Jul 1, 2021 at 11:44 AM Matteo Semplice <<a href="mailto:matteo.semplice@uninsubria.it">matteo.semplice@uninsubria.it</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Il 01/07/21 17:52, Jed Brown ha scritto:<br>
> I think ex28 is better organization of code. You can DMCreateMatrix() and then set types/preallocation for off-diagonal blocks of the MatNest. I think the comment is unclear and not quite what was intended and originally worked (which was to assemble the off-diagonal blocks despite bad preallocation).<br>
><br>
> <a href="https://gitlab.com/petsc/petsc/-/commit/6bdeb4dbc27a59cf9af4930e08bd1f9937e47c2d" rel="noreferrer" target="_blank">https://gitlab.com/petsc/petsc/-/commit/6bdeb4dbc27a59cf9af4930e08bd1f9937e47c2d</a><br>
><br>
> <a href="https://www.mcs.anl.gov/petsc/petsc-current/src/snes/tutorials/ex28.c.html#line410" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/src/snes/tutorials/ex28.c.html#line410</a><br>
<br>
Thanks! Yesterday I was unable to make it work, but I'll have another go <br>
with ex28 then...<br>
<br>
> Note that if you're using DMDA and have collocated fields, you can skip all this complexity. And if you have a scattered discretization, consider DMStag. ex28 is showing how to solve a coupled problem where there is no suitable structure to convey the relation between discretizations.<br>
<br>
The current discretization is in fact colocated with the variables on <br>
the same grid, and we might stick to that for a while.<br>
<br>
However, one key point in the design is that the jacobian will be <br>
[A00,A01;A10,A11] and we already have a taylor-made shell preconditioner <br>
for A00 and A00 implemented as a shell matrix; the preconditioner for <br>
the full Jacobian will be to neglect the A10 block and do a <br>
block-triangular solve inverting A00 approximately with the shell <br>
preconditioner.<br></blockquote><div><br></div><div>Okay, if that is the case, then you should use DMDA to layout the Jacobian, with DMCreateMatrix(),</div><div>and then PCFIELDSPLIT to preconditioner, since it will automatically split things into your two pieces,</div><div>and you can use your custom PC for A00 and multiplicative to get your upper triangular PC, or you</div><div>could use a Schur complement to see if stronger coupling was more effective.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I do not understand how creating a DMDA with n0+n1 dofs will let me <br>
easily reuse my shell preconditioner code on the top-left block.<br>
<br>
Matteo<br>
<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>