Skip to content
Open
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ FEniCSx deal.II 4C NGSolve skfem Kratos DUNE FEBio
| `prepare_simulation` | Knowledge + real examples + template in one call — always the first step |
| `run_simulation` | Execute Python-based solvers (FEniCSx, NGSolve, scikit-fem, DUNE-fem) |
| `run_with_generator` | Generate input + run compiled solvers (4C, deal.II, Kratos) |
| `verify_mesh_independence` | Heuristic mesh-refinement study for problems without an exact solution: re-runs at refined resolutions, compares global norms + probe values, converged/not-converged verdict |
| `knowledge` | Physics knowledge, pitfalls, materials, coupling docs, cross-backend collation |
| `examples` | Real test files from the solvers' own test suites |
| `couple` | General partitioned coupling for any physics (contract + Aitken relaxation) |
Expand Down
13 changes: 13 additions & 0 deletions src/backends/dune/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,19 @@ def supported_physics(self) -> list[PhysicsCapability]:
element_types=["Lagrange-P1", "Lagrange-P2"],
template_variants=["2d"],
),
PhysicsCapability(
name="poisson_mms",
description=(
"3D variable-coefficient Poisson manufactured-solution "
"(MMS) convergence family — -div(kappa grad u) = f on "
"[0,L]^3, affine kappa, exact Dirichlet data, uniform "
"refinement with per-level L2/H1 error lines; L2 order "
"k+1 / H1 order k verified live"),
spatial_dims=[3],
element_types=["Lagrange-P1", "Lagrange-P2",
"Lagrange-P3", "Lagrange-P4"],
template_variants=["3d_varcoeff"],
),
PhysicsCapability(
name="heat",
description="Steady heat conduction (UFL)",
Expand Down
5 changes: 3 additions & 2 deletions src/backends/dune/generators/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""DUNE-fem generator registry — maps physics_variant -> generator function."""

from .poisson import GENERATORS as _poisson_gen, KNOWLEDGE as _poisson_kn
from .poisson_mms3d import GENERATORS as _poisson3d_gen, KNOWLEDGE as _poisson3d_kn
from .heat import GENERATORS as _heat_gen, KNOWLEDGE as _heat_kn
from .linear_elasticity import GENERATORS as _elast_gen, KNOWLEDGE as _elast_kn
from .stokes import GENERATORS as _stokes_gen, KNOWLEDGE as _stokes_kn
Expand All @@ -13,7 +14,7 @@
# Merged generator registry: physics_variant -> callable(params) -> str
GENERATORS: dict[str, callable] = {}
for _g in [
_poisson_gen, _heat_gen, _elast_gen, _stokes_gen,
_poisson_gen, _poisson3d_gen, _heat_gen, _elast_gen, _stokes_gen,
_rxn_gen, _nonlinear_gen, _dg_gen, _adaptive_gen,
_advanced_gen,
]:
Expand All @@ -22,7 +23,7 @@
# Merged knowledge registry: physics_name -> dict
KNOWLEDGE: dict[str, dict] = {}
for _k in [
_poisson_kn, _heat_kn, _elast_kn, _stokes_kn,
_poisson_kn, _poisson3d_kn, _heat_kn, _elast_kn, _stokes_kn,
_rxn_kn, _nonlinear_kn, _dg_kn, _adaptive_kn,
_advanced_kn,
]:
Expand Down
Loading
Loading