Here are some development notes about the implementation and testing of the Hyprepoissonsolvers module.
Precision and Residual
The Hypre library seem use a format that allows the storage of two extra digits compared to the (double) format used in Gerris. Consequently, copying the solution from Hypre to Gerris format implies that 2 digits are lost.
This might or might not be related, but also, computing residual using Hypre and Gerris leads to different results by a factor of 80 to 150, with the residual computed by Hypre being smaller than the ones computed by Gerris. It is not clear how the residual is computed in Hypre but it certainly does not match with the norm 1, 2 or infinity computed by Gerris. In what follows we will assume it is some kind of norm 2.
Here is an example for which the Poisson test case is run on a cartesian mesh of refinement 8. The simulation is ran successively for 1 to 100 iterations and the residuals given by Hypre (Final Relative Residual) and Gerris (Norm2) are compared.
Coarsening, anisotropy and boundary conditions
It was observed when reproducing the Poisson test case for a cartesian grid that was uniformly stretched in one direction to make the problem, that Hypre with the default parameters crashes when the resolution is low. The more the domain is stretched, the higher the needed resolution for Hypre not to crash. More surprisingly, if a Dirichlet boundary condition is imposed on one of the boundaries of the domain, Hypre does not crash anymore.
It looks like this is related to the coarsening algorithm used to build the multi-grid problem. While most coarsening lead to Hypre crashing, the pmis and cljp coarsening do not seem to have that problem.
An alternative way to solve the problem is to impose to the solver to use less multi-grid levels and keep using the default coarsening.