# femforge

femforge drives finite-element analysis from Python. You describe a simulation as one typed SimulationConfig: the geometry, the mesh settings, the materials and conditions of each region, and the physics to solve. The geometry is a STEP file whose bodies are named with their tags, exported from any CAD or scripted in build123d with femforge's helpers. A Driver meshes the config through the mesh backend, gmsh today, solves it through the solver backend, Elmer today, and returns a typed Result whose quantities carry their units. Every run lands in a bundle named after the content hash of its inputs, so an identical config reuses the finished run instead of solving again. The workbench shows the fields and the runs in a browser, and everything it shows is also scriptable.

femforge is pre-alpha. The API will change between 0.x releases, and the [changelog](<https://docs.femforge.io/changelog/index.md>) records each change.

## How it fits together

1. [Geometry and tags](<https://docs.femforge.io/user-guide/geometry/index.md>): name each body with its material and name tags, in your CAD's STEP export or in a build123d script.
2. [Materials](<https://docs.femforge.io/user-guide/materials/index.md>) and [conditions and physics](<https://docs.femforge.io/user-guide/conditions/index.md>): say what each region is made of, what drives it and which physics to solve.
3. [Mesh](<https://docs.femforge.io/user-guide/mesh/index.md>) and [frames](<https://docs.femforge.io/user-guide/frames/index.md>): set the element sizes and solve the model in 3D or as an axisymmetric 2D section.
4. [Driver and runs](<https://docs.femforge.io/user-guide/driver/index.md>): mesh, write the solver input, solve and record the run bundle.
5. [Results](<https://docs.femforge.io/user-guide/results/index.md>): read forces, torques, peak fields and the solved field mesh.
6. [Artifacts and retention](<https://docs.femforge.io/user-guide/artifacts/index.md>) and [telemetry](<https://docs.femforge.io/user-guide/telemetry/index.md>): reuse meshes and runs across processes, trim old bundles and query logs and sweeps.
7. [Workbench](<https://docs.femforge.io/user-guide/workbench/index.md>): browse runs and view fields in a browser.

## Where to start

- [Install](<https://docs.femforge.io/overview/install/index.md>) femforge and an Elmer solver.
- Run a first simulation with the [Quickstart](<https://docs.femforge.io/overview/quickstart/index.md>).
- Read [Concepts](<https://docs.femforge.io/overview/concepts/index.md>) for the pipeline on one page.
- Work through the [User guide](<https://docs.femforge.io/user-guide/index.md>), one task per page.
- Look up a class or function in the [API reference](<https://docs.femforge.io/reference/index.md>).
- Set up a development checkout with [Contributing](<https://docs.femforge.io/contributing/index.md>).
