[ANN] LowLevelFEM.jl – Engineering-oriented FEM in pure Julia

LowLevelFEM.jl is a lightweight finite element toolbox written entirely in Julia.
It focuses on engineering-oriented workflows — boundary conditions, meshing with Gmsh, mechanical and thermo-mechanical analyses, and direct access to assembly and post-processing routines.
Simple enough for teaching, yet flexible enough for research.


A minimal but practical FEM toolbox for engineers and researchers — focusing on Gmsh-based workflows, transparency, and direct control over every step of the solution process.

[ANN] LowLevelFEM.jl – A lightweight finite element toolbox in Julia

Hi everyone,

I’m pleased to announce LowLevelFEM.jl, a Julia package for finite element analysis in structural and continuum mechanics.
The package is written entirely in Julia and designed with three main goals in mind: simplicity, transparency, and performance.


:small_blue_diamond: What it is

LowLevelFEM.jl provides a minimal yet complete set of FEM building blocks, currently supporting:

  • 2D and 3D solid mechanics (plane stress, plane strain, axisymmetric, and full 3D)
  • Heat conduction and coupled thermo-mechanical analyses
  • Direct Gmsh integration for pre- and post-processing
  • Explicit access to assembly routines, element matrices, and field operations
  • Pure Julia implementation — no external C/Fortran backends
  • MIT licensed and available from the General Registry

The package is ideal both for teaching FEM concepts and for research, where full control over the discretization and solution process is important.


:small_blue_diamond: Why another FEM code?

While frameworks such as Gridap.jl and Ferrite.jl provide elegant abstractions for weak-form formulations,
LowLevelFEM takes a more engineering-oriented approach — focusing on the practical aspects of modeling rather than on mathematical formalism.

Typical workflows emphasize:

  • Defining boundary conditions, loads, and material properties
  • Generating meshes and physical groups directly in Gmsh
  • Computing and visualizing mechanical and thermal fields
  • Performing post-processing operations such as u ∘ ∇, S ⋅ ∇, or u × v
  • Preparing models for large deformation simulations and coupled thermo-mechanical analyses

This makes LowLevelFEM closer in spirit to classical engineering tools like Ansys or Abaqus, while remaining fully open-source and scriptable in Julia.
It provides complete transparency: you can inspect every step — from element integration to system assembly and field evaluation.


:small_blue_diamond: Example

using LowLevelFEM

gmsh.initialize()
gmsh.open("model.geo")

mat  = material("body", E=2e5, ν=0.3)
prob = Problem([mat], type=:PlaneStress)

bc    = displacementConstraint("supp", ux=0, uy=0)
force = load("load", fy=-1)

u = solveDisplacement(prob, [force], [bc])
S = solveStress(u)

showDoFResults(u)
showDoFResults(u, :uy)
showStressResults(S)
showStressResults(S, :sx)
openPostProcessor()
gmsh.finalize()

:backhand_index_pointing_right: The strings "body", "supp", and "load" refer to Gmsh physical group names in the geometry, ensuring a clear link between the preprocessor model and the FEM setup.

A lower-level, fully manual version:

K = stiffnessMatrix(prob)
f = loadVector(prob, [force])
applyBoundaryConditions!(K, f, [bc])
u = K \ f

E = mat.E
ν = mat.ν

A = (u ∘ ∇ + ∇ ∘ u) / 2
I = TensorField(prob, "body", [1 0 0; 0 1 0; 0 0 1)
S = E / (1 + ν) * (A + ν / (1 - 2ν) * trace(A) * I)

:small_blue_diamond: Documentation & paper

:books: Documentation: https://perebalazs.github.io/LowLevelFEM.jl/stable/
:package: JuliaHub: https://juliahub.com/ui/Packages/General/LowLevelFEM
:page_facing_up: A JOSS paper is under review, describing the design philosophy and educational applications in more detail.


:small_blue_diamond: Acknowledgments

LowLevelFEM builds on Julia’s growing scientific computing ecosystem and complements existing FEM frameworks like Gridap.jl and Ferrite.jl.
Feedback, issues, and contributions are very welcome — especially examples of educational or research applications!

:speech_balloon: If you try it out, please share your feedback or show your models — I’d love to see how you use LowLevelFEM in your work or teaching.

Balázs Pere
Department of Applied Mechanics, Széchenyi István University (Győr, Hungary)


4 Likes