FEM Studio

ElmerStudio — a modern desktop GUI for the Elmer FEM solver, born from research frustration and shared in case it's useful to anyone else.

ElmerStudio is a desktop interface for the Elmer FEM solver. It started as a personal project — I kept hitting the same friction every time I picked Elmer back up for research, and at some point I decided to fix it for myself. This is what came out. Sharing it here in case it saves you the same trips back to the docs.

Download

Free for personal, academic, and commercial use. Closed-source binary, no account required. See the license for the small print.

  Linux (AppImage)

Ubuntu 24.04+ tested.

  Windows (Installer)

Windows 10 / 11.

See all release artifacts on GitHub

Why this exists

I used Elmer for research and kept running into the same friction. Elmer's solver is genuinely excellent — decades of careful development by CSC and the Finnish FEM community, free, open source, and capable of holding its own against commercial codes. But every time I onboarded a student, the first hour with Elmer was spent on workflow rather than physics: setting up a problem meant editing the Solver Input File (.sif) by hand, mesh generation meant flipping between separate command-line tools, tweaking a parameter to study a trend meant duplicating the whole project, and viewing results meant launching ParaView, which itself has been broken on Ubuntu 24.04+ since early 2024 because of an upstream libexpat regression.

I built ElmerStudio first to remove those rough edges from my own workflow, then realised it might help students and newcomers get to the interesting parts of FEM faster. ElmerGUI, the official graphical frontend, remains a great option and a complementary tool — ElmerStudio simply takes a different approach in places where I wanted something different. Below is what's actually inside.

Start fast: pick a template, hit go

Open the app and you're already a click away from a working simulation. Four quick-start cards cover the most common Elmer workflows — Heat Conduction, Fluid Flow, Structural Mechanics, Electrostatics — each pre-wired to a sensible solver and starting material. A fifth card opens a four-step Custom Setup wizard that walks you through picking physics, simulation type and time-stepping, an existing mesh directory, and an initial material from the library. Either way, you end up with a complete SIF that you can run immediately and refine from there.

ElmerStudio welcome screen showing four physics templates plus a Custom Setup wizard, with the Simulation Setup form pre-populated with defaults

The welcome screen. Pick a template card or open an existing .sif file. Common simulation parameters sit in the dock on the left, ready to edit.

Built-in parametric mesh generator

Mesh creation is integrated. Eleven geometry templates (Segment 1D, Rectangle 2D, Rectangle with hole, L-shape, Two-material plate, Layered slab, Box 3D, axisymmetric cylinder, hollow cylinder, solid 3D cylinder, polar cylindrical shell) cover most academic and prototyping cases. Pick one, dial in the parameters, and a 3D preview updates as you type — no exporting to a separate mesh file format and re-importing.

The 2D paint canvas lets you assign material regions and boundary IDs visually before the mesh is ever generated. Five curated geometry-mapping modes — piecewise linear, circular arc, line-to-circle, line-to-sinusoid, and polygonal-angle — let you bend the otherwise-rectangular subcell boundaries into curves so the meshed result follows the actual shape of your domain.

Three dedicated wizards handle the structurally bigger operations: a Boundary Layer wizard for adding inflated boundary-aligned layers (typical for CFD wall treatment), an Extrusion wizard that lifts a 2D mesh into 3D as a stack of layers, and a Revolution wizard that sweeps a 2D section around an axis to produce an axisymmetric or full 3D solid. Each wizard ships with a live preview pane so you can sanity-check divisions and limits before committing.

Mesh generator with subcell controls on the left, 2D paint canvas on the right, and a live 3D preview of the resulting cylinder mesh below

Mesh generator: parametric controls, 2D paint canvas for material regions, and a live 3D preview that updates as you change parameters.

Bring your own mesh, or clean up an existing one

