New 588-line comprehensive strategic document explaining winning architecture: Executive Summary (lines 1-19): - Key results demonstrated on real hardware - 9-92× CPU speedup, GPU kernel compilation, MPI working, Krylov convergence - Multi-GPU workflow validated end-to-end Problem: Traditional FEM doesn't scale (lines 21-59): - v0.5.1 limitations: global matrix O(N²) memory, direct solver O(N³) time - Scalability ceiling ~100K DOF - Cannot scale: memory N², time N³ Solution: Nodal + Matrix-Free + Multi-GPU (lines 61-193): - Architecture diagram with MPI ranks and local GPUs - Three pillars: nodal assembly (row-by-row), matrix-free (matvec only), multi-GPU with MPI - Each pillar explained with code examples and advantages Why type stability required (lines 195-241): - GPU kernel compilation: concrete types required, abstract fails - MPI fast path: typed buffers vs slow serialization - Krylov solvers: matrix-free operators need concrete types - Demonstrated with code examples Performance characteristics (lines 243-289): - Complexity analysis: O(N²)→O(N) memory, O(N³)→O(N·k) time - Scalability comparison table: 10K→10M DOF - Demonstrated results: 10×10 system, 9 iterations, 7.73×10⁻¹⁴ error Contact mechanics killer app (lines 291-340): - Why nodal assembly natural for contact (contact is nodal not element-based) - Contact workflow: detect→assemble→solve→update - Element-based assembly is mismatch for contact Implementation strategy v1.0 (lines 342-407): - Phase 1: Foundation (complete) - type-stable design, GPU/MPI demos, Krylov validation - Phase 2: Core implementation - nodal assembly API, matrix-free operator, GPU accel, MPI distribution - Phase 3: Contact integration - detection, contribution to rows, iterative solve Comparison with other strategies (lines 409-455): - Global matrix assembly: dead end for scalability - Element-based matrix-free: works but suboptimal for contact - Nodal + matrix-free + multi-GPU (ours): best for large-scale contact Validation and evidence (lines 457-533): - Three demonstrations: gpu_mpi_demo, krylov_mpi_gpu_demo, field_storage_comparison - Real-world applicability: LAMMPS, GROMACS use similar patterns - Why traditional FEM codes don't do this: legacy constraints Conclusion (lines 535-588): - Five validated achievements proving path forward - Not speculation: working code on real hardware - Path is clear: type stability foundation, nodal assembly pattern, Krylov+MPI solver - Related documentation links Purpose: Strategic justification for v1.0 architecture with real evidence
JuliaFEM.jl - an open source solver for both industrial and academia usage
The JuliaFEM project develops open-source software for reliable, scalable, distributed Finite Element Method.
The JuliaFEM software library is a framework that allows for the distributed processing of large Finite Element Models across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. The basic design principle is: everything is nonlinear. All physics models are nonlinear from which the linearization are made as a special cases.
At the moment, users can perform the following analyses with JuliaFEM: elasticity, thermal, eigenvalue, contact mechanics, and quasi-static solutions. Typical examples in industrial applications include non-linear solid mechanics, contact mechanics, finite strains, and fluid structure interaction problems. For visualization, JuliaFEM uses ParaView which prefers XDMF file format using XML to store light data and HDF to store large data-sets, which is more or less the open-source standard.
Vision
On one hand, the vision of the JuliaFEM includes the opportunity for massive parallelization using multiple computers with MPI and threading as well as cloud computing resources in Amazon, Azure and Google Cloud services together with a company internal server. And on the other hand, the real application complexity including the simulation model complexity as well as geometric complexity. Not to forget that the reuse of the existing material models as well as the whole simulation models are considered crucial features of the JuliaFEM package.
Recreating the wheel again is definitely not anybody's goal, and thus we try to use and embrace good practices and formats as much as possible. We have implemented Abaqus / CalculiX input-file format support and maybe will in the future extend to other FEM solver formats. Using modern development environments encourages the user towards fast development time and high productivity. For developing and creating new ideas and tutorials, we have used Jupyter notebooks to make easy-to-use handouts.
The user interface for JuliaFEM is Jupyter Notebook, and Julia language itself is a real programming language. This makes it possible to use JuliaFEM as a part of a bigger solution cycle, including for example data mining, automatic geometry modifications, mesh generation, solution, and post-processing and enabling efficient optimization loops.
Installing JuliaFEM
Inside Julia REPL, type:
Pkg.add("JuliaFEM")
Initial road map
JuliaFEM current status: project planning
| Version | Number of degree of freedom | Number of cores |
|---|---|---|
| 0.1.0 | 1 000 000 | 10 |
| 0.2.0 | 10 000 000 | 100 |
| 1.0.0 | 100 000 000 | 1 000 |
| 2.0.0 | 1 000 000 000 | 10 000 |
| 3.0.0 | 10 000 000 000 | 100 000 |
We strongly believe in the test driven development as well as building on top of previous work. Thus all the new code in this project should be 100% tested. Also other people have wisdom in style as well:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Errors should never pass silently.
Citing
If you like using our package, please consider citing our article
@article{frondelius2017juliafem,
title={Julia{FEM} - open source solver for both industrial and academia usage},
volume={50},
url={https://rakenteidenmekaniikka.journal.fi/article/view/64224},
DOI={10.23998/rm.64224},
number={3},
journal={Rakenteiden Mekaniikka},
author={Frondelius, Tero and Aho, Jukka},
year={2017},
pages={229-233}
}
Contributing
We welcome contributions! JuliaFEM encourages good practices, starting from unit testing and continuing to full integration testing across platforms.
Interested in contributing? Please read:
- Contributing Guide - Quick start for contributors
- Coding Standards - Required reading (includes important rules like "no Greek letters in code")
- Contributor Manual - Technical details and architecture
Key requirements:
- ✅ Type-stable code (performance critical)
- ✅ Tests included with all changes
- ✅ Follow coding standards (use
u, v, wnot ξ, η, ζ) - ✅ Clean commit messages
Questions? Open a GitHub Discussion or issue - we're happy to help!
