1. Introduction
Currently, numerical methods are the most important tools for solving various scientific and engineering problems [
1]. For example, the Finite Element Method (FEM), one of the most successful numerical methods, has been widely employed in different scientific and engineering fields because of its mathematically rigorous proof and satisfactory efficiency [
2,
3,
4]. However, the shortcomings and deficiencies of FEM are becoming increasingly significant [
2,
5,
6,
7,
8]. (1) The FEM applies the problem domain of finite degrees of freedom to the problem domain of infinite degrees of freedom, which makes the system stiffness matrix “too rigid”. (2) The conventional FEM has high requirements for mesh quality and cannot deal with distorted meshes. (3) When the conventional FEM uses simple and low-order elements to calculate large and complex structures, the calculation accuracy is often unsatisfactory, while when higher-order elements with higher accuracy are used, the computational cost is quite expensive.
To cope with the above deficiencies of FEM or decrease the computational cost of generating meshes, meshfree methods have emerged, such as Radial Point Interpolation Method (RPIM), Element Free Galerkin (EFG) and Meshless Local Petrov–Galerkin (MLPG) [
2,
5,
9,
10]. The mesh-free methods can be used to analyze crack problems and large deformation problems because mesh-free methods employ a group of scattered nodes in the discrete problem domain, avoiding the requirement for continuity of the problem domain. However, the more complex computational process of mesh-free methods leads to the desire to achieve higher computational accuracy, which is not only computationally time-consuming but also inefficient [
7].
In recent years, the Smoothed Finite Element Method (S-FEM), a new numerical method combining the FEM and strain smoothing technique was proposed by Liu G.R. et al. [
7,
11]. The system stiffness matrix of S-FEM model is softer than the FEM model for identical grid structures, has lower sensitivity to mesh distortion, and usually produces more accurate solutions and a higher convergence speed [
7]. Due to the above characteristics, S-FEM is frequently used in the fields of material mechanics [
12,
13], dynamics [
14,
15], fracture mechanics [
16], plate and shell mechanics [
17], fluid structure interaction [
18], acoustics [
19], heat transfer [
20] and biomechanics [
21].
Typical S-FEM models include cell-based S-FEM (CS-FEM) [
15,
22], node-based S-FEM (NS-FEM) [
23,
24], edge-based S-FEM (ES-FEM) [
14,
16] for 2D and 3D problems and face-based S-FEM (FS-FEM) [
25] for 3D problems. In addition, there are hybrid and modified types of S-FEM. For example, Chen et al. [
26] proposed an edge-based smoothed extended finite element method, ESm-XFEM, for the analysis of linear elastic fracture mechanics. An improved ES-FEM method, bES-FEM, was proposed by Nguyen-Xuan et al. [
27]. bES-FEM can be applied to almost incompressible and incompressible problems. Xu et al. [
28] proposed a hybrid smoothed finite element method (H-SFEM) for solving solid mechanics problems by combining FEM and NS-FEM based on triangular meshes. Zeng et al. [
29] proposed a beta finite element method (
FEM) based on the smooth strain technique applied to the modeling of crystalline materials.
Compared with FEM, the calculation of the S-FEM has the following two differences. First, we need to construct the smoothing domains and modify or reconstruct the strain field in the S-FEM. Moreover, because the smoothing domain may involve a portion of adjacent elements, the memory requirements for S-FEM will be larger [
7]. The two differences mentioned above may lead to a higher computational cost for the S-FEM than the FEM for the same grid structure. However, given the calculation cost, the results calculated by the S-FEM model are more accurate than the FEM, and thus, achieve higher efficiency. To make S-FEM more applicable to large-scale engineering problems, parallel strategies of multicore CPUs and/or multicore GPUs are usually used to improve and optimize the computational power of S-FEM.
Currently, there are many software packages developed for utilizing FEM to solve various scientific and engineering problems, while the development of software and library packages for the S-FEM is still in progress [
30]. Current S-FEM software packages are mostly implemented in C++ and Fortran. However, static languages such as Fortran and C/C++ have more complex language structures, are more difficult to learn, and require high programming skills. Although high-level dynamic languages, such as MATLAB and Python, are easy to learn, highly visual and interactive, the computing speed of dynamic language is slow and there are expensive licensing fees associated with the use of commercial software such as MATLAB. Julia is an efficient, user-friendly, open-source programming language, developed by MIT in 2009 [
31]. Furthermore, it balances the problems of computing performance, programming difficulty and code legibility [
32].
Many researchers have used the Julia language to develop software packages related to numerical computation. For example, Frondelius et al. [
33] designed an FEM structure by using the Julia language, which enables large-scale FEM models to be processed by using distributed simple programming models across a cluster of computers. Sinaie et al. [
34] implemented the Material Point Method (MPM) in the Julia language. In the large strain solid mechanics simulation, only Julia’s built-in characteristics are used, which has better performance than the MPM code based on MATLAB. Zenan Huo et al. [
35] implemented a package of S-FEM for linear elastic static problems by using Julia language. Pawar et al. [
36] developed a one-dimensional solver for the Euler equation, and an arakawa spectral solver and pseudo-spectral solver for the two-dimensional incompressible Navier–Stokes equation for the analysis of computational fluid dynamics using the Julia language. Heitzinger et al. [
37] used the Julia language to implement numerical stochastic homogeneity of elliptic problems and discussed the advantages of using Julia to solve multiscale problems involving partial differential equations. Kemmer et al. [
38] designed a finite element and boundary element solver using Julia to calculate the electrostatic potential of proteins in structural solvents. Fairbrother et al. [
39] developed a package for Gaussian processes, GaussianProcesses.jl, using the Julia language. GaussianProcesses.jl takes advantage of the inherent computational benefits of the Julia language, including multiple assignments and just-in-time compilation, to generate fast, flexible and user-friendly packages for Gaussian processes.
In this paper, a parallel incremental S-FEM software package epSFEM for elastic-plastic problems is designed and implemented by utilizing the Julia language on a multi-core CPU. Distributed parallelism and partitioned parallelism are used for the assembly of the stiffness matrix, allowing multiple cells to be assembled simultaneously, avoiding excessive for loops and saving computation time. The system of equations is solved using the PARDISO [
40] parallel sparse matrix solver. epSFEM applies to more common and complex elastic-plastic mechanical problems in practical engineering. Moreover, epSFEM adopts an incremental theory suitable for most load cases to solve elastic-plastic problems, and the calculation results are more reliable and accurate.
The contributions of this paper can be summarized as follows:
(1) A parallel S-FEM package epSFEM using incremental theory to solve elastic-plastic problems is developed by Julia language.
(2) The computational efficiency of epSFEM is improved by using distributed and partitioned parallel strategy on a multi-core CPU.
(3) epSFEM features a clear structure and legible code and can be easily extended.
The rest of this paper is organized as follows. The theory related to S-FEM and Julia language are presented in
Section 2. The detailed implementation steps of the software package epSFEM are described in
Section 3. Two sets of numerical examples are used to assess the correctness of the epSFEM and to evaluate its efficiency in
Section 4. The performance, strengths and weaknesses of the epSFEM and the future direction of work are discussed in
Section 5.
Section 6 presents the main conclusions.