External meshes import directly through File → Import Mesh…. Supported formats are Gmsh (.msh), Universal / Salome (.unv), ElmerGrid native (.grd), and ANSYS / Abaqus input decks (.ans, .inp). ElmerStudio shells out to ElmerGrid behind the scenes with the right format codes, so you don't have to look up -input 14 vs. -input 17 ever again. Existing Elmer mesh directories load by pointing at the folder.

Once a mesh is loaded, the Mesh menu exposes the operations you'd otherwise run by hand from the ElmerGrid command line:

  • Mesh → Cleanup: Auto Clean, Merge Nodes, Remove Unused Nodes, Reorder Bodies, Reorder Boundaries. Each is a form-based dialog that runs ElmerGrid in place and reloads the result.
  • Mesh → Transform: Scale, Translate, Rotate, Centralize.
  • Mesh → Element Order: bump linear elements up to quadratic, or reduce a quadratic mesh back down.
  • Mesh → Clone & Mirror: replicate a mesh in space or reflect it across an axis.
  • Mesh → Refine Mesh: uniform refinement that splits each element (triangle → 4, tetrahedron → 8).

For inspecting what you've got, the same menu has Mesh Quality (toggles a colour overlay shading elements by quality metric so distorted regions jump out) and Mesh Statistics… (a popup with element counts, types, bounding box, and per-axis extents). Display options — boundary colouring by ID, wireframe, ground grid, origin axes, clip plane, slice plane — all live in the same menu and persist across runs.

One window, full workflow

The main editor is built around a single principle: everything you need to set up, run, and inspect a simulation lives in one window, not five. The semantic outline on the left groups the SIF into Setup (Header, Constants, Simulation), Physics (Solver, Equation), Domain (Body, Material, Body Force, Initial Condition, Component), and Boundaries (Boundary Condition). Click any entry to jump to it; right-click to delete, duplicate, or add a new section in place. Validation badges flag problems inline so issues find you, not the other way around.

The middle pane is a syntax-highlighted SIF editor with a line-number gutter, current-line highlight, monospace zoom (Ctrl + / Ctrl − / Ctrl 0), Find/Replace bar (Ctrl+F / Ctrl+H), and a comment-toggle shortcut (Ctrl + /). It round-trips losslessly with the form-based dock panels — edit either side and the other stays in sync. Dedicated docks handle the common authoring surfaces: a Simulation Setup dock for the Simulation and Constants sections, a Solver Setup dock that picks a solver from the bundled definitions and auto-renders its parameters as a form (with Equation, Solver, Body Force, and Initial Condition tabs), a Material Library dock with a category filter and a properties preview that injects materials with units handled, and a Boundary Conditions form for authoring BCs without touching the SIF.

The right pane is an integrated VTU results viewer with field selection, eight built-in colormaps (viridis, plasma, coolwarm, RdYlBu, jet, turbo, inferno, magma), warp-by-vector with a scale factor, and a clip plane. For transient runs, a timestep slider beneath the viewport scrubs through the sequence while preserving your scalar selection. When you do need ParaView's full power, one click opens the current results in it. The "Open in ParaView" path also transparently re-encodes the VTU on the way out to dodge the libexpat 2.6.0–2.6.2 bug that breaks ParaView on Ubuntu 24.04+ — so it just works on a stock install with no patching.

Full editor view: outline tree on the left, syntax-highlighted SIF in the middle, integrated VTK results viewer on the right showing displacement field on a meshed solid

Outline tree, SIF editor, and integrated results viewer all in one window. This particular project couples linear elasticity with a heat equation; the right pane is showing the displacement field on a refined mesh of about 67k nodes and 15k cells.

Parameter sweeps as a first-class feature

Studying how a result depends on material properties, boundary conditions, or geometry is something Elmer users do constantly — and historically meant either duplicating the project N times or writing shell scripts that templated the SIF. ElmerStudio gives parameter sweeps a dedicated panel in the main window, no manual file editing required. Pick a keyword from any section in your SIF, declare the values you want to sweep over, and ElmerStudio handles the rest.

