I saw here 2.1.1 Preconditioners in NGSolve — NGS-Py 6.2.2302-87-ga5a5eff3b documentation that NGSolve has an algebraic multigrid method implemented. I implemented Poisson equation using H1 space with order 4, I set the preconditioner
c = Preconditioner(a, “h1amg”)
and use the CG solver:
inv = CGSolver(a.mat, c.mat, maxsteps=100)
Sometimes the solver converges but the L2-error of the solution isn’t great, and sometimes the solver doesn’t converge. Here some output of when it doesn’t converge:
H1AMG: level = 19, num_edges = 925, nv = 150
H1AMG: level = 20, num_edges = 905, nv = 147
H1AMG: level = 21, num_edges = 888, nv = 145
H1AMG: level = 22, num_edges = 878, nv = 144
0 nan
I have two questions:
- Is c = Preconditioner(a, “h1amg”) the correct way to set the h1amg preconditioner?
- If I apply static condensation and apply h1amg I get a segmentation fault. Do I need to do something different for the h1amg preconditioner when I also apply static condensation?
When I apply geometric multigrid via c = Preconditioner(a, “multigrid”) everything works perfectly (both with and without static condensation). Any insight is greatly appreciated.