This study compares various high-order multigrid strategies for the fast solution of elliptic equations discretized by the Hybrid High-Order method. Combinations of h-, p- and hp-coarsening strategies are considered, coupled to diverse intergrid transfer operators. Comparisons are made experimentally on 2D and 3D test cases, with structured, unstructured and non-nested meshes. Advantages and drawbacks of each strategy are discussed for each experiment in an attempt to establish simplified guidelines for the optimization of the time to solution.
The experiments can be reproduced with the open-source code fhhos4, release 1.0.
In the following command lines, the strategies are configured by the parameter -hp-config {1|2|3|4}
:
-hp-config 1 # h-only
-hp-config 2 # p-h
-hp-config 3 # p-h*
-hp-config 4 # hp-h
Execute the following command to show that the multigrid method diverges when orthonormal bases are used with local refinement, even for low degree and small problem size:
> fhhos4 -geo square4quadrants_tri_localref -no-cache -tc square -cs r -k 1 -n 32 -e-ogb 3
The parameter -e-ogb 3
orthonormalizes the element bases. Replace it with -e-ogb 1
(orthogonalization without normalization) to make the multigrid method converge properly.
Note that divergence occurs if the refinement ratio is >= 1e5. To see it, edit the file data/meshes/2D/square4quadrants_tri_localref.geo
to play with the refinement ratio:
h_center = h*1e-5; # divergence
h_center = h*1e-4; # convergence
It is interesting to see that normalization does not seem to affect the conditioning of the matrix, and that using a direct solver seems to work. Indeed, execute the following command and check the L2-error obtained after the system is solved by a Cholesky factorization.
> fhhos4 -geo square4quadrants_tri_localref -no-cache -tc square -cs r -k 1 -n 256 -e-ogb 3 -s ch
Replace the last parameters with -e-ogb 1 -s mg
to check that you obtain the same L2-error using the multigrid and without normalization.
> fhhos4 -geo square -mesh cart -cs r -tol 1e-12 -s fcgmg -hp-config 2 -k 2 -n 1024
> fhhos4 -geo square -mesh cart -cs r -tol 1e-12 -s fcgmg -hp-config 2 -k 3 -n 512
> fhhos4 -geo square -mesh cart -cs r -tol 1e-12 -s fcgmg -hp-config 2 -k 4 -n 256
> fhhos4 -geo square -mesh cart -cs r -tol 1e-12 -s fcgmg -hp-config 2 -k 5 -n 128
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -s fcgmg -hp-config 1 -e-ogb 0 -f-ogb 0 -e-basis monomials -f-basis monomials -tol 1e-3 -k 1 -n 256
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -s fcgmg -hp-config 1 -e-ogb 0 -f-ogb 0 -e-basis monomials -f-basis monomials -tol 1e-3 -k 2 -n 128
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -s fcgmg -hp-config 1 -e-ogb 0 -f-ogb 0 -e-basis monomials -f-basis monomials -tol 1e-3 -k 3 -n 64
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -s fcgmg -hp-config 1 -e-ogb 0 -f-ogb 0 -e-basis monomials -f-basis monomials -tol 1e-3 -k 4 -n 64
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -s fcgmg -hp-config 1 -e-ogb 0 -f-ogb 0 -e-basis monomials -f-basis monomials -tol 1e-3 -k 5 -n 32
Set -s mg
for Fig. 6 and -s fcgmg
for Fig. 7.
> fhhos4 -geo square -mesh cart -cs r -k 5 -n 128 -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}
Set -s mg
for Fig. 8 and -s fcgmg
for Fig. 9.
> fhhos4 -geo square -cs r -k 5 -n 64 -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}
Set -s mg
for Fig. 10 and -s fcgmg
for Fig. 11.
> fhhos4 -geo square4quadrants_tri_localref -tc kellogg -no-cache -cs r -k 5 -n 256 -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}
Set -s mg
for Fig. 12 and -s fcgmg
for Fig. 13.
> fhhos4 -geo cube -k 3 -n 64 -mesh cart -mesher inhouse -cs s -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}
Set -s mg
for Fig. 14 and -s fcgmg
for Fig. 15.
> fhhos4 -geo cube -k 3 -n 32 -mesh stetra -mesher inhouse -cs s -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}
Set -s mg
for Fig. 16 and -s fcgmg
for Fig. 17.
> fhhos4 -geo genevawheel.geo -tc default -k 2 -n 32 -cs m -tol 1e-12 -s {mg|fcgmg} -hp-config {1|2|3|4}