LowLevelFEM.jl: A lightweight finite element toolbox in Julia
LowLevelFEM.jl: A lightweight finite element toolbox in Julia - Published in JOSS (2026)
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
Repository
A lightweight finite element toolbox in Julia for education, research, and rapid prototyping of weak-form formulations.
Basic Info
- Host: GitHub
- Owner: perebalazs
- License: mit
- Language: Julia
- Default Branch: main
- Homepage: https://perebalazs.github.io/LowLevelFEM.jl/
- Size: 21.9 MB
Statistics
- Stars: 11
- Watchers: 1
- Forks: 3
- Open Issues: 9
- Releases: 87
Topics
Metadata Files
README.md
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_jlland re-exported asgmshfrom this package; no separate Gmsh.jl installation is required.
Capabilities
- Geometry and meshing: integrates with
gmshfor 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, massM(lumped or consistent), proportional dampingC(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
- Latest docs: https://perebalazs.github.io/LowLevelFEM.jl/dev
- Stable docs: https://perebalazs.github.io/LowLevelFEM.jl/stable
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
- Repositories: 1
- Profile: https://github.com/perebalazs
JOSS Publication
LowLevelFEM.jl: A lightweight finite element toolbox in Julia
Tags
finite element method structural mechanics continuum mechanics open sourceGitHub 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
Top Committers
| Name | 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
Packages
- Total packages: 1
-
Total downloads:
- julia 112 last-month
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 66
juliahub.com: LowLevelFEM
- Documentation: https://docs.juliahub.com/General/LowLevelFEM/stable/
- License: MIT
-
Latest release: 1.13.4
published 5 months ago
Rankings
Dependencies
- 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
- JuliaRegistries/TagBot v1 composite
- 146 dependencies
- Documenter *
- LowLevelFEM *
- Arpack *
- IterativeSolvers *
- JLD2 *
- LinearAlgebra *
- Polyester *
- PrecompileTools *
- SparseArrays *
- StaticArrays *
- gmsh_jll *
- actions/checkout v4 composite
- actions/upload-artifact v4 composite
- openjournals/openjournals-draft-action master composite
- actions/checkout v4 composite
- actions/upload-artifact v4 composite
- julia-actions/setup-julia v2 composite