Two sweep modes ship out of the box. In Cartesian mode, ElmerStudio runs every combination of every parameter — full factorial, useful when you want to map the response surface across two or more independent dimensions. In Zipped mode, parameters advance together in lockstep, so you get N pre-paired configurations rather than N×M combinations — useful when you want to vary several keywords together along a curve in parameter space.

Each sweep step runs in its own subdirectory with its own generated SIF, runs the solver, and surfaces results in a live status table as the sweep progresses — values, exit code, wall time, and any error per step. You can abort the whole sweep, skip just the current step, or watch the convergence plot live for the active run. When the sweep finishes, the results viewer's slider scrubs through the output VTUs from each step while preserving your chosen scalar field, and a separate summary chart plots a chosen output metric (max / min / mean) against the swept parameter — line chart for one parameter, heatmap for two on a Cartesian grid. The structured directory tree of every run is also yours to post-process or feed into your own analysis script.

Other things you get

  • Live convergence plotting while ElmerSolver runs. Per-solver residuals stream into a chart on a log y-axis in real time, so you see divergence the moment it happens instead of staring at terminal output.
  • A 35-entry materials library — air, nitrogen, argon, water, common metals, polymers, and the usual suspects — searchable by category with units handled for you. One click injects the material properties into the active Material section.
  • Pre-flight validation before each run. Verifies a mesh is loaded, at least one solver has a Procedure, every Equation has Active Solvers, every Boundary Condition has Target Boundaries assigned, and every Body references existing Material / Equation / Body Force / Initial Condition sections. Catches the Elmer gotcha where two Body sections claiming the same mesh ID silently honor only the first.
  • Live solver output with a warning banner. ElmerSolver's stdout / stderr stream into a coloured pane as the run progresses. Lines matching known warning patterns are also collected separately and surfaced in a summary banner at the top, so warnings buried thousands of lines deep in the log don't go unseen.
  • Eight bundled solver definitions covering common physics (heat equation, linear elasticity, Navier-Stokes, electrostatics, Helmholtz, advection-diffusion, static current, result output). Each renders as a structured form with the right keywords for that solver. Custom ElmerGUI-style EDF files import via File → Import Solver Definition….
  • Parallel solver support through a settings dialog — pick the number of MPI processes and ElmerStudio invokes ElmerSolver_mpi with the right partitioning. Settings persist across sessions.
  • Cross-platform: same UI, same project files, same workflow on both Linux and Windows. Modern Qt 6 stack, no Qt 4 build battles on current distros.
  • Self-contained binary. Linux AppImage and Windows installer ship with everything they need. No pip, no virtualenv, no PySide6 dependency hell.

What it isn't

  • It isn't the solver. ElmerStudio is a frontend. You need ElmerSolver itself installed and on your PATH for simulations to run. Get it from elmerfem.org or your distribution's package manager.
  • It isn't a CAD tool. The mesh generator covers parametric primitives well but doesn't do general CAD import. For complex geometries, mesh externally with Gmsh, Salome, or your CAD tool's mesh export, then load the resulting .msh / .unv / .grd / .ans / .inp file into ElmerStudio.
  • It isn't every Elmer feature. Elmer's solver has decades of accumulated capability. ElmerStudio ships eight solver definition files covering the most common physics; the rest is still accessible by editing the SIF directly in the integrated text view. If a feature you need would benefit from a structured form, file an issue.
  • It isn't open source. Free as in beer, not as in speech. See the license for what's allowed and what isn't. This may change in the future.

Feedback & bug reports

The public release repository on GitHub doubles as the issue tracker: github.com/FEMStudio/femstudio-releases/issues. Bug reports, feature ideas, "this menu is confusing" observations, "what does this option mean" questions — all welcome. When reporting a bug, please include your OS, the ElmerStudio version (Help → About in the app, or run with --version), and what you were doing when it happened.

I read everything but reply on a rolling basis — this is a side effort, not a full-time gig.