For a given discontinuous galerkin (DG) implementation for Navier-Stokes, targeting 10,000 to 1,000,000 4th order cells in 3D, I'm using PETSc's suite of linear/non-linear solvers on the back-end. It seems to me that there are two broad methods of implicitly solving the discretization. One can explicitly form the Jacobian in a sparse format and use whatever tools are available to solve it, or use a Jacobian-Free Newton-Krylov method that approximates the jacobian-vector products by evaluating the right-hand-side by finite differences. Advantages and disadvantages I see of each:

Explicit Jacobian

  • Con - Requires a large amount of memory (precisely how much? can I do this with <100GB total memory?)
  • Con - Requires writing code to evaluate the Jacobian and store it
  • Pro - Allows the use of black-box preconditioners already present in PETSc

Jacobian-Free Newton-Krylov

  • Pro - Minimal memory needs
  • Con - Unknown how often to re-linearize or what finite difference steps to use, how often to restart, etc.
  • Con - must write own preconditioners.

I'd like some input from those more familiar with these methods as to the advantages and disadvantages of them. Am I right to assume the explicit jacobian would be much faster?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.