
Update on my own FEM-Solver: FEMaster 2.0
Hey everyone,
I posted here twice before about FEMaster, my open-source structural finite element solver. Since the last post: reddit/femaster_1, I continued working on it quite a lot and wanted to share the current state. As before, I was trying to be as close as possible to Abaqus Syntax but deviated from it since I felt like some of it wasnt as clean as it could be. The code is open source and can be found here: GitHub/Luecx/FEMaster
The biggest update is that FEMaster is no longer only a linear structural solver. It now has geometrically nonlinear static analysis with Newton iterations, load control, arc-length control, adaptive step handling and cutbacks. My main motivation for this was to be able to follow unstable equilibrium paths, snap-through behavior and limit-point problems instead of only solving simple load-controlled cases. I also validated these methods on aerospace structural parts and it seems to align well with the analytical equations.
The part I am currently most excited about is nonlinear shell analysis. FEMaster now contains several shell elements, and the nonlinear work is mainly centered around a MITC4FRT shell formulation which is extremly close to Abaqus S4. I have verified parts of the nonlinear shell implementation against several benchmark-type examples. The attached plots show two of them:
The labels in the plots are still in German because they come directly from my verification scripts, but the curves show the load-displacement paths and the limit-point / snap-through behavior. I compared these examples against Abaqus and other reference solutions.
I also added a frictionless node-to-surface contact formulation. I would currently describe contact as beta/experimental. It works for simple cases, but I would not yet call it robust general-purpose contact:
Frictionless contact between a beam (made of solids) and a solid plate.
Another thing I improved is the documentation. There is now a fairly detailed PDF documentation in the GitHub repository, including the keyword format and supported commands: document.pdf. I am also working on a Python backend. It already exists and can be used for parts of the workflow, but it is not yet complete.
I want to be transparent about the maturity level: FEMaster is not an Abaqus/Ansys/Nastran replacement. It is a research and development code. Some things are already quite usable, some are implemented but still need broader validation, and some features are intentionally missing for now. But compared to the first version I posted, it has grown into a much broader structural FEM framework. I am very happy about the performance and applicability of my solver so far and would love to share it with you.
Here is a list of the current features in my solver:
- Analysis types
- linear static analysis
- geometrically nonlinear static analysis*
- linear buckling analysis*
- eigenfrequency analysis
- linear transient dynamics*
- topology-sensitivity analysis
- MISC
- Inertia Relief*
- Load Rebalancing*
- Elements
- solid elements: C3D4, C3D5, C3D6, C3D8, C3D10, C3D15, C3D20, C3D20R
- shell elements: S3, S4, MITC4, S6, S8, MITC4FRT*
- truss element: T3*
- beam element: B33
- point masses, point springs and rotational inertias
- QSPT shear-panel element*
- Material models:
- Elasticity:
- Isotropic linear elasticity
- Generalised isotropic linear elasticity (making G independent)*
- Orthotropic linear elasticity
- Explicit ABD matrices for shells*
- Other:
- Density
- Thermal expansion
- Local material orientations
- Elasticity:
- Sections:
- One for each Element type: Solid Section, Truss Section, Shell Section, Beam Section, Point Mass Section.
- Loads:
- Concentrated Loads (CLOAD)
- Pressure Loads (PLOAD)
- Distribute surface loads (DLOAD, similar to PLOAD but doesnt have to be normal to the surface)
- Volume loads (VLOAD)
- Inertia Loads from accelerations (including rotations)*
- Most load types can be formulated within a custom coordinate system*
- Most load types can be time dependent (in transient steps)*
- Constraints:
- Tie Constraints
- Coupling (kinematic / structural)
- Connector constraints
- automatic rigid-body-mode supression (this is pretty cool stuff)*
- Contact (work in progress, not really robust at all).*
- Solvers:
- External optional libraries:
- If supported by the user: MKL (extremly fast on the cpu).
- If supported by the user: CUDA
- If supported by the user: CUDA cuDSS (this is crazy fast)*
- FEMaster can utilise direct solvers (MKL, cuDSS), as well as indirect solvers like PCG on the gpu and cpu.
- Multiple rhs*
- Multithreading when using MKL
- External optional libraries:
(Everything marked with an * is new since the last update although this list my not be complete).
Next steps for me:
The next major topic I want to work on is nonlinear material modeling. I would like to add at least a basic but clean material nonlinearity framework first, before adding more advanced features on top of it.
I would be very interested in any feedback from people working with FEM solvers, nonlinear analysis, shell elements or open-source CAE tools.
Thanks again for the feedback on the previous posts. Several things in the current version were motivated by comments and questions from this community.