Use BCGS_AMG_SSOR solver for finite volume methods
Description
We currently use the AMG_4_DG
solver in all cases. As its name suggests, the solver is optimized for solving DG problems by separating them into a CG and DG subspace. As finite volume spaces are essentially DG spaces of order zero, this solver works, but it likely performs many no-ops. Specifically, the CG subspace of the problem should be empty. We can therefore switch to a more direct solver.
Proposal
Use the BCGS_AMG_SSOR
solver for the finite volume method. It uses the same overall routines as the AMG_4_DG
, which should ensure that the results remain comparable. It uses AMG
for preconditioning, BiCGStab
for solving the problem, and SSOR
for smoothing the solution.
The PDELab class is called Dune::PDELab::ISTLBackend_BCGS_AMG_SSOR
and defined in the dune/pdelab/backend/istl/ovlpistlsolverbackend.hh
header. The class must replace the other linear solver via a conditional type definition based on the polynomial order of the problem. Initialization of the solver object is also different and must be controlled via if constexpr
.
How to test the implementation?
Test suite still succeeds.