Solver Reference

Each solver card shows its numerical scheme, AD strategy, and Tesseract schema; per-(solver, problem) exclusions and explained anomalies come from the problem configs and are listed alongside. Click Inputs / Outputs on any solver to expand its field tables. The ∂ column marks fields that support automatic differentiation (VJP/JVP).

Legend. Each card shows a Numerics: line — the discretization followed by the numerical method — and three badge categories: language (backend / runtime), AD: strategy (autodiff / adjoint / hybrid / forward-only), and GPU on GPU-capable solvers.

Structural mechanics

deal.II

Numerics: Finite Element, Direct (spsolve)

cpp AD: forward-only

Upstream docs: https://www.dealii.org/

Path: mosaic/tesseracts/structural-mesh/dealii-structural

Image: dealii_structural_mesh

deal.II Q1 trilinear hexahedral FEM linear-elasticity solver via C++ subprocess (UMFPACK direct). Forward-only — reference implementation for cross-framework validation.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. Values in [0, 1]: 0 = void, 1 = solid.
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe displacement (values shape (n_groups, 3), None → zero); neumann.mask/values prescribe surface traction (values shape (n_groups, 3)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
E_max float Young’s modulus of the fully solid material [MPa].
nu float Poisson’s ratio.
xmin float Void stiffness ratio (E_min = xmin * E_max).
penal float SIMP penalisation exponent (E(ρ) = E_min + (E_max−E_min)·ρ^penal).

Outputs

Field Type Description
compliance Array[(), Float32] Structural compliance C = F^T U (scalar). Minimising compliance is equivalent to maximising stiffness.

FEniCS

Numerics: Finite Element, GMRES+AMG

fenics AD: adjoint

Upstream docs: https://fenicsproject.org/

Path: mosaic/tesseracts/structural-mesh/fenics-structural

Image: fenics_structural_mesh

FEniCS/DOLFIN CG1 FEM linear-elasticity solver with SIMP penalisation. Gradient ∂C/∂ρ via dolfin-adjoint tape replay (discrete adjoint derived at the variational level via UFL).

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. Values in [0, 1]: 0 = void, 1 = solid.
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe displacement (values shape (n_groups, 3), None → zero); neumann.mask/values prescribe surface traction (values shape (n_groups, 3)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
E_max float Young’s modulus of the fully solid material.
nu float Poisson’s ratio.
xmin float Void stiffness ratio (E_min = xmin * E_max).
penal float SIMP penalisation exponent (E(rho) = E_min + (E_max-E_min)*rho^penal).

Outputs

Field Type Description
compliance Array[(), Float32] Structural compliance C = F^T U (scalar). Minimising compliance is equivalent to maximising stiffness.

Firedrake

Numerics: Finite Element, GMRES+AMG

firedrake AD: adjoint

Upstream docs: https://www.firedrakeproject.org/

Path: mosaic/tesseracts/structural-mesh/firedrake-structural

Image: firedrake_structural_mesh

Firedrake CG1 FEM linear-elasticity solver with SIMP penalisation. Gradient ∂C/∂ρ via firedrake-adjoint (pyadjoint ReducedFunctional) — an independent tape-based discrete adjoint complement to FEniCS.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. Values in [0, 1]: 0 = void, 1 = solid.
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe displacement (values shape (n_groups, 3), None → zero); neumann.mask/values prescribe surface traction (values shape (n_groups, 3)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
E_max float Young’s modulus of the fully solid material.
nu float Poisson’s ratio.
xmin float Void stiffness ratio (E_min = xmin * E_max).
penal float SIMP penalisation exponent (E(rho) = E_min + (E_max-E_min)*rho^penal).

Outputs

Field Type Description
compliance Array[(), Float32] Structural compliance C = F^T U (scalar). Minimising compliance is equivalent to maximising stiffness.

JAX-FEM

Numerics: Finite Element, Direct (UMFPACK)

jax AD: hybrid GPU

Upstream docs: https://github.com/deepmodeling/jax-fem

Path: mosaic/tesseracts/structural-mesh/jax-fem

Image: jax_fem_structural_mesh

JAX-FEM HEX8 linear-elasticity solver with SIMP stiffness E(ρ) = E_min + (E_max − E_min)·ρ^penal. Gradient ∂C/∂ρ via JAX automatic differentiation through the linear FE solve (hybrid implicit-function-theorem adjoint).

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. Values in [0, 1]: 0 = void, 1 = solid.
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe displacement (values shape (n_groups, 3), None → zero); neumann.mask/values prescribe surface traction (values shape (n_groups, 3)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.

Outputs

Field Type Description
compliance Array[(), Float32] Structural compliance C = F^T U (scalar). Minimising compliance is equivalent to maximising stiffness.

TopOpt.jl

Numerics: Finite Element, Direct (CHOLMOD)

julia AD: adjoint

Upstream docs: https://github.com/JuliaTopOpt/TopOpt.jl

Path: mosaic/tesseracts/structural-mesh/topopt-jl

Image: topopt_jl_structural_grid

TopOpt.jl HEX8 FEM linear-elasticity solver with SIMP penalisation, Julia + Ferrite.jl backend. Gradient ∂C/∂ρ via analytical SIMP adjoint sensitivity computed alongside the forward solve.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. Values in [0, 1]: 0 = void, 1 = solid.
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe displacement (values shape (n_groups, 3), None → zero); neumann.mask/values prescribe surface traction (values shape (n_groups, 3)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
E float Young’s modulus of the solid material.
nu float Poisson’s ratio.
xmin float Minimum density (void stiffness) to prevent singular stiffness matrix.

Outputs

Field Type Description
compliance Array[(), Float32] Structural compliance C = F^T U (scalar). Minimising compliance is equivalent to maximising stiffness.

Heat transfer

deal.II

Numerics: Finite Element, Direct (spsolve)

cpp AD: forward-only

Upstream docs: https://www.dealii.org/

Path: mosaic/tesseracts/thermal-mesh/dealii-heat

Image: dealii_heat_thermal_mesh

deal.II Q1 trilinear hexahedral FEM heat-conduction solver with SIMP conductivity (C++ subprocess, UMFPACK direct). Forward-only — reference implementation for cross-framework validation.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. ρ=1 → fully conducting, ρ=0 → insulating.
source Array[(None,), Float32] Per-element volumetric heat source (W/m³), shape (n_cells,). Active slice = source[:hex_mesh.n_faces]. Zero by default (topology-optimisation mode; no body heat source).
target_temperature Array[(None,), Float32] Per-node target temperature for the inverse (source-identification) objective, shape (n_nodes,). identification_error =
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe temperature (values shape (n_groups, 1), None → zero); neumann.mask/values prescribe heat flux (values shape (n_groups, 1)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
k_max float Maximum thermal conductivity (fully solid material).
p_exp float SIMP penalisation exponent p (k(ρ) = k_min + (k_max−k_min)·ρ^p).

Outputs

Field Type Description
thermal_compliance Array[(), Float32] Total thermal compliance C = ∮_Γ_N q_n · T dΓ (scalar). Equals the work done by the Neumann heat flux on the temperature field.
identification_error Array[(), Float32] Source-identification objective:

FEniCS

Numerics: Finite Element, GMRES+AMG

fenics AD: adjoint

Upstream docs: https://fenicsproject.org/

Path: mosaic/tesseracts/thermal-mesh/fenics-heat

Image: fenics_heat_thermal_mesh

FEniCS P1 FEM heat-conduction solver with SIMP penalisation. Gradients (∂C/∂ρ, ∂C/∂source) via dolfin-adjoint tape replay.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. ρ=1 → fully conducting, ρ=0 → insulating.
source Array[(None,), Float32] Per-element volumetric heat source (W/m³), shape (n_cells,). Active slice = source[:hex_mesh.n_faces]. Zero by default (topology-optimisation mode; no body heat source).
target_temperature Array[(None,), Float32] Per-node target temperature for the inverse (source-identification) objective, shape (n_nodes,). identification_error =
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe temperature (values shape (n_groups, 1), None → zero); neumann.mask/values prescribe heat flux (values shape (n_groups, 1)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
k_max float Maximum thermal conductivity (fully solid/conducting material).
p_exp float SIMP penalisation exponent p (k(ρ) = k_min + (k_max−k_min)·ρ^p).

Outputs

Field Type Description
thermal_compliance Array[(), Float32] Total thermal compliance C = ∮_Γ_N q_n · T dΓ (scalar). Equals the work done by the Neumann heat flux on the temperature field.
identification_error Array[(), Float32] Source-identification objective:

Firedrake

Numerics: Finite Element, GMRES+AMG

firedrake AD: adjoint

Upstream docs: https://www.firedrakeproject.org/

Path: mosaic/tesseracts/thermal-mesh/firedrake-heat

Image: firedrake_heat_thermal_mesh

Firedrake P1 FEM heat-conduction solver with SIMP penalisation. Gradients (∂C/∂ρ, ∂C/∂source) via firedrake-adjoint, complementing the FEniCS reference.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. ρ=1 → fully conducting, ρ=0 → insulating.
source Array[(None,), Float32] Per-element volumetric heat source (W/m³), shape (n_cells,). Active slice = source[:hex_mesh.n_faces]. Zero by default (topology-optimisation mode; no body heat source).
target_temperature Array[(None,), Float32] Per-node target temperature for the inverse (source-identification) objective, shape (n_nodes,). identification_error =
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe temperature (values shape (n_groups, 1), None → zero); neumann.mask/values prescribe heat flux (values shape (n_groups, 1)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
k_max float Maximum thermal conductivity (fully solid/conducting material).
p_exp float SIMP penalisation exponent p (k(ρ) = k_min + (k_max−k_min)·ρ^p).

Outputs

Field Type Description
thermal_compliance Array[(), Float32] Total thermal compliance C = ∮_Γ_N q_n · T dΓ (scalar). Equals the work done by the Neumann heat flux on the temperature field.
identification_error Array[(), Float32] Source-identification objective:

JAX-FEM

Numerics: Finite Element, Direct (UMFPACK)

jax AD: hybrid GPU

Upstream docs: https://github.com/deepmodeling/jax-fem

Path: mosaic/tesseracts/thermal-mesh/jax-fem

Image: jax_fem_thermal_mesh

JAX-FEM HEX8 steady-state heat-conduction solver with SIMP conductivity and optional volumetric source. Gradients ∂C/∂ρ and ∂C/∂source via JAX autodiff through the linear FE solve (hybrid implicit-function-theorem adjoint)

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. ρ=1 → fully conducting, ρ=0 → insulating.
source Array[(None,), Float32] Per-element volumetric heat source (W/m³), shape (n_cells,). Active slice = source[:hex_mesh.n_faces]. Zero by default (topology-optimisation mode; no body heat source).
target_temperature Array[(None,), Float32] Per-node target temperature for the inverse (source-identification) objective, shape (n_nodes,). identification_error =
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe temperature (values shape (n_groups, 1), None → zero); neumann.mask/values prescribe heat flux (values shape (n_groups, 1)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.

Outputs

Field Type Description
thermal_compliance Array[(), Float32] Total thermal compliance C = ∮_Γ_N q_n · T dΓ (scalar). Equals the work done by the Neumann heat flux on the temperature field.
identification_error Array[(), Float32] Source-identification objective:

torch-fem

Numerics: Finite Element, Direct (spsolve)

pytorch AD: autodiff GPU

Upstream docs: https://github.com/meyer-nils/torch-fem

Path: mosaic/tesseracts/thermal-mesh/torch-fem-thermal

Image: torch_fem_thermal_mesh

torch-fem SolidHeat HEX8 heat-conduction solver with IsotropicConductivity3D SIMP material — the first PyTorch backend in thermal-mesh. Gradients via PyTorch autograd through the FE solve; GPU-native.

Inputs

Field Type Description
rho Array[(None,), Float32] Per-cell density field, shape (n_max_cells,). Active slice = rho[:hex_mesh.n_faces]. ρ=1 → fully conducting, ρ=0 → insulating.
source Array[(None,), Float32] Per-element volumetric heat source (W/m³), shape (n_cells,). Active slice = source[:hex_mesh.n_faces]. Zero by default (topology-optimisation mode; no body heat source).
target_temperature Array[(None,), Float32] Per-node target temperature for the inverse (source-identification) objective, shape (n_nodes,). identification_error =
boundary_conditions MeshBC Mesh boundary conditions. dirichlet.mask/values prescribe temperature (values shape (n_groups, 1), None → zero); neumann.mask/values prescribe heat flux (values shape (n_groups, 1)).
hex_mesh HexMesh Hexahedral mesh (8-node hex elements). n_points / n_faces give the active slice sizes.
k_max float Maximum thermal conductivity (fully solid material).
p_exp float SIMP penalisation exponent p (k(ρ) = k_min + (k_max−k_min)·ρ^p).

Outputs

Field Type Description
thermal_compliance Array[(), Float32] Total thermal compliance C = ∮_Γ_N q_n · T dΓ (scalar). Equals the work done by the Neumann heat flux on the temperature field.
identification_error Array[(), Float32] Source-identification objective: