Dear everyone,
I’m currently using the GPU-accelerated version of ParFlow and encountered an issue that I hope you can help clarify. According to the official documentation and GitHub discussions, GPU acceleration is only supported when using the MGSemi linear preconditioner. However, in my case, whenever I set:
pfset Solver.Linear.Preconditioner MGSemi
the solver fails to converge or crashes with a KINSOL_KRYLOV_FAILURE. On the other hand, when I use:
pfset Solver.Linear.Preconditioner PFMG
the simulation runs successfully - though of course without GPU acceleration.
My domain is a structured rectangular grid, and I’m using Solver.TerrainFollowingGrid = True, with Richards equation. There is no explicit mask applied, but some boundary regions are assigned 0 values for parameters such as permeability or pressure. Could that be implicitly triggering behavior incompatible with MGSemi?
Here are some relevant solver settings I'm using:
pfset Solver Richards
pfset Solver.TerrainFollowingGrid True
#pfset Solver.TerrainFollowingGrid.SlopeUpwindFormulation Upwind
pfset Solver.Spinup True
pfset Solver.MaxIter 500000
pfset Solver.Drop 1E-20
pfset Solver.AbsTol 1E-8
pfset Solver.MaxConvergenceFailures 8
pfset Solver.Nonlinear.MaxIter 250
pfset Solver.Nonlinear.ResidualTol 1e-6
## new solver settings for Terrain Following Grid
pfset Solver.Nonlinear.EtaChoice EtaConstant
pfset Solver.Nonlinear.EtaValue 0.001
pfset Solver.Nonlinear.UseJacobian True
pfset Solver.Nonlinear.DerivativeEpsilon 1e-16
pfset Solver.Nonlinear.StepTol 1e-30
pfset Solver.Nonlinear.Globalization LineSearch
pfset Solver.Linear.KrylovDimension 70
pfset Solver.Linear.MaxRestarts 2
pfset Solver.Linear.Preconditioner PFMG
pfset Solver.Linear.Preconditioner.PCMatrixType FullJacobian
pfset Solver.Linear.Preconditioner.PFMG.NumPreRelax 3
pfset Solver.Linear.Preconditioner.PFMG.NumPostRelax 2
Could you please advise on:
-
What are the strict requirements for using MGSemi successfully with GPU acceleration?