PyNiteFEA 2.4.1__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {pynitefea-2.4.1 → pynitefea-3.1.0}/PKG-INFO +30 -31
  2. {pynitefea-2.4.1 → pynitefea-3.1.0}/PyNiteFEA.egg-info/PKG-INFO +30 -31
  3. {pynitefea-2.4.1 → pynitefea-3.1.0}/PyNiteFEA.egg-info/SOURCES.txt +1 -1
  4. {pynitefea-2.4.1 → pynitefea-3.1.0}/PyNiteFEA.egg-info/requires.txt +11 -13
  5. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Analysis.py +438 -65
  6. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/BeamSegY.py +12 -8
  7. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/BeamSegZ.py +38 -28
  8. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/FEModel3D.py +294 -166
  9. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/LoadCombo.py +3 -0
  10. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/MatFoundation.py +3 -0
  11. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Material.py +4 -1
  12. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Member3D.py +306 -134
  13. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Mesh.py +27 -0
  14. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Node3D.py +3 -0
  15. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/PhysMember.py +70 -29
  16. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Plate3D.py +27 -24
  17. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Quad3D.py +32 -29
  18. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Rendering.py +121 -20
  19. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Report_Template.html +86 -86
  20. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Reporting.py +53 -24
  21. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Section.py +27 -17
  22. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/ShearWall.py +53 -19
  23. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Spring3D.py +12 -8
  24. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Tri3D.py +27 -24
  25. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/VTKWriter.py +3 -0
  26. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/Visualization.py +121 -1
  27. {pynitefea-2.4.1 → pynitefea-3.1.0}/README.md +14 -2
  28. pynitefea-3.1.0/pyproject.toml +70 -0
  29. pynitefea-2.4.1/setup.py +0 -40
  30. {pynitefea-2.4.1 → pynitefea-3.1.0}/LICENSE +0 -0
  31. {pynitefea-2.4.1 → pynitefea-3.1.0}/PyNiteFEA.egg-info/dependency_links.txt +0 -0
  32. {pynitefea-2.4.1 → pynitefea-3.1.0}/PyNiteFEA.egg-info/top_level.txt +0 -0
  33. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/FixedEndReactions.py +0 -0
  34. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/MainStyleSheet.css +0 -0
  35. {pynitefea-2.4.1 → pynitefea-3.1.0}/Pynite/__init__.py +0 -0
  36. {pynitefea-2.4.1 → pynitefea-3.1.0}/setup.cfg +0 -0
@@ -1,55 +1,42 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyNiteFEA
3
- Version: 2.4.1
4
- Summary: A simple elastic 3D structural finite element library for Python.
5
- Home-page: https://github.com/JWock82/Pynite.git
6
- Author: D. Craig Brinck, PE, SE
7
- Author-email: Building.Code@outlook.com
3
+ Version: 3.1.0
4
+ Summary: A simple 3D structural finite element library for Python.
5
+ Author-email: "D. Craig Brinck, PE, SE" <Building.Code@outlook.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/JWock82/Pynite
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
- Classifier: License :: OSI Approved :: MIT License
13
12
  Classifier: Operating System :: OS Independent
14
13
  Requires-Python: >=3.11
15
14
  Description-Content-Type: text/markdown
16
15
  License-File: LICENSE
16
+ Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy>=2.4.0
18
- Requires-Dist: PrettyTable
18
+ Requires-Dist: prettytable
19
19
  Requires-Dist: scipy
20
- Requires-Dist: matplotlib
21
20
  Provides-Extra: all
22
- Requires-Dist: Ipython; extra == "all"
23
- Requires-Dist: vtk>=9.3.0; extra == "all"
24
- Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "all"
25
- Requires-Dist: trame_jupyter_extension; extra == "all"
21
+ Requires-Dist: ipython; extra == "all"
26
22
  Requires-Dist: ipywidgets; extra == "all"
