Solvers›Using Ferro

Workflow

Every Ferro solve follows the same physics regardless of which surface you drive it from: assemble the global stiffness matrix, apply boundary conditions, solve K·u = f, then recover stress and strain from the displacement field. What differs is how you get there.

Via Prism

Opening a .ferro/ directory bundle in Prism loads it into a dedicated view with:

  • A 3D viewport for the mesh and results
  • A JSON editor for the underlying analysis configuration
  • Results overlays (stress, displacement, etc.) once a solve completes

This is the fastest path for interactive work — building up a Case, adding Environments, and iterating on loads/supports visually.

Via ferro-cli

Build the CLI from the physics/ workspace:

cd physics
cargo build -p ferro-cli --release

Its subcommands:

SubcommandPurpose
runSolve a workspace (request JSON + mesh) and persist outputs
postRe-run post-processing on existing results, without re-solving
validateCheck a request JSON is well-formed, optionally against a mesh to validate named sets
mesh-summaryPrint a summary of a mesh file
schemaPrint the JSON schema for a FerroRequest

This is the path for scripting solves in CI or batch-processing a sweep of configurations without opening Prism.

Via ferro-py

The Python bindings (import ferro) expose the same solve pipeline as a scriptable API. The typical shape:

import ferro
 
mesh = ferro.read_gmsh("part.msh")
fixed_nodes = ferro.select_nodes(mesh, ...)
material = ferro.LinearElastic.steel()
 
result = ferro.solve(mesh, material, fixed_nodes, ...)
 
stress = ferro.compute_von_mises_stress(result)
ferro.write_vtk(result, "out.vtu")

This is the path for embedding Ferro in a larger Python pipeline — parametric studies, custom post-processing, or gluing it to other tools.

All three surfaces converge on the same ferro-config::FerroRequest type. A request built by hand in Python and one exported from a Prism Case will solve identically — there's no behavioral difference between the interactive and scripted paths.

Next

See File Formats for what each of these commands actually reads and writes.