Elmer Multiphysics
Theory: coupling by chaining solvers
Overview
I hear Elmer is free multiphysics software. How does it solve several physics together?
Solvers are listed in the input file and solved in turn, repeatedly. Elmer, developed since about 1995 by CSC, a Finnish research centre, provides dozens of solvers — heat (HeatSolver), current (StatCurrentSolver), elasticity (StressSolver), flow (FlowSolver), magnetic fields (MagnetoDynamics) and more. The input file (.sif) lists Solver 1, Solver 2 and so on, with materials and boundary conditions per region. For steady coupled problems each solver is solved in turn and passes its results on, repeating until the overall change is small (segregated coupling). Strong coupling increases iterations, and a Relaxation Factor helps convergence. A GUI handles geometry and meshing and can write the setup file.
Coupled equations for Joule heating
φ is electric potential, σ(T) temperature-dependent conductivity, k thermal conductivity and h the surface heat transfer coefficient. The current and heat equations are linked through the temperature dependence of conductivity.
Analytical solution for a round rod
P′ is heat per unit length, ρ resistivity, α its temperature coefficient, A cross-section, d and a diameter and radius, T_s and T_c surface and centre temperatures, and q‴ heat per unit volume.
Free multiphysics from the Nordics
Elmer was created for collaborative computational science among Finnish universities and research institutes and released as open source in 2005. Beyond engineering, it is widely used in geoscience — Elmer/Ice solves glacier and ice-sheet flow and contributes to climate research.
Worked examples
The table is an iteration of a radial heat-balance model, not an Elmer run. Assume resistivity 1.72×10⁻⁸ Ω·m and thermal conductivity 400 W/(m·K). End losses, radiation and changing natural-convection coefficients are excluded.
Example: 300 A in a 10 mm copper rod (ambient 20 °C, resistance temperature coefficient 0.0039/K)
| Cooling | Resistivity fixed (20 °C) | Temperature-dependent resistivity | Coupling iterations | Internal difference |
|---|---|---|---|---|
| Natural convection h = 10 W/(m²·K) | 82.7 ℃ | 103.1 ℃ | 8 | 0.005 K |
| Light airflow h = 25 W/(m²·K) | 45.1 ℃ | 47.8 ℃ | 5 | 0.004 K |
Rising temperature raises resistance and so heating, adding 20 K in natural convection. Each iteration cycles current → heating → temperature → resistivity update, converged when the change falls below 0.01 K. Weaker cooling strengthens the coupling and needs more iterations.
Solving the same problem in Elmer, my surface temperature came out about 10 K below theory. Is the mesh too coarse?
Before the mesh, check that the coupling iterations converged. As the table shows, one pass with 20 °C resistivity gives 83 °C, the second 98 °C and the third 102 °C, creeping up. If Steady State Max Iterations is too small, the run stops at an intermediate value and reads low. Watch how the temperature norm change shrinks over each 'Steady state iteration' in the output and confirm the Steady State Convergence Tolerance is met. The temperature difference inside the rod is only 0.005 K, so refining the interior mesh barely changes the result. What drives it is the heat transfer coefficient: h of 10 versus 25 moves the surface temperature by 55 K. Real natural convection h varies with temperature difference, and radiation joins at high temperature, so give h as a temperature function from correlations.
Getting started
- Run one heat-only case in ElmerGUI or an official example and learn the .sif structure.
- Add StatCurrentSolver on the same geometry and pass Joule heat as the heat source.
- Give resistivity as a function of temperature and set global iteration count and tolerance.
- Compare with the round-rod analytical solution; check iteration convergence and mesh effect.
- Move to real geometry, with heat transfer coefficients from correlations or measurements.
“It looked converged but had just stopped”
A coupled run may end 'normally' with a small final residual simply because it hit the global iteration limit. Elmer tracks inner iterations within each solver separately from outer iterations between solvers, and the inner loop can converge while the outer one has not. Making a habit of checking that temperature and potential have stopped changing over the last few outer iterations prevents this oversight.
Common mistakes
Mistakes and fixes
| Mistake | Effect | Fix |
|---|---|---|
| Too few outer iterations | Temperature underestimated | Check tolerance and limit |
| Constant resistivity | Heating underestimated | Give as temperature function |
| Constant heat transfer coefficient | Wrong surface temperature | Correlations plus radiation |
| Mixed-up body numbers | Material on the wrong body | Check mesh numbering |
| Divergence under strong coupling | Oscillating iterations | Lower the relaxation factor |
I'd like to learn related topics.
Related pages include electrothermal analysis of Joule heating, the FEniCS Project, the MOOSE framework, Palace electromagnetic analysis and introduction to Code_Aster.
Frequently asked questions
What is Elmer?
An open-source finite element suite developed by CSC (IT Center for Science) in Finland. It has many solvers — heat transfer, structures, fluid flow (Navier-Stokes), electrostatics, magnetostatics and eddy currents, acoustics and more — combined and coupled by listing them in an input file (.sif). ElmerGUI provides a graphical interface, and it is free under the GPL.
How is coupled analysis done in Elmer?
Put the coupled solvers in the same input file; for steady problems, 'Steady State Max Iterations' sets the number of global iterations. Each solver is solved in turn and passes results such as temperature or potential to the next, repeating until changes fall below the convergence tolerance. In the copper-rod Joule heating example, including temperature-dependent resistance converged in 8 iterations.
What matters in Joule heating analysis?
The temperature dependence of resistivity and how heat leaves the surface. For a 10 mm, 300 A copper rod, holding resistivity at its 20 °C value gives an 83 °C surface; letting it rise with temperature gives 103 °C — 20 K different. The temperature difference inside the rod is only 0.005 K, so getting the heat transfer coefficient right matters more than a fine interior mesh.
References and scope of verification
Numbers are educational reference calculations under the stated assumptions. Sources document theory and setup, not proof that these numerical values were reproduced in each package. Engineering decisions require validation for the actual conditions.
Related Topics
Experience the theory firsthand with the interactive simulator for this field
All Simulators