# Status

This page compares what femforge implements today with what its pipeline interfaces and its first solver backend, Elmer, offer. A row shows Implemented when the public config reaches it and the user guide documents it, Partial when a module or interface exists that the config cannot reach or the docs do not cover, and Not started when femforge has no model for it.

## Pipeline interfaces

Each stage runs behind an interface, and one backend fills each interface today. [Concepts](<https://docs.femforge.io/overview/concepts/index.md>) walks through the pipeline that connects them.

| Stage | Today | Interface | What a new implementation needs |
| --- | --- | --- | --- |
| Geometry | A tagged STEP file from any CAD, or a Build123dGeometry subclass | GeometryArea | A `build_step(path)` that writes a STEP whose body names carry the tags. |
| Mesh backend | GmshMesher in process, WorkerMesher in a child process | MeshBackend | A `mesh(job, out_dir)` that turns a `MeshJob` into Elmer mesh files and a `MeshReport`. |
| Solver backend | Elmer, through the typed solver stack in `femforge.elmer.config` and the sif writer | None yet | Conditions and materials emit Elmer keywords directly, so a second solver needs a solver-neutral interface first; see [Solver objects](<https://docs.femforge.io/contributing/architecture/solver-objects/index.md>). |
| Solver execution | NativeElmer for serial solves, DockerElmer for serial and MPI solves | ExecutionBackend | The `grid_convert`, `grid_partition` and `solve` methods and the `partitioned` flag of `src/femforge/elmer/runtime/backend.py`. |
| Optimization | GridSearch, `find_max_current`, and the `convergence_ladder` and `richardson` mesh-convergence helpers in `femforge.run` | Parameterization, Objective, DriverLike | A search that evaluates configs from a `Parameterization` through a `DriverLike` and records them in a Study. |
| Workbench | The trame workbench in `packages/femforge-workbench` | The `femforge.workbenches` entry point group | A function that returns a `Split`, declared as a WorkbenchSpec; see [Workbench](<https://docs.femforge.io/user-guide/workbench/index.md>). |

## Frames

Elmer names eight coordinate systems. femforge maps two of them to a frame; see [Frames](<https://docs.femforge.io/user-guide/frames/index.md>).

| Elmer coordinate system | femforge | Status |
| --- | --- | --- |
| Cartesian 3D | Solid |  |
| Axi Symmetric | Axisymmetric |  |
| Cartesian 1D |  |  |
| Cartesian 2D |  |  |
| Polar 2D |  |  |
| Polar 3D |  |  |
| Cylindric |  |  |
| Cylindric Symmetric |  |  |

`CoordinateSystem` in `femforge.elmer.config` already names `Cylindric`, `Cylindric Symmetric` and `Polar` as keyword values, but no frame maps a model onto them. A new frame needs a model in `src/femforge/common/frame.py`, a geometry conversion in `src/femforge/geometry/frame.py` and a case in `Physics.in_frame`.

## Physics modules

The rows follow the chapters of the Elmer Models Manual. The femforge column names the Physics preset or the module that wires the Elmer module. A `Not started` module can still run through GenericSolver, which writes a hand-built solver block whose keywords femforge does not check. [Conditions and physics](<https://docs.femforge.io/user-guide/conditions/index.md>) documents each preset.

### Heat and thermal

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `HeatSolve`, `HeatSolveVec` | Heat conduction, with optional convection, radiation and temperature-dependent properties. | `Physics.THERMAL`, `Physics.JOULE_HEATING` |  |
| `PhaseChangeSolve` (transient) | The moving front between a liquid and a solid phase over time. |  |  |
| `PhaseChangeSolve` (steady state) | The steady position of a liquid-solid phase boundary. |  |  |

### Electromagnetics

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `StatCurrentSolve` | The potential and current density in a conductor, and the Joule losses they produce. | `Physics.CURRENT_CONDUCTION`, `Physics.JOULE_HEATING` |  |
| `MagnetoDynamics` | The 3D magnetic field in A-V form on edge elements, static, time-harmonic or transient. | `Physics.MAGNETOSTATICS`, `Physics.COIL_MAGNETOSTATICS`; static only |  |
| `MagnetoDynamics2D` | The magnetic field of planar or axisymmetric problems from one component of the vector potential. | `Physics.MAGNETOSTATICS_2D`; axisymmetric static only |  |
| `CoilSolver` | A consistent current distribution through a coil, as a source for the magnetic solvers. | `Physics.COIL_MAGNETOSTATICS` |  |
| `StatElecSolve` | The electrostatic potential and field in dielectrics and conductors. | `Physics.ELECTROSTATICS` |  |
| `CircuitsAndDynamics` | Circuit equations coupled to a magnetoquasistatic model. |  |  |
| `VectorHelmholtz` | Time-harmonic electromagnetic waves at high frequency. |  |  |
| `EMWaveSolver` | Time-domain electromagnetic waves on edge elements. |  |  |
| `MagneticSolve` | The magnetic induction equation in a conducting fluid. |  |  |
| `StatElecBoundary` | Electrostatics between nearly parallel surfaces, reduced to one dimension. |  |  |
| `PoissonBoltzmannSolve` | The electric potential with free charges that follow a Boltzmann distribution. |  |  |
| `FourierLoss` | Electromagnetic losses from an on-the-fly Fourier series, in the Steinmetz style. |  |  |
| `ElectricForce` | The electrostatic force on a surface from a solved potential. |  |  |
| `StatMagSolve` | Axisymmetric magnetoquasistatics; Elmer marks it obsolete. |  |  |

`Physics.ELECTROSTATICS` has a preset and documentation. `FixedPotential` feeds it only when its `physics` field is set to `ELECTROSTATICS`, and no guide page, example or test exercises that path.

### Structural mechanics

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `StressSolve` | Small displacements and stresses of a linear elastic solid. | `Physics.LINEAR_ELASTICITY` |  |
| `ElasticSolve` | Large deformations of an elastic solid. |  |  |
| `ShellSolver` | Deformations of thin curved shells. |  |  |
| `Smitc` | Bending of linear elastic plates. |  |  |
| `BeamSolver3D` | Forces and moments in elastic beams. |  |  |
| `SpringAssembly` | Point springs and masses added to a structural model. |  |  |
| `RigidBodyReduction` | A displacement problem reduced by treating some blocks as rigid. |  |  |

`Physics.LINEAR_ELASTICITY` is a scaffold: no condition targets it, and the material model has no Poisson ratio.

### Fluids

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `FlowSolve` | Incompressible or compressible viscous flow with the Navier-Stokes equations. |  |  |
| `AdvectionDiffusion` | Transport of a species or scalar by convection and diffusion. |  |  |
| `AdvectionReaction` | Transport of a passive scalar by a flow, with a reaction rate. |  |  |
| `ReynoldsSolver` | Pressure in a thin fluid film. |  |  |
| `Electrokinetics` | Flow of an electrolyte in small channels driven by electric surface charges. |  |  |
| `ParStokes` | Steady incompressible flow with block preconditioning for large systems. |  |  |
| `Stokes` | Incompressible flow in the rotational form of the Navier-Stokes equations. |  |  |
| `LevelSet` | The position of a free surface tracked with a level-set function. |  |  |
| `FreeSurfaceSolver` | A kinematic free surface, with limiters. |  |  |
| `FreeSurfaceReduced` | A free surface found from a constant flux condition. |  |  |
| `StructureFlowLine` (free surface) | A steady free surface in drawing and pulling processes, found along streamlines. |  |  |
| `ArtificialCompressibility` | A stabilizing compressibility term for loosely coupled fluid-structure interaction. |  |  |
| `FluidicForce` | The pressure and viscous force a flow exerts on a surface. |  |  |
| `RichardsSolver` | Flow through variably saturated porous media. |  |  |
| `ArteryOutlet` | An outlet boundary condition for blood flow in elastic arteries. |  |  |

### Acoustics and waves

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `HelmholtzSolve` | Time-harmonic acoustic pressure with the Helmholtz equation. |  |  |
| `Acoustics` | Linearized Navier-Stokes acoustics with viscous and thermal losses, in the frequency domain. |  |  |
| `WaveSolver` | A generalized scalar wave equation in the time domain. |  |  |
| `CompressibleNS` | Large-amplitude, nonlinear waves in air. |  |  |
| `HelmholtzBEM` | The Helmholtz equation with the boundary element method. |  |  |

### Particles and other

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `ParticleDynamics` | Trajectories of particles under forces and fields. |  |  |
| `ParticleAdvector` | Diffusion-free advection of fields by tracking particles backward in time. |  |  |
| `StructureFlowLine` (moving mesh) | Ordinary differential equations along an extruded mesh that moves with a draw velocity. |  |  |
| `ModelMixedPoisson` | The Poisson equation with the flux as a second unknown. |  |  |
| `PoissonBEM` | The Laplace equation with the boundary element method. |  |  |
| `BatterySolver` | Charge and species transport in a lithium-ion cell. |  |  |
| `DFTSolver` | Electronic structure with density functional theory; experimental in Elmer. |  |  |

### Utilities

| Elmer module | Solves | femforge | Status |
| --- | --- | --- | --- |
| `SaveScalars` | Reductions and integrals of fields, written as scalar values to a file. | `src/femforge/elmer/config/output/save_scalars.py` |  |
| `ResultOutputSolve` | Field output in VTU and other formats. | `src/femforge/elmer/config/output/result_output.py` |  |
| `MeshSolve` | Mesh deformation that follows moving boundaries. |  |  |
| `NonphysicalMeshSolve` | Mesh deformation where the mesh velocity does not matter. |  |  |
| `RigidMeshMapper` | Rigid rotation and translation of mesh bodies. |  |  |
| `StructuredMeshMapper` | A structured mesh fitted between given top and bottom surfaces. |  |  |
| `ElementStats` | Quality statistics of the mesh elements. |  |  |
| `StreamSolver` | Streamlines of a flow field. |  |  |
| `FluxSolver` | The flux of a Poisson-type field, such as heat flux. |  |  |
| `VorticitySolver` | The curl of a vector field. |  |  |
| `DivergenceSolver` | The divergence of a vector field. |  |  |
| `ScalarPotentialSolver` | The scalar potential whose gradient matches a given flux. |  |  |
| `FilterTimeSeries` | Averages and Fourier filters over time-series results. |  |  |
| `DataToFieldSolver` | A smooth field fitted to scattered data. |  |  |
| `ProjectToPlane` | A 3D field projected onto a plane. |  |  |
| `StructureProjectToPlane` | A field on a structured mesh projected onto its base surface. |  |  |
| `FindOptimum` | New design parameters from a cost function, inside one Elmer run. |  |  |
| `SaveLine` | Field values along lines through the mesh, written to a file. |  |  |
| `SaveMaterials`, `SaveBoundaryValues` | Material and boundary parameters stored as fields. |  |  |
| `SaveGridData` | Field values on a uniform Cartesian grid. |  |  |
| `Isosurface` | Isosurfaces or isolines extracted to reduce output. |  |  |
| `Elmer2OpenFoamIO`, `OpenFOAM2ElmerIO` | Field exchange with OpenFOAM through files. |  |  |
| `Probes` | Integrals of expressions over bodies. |  |  |
| `GmshOutputReader` | Fields read from a gmsh result file. |  |  |
| `ReloadData` | Earlier results loaded back during a run. |  |  |
| `ReloadInput` | The solver input reloaded while a run is in progress. |  |  |
| `GridDataReader` | NetCDF grid data interpolated onto the mesh. |  |  |
| Linear constraints (`SolverUtils`) | Linear constraints on a solve, enforced with Lagrange multipliers. |  |  |
| `XdmfWriter` | Parallel results written as Xdmf and HDF5. |  |  |

femforge runs its sweeps and optimizations outside Elmer, so it uses none of the Elmer optimization utilities.

## Solver capabilities

The rows follow the chapters of the ElmerSolver Manual that describe a capability a user switches on. The chapters on fundamentals, the input file format, compilation and programming, and the appendices on file formats and element definitions are background and have no row.

| Elmer capability | Solves | femforge | Status |
| --- | --- | --- | --- |
| Linear system methods | Direct, Krylov and multilevel solvers with their preconditioners. | LinearSystem fields on each solver |  |
| Nonlinear system options | Picard and Newton iteration, relaxation and convergence criteria. | NonlinearSystem fields on each solver |  |
| Parallel runs | Mesh partitioning and MPI solves. | DockerElmer with `mpi_processes`; see [Elmer: Native and Docker](<https://docs.femforge.io/user-guide/elmer/index.md>) |  |
| Restart | A run that starts from saved solutions. | `SimulationSettings.output_file` writes a restart file; nothing reads one back |  |
| Time integration | Transient solves with BDF, Newmark and other schemes. | `SimulationType.TRANSIENT` and `TimesteppingMethod`; every preset is steady state |  |
| Dirichlet conditions and limiters | Fixed values on boundaries, and soft limits on a solution. | Fixed values through `FixedTemperature` and `FixedPotential`; no limiters |  |
| Generic solver utilities | Solver activation, variable naming, exported variables and passive elements. | `exec_solver` and `variable` fields on SolverBase |  |
| Eigenvalue problems | Modes and eigenfrequencies of a system. |  |  |
| Shared boundary conditions | Periodic, mortar and conforming conditions between boundaries. |  |  |
| Linear constraints | Extra linear equations that couple degrees of freedom. |  |  |
| Constraint modes | The response to unit loads on chosen boundaries, as in a lumped model. |  |  |
| Nodal loads | Point loads, and the reaction loads of a solved system. |  |  |
| Block-matrix coupling | Tightly coupled multiphysics solved as one block system. |  |  |
| Meshing utilities | Coordinate transformation, mesh multiplication, extrusion and discontinuous interfaces inside Elmer. |  |  |
| Adaptive solution | Mesh refinement driven by an error estimate. |  |  |
| Higher-order elements | p-elements of higher polynomial order. |  |  |

## Conditions and materials

Every condition and material below is implemented. [Conditions and physics](<https://docs.femforge.io/user-guide/conditions/index.md>) and [Materials](<https://docs.femforge.io/user-guide/materials/index.md>) document them.

| Condition | Feeds | Target |
| --- | --- | --- |
| Magnetization | `MAGNETOSTATICS`, `MAGNETOSTATICS_2D`, `COIL_MAGNETOSTATICS` | body |
| ForceComponent | `MAGNETOSTATICS`, `MAGNETOSTATICS_2D`, `COIL_MAGNETOSTATICS` | body |
| CurrentDensity | `MAGNETOSTATICS_2D` | body |
| CoilDrive | `COIL_MAGNETOSTATICS` | body |
| CoilTerminal | `COIL_MAGNETOSTATICS` | outer shell |
| FixedTemperature | `THERMAL`, `JOULE_HEATING` | boundary |
| HeatFlux | `THERMAL`, `JOULE_HEATING` | boundary |
| Convection | `THERMAL`, `JOULE_HEATING` | outer shell |
| HeatSource | `THERMAL`, `JOULE_HEATING` | body |
| FixedPotential | `CURRENT_CONDUCTION`, `JOULE_HEATING` | boundary |
| JouleHeat | `JOULE_HEATING` | body |

| Material | Tag | Notable properties |
| --- | --- | --- |
| Air | `Air` | μr = 1, near-zero conductivity |
| Copper | `Copper` | Temperature-dependent conductivity |
| N52, N42 | `N52`, `N42` | Temperature-dependent remanence and coercivity |
| FR4 | `FR4` | εr = 4.5, glass transition temperature |
| Steel\_1080 | `Steel1080` | Nonlinear B-H curve, or a linear μr |
| Steel\_316 | `Steel316` | μr = 1.008, effectively non-magnetic |

## Picking a task

A row marked or is a candidate task. [Contributing](<https://docs.femforge.io/contributing/index.md>) sets up a development checkout, and [Solver objects](<https://docs.femforge.io/contributing/architecture/solver-objects/index.md>) shows how a solver model, a preset and a condition slot into the sif writer. Open or claim a task on the [GitHub issues page](<https://github.com/femforge-io/femforge/issues>).