27
- Requires-Dist: pdfkit; extra == "all"
28
- Requires-Dist: Jinja2; extra == "all"
23
+ Requires-Dist: jinja2; extra == "all"
24
+ Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "all"
25
+ Requires-Dist: trame-jupyter-extension; extra == "all"
26
+ Requires-Dist: vtk>=9.3.0; extra == "all"
29
27
  Provides-Extra: vtk
30
- Requires-Dist: IPython; extra == "vtk"
28
+ Requires-Dist: ipython; extra == "vtk"
31
29
  Requires-Dist: vtk>=9.3.0; extra == "vtk"
32
30
  Provides-Extra: pyvista
33
- Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "pyvista"
34
- Requires-Dist: trame_jupyter_extension; extra == "pyvista"
35
31
  Requires-Dist: ipywidgets; extra == "pyvista"
32
+ Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "pyvista"
33
+ Requires-Dist: trame-jupyter-extension; extra == "pyvista"
36
34
  Provides-Extra: reporting
37
- Requires-Dist: pdfkit; extra == "reporting"
38
- Requires-Dist: Jinja2; extra == "reporting"
35
+ Requires-Dist: jinja2; extra == "reporting"
39
36
  Provides-Extra: derivations
40
37
  Requires-Dist: jupyterlab; extra == "derivations"
41
38
  Requires-Dist: sympy; extra == "derivations"
42
- Dynamic: author
43
- Dynamic: author-email
44
- Dynamic: classifier
45
- Dynamic: description
46
- Dynamic: description-content-type
47
- Dynamic: home-page
48
39
  Dynamic: license-file
49
- Dynamic: provides-extra
50
- Dynamic: requires-dist
51
- Dynamic: requires-python
52
- Dynamic: summary
53
40
 
54
41
  <div align="center">
55
42
  <img src="https://github.com/JWock82/Pynite/raw/main/Resources/Full Logo No Buffer.png" width=40% align="center"/>
