An easy to use elastic 3D structural engineering finite element analysis library for Python.
The easiest way to install Pynite is with pip: pip install PyniteFEA
For a more detailed discussion on installation options and dependencies see https://pynite.readthedocs.io/en/latest/installation.html
As I've gotten into the structural engineering profession, I've found there's a need for an easy to use open-source finite element package. I hope to help fill that need by prioritizing the following:
Accuracy: There are no guarantees PyNite is error free, but accuracy and correctness are a priority. When bugs or errors are identified, top priority will be given to eliminate them. PyNite's code is frequently reviewed, and its output is tested against a suite of textbook problems with known solutions using continuous integration (CI) anytime a change to the code base is made. If you do happen to find an error, please report it as an issue.
Simplicity: There are other finite element alternatives out there with many more capabilities, but they are often lacking in documentation, written in difficult languages, or require extensive knowledge of finite element theory and/or element formulations to use. PyNite is not intended to be the most technically advanced solver out there. Rather, the goal is to provide a robust yet simple general purpose package.
Improvement: PyNite is getting better at what it does. Each new feature provides leverage to build upon previous features in more elaborate ways. Key to improvement is (a) maintaining the core features that other features rely on, and (b) adding new features that are solid stepping stones to other features. Improvement most often happens by getting the small and simple things right incrementally, rather than with sweeping overhauls all at once.
Collaboration: If you see a way to improve Pynite, you are encouraged to contribute. There are many simple ways to contribute that don't take much effort. Issue reports and pull requests can be very helpful. One easy way to contribute is to add to or improve the library of simple example problems in the Examples
folder. Please keep them relatively simple. Most users learn Pynite from following these simple examples. Another way to help Pynite without having to know too much about its internal workings is to help with the documentation files in the docs\source
folder of this repository. These files help new users learn Pynite. If you are able to make a bigger commitment, and would like to become a regular contributor to the project, please reach out about becoming a collaborator.
Whether you just need help getting started with PyNite, or are looking to build something more complex, there are a few resources available:
Here's a list of projects that use PyNite:
v0.0.98 (in progress)
pyvista
. Up until this point spring elements were being rendered as lines. They now render as zigzag lines in pyvista
. There is still more work for improvement on spring rendering, but this is a good start.v0.0.97
Pynite
. Most Pynite
users will want these libraries installed for full-featured use of Pynite
. These libraries help with Pynite
visualizations, plotting, the sparse solver, and Jupyter Lab
functionality. This is just easier for new python users. I was getting a lot of questions about how to set up libraries, and this takes the guesswork away. This is part of Pynite's
objective to stay easy to use.v0.0.96
FEModel3D.Nodes
is now FEModel3D.nodes
). These changes were made to prepare Pynite
for a v1.0 release that is consistent with the PEP8
style guide for python
.v0.0.95
Pyvista
. They were being rendered as positive loads. The analysis was not impacted by this bug.v0.0.94
Pyvista
. This greatly simplified the rendering code and provided a fresh look to the rendereings. Renderings in jupyter are now interactive. Global axes are also now shown in rendereings. To use Pyvista
instead of VTK
, use the new Rendering
library rather than the old Visualization
library. Rendering via VTK
directly is still available.material
to be material_name
in the code. The prior naming convention caused confusion which led to the self-weight bug.v0.0.93
v0.0.92
FEModel3D.add_member_self_weight()
. This only applies to members. This feature does not calculate self-weight for plate and quad elements.v0.0.89-0.0.91
v0.0.88
v0.0.87