<div dir="ltr"><div dir="ltr">On Fri, Oct 4, 2019 at 6:04 AM Lawrence Mitchell <<a href="mailto:wence@gmx.li">wence@gmx.li</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"><br>
<br>
> On 4 Oct 2019, at 10:46, Matthew Knepley via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
> <br>
> On Thu, Oct 3, 2019 at 6:34 PM Salazar De Troya, Miguel via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
> I am trying to solve the Stokes equation with the Brinkman term to simulate a solid material. My intention is to implement the preconditioner in this paper:<a href="https://onlinelibrary.wiley.com/doi/epdf/10.1002/fld.426" rel="noreferrer" target="_blank">https://onlinelibrary.wiley.com/doi/epdf/10.1002/fld.426</a> (section 2.6) <br>
> <br>
> <br>
> Link does not work for me.<br>
<br>
Try <a href="https://onlinelibrary.wiley.com/doi/epdf/10.1002/fld.426" rel="noreferrer" target="_blank">https://onlinelibrary.wiley.com/doi/epdf/10.1002/fld.426</a> (mail clients are awful)<br>
<br>
>  <br>
> where they solve for the velocity and substitute that expression in the pressure equation. They end up solving a system of the type B K^-1 B^T, i.e. the Schur complement of the problem. For this system of equations, they argue that the preconditioner in page 11 is perfect for a given constant Brinkman penalty term.<br>
> <br>
>  <br>
> <br>
> Because I am solving for velocity and pressure without doing any substitution, I thought I could use a PC fieldsplit type Schur (full factorization)<br>
> <br>
> <br>
> Yes, this will form the exact factorization and a matrix-free form of the Schur complement.<br>
>  <br>
> and provide the preconditioner in the paper to solve the Schur complement.<br>
> <br>
> <br>
> Yes, you can provide a user-defined PC for the Schur complement.<br>
>  <br>
> My question is, should I provide this preconditioner through PCFieldSplitSetSchurPre or through fieldsplit_1_pc_type (probably through the Firedrake interface as inhttps://<a href="http://www.firedrakeproject.org/demos/stokes.py.html" rel="noreferrer" target="_blank">www.firedrakeproject.org/demos/stokes.py.html</a>) ?<br>
> <br>
> <br>
> The name PCFieldSplitSetSchurPre seems to be very misleading. You do not use it to provide a _preconditioner_. You use it to determine<br>
> the _preconditioning matrix_ from which the actual preconditioner is built. The preconditioner itself is defined using -fieldpslit_1_pc_type.<br>
> Since I do not know what the preconditioner looks like, I cannot say what preconditioner matrix you would want. Since Firedrake can construct<br>
> any operator for you, you might not care about the matrix we pass to you.<br>
<br>
The action of the PC is defined by:<br>
<br>
M^{-1} q = \phi_q + \mu q<br>
<br>
\mu is some number, and \phi_q solves the BVP<br>
<br>
-div \alpha^{-1} grad \phi_q = q<br>
<br>
grad \phi_q \dot n = 0<br>
\int \phi_q = 0<br>
<br>
So your PC for the fieldsplit_1 needs to:<br>
<br>
1. Discretise and solve this BVP to compute \phi_q<br>
2. Add \mu q.<br>
<br>
I.e. the action of PCApply is:<br>
<br>
y <- \mu x + Laplace^{-1} x<br>
<br>
(Aside, surely a primal-dual error has been made in the analysis here)<br>
<br>
You could, I think, do this by providing the discretisation of this laplacian and using an additive PCComposite (although I don't know what PC you would use to just scale the input, it's easy to write one though).<br></blockquote><div><br></div><div>Richardson R(x, y) is</div><div><br></div><div>   y += mu (b - Ax)</div><div><br></div><div>so if b = 0 and A = I, you get that. It seems easier just to make a PCSHELL with VecAXPY I guess.</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">
Cheers,<br>
<br>
Lawrence<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>