The two FEniCS-based Tesseracts pin the legacy fenics==2019.1.0 / dolfin-adjoint==2019.1.0 stack:
dependencies:
- python==3.10
- fenics==2019.1.0
- dolfin-adjoint==2019.1.0
Why this matters
Legacy FEniCS (fenics/dolfin 2019.1.0) has been superseded by FEniCSx (dolfinx) and is no longer actively developed. It has no conda-forge builds for Python 3.12+, which forces these two solvers to pin python==3.10.
Python 3.10 reaches end-of-life in October 2026 and already lags the rest of the project — the main package and mosaic-shared target newer interpreters. As long as these solvers depend on legacy FEniCS, the whole repo is held back to the 3.10 floor.
The task
Port both solvers from legacy FEniCS to the modern FEniCSx stack:
fenics → fenics-dolfinx (conda-forge, has 3.12/3.13 builds)
dolfin-adjoint → adjoint via pyadjoint / the FEniCSx adjoint path
- Bump
python==3.10 → 3.12 in both tesseract_environment.yaml files
The tesseract_api.py in each solver directory will need updating for the DOLFINx API (function spaces, forms, assembly, and the adjoint tape all changed between the two generations).
Acceptance criteria
Pointers
Context: surfaced while reverting a Python-version bump (#96); the legacy FEniCS pin was the blocker for moving off 3.10.
The two FEniCS-based Tesseracts pin the legacy
fenics==2019.1.0/dolfin-adjoint==2019.1.0stack:mosaic/tesseracts/thermal-mesh/fenics-heat/tesseract_environment.yamlmosaic/tesseracts/structural-mesh/fenics-structural/tesseract_environment.yamlWhy this matters
Legacy FEniCS (
fenics/dolfin2019.1.0) has been superseded by FEniCSx (dolfinx) and is no longer actively developed. It has no conda-forge builds for Python 3.12+, which forces these two solvers to pinpython==3.10.Python 3.10 reaches end-of-life in October 2026 and already lags the rest of the project — the main package and
mosaic-sharedtarget newer interpreters. As long as these solvers depend on legacy FEniCS, the whole repo is held back to the 3.10 floor.The task
Port both solvers from legacy FEniCS to the modern FEniCSx stack:
fenics→fenics-dolfinx(conda-forge, has 3.12/3.13 builds)dolfin-adjoint→ adjoint viapyadjoint/ the FEniCSx adjoint pathpython==3.10→3.12in bothtesseract_environment.yamlfilesThe
tesseract_api.pyin each solver directory will need updating for the DOLFINx API (function spaces, forms, assembly, and the adjoint tape all changed between the two generations).Acceptance criteria
fenics-heatandfenics-structuralTesseracts build and run on Python 3.12python==3.10no longer appears in either environment filePointers
dolfin-adjointtape logic in each solver'stesseract_api.py.Context: surfaced while reverting a Python-version bump (#96); the legacy FEniCS pin was the blocker for moving off 3.10.