LOR preconditioner for IncNS solver Pressure preconditioning
Issue/feature addressed
Please provide a description of the problem your changes address. Be sure to link to any related items in the issue tracker.
Improve on the existing pressure Poisson preconditioning available for the IncNS solver. For large 3D cases, the current default is Diagonal, which has high iteration counts with large standard deviations. Other preconditioners are not performant enough or do not scale well enough.
Proposed solution
A summary of the proposed changes and how they address the issue/feature at hand. Whenever possible, describe alternatives your considered and decisions you made.
Lower-order refined (LOR) preconditioner, also known as the SEMFEM preconditioner, uses a spectrally equivalent (Canuto et al. 2007) lower-order (P=1) discretisation to precondition the high-order problem. The motivation behind this approach is to achieve a sparser preconditioner by leveraging the sparsity of lower-order operators. It is also less memory-intensive and has minimal sensitivity to high aspect-ratio elements, making it suitable for complex geometries. A bounded iterative condition number behaviour with increasing problem size is also observed, meaning the larger the case, the more efficient this preconditioner is. This has been previously implemented for quads and hexes in libraries like Nek5000 and MFEM (Bello-Maldonado and Fischer 2019, Pazner 2020), but this is the first instance of implementation for prism and tetrahedrons. This is also the first time the LOR preconditioner is implemented for a modal expansion basis.
Implementation
A more detailed description of the changes. Please include any details necessary for reviewers to understand your work, and point out particular points would like them to pay particular attention to.
The following steps are done for the preconditioning:
- The input to the LOR preconditioner code is the residual of the iterative solution \hat{\mathbf{r}} at a given iteration.
- Interpolation of the solution from the HO discretisation to the LOR space is done using an appropriately constructed generalised Vandemonde matrix \mathcal{V}, depending on the choice of the higher-order expansion basis (MODIFIED/GLL_LAGRANGE). After interpolating the LOR space, the linear system is solved using an appropriately chosen solution strategy, the inner-iteration strategy. For large 3D cases, the BoomerAMG solver is used via the PETSc interface.
- The solution from the LOR mesh is then copied back to the HO space, which is then transformed back onto the original expansion by the inverse of the \mathcal{V} matrix operation.
- Appropriate scatter-gather transformations are handled using the assembly maps (\mathcal{A}_H, \mathcal{A}_L) in both spaces.
The PreconditionerLOR
inherits from Nektar::MultiRegions::Preconditioner
Tests
- Helmholtz: Tests for LOR working for a Poisson solve with different element shapes: Triangles, Quads, Tetrahedrons and Prisms.
- IncNS solver: LOR working for both pressure and velocity systems for 3D elements (Tetrahedrons, Prisms and Mixed meshes). Checked for XML and HDF5 formats.
- (Not completed) - Tests for MPI and using PETSc - need advice on how to proceed.
Suggested reviewers
Please suggest any people who would be appropriate to review your code. @ssherw, @dmoxey, @ccantwel
Notes
Please add any other information that could be useful for reviewers.
- Dependencies:
NEKTAR_USE_PETSC
recommended. -
LinMeshGraph
routine is found to be memory intensive for large cases, purely due to the cost of constructing two different MeshGraphs - PETSc options for using the BoomerAMG library need to be passed through the
.petscrc
file as of now
Checklist
-
Functions and classes, or changes to them, are documented. -
User guide/documentation is updated. -
Changelog is updated. -
Suitable tests added for new functionality. -
Contributed code is correctly formatted. (See the contributing guidelines). -
License added to any new files. -
No extraneous files have been added (e.g. compiler output or test data files).