MUMPS ICNTL(14)=200 in the default direct solver parameters never reaches MUMPS
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 72/100
Direzione di ricerca
Inizia in firedrake/petsc.py intorno a _DEFAULT_DIRECT_SOLVER_PARAMETERS e _DEFAULT_KSP_PARAMETERS, quindi esegui il riproduttore MUMPS fornito con -options_left. La correzione è completa quando il valore predefinito raggiunge MUMPS come ICNTL(14)=200 e non viene segnalata alcuna opzione PETSc inutilizzata corrispondente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
The default direct-solver parameters set ICNTL(14) = 200 for MUMPS, but the option never reaches MUMPS: it is composed into pc_factor_mat_mumps_icntl_14, which PETSc reports as an unused option. MUMPS therefore runs with its own default ICNTL(14) = 20.
This silently removes the intended 200% working-space relaxation, making INFOG(1) = -9 ("main internal real/complex workarray too small") more likely on problems with significant extra fill-in — which is exactly the failure mode the default was added to protect against.
Steps to Reproduce
from firedrake import *
from firedrake.petsc import PETSc
mesh = UnitSquareMesh(8, 8)
V = FunctionSpace(mesh, "CG", 1)
u, v = TrialFunction(V), TestFunction(V)
uh = Function(V)
problem = LinearVariationalProblem(
inner(grad(u), grad(v))*dx, inner(Constant(1), v)*dx,
uh, bcs=DirichletBC(V, 0, "on_boundary"))
solver = LinearVariationalSolver(problem) # defaults only
print("solver.parameters:", dict(solver.parameters))
prefix = solver.snes.getOptionsPrefix() or ""
pc = solver.snes.getKSP().getPC()
# ask MUMPS to print its own ICNTL table
PETSc.Options().setValue(prefix + "mat_mumps_icntl_4", "2")
solver.solve()
print("factor Mat prefix:", repr(pc.getFactorMatrix().getOptionsPrefix()))
Run with -options_left:
python3 mwe.py -options_left
Expected behavior
MUMPS reports ICNTL(14) = 200.
Actual behavior
solver.parameters: {'mat_type': 'aij', 'ksp_type': 'preonly', 'ksp_rtol': 1e-07,
'pc_type': 'lu', 'pc_factor_mat_solver_type': 'mumps',
'pc_factor_mat_mumps_icntl_14': 200, 'snes_type': 'ksponly'}
snes prefix: 'firedrake_1_'
factor Mat prefix: 'firedrake_1_'
ICNTL(14) Percentage of memory relaxation = 20
ICNTL(14) Memory relaxation = 20
Unused PETSc option: firedrake_1_pc_factor_mat_mumps_icntl_14
Analysis
The value itself is set with the correct key in _DEFAULT_DIRECT_SOLVER_PARAMETERS:
https://github.com/firedrakeproject/firedrake/blob/main/firedrake/petsc.py#L120-L122
if DEFAULT_DIRECT_SOLVER == "mumps":
_DEFAULT_DIRECT_SOLVER_PARAMETERS["mat_mumps_icntl_14"] = 200
but that whole dict is then nested under a "pc_factor" key and flattened:
https://github.com/firedrakeproject/firedrake/blob/main/firedrake/petsc.py#L137-L143
_DEFAULT_KSP_PARAMETERS = petsctools.flatten_parameters({
"mat_type": "aij",
"ksp_type": "preonly",
"ksp_rtol": 1e-7,
"pc_type": "lu",
"pc_factor": _DEFAULT_DIRECT_SOLVER_PARAMETERS
})
so {"pc_factor": {"mat_mumps_icntl_14": 200}} becomes pc_factor_mat_mumps_icntl_14.
The pc_factor_ nesting is right for mat_solver_type (pc_factor_mat_solver_type is a genuine PCFactor option and does take effect), but MUMPS ICNTL options are not in the PCFactor namespace — they belong to the factored Mat, whose options prefix is just the solver prefix (firedrake_1_ above, with no pc_factor_ segment). The factored matrix looks for <prefix>mat_mumps_icntl_14, so the composed key can never match.
Consistent with that, putting the key at the top level does work:
solver_parameters = {"ksp_type": "preonly", "pc_type": "lu",
"pc_factor_mat_solver_type": "mumps",
"mat_mumps_icntl_14": 77,
"mat_mumps_icntl_4": 2}
# -> ICNTL(14) Percentage of memory relaxation = 77
So the two kinds of options in _DEFAULT_DIRECT_SOLVER_PARAMETERS need different prefixes and cannot be flattened under a single "pc_factor" key.
This is related to, but distinct from, #2250 (user-supplied mg_coarse_mat_mumps_icntl_XX ignored in the multigrid coarse solver): that one is about propagating user options into a sub-solver, whereas this is Firedrake's own default silently not applying.
Environment
- Firedrake 2026.4.1
- PETSc 3.25
- MUMPS 5.8.2
- macOS (arm64)
Verified against main at the time of writing: firedrake/petsc.py lines 122 and 137–143 are unchanged from the installed version.
- Lingua principale
- Python
- Stelle
- 684
- Fork
- 204
- Merge medio
- 4g 14h
- PR unite (30g)
- 46
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di firedrakeproject/firedrake
-
BUG: NonlinearVariationalSolver errors with adj_kwargsForse già presa @dham l’ha presa 151 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
firedrakeproject/firedrake#5186 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
firedrakeproject/firedrake#5091 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 1/5 1-3 ore Idoneità per principianti 82/100
firedrakeproject/firedrake#3556 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
firedrakeproject/firedrake#5644 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Function.assign on a subset fails with a Constant, a Real Function or abs in the expressionForse già presa @connorjward l’ha presa 2 giorni fa. Aperta
firedrakeproject/firedrake#5643 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di firedrakeproject/firedrake
Issue simili
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Sienna-Platform/SiennaSchemas#130 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
firedrakeproject/Irksome#293 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ida-arbeitszeit/workers-control#1578 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
aws-samples/sample-per-model-bedrock#898 ·
I maintainer di solito rispondono entro 1 giorno