LowLevelFEM.jl: A lightweight finite element toolbox in Julia

LowLevelFEM.jl: A lightweight finite element toolbox in Julia - Published in JOSS (2026)

https://github.com/perebalazs/lowlevelfem.jl

Science Score: 87.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
    Found 10 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org, zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

continuum-mechanics education engineering fem finite-element-method julia pde pde-solver scientific-computing structural-mechanics weak-form
Last synced: about 21 hours ago · JSON representation

Repository

A lightweight finite element toolbox in Julia for education, research, and rapid prototyping of weak-form formulations.

Basic Info
Statistics
  • Stars: 11
  • Watchers: 1
  • Forks: 3
  • Open Issues: 9
  • Releases: 87
Topics
continuum-mechanics education engineering fem finite-element-method julia pde pde-solver scientific-computing structural-mechanics weak-form
Created over 2 years ago · Last pushed 6 days ago
Metadata Files
Readme Contributing Funding License Code of conduct Security

README.md

Build Status codecov status DOI License: MIT

LowLevelFEM

LowLevelFEM is a Julia package for finite element analysis with an engineering-first workflow, designed to assemble finite element operators explicitly at matrix and field level.
It exposes each phase of the workflow as simple functions (mesh → matrices → loads/BCs → solve → postprocess → visualize), so you can customize, combine, or inspect any step at matrix and field level.
Typical tasks such as strain energy or resultants are one-liners (for example, U = q' * K * q / 2). The package is suitable not only for classical structural mechanics problems, but also for rapid assembly of general linear PDEs expressed in weak form.

Requirements

  • Julia 1.x
  • Gmsh C API is bundled via gmsh_jll and re-exported as gmsh from this package; no separate Gmsh.jl installation is required.

Capabilities

  • Geometry and meshing: integrates with gmsh for 2D/3D geometry, meshing, and physical groups.
  • Problem types: 3D solids, 2D plane stress/plane strain, axisymmetric; 3D/2D heat conduction and axisymmetric heat conduction.
  • Elements and order: standard line/triangle/quad/tetra/hex/pyramid/wedge with Lagrange order up to 10.
  • Materials: linear elastic (Hooke) and hyperelastic materials given by their free energy function. Direct input of 6×6 constitutive matrix is also possible.
  • Matrices: stiffness K, mass M (lumped or consistent), proportional damping C (Rayleigh/Caughey), heat conduction/capacity, latent heat, convection matrices/vectors, and generic Poisson-type operators for scalar and vector fields.
  • Explicit matrices and fields: unlike many high-level FEM packages, LowLevelFEM keeps global matrices and finite element fields accessible throughout the workflow, making every stage of the analysis transparent and customizable.
  • Operator-level programming: implement, inspect and modify PDE operators, constitutive laws and weak-form formulations directly at matrix and field level.
  • Loads and constraints: nodal and distributed loads on physical groups; function-based loads and temperature BCs; elastic supports; initial displacement/velocity/temperature.
  • Thermal–structural coupling: thermal expansion, thermal stresses, and heat generated by elastic deformation.
  • Solvers: static (direct and iterative solvers with arbitrary preconditioners) and transient dynamics (central difference and HHT-α from the Newmark family).
  • Eigenproblems: modal analysis (frequencies and mode shapes, optionally prestressed) and linear buckling (critical factors and modes).
  • Field operators and results: gradient/divergence/curl; stress/strain and heat flux as element or nodal fields; smoothing at nodes with field jumps; user-defined scalar/vector/tensor FE fields.
  • Visualization and plots: Gmsh-based views for displacements, stresses, strains, heat flux, with animation for dynamics; plot results along user-defined paths; show results on surfaces.
  • Coordinate systems: rotate nodal DOFs with constant or function-defined local coordinate systems (incl. curvilinear).
  • Truss structures (static, transient, modal analysis)
  • Nonlinear solid mechanics (Total Lagrangian formulation) Energy-based hyperelasticity with consistent stress and tangent operators, including geometric stiffness and follower loads for large-deformation problems.

Installation

julia using Pkg Pkg.add("LowLevelFEM")

Quick Start

```julia using LowLevelFEM

structuredrectmesh() # uses Gmsh to create mesh

mat = Material("body", E=2e5, ν=0.3) prob = Problem([mat], type=:PlaneStrain) # :Solid, :PlaneStress, :AxiSymmetric, :HeatConduction, ...

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

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

showDoFResults(u, visible=true) showDoFResults(u, :ux) showStressResults(S) showStressResults(S, :sxy, name="Shear stress")

openPostProcessor() ```

Note: physical group names in your geometry (created in Gmsh) must match the strings used above (e.g., "body", "left", "right").

An alternative solution (instead of u = ..., S = ...)

```julia K = stiffnessMatrix(prob) f = loadVector(prob, [force]) u = solveDisplacement(K, f, support=[bc])

E = mat.E ν = mat.ν

u = expandTo3D(u)

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) ```

For interactive work with custom geometries

Gmsh can be launched directly from Julia.

julia openGeometry("test.geo") openPreProcessor()

If test.geo already exists, it is opened for editing. Otherwise, openGeometry automatically creates a new geometry file, which can then be edited in Gmsh using openPreProcessor().

This workflow is recommended for custom geometries and more advanced finite element models.

More end-to-end examples, tutorials and application notebooks are available in the examples directory and the online documentation.

Documentation

Planned features

  • Beam and shell elements (partially implemented using compound operators for weak-form assembly)
  • Contact problems (penalty, Lagrange multiplier)
  • Multithreading (partially implemented)

Any suggestions are welcome. In case of any issue, please send a bug report.

License

This project is licensed under the MIT License — see LICENSE for details.

Owner

  • Login: perebalazs
  • Kind: user

JOSS Publication

LowLevelFEM.jl: A lightweight finite element toolbox in Julia
Published
July 28, 2026
Volume 11, Issue 123, Page 10096
Authors
Balázs Pere ORCID
Department of Applied Mechanics, Széchenyi István University, Győr, Hungary
Editor
Prashant Jha ORCID
Tags
finite element method structural mechanics continuum mechanics open source

GitHub Events

Total
  • Create event: 39
  • Commit comment event: 58
  • Release event: 35
  • Delete event: 18
  • Pull request event: 22
  • Watch event: 6
  • Issue comment event: 37
  • Push event: 518
Last Year
  • Create event: 20
  • Commit comment event: 25
  • Release event: 18
  • Delete event: 15
  • Pull request event: 20
  • Watch event: 5
  • Issue comment event: 19
  • Push event: 305

Committers

Last synced: 4 months ago

All Time
  • Total Commits: 512
  • Total Committers: 2
  • Avg Commits per committer: 256.0
  • Development Distribution Score (DDS): 0.002
Past Year
  • Commits: 312
  • Committers: 2
  • Avg Commits per committer: 156.0
  • Development Distribution Score (DDS): 0.003
Top Committers
Name Email Commits
perebalazs p****s@g****m 511
CompatHelper Julia c****y@j****g 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 5
  • Total pull requests: 33
  • Average time to close issues: less than a minute
  • Average time to close pull requests: 27 days
  • Total issue authors: 4
  • Total pull request authors: 2
  • Average comments per issue: 13.4
  • Average comments per pull request: 0.18
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 5
Past Year
  • Issues: 3
  • Pull requests: 28
  • Average time to close issues: N/A
  • Average time to close pull requests: 7 days
  • Issue authors: 2
  • Pull request authors: 2
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.21
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 4
Top Authors
Issue Authors
  • TimJosephson (2)
  • PetrKryslUCSD (1)
  • JuliaTagBot (1)
  • perebalazs (1)
Pull Request Authors
  • perebalazs (28)
  • dependabot[bot] (5)
Top Labels
Issue Labels
Pull Request Labels
dependencies (5) github_actions (4)

Packages

  • Total packages: 1
  • Total downloads:
    • julia 112 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 66
juliahub.com: LowLevelFEM
  • Versions: 66
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 112 Last month
Rankings
Dependent repos count: 9.8%
Average: 24.6%
Dependent packages count: 39.4%
Last synced: 4 months ago

Dependencies

.github/workflows/CI.yml actions
  • actions/checkout v4 composite
  • julia-actions/cache v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/CompatHelper.yml actions
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
docs/Manifest.toml julia
  • 146 dependencies
docs/Project.toml julia
  • Documenter *
  • LowLevelFEM *
Project.toml julia
  • Arpack *
  • IterativeSolvers *
  • JLD2 *
  • LinearAlgebra *
  • Polyester *
  • PrecompileTools *
  • SparseArrays *
  • StaticArrays *
  • gmsh_jll *
.github/workflows/draft-pdf.yml actions
  • actions/checkout v4 composite
  • actions/upload-artifact v4 composite
  • openjournals/openjournals-draft-action master composite
.github/workflows/docs-pdf.yml.off actions
  • actions/checkout v4 composite
  • actions/upload-artifact v4 composite
  • julia-actions/setup-julia v2 composite