2
$\begingroup$

Consider the time-dependent Navier-Stokes equation

$$u_t + (u \cdot \nabla) u - \Delta u + \nabla p = f$$ $$\operatorname{div}(u)=0$$

Looking at deal.ii tutorials, I've notice that there are extensive discussions about the choice of a preconditioner in the time independent case, while for the time dependent one I've only found this one the code gallery which fits quite well my testcase

Applying an IMEX scheme, I got

$$ \frac{M}{\Delta_t} U_{n+1} + A U_{n+1} + B^t P_{n+1} = G(t_n,U^n,f) $$ $$ B U_{n+1} = 0 $$

Therefore at each time-step I need to solve the saddle point problem

\begin{bmatrix} \ \frac{M}{\Delta_t} + A & B^t\\B & 0 \end{bmatrix}

Of course, I need to apply a preconditioner and, following the discussion, I'd chose

$$P = \begin{bmatrix} \frac{M}{\Delta_t} + A & B^t \\ 0 & -S^{-1} \end{bmatrix}$$ where $S$ is the Schur complement of $\frac{M}{\Delta_t}+ A$

Now, let's go to the hot-spot: I need to understand what can be a good way to invert the top left block and the bottom one $S$.

  • Since the top left block $\frac{M}{\Delta_t} + A$ is symmetric and positive definite, then in order to "invert" I would just use Conjugate Gradient.

  • For $S$ I would use the pressure mass matrix, which is usually called $M_p$ in deal.ii website. Essentially, it is composed by $L^2$ products of basis functions for the pressure. This is symmetric and positive definite too, so I can use CG again.

$\endgroup$
5
  • 1
    $\begingroup$ You can invert the momentum (top left) block using an algebraic multigrid solver. I would not suggest using pure CG. For the pressure block, I would suggest you to use the diagonal part of the mass matrix rather than the mass matrix itself and invert it directly. If you want more information why this is a good idea, check out the book "Finite elements and fast iterative solvers" by Elman, Silvester and Wathen. $\endgroup$ Commented Jul 2, 2021 at 4:06
  • $\begingroup$ @AbdullahAliSivas thanks for your suggestion about that book. I'm looking at it right now. When you say that you would use an AMG for the top left, do you mean CG with an AMG preconditioner? Like they said here in the documentation of step-32: dealii.org/current/doxygen/deal.II/… $\endgroup$
    – Vefhug
    Commented Jul 2, 2021 at 8:08
  • $\begingroup$ Not exactly. Of course, you can do that; it is going to work. But, if the AMG interface allows, using 4 V-cycles is more than enough generally and you don't need to wrap it up with CG. Using pseudocode notation, I would do x = GMRES(A,b,Minv = [AMG(A), 0; 0, inv(diag(A))]). You can also use MINRES rather than GMRES, but IMO, GMRES is the best implementation of MINRES. $\endgroup$ Commented Jul 2, 2021 at 13:30
  • $\begingroup$ What @AbdullahAliSivas (correctly) says is that you only need to approximate $A^{-1}$ and the way to do that is doing one AMG cycle, or maybe 4, rather than actually solving a linear system with $A$. $\endgroup$ Commented Jul 4, 2021 at 1:08
  • $\begingroup$ Thanks to both of you. I got the point. In practice, we see each matrix inverse as a linear operator acting on vectors, and the action (or its approximation) is determined by the solution of a linear system. $\endgroup$
    – Vefhug
    Commented Jul 4, 2021 at 21:53

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.