juSFEM: A Julia-based Open-source Package of Parallel Smoothed Finite Element Method (S-FEM) for Elastic Problems
The Smoothed Finite Element Method (S-FEM) proposed by Liu G.R. can achieve more accurate results than the conventional FEM. Currently, much commercial software and many open-source packages have been developed to analyze various science and engineering problems using the FEM. However, there is little work focusing on designing and developing software or packages for the S-FEM. In this paper, we design and implement an open-source package of the parallel S-FEM for elastic problems by utilizing the Julia language on multi-core CPU. The Julia language is a fast, easy-to-use, and open-source programming language that was originally designed for high-performance computing. We term our package as juSFEM. To the best of the authors knowledge, juSFEM is the first package of parallel S-FEM developed with the Julia language. To verify the correctness and evaluate the efficiency of juSFEM, two groups of benchmark tests are conducted. The benchmark results show that (1) juSFEM can achieve accurate results when compared to commercial FEM software ABAQUS, and (2) juSFEM only requires 543 seconds to calculate the displacements of a 3D elastic cantilever beam model which is composed of approximately 2 million tetrahedral elements, while in contrast the commercial FEM software needs 930 seconds for the same calculation model; (3) the parallel juSFEM executed on the 24-core CPU is approximately 20x faster than the corresponding serial version. Moreover, the structure and function of juSFEM are easily modularized, and the code in juSFEM is clear and readable, which is convenient for further development.
💡 Research Summary
The paper presents juSFEM, an open‑source Julia package that implements the Smoothed Finite Element Method (S‑FEM) for three‑dimensional elastic analysis on multi‑core CPUs. The authors begin by reviewing the limitations of the conventional Finite Element Method (FEM), such as excessive stiffness, volume locking, and poor performance on low‑quality tetrahedral meshes. They then introduce S‑FEM, originally proposed by Liu, which smooths the strain field over specially constructed smoothing domains to improve accuracy while retaining the mesh‑based framework of FEM. Four variants of S‑FEM exist (node‑, edge‑, face‑, and cell‑based); juSFEM adopts the face‑based version (FS‑FEM) because it works naturally with four‑node tetrahedral (T4) elements and offers a good balance between accuracy and implementation complexity.
The core of the method is the construction of smoothing domains for each interior face of the tetrahedral mesh. For an interior triangular face shared by two tetrahedra, the authors create a hexahedral smoothing domain by adding the centroids of the two adjacent tetrahedra; for exterior faces, a single tetrahedron is used. Within each domain a constant smoothing function φ = 1/Vₛₖ is defined, and the smoothed strain is obtained via a boundary integral derived from Green’s divergence theorem. The strain‑displacement matrix B is evaluated at a set of pre‑computed Gauss points on each face, and the resulting contributions are assembled into a global smoothed stiffness matrix K_FS‑FEM.
Implementation leverages Julia’s just‑in‑time compilation, high‑performance linear‑algebra libraries (BLAS/LAPACK), and built‑in parallelism. The mesh and smoothing‑domain data are stored in shared arrays, and the computational workload is divided among worker processes using Julia’s addprocs and @distributed constructs. Each worker assembles a local stiffness contribution in CSR/CSC format; after all workers finish, the local matrices are merged into the global system. This design avoids race conditions and minimizes inter‑process communication. The package is organized into three clear modules: preprocessing (mesh generation, smoothing‑domain construction), solver (assembly, application of essential boundary conditions, solution of the linear system), and post‑processing (export of displacement, stress fields, visualization). The code follows a functional style, making it readable and easy to extend.
Two benchmark studies validate the approach. First, a standard elasticity problem is solved with both juSFEM and the commercial FEM software ABAQUS. The displacement and stress fields match closely, confirming that the smoothing does not degrade accuracy and, in fact, yields smoother stress distributions near singularities. Second, a large‑scale 3‑D cantilever beam model consisting of roughly two million T4 elements (≈1 million nodes) is analyzed. On a single core, juSFEM completes the analysis in 543 seconds; on a 24‑core machine it finishes in about 27 seconds, a speed‑up of roughly 20× compared with the serial version. The same model takes 930 seconds in ABAQUS, demonstrating that juSFEM is not only faster but also more memory‑efficient.
The authors discuss strengths and limitations. Strengths include (1) high computational efficiency achieved through algorithmic redesign and Julia’s parallel capabilities, (2) modular, well‑documented code that encourages community contributions, and (3) open‑source availability on GitHub. Limitations are that GPU acceleration is not yet supported, scalability plateaus beyond a certain core count due to overhead in merging local matrices, and only linear elastic material models are currently implemented. Future work may extend the package to nonlinear materials, adaptive mesh refinement, and GPU‑based parallelism.
In conclusion, juSFEM represents the first Julia‑based parallel implementation of S‑FEM and demonstrates that the combination of strain smoothing and modern high‑level, high‑performance languages can deliver both accuracy and speed for large‑scale elastic simulations. It offers a viable, free alternative to proprietary FEM tools for researchers and engineers dealing with massive three‑dimensional problems.
Comments & Academic Discussion
Loading comments...
Leave a Comment