@@ -60,7 +47,7 @@ Dynamic: summary
60
47
  ![Build Status](https://github.com/JWock82/Pynite/actions/workflows/build-and-test.yml/badge.svg)
61
48
  [![codecov](https://codecov.io/gh/JWock82/Pynite/branch/main/graph/badge.svg?token=ZH18US3A7P)](https://codecov.io/gh/JWock82/Pynite)
62
49
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/PyniteFEA)
63
- ![PyPI - Downloads](https://img.shields.io/pypi/dm/PyNiteFEA?cacheSeconds=86400)
50
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/PyNiteFEA?cacheSeconds=172800)
64
51
  <img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/JWock82/Pynite">
65
52
  ![GitHub last commit](https://img.shields.io/github/last-commit/JWock82/Pynite)
66
53
  ![GitHub](https://img.shields.io/github/license/JWock82/Pynite)
@@ -77,6 +64,7 @@ For a more detailed discussion on installation options and dependencies see http
77
64
  * 3D static analysis of elastic structures.
78
65
  * P-&Delta; analysis of frame type structures.
79
66
  * Modal analysis of frame type structures.
67
+ * Nonlinear pushover analysis of steel frames.
80
68
  * Member point loads, linearly varying distributed loads, and nodal loads are supported.
81
69
  * Classify loads by load case and create load combinations from load cases.
82
70
  * Produces shear, moment, and deflection results and diagrams for each member.
@@ -121,6 +109,17 @@ Here's a list of projects that use Pynite:
121
109
  * Phaenotyp (https://github.com/bewegende-Architektur/Phaenotyp) (https://youtu.be/shloSw9HjVI)
122
110
 
123
111
  # What's New?
112
+ 3.1.0
113
+ * Improved detection of unstable structures.
114
+ * Bug fix for shear walls. Shear walls were erroneously tracking other plates in the model for internal pier/coupling beam force summations, rather than just the plates related to the individual shear wall.
115
+
116
+ 3.0.0
117
+ * Added pushover analysis! Currently, only steel sections are supported for pushover analysis. The assumed interaction equation used to estimate plastic behavior is currently calibrated toward I-shaped members.
118
+ * Refactored all elastic stiffness matrix references from `K` and `k` to `Ke` and `ke`. Most users will not notice this change. Power users who were accessing the stiffness matrices directly will want to note this refactor. This clarifies the code base by indicating which type of stiffness these matrices represent, and reduces ambiguity in preparation for addition of further geometric `Kg/kg` and plastic `Km/km` stiffness matrices.
119
+ * User's can now control the size of member plots.
120
+ * Improved `ShearWall.screenshots()` method. Added coupling beam plots. Added the ability to use the `VTK` renderer instead of the `pyvista` renderer for screenshots.
121
+ * Removed individual load combo plots from member plots when an envelope plot is requested. They cluttered the plots without adding much value.
122
+
124
123
  2.4.1
125
124
  * Fixed a bug where enveloped results did not work if both tagged and untagged combos were in a model.
126
125
 
@@ -147,7 +146,7 @@ v2.2.0
147
146
  * Updated documentation for rendering.
148
147
 
149
148
  v2.1.0
150
- * Major speed boost and leaner memory usage: the global stiffness/mass assembly plus the nodal load and fixed-end reaction builders now use block-based vectorized writes instead of Python loops, which keeps data in contiguous NumPy buffers rather than thousands of temporary Python objects. The dense solver sees ~15-25% faster `K`/`M` builds in our targeted benchmarks, while sparse solver runs see ~30% faster stiffness assembly in our benchmarks.
149
+ * Major speed boost and leaner memory usage: the global stiffness/mass assembly plus the nodal load and fixed-end reaction builders now use block-based vectorized writes instead of Python loops, which keeps data in contiguous NumPy buffers rather than thousands of temporary Python objects. The dense solver sees ~15-25% faster `Ke`/`M` builds in our targeted benchmarks, while sparse solver runs see ~30% faster stiffness assembly in our benchmarks.
151
150
  * Meshes can now be regenerated with the `FEModel3D.meshes[mesh_name].generate()` command. This command removes the old mesh and replaces it with an updated one. The mesh will not remove nodes needed by other elements outside the mesh. Note that any loads applied to the old mesh will be lost when its elements and nodes are deleted. This makes meshes truly parametric.
152
151
  * Added `FEModel3D.delete_mesh()` to help deleting old meshes properly.
153
152
  * Renderers now automatically set the annotation size as 5% of the minimum distance between nodes. You still have the option of overiding this by setting the annotation size manually.
@@ -1,55 +1,42 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyNiteFEA
3
- Version: 2.4.1
4
- Summary: A simple elastic 3D structural finite element library for Python.
5
- Home-page: https://github.com/JWock82/Pynite.git
6
- Author: D. Craig Brinck, PE, SE
7
- Author-email: Building.Code@outlook.com
3
+ Version: 3.1.0
4
+ Summary: A simple 3D structural finite element library for Python.
5
+ Author-email: "D. Craig Brinck, PE, SE" <Building.Code@outlook.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/JWock82/Pynite
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
- Classifier: License :: OSI Approved :: MIT License
13
12
  Classifier: Operating System :: OS Independent
14
13
  Requires-Python: >=3.11
15
14
  Description-Content-Type: text/markdown
16
15
  License-File: LICENSE
16
+ Requires-Dist: matplotlib
17
17
  Requires-Dist: numpy>=2.4.0
18
- Requires-Dist: PrettyTable
18
+ Requires-Dist: prettytable
19
19
  Requires-Dist: scipy
20
- Requires-Dist: matplotlib
21
20
  Provides-Extra: all
22
- Requires-Dist: Ipython; extra == "all"
23
- Requires-Dist: vtk>=9.3.0; extra == "all"
24
- Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "all"
25
- Requires-Dist: trame_jupyter_extension; extra == "all"
21
+ Requires-Dist: ipython; extra == "all"
26
22
  Requires-Dist: ipywidgets; extra == "all"
27
- Requires-Dist: pdfkit; extra == "all"
28
- Requires-Dist: Jinja2; extra == "all"
23
+ Requires-Dist: jinja2; extra == "all"
24
+ Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "all"
25
+ Requires-Dist: trame-jupyter-extension; extra == "all"
26
+ Requires-Dist: vtk>=9.3.0; extra == "all"
29
27
  Provides-Extra: vtk
30
- Requires-Dist: IPython; extra == "vtk"
28
+ Requires-Dist: ipython; extra == "vtk"
31
29
  Requires-Dist: vtk>=9.3.0; extra == "vtk"
32
30
  Provides-Extra: pyvista
33
- Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "pyvista"
34
- Requires-Dist: trame_jupyter_extension; extra == "pyvista"
35
31
  Requires-Dist: ipywidgets; extra == "pyvista"
32
+ Requires-Dist: pyvista[all,trame]>=0.43.4; extra == "pyvista"
33
+ Requires-Dist: trame-jupyter-extension; extra == "pyvista"
36
34
  Provides-Extra: reporting
37
- Requires-Dist: pdfkit; extra == "reporting"
38
- Requires-Dist: Jinja2; extra == "reporting"
35
+ Requires-Dist: jinja2; extra == "reporting"
39
36
  Provides-Extra: derivations
40
37
  Requires-Dist: jupyterlab; extra == "derivations"
41
38
  Requires-Dist: sympy; extra == "derivations"
42
- Dynamic: author
43
- Dynamic: author-email
44
- Dynamic: classifier
45
- Dynamic: description
46
- Dynamic: description-content-type
47
- Dynamic: home-page
48
39
  Dynamic: license-file
49
- Dynamic: provides-extra
50
- Dynamic: requires-dist
51
- Dynamic: requires-python
52
- Dynamic: summary
53
40
 
54
41
  <div align="center">
55
42
  <img src="https://github.com/JWock82/Pynite/raw/main/Resources/Full Logo No Buffer.png" width=40% align="center"/>
@@ -60,7 +47,7 @@ Dynamic: summary
60
47
  ![Build Status](https://github.com/JWock82/Pynite/actions/workflows/build-and-test.yml/badge.svg)
61
48
  [![codecov](https://codecov.io/gh/JWock82/Pynite/branch/main/graph/badge.svg?token=ZH18US3A7P)](https://codecov.io/gh/JWock82/Pynite)
62
49
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/PyniteFEA)
63
- ![PyPI - Downloads](https://img.shields.io/pypi/dm/PyNiteFEA?cacheSeconds=86400)
50
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/PyNiteFEA?cacheSeconds=172800)
64
51
  <img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/JWock82/Pynite">
65
52
  ![GitHub last commit](https://img.shields.io/github/last-commit/JWock82/Pynite)
66
53
  ![GitHub](https://img.shields.io/github/license/JWock82/Pynite)
@@ -77,6 +64,7 @@ For a more detailed discussion on installation options and dependencies see http
77
64
  * 3D static analysis of elastic structures.
78
65
  * P-&Delta; analysis of frame type structures.
79
66
  * Modal analysis of frame type structures.
67
+ * Nonlinear pushover analysis of steel frames.
80
68
  * Member point loads, linearly varying distributed loads, and nodal loads are supported.
81
69
  * Classify loads by load case and create load combinations from load cases.
82
70
  * Produces shear, moment, and deflection results and diagrams for each member.
@@ -121,6 +109,17 @@ Here's a list of projects that use Pynite:
121
109
  * Phaenotyp (https://github.com/bewegende-Architektur/Phaenotyp) (https://youtu.be/shloSw9HjVI)
122
110
 
123
111
  # What's New?
112
+ 3.1.0
113
+ * Improved detection of unstable structures.
114
+ * Bug fix for shear walls. Shear walls were erroneously tracking other plates in the model for internal pier/coupling beam force summations, rather than just the plates related to the individual shear wall.
115
+
116
+ 3.0.0
117
+ * Added pushover analysis! Currently, only steel sections are supported for pushover analysis. The assumed interaction equation used to estimate plastic behavior is currently calibrated toward I-shaped members.
118
+ * Refactored all elastic stiffness matrix references from `K` and `k` to `Ke` and `ke`. Most users will not notice this change. Power users who were accessing the stiffness matrices directly will want to note this refactor. This clarifies the code base by indicating which type of stiffness these matrices represent, and reduces ambiguity in preparation for addition of further geometric `Kg/kg` and plastic `Km/km` stiffness matrices.
119
+ * User's can now control the size of member plots.
120
+ * Improved `ShearWall.screenshots()` method. Added coupling beam plots. Added the ability to use the `VTK` renderer instead of the `pyvista` renderer for screenshots.
121
+ * Removed individual load combo plots from member plots when an envelope plot is requested. They cluttered the plots without adding much value.
122
+
124
123
  2.4.1
125
124
  * Fixed a bug where enveloped results did not work if both tagged and untagged combos were in a model.
126
125
 
@@ -147,7 +146,7 @@ v2.2.0
147
146
  * Updated documentation for rendering.
148
147
 
149
148
  v2.1.0
150
- * Major speed boost and leaner memory usage: the global stiffness/mass assembly plus the nodal load and fixed-end reaction builders now use block-based vectorized writes instead of Python loops, which keeps data in contiguous NumPy buffers rather than thousands of temporary Python objects. The dense solver sees ~15-25% faster `K`/`M` builds in our targeted benchmarks, while sparse solver runs see ~30% faster stiffness assembly in our benchmarks.
149
+ * Major speed boost and leaner memory usage: the global stiffness/mass assembly plus the nodal load and fixed-end reaction builders now use block-based vectorized writes instead of Python loops, which keeps data in contiguous NumPy buffers rather than thousands of temporary Python objects. The dense solver sees ~15-25% faster `Ke`/`M` builds in our targeted benchmarks, while sparse solver runs see ~30% faster stiffness assembly in our benchmarks.
151
150
  * Meshes can now be regenerated with the `FEModel3D.meshes[mesh_name].generate()` command. This command removes the old mesh and replaces it with an updated one. The mesh will not remove nodes needed by other elements outside the mesh. Note that any loads applied to the old mesh will be lost when its elements and nodes are deleted. This makes meshes truly parametric.
152
151
  * Added `FEModel3D.delete_mesh()` to help deleting old meshes properly.
153
152
  * Renderers now automatically set the annotation size as 5% of the minimum distance between nodes. You still have the option of overiding this by setting the annotation size manually.
@@ -1,6 +1,6 @@
1
1
  LICENSE
2
2
  README.md
3
- setup.py
3
+ pyproject.toml
4
4
  PyNiteFEA.egg-info/PKG-INFO
5
5
  PyNiteFEA.egg-info/SOURCES.txt
6
6
  PyNiteFEA.egg-info/dependency_links.txt
@@ -1,30 +1,28 @@
1
+ matplotlib
1
2
  numpy>=2.4.0
2
- PrettyTable
3
+ prettytable
3
4
  scipy
4
- matplotlib
5
5
 
6
6
  [all]
7
- Ipython
8
- vtk>=9.3.0
9
- pyvista[all,trame]>=0.43.4
10
- trame_jupyter_extension
7
+ ipython
11
8
  ipywidgets
12
- pdfkit
13
- Jinja2
9
+ jinja2
10
+ pyvista[all,trame]>=0.43.4
11
+ trame-jupyter-extension
12
+ vtk>=9.3.0
14
13
 
15
14
  [derivations]
16
15
  jupyterlab
17
16
  sympy
18
17
 
19
18
  [pyvista]
20
- pyvista[all,trame]>=0.43.4
21
- trame_jupyter_extension
22
19
  ipywidgets
20
+ pyvista[all,trame]>=0.43.4
21
+ trame-jupyter-extension
23
22
 
24
23
  [reporting]
25
- pdfkit
26
- Jinja2
24
+ jinja2
27
25
 
28
26
  [vtk]
29
- IPython
27
+ ipython
30
28
  vtk>=9.3.0