PyNiteFEA 2.4.0__tar.gz → 2.4.1__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.
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PKG-INFO +4 -1
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PyNiteFEA.egg-info/PKG-INFO +4 -1
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Member3D.py +15 -15
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/PhysMember.py +15 -15
- {pynitefea-2.4.0 → pynitefea-2.4.1}/README.md +3 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/setup.py +1 -1
- {pynitefea-2.4.0 → pynitefea-2.4.1}/LICENSE +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PyNiteFEA.egg-info/SOURCES.txt +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PyNiteFEA.egg-info/dependency_links.txt +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PyNiteFEA.egg-info/requires.txt +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/PyNiteFEA.egg-info/top_level.txt +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Analysis.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/BeamSegY.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/BeamSegZ.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/FEModel3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/FixedEndReactions.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/LoadCombo.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/MainStyleSheet.css +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/MatFoundation.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Material.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Mesh.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Node3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Plate3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Quad3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Rendering.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Report_Template.html +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Reporting.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Section.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/ShearWall.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Spring3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Tri3D.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/VTKWriter.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/Visualization.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/Pynite/__init__.py +0 -0
- {pynitefea-2.4.0 → pynitefea-2.4.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyNiteFEA
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: A simple elastic 3D structural finite element library for Python.
|
|
5
5
|
Home-page: https://github.com/JWock82/Pynite.git
|
|
6
6
|
Author: D. Craig Brinck, PE, SE
|
|
@@ -121,6 +121,9 @@ Here's a list of projects that use Pynite:
|
|
|
121
121
|
* Phaenotyp (https://github.com/bewegende-Architektur/Phaenotyp) (https://youtu.be/shloSw9HjVI)
|
|
122
122
|
|
|
123
123
|
# What's New?
|
|
124
|
+
2.4.1
|
|
125
|
+
* Fixed a bug where enveloped results did not work if both tagged and untagged combos were in a model.
|
|
126
|
+
|
|
124
127
|
2.4.0
|
|
125
128
|
* Member `max` and `min` methods now return governing load combination along with the member max/min forces.
|
|
126
129
|
* Bug fix: Quadrilateral element displacements had corners swapped during VTK visualization. This was a relic from the old MITC4 formulation that has been corrected.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyNiteFEA
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: A simple elastic 3D structural finite element library for Python.
|
|
5
5
|
Home-page: https://github.com/JWock82/Pynite.git
|
|
6
6
|
Author: D. Craig Brinck, PE, SE
|
|
@@ -121,6 +121,9 @@ Here's a list of projects that use Pynite:
|
|
|
121
121
|
* Phaenotyp (https://github.com/bewegende-Architektur/Phaenotyp) (https://youtu.be/shloSw9HjVI)
|
|
122
122
|
|
|
123
123
|
# What's New?
|
|
124
|
+
2.4.1
|
|
125
|
+
* Fixed a bug where enveloped results did not work if both tagged and untagged combos were in a model.
|
|
126
|
+
|
|
124
127
|
2.4.0
|
|
125
128
|
* Member `max` and `min` methods now return governing load combination along with the member max/min forces.
|
|
126
129
|
* Bug fix: Quadrilateral element displacements had corners swapped during VTK visualization. This was a relic from the old MITC4 formulation that has been corrected.
|
|
@@ -1186,7 +1186,7 @@ class Member3D():
|
|
|
1186
1186
|
# Filter combos that contain *any* of the given tags
|
|
1187
1187
|
combo_names = [
|
|
1188
1188
|
name for name, combo in self.model.load_combos.items()
|
|
1189
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1189
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1190
1190
|
]
|
|
1191
1191
|
|
|
1192
1192
|
Vmax_global = None # will store the global maximum across combos
|
|
@@ -1255,7 +1255,7 @@ class Member3D():
|
|
|
1255
1255
|
# Filter combos that contain *any* of the given tags
|
|
1256
1256
|
combo_names = [
|
|
1257
1257
|
name for name, combo in self.model.load_combos.items()
|
|
1258
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1258
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1259
1259
|
]
|
|
1260
1260
|
|
|
1261
1261
|
Vmin_global = None # will store the global minimum across combos
|
|
@@ -1319,7 +1319,7 @@ class Member3D():
|
|
|
1319
1319
|
combo_names = [combo_name]
|
|
1320
1320
|
else:
|
|
1321
1321
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1322
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
1322
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
1323
1323
|
|
|
1324
1324
|
fig, ax = Member3D.__plt.subplots()
|
|
1325
1325
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -1488,7 +1488,7 @@ class Member3D():
|
|
|
1488
1488
|
# Filter combos that contain *any* of the given tags
|
|
1489
1489
|
combo_names = [
|
|
1490
1490
|
name for name, combo in self.model.load_combos.items()
|
|
1491
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1491
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1492
1492
|
]
|
|
1493
1493
|
|
|
1494
1494
|
Mmax_global = None # will store the global maximum across combos
|
|
@@ -1560,7 +1560,7 @@ class Member3D():
|
|
|
1560
1560
|
# Filter combos that contain *any* of the given tags
|
|
1561
1561
|
combo_names = [
|
|
1562
1562
|
name for name, combo in self.model.load_combos.items()
|
|
1563
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1563
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1564
1564
|
]
|
|
1565
1565
|
|
|
1566
1566
|
Mmin_global = None # will store the global minimum across combos
|
|
@@ -1628,7 +1628,7 @@ class Member3D():
|
|
|
1628
1628
|
combo_names = [combo_name]
|
|
1629
1629
|
else:
|
|
1630
1630
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1631
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
1631
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
1632
1632
|
|
|
1633
1633
|
fig, ax = Member3D.__plt.subplots()
|
|
1634
1634
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -1774,7 +1774,7 @@ class Member3D():
|
|
|
1774
1774
|
else:
|
|
1775
1775
|
combo_names = [
|
|
1776
1776
|
name for name, combo in self.model.load_combos.items()
|
|
1777
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1777
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1778
1778
|
]
|
|
1779
1779
|
|
|
1780
1780
|
# Track global maximum torsion across all combos
|
|
@@ -1839,7 +1839,7 @@ class Member3D():
|
|
|
1839
1839
|
else:
|
|
1840
1840
|
combo_names = [
|
|
1841
1841
|
name for name, combo in self.model.load_combos.items()
|
|
1842
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
1842
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
1843
1843
|
]
|
|
1844
1844
|
|
|
1845
1845
|
# Track global minimum torsion across all combos
|
|
@@ -1899,7 +1899,7 @@ class Member3D():
|
|
|
1899
1899
|
combo_names = [combo_name]
|
|
1900
1900
|
else:
|
|
1901
1901
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1902
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
1902
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
1903
1903
|
|
|
1904
1904
|
fig, ax = Member3D.__plt.subplots()
|
|
1905
1905
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -2020,7 +2020,7 @@ class Member3D():
|
|
|
2020
2020
|
# If tags are provided, gather all combos that match ANY of the tags
|
|
2021
2021
|
combo_names = [
|
|
2022
2022
|
name for name, combo in self.model.load_combos.items()
|
|
2023
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
2023
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
2024
2024
|
]
|
|
2025
2025
|
|
|
2026
2026
|
# Track the global maximum axial force across all combos
|
|
@@ -2085,7 +2085,7 @@ class Member3D():
|
|
|
2085
2085
|
# If tags are provided, gather all combos that match ANY of the tags
|
|
2086
2086
|
combo_names = [
|
|
2087
2087
|
name for name, combo in self.model.load_combos.items()
|
|
2088
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
2088
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
2089
2089
|
]
|
|
2090
2090
|
|
|
2091
2091
|
# Track the global minimum axial force across all combos
|
|
@@ -2145,7 +2145,7 @@ class Member3D():
|
|
|
2145
2145
|
combo_names = [combo_name]
|
|
2146
2146
|
else:
|
|
2147
2147
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
2148
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
2148
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
2149
2149
|
|
|
2150
2150
|
fig, ax = Member3D.__plt.subplots()
|
|
2151
2151
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -2313,7 +2313,7 @@ class Member3D():
|
|
|
2313
2313
|
else:
|
|
2314
2314
|
combo_names = [
|
|
2315
2315
|
name for name, combo in self.model.load_combos.items()
|
|
2316
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
2316
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
2317
2317
|
]
|
|
2318
2318
|
|
|
2319
2319
|
# Track global maximum deflection across all combos
|
|
@@ -2385,7 +2385,7 @@ class Member3D():
|
|
|
2385
2385
|
else:
|
|
2386
2386
|
combo_names = [
|
|
2387
2387
|
name for name, combo in self.model.load_combos.items()
|
|
2388
|
-
if any(tag in combo.combo_tags for tag in combo_tags)
|
|
2388
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)
|
|
2389
2389
|
]
|
|
2390
2390
|
|
|
2391
2391
|
# Track global minimum deflection across all combos
|
|
@@ -2452,7 +2452,7 @@ class Member3D():
|
|
|
2452
2452
|
combo_names = [combo_name]
|
|
2453
2453
|
else:
|
|
2454
2454
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
2455
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
2455
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
2456
2456
|
|
|
2457
2457
|
fig, ax = Member3D.__plt.subplots()
|
|
2458
2458
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -240,7 +240,7 @@ class PhysMember(Member3D):
|
|
|
240
240
|
combo_names = [combo_tags]
|
|
241
241
|
else:
|
|
242
242
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
243
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
243
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
244
244
|
|
|
245
245
|
Vmax = None
|
|
246
246
|
governing_combo = None
|
|
@@ -282,7 +282,7 @@ class PhysMember(Member3D):
|
|
|
282
282
|
combo_names = [combo_tags]
|
|
283
283
|
else:
|
|
284
284
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
285
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
285
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
286
286
|
|
|
287
287
|
Vmin = None
|
|
288
288
|
governing_combo = None
|
|
@@ -326,7 +326,7 @@ class PhysMember(Member3D):
|
|
|
326
326
|
combo_names = [combo_name]
|
|
327
327
|
else:
|
|
328
328
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
329
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
329
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
330
330
|
|
|
331
331
|
fig, ax = PhysMember.__plt.subplots()
|
|
332
332
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -472,7 +472,7 @@ class PhysMember(Member3D):
|
|
|
472
472
|
combo_names = [combo_tags]
|
|
473
473
|
else:
|
|
474
474
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
475
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
475
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
476
476
|
|
|
477
477
|
Mmax = None
|
|
478
478
|
governing_combo = None
|
|
@@ -514,7 +514,7 @@ class PhysMember(Member3D):
|
|
|
514
514
|
combo_names = [combo_tags]
|
|
515
515
|
else:
|
|
516
516
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
517
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
517
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
518
518
|
|
|
519
519
|
Mmin = None
|
|
520
520
|
governing_combo = None
|
|
@@ -558,7 +558,7 @@ class PhysMember(Member3D):
|
|
|
558
558
|
combo_names = [combo_name]
|
|
559
559
|
else:
|
|
560
560
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
561
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
561
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
562
562
|
|
|
563
563
|
fig, ax = PhysMember.__plt.subplots()
|
|
564
564
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -703,7 +703,7 @@ class PhysMember(Member3D):
|
|
|
703
703
|
combo_names = [combo_tags]
|
|
704
704
|
else:
|
|
705
705
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
706
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
706
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
707
707
|
|
|
708
708
|
Tmax = None
|
|
709
709
|
governing_combo = None
|
|
@@ -741,7 +741,7 @@ class PhysMember(Member3D):
|
|
|
741
741
|
combo_names = [combo_tags]
|
|
742
742
|
else:
|
|
743
743
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
744
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
744
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
745
745
|
|
|
746
746
|
Tmin = None
|
|
747
747
|
governing_combo = None
|
|
@@ -781,7 +781,7 @@ class PhysMember(Member3D):
|
|
|
781
781
|
combo_names = [combo_name]
|
|
782
782
|
else:
|
|
783
783
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
784
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
784
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
785
785
|
|
|
786
786
|
fig, ax = PhysMember.__plt.subplots()
|
|
787
787
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -911,7 +911,7 @@ class PhysMember(Member3D):
|
|
|
911
911
|
combo_names = [combo_tags]
|
|
912
912
|
else:
|
|
913
913
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
914
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
914
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
915
915
|
|
|
916
916
|
Pmax = None
|
|
917
917
|
governing_combo = None
|
|
@@ -949,7 +949,7 @@ class PhysMember(Member3D):
|
|
|
949
949
|
combo_names = [combo_tags]
|
|
950
950
|
else:
|
|
951
951
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
952
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
952
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
953
953
|
|
|
954
954
|
Pmin = None
|
|
955
955
|
governing_combo = None
|
|
@@ -989,7 +989,7 @@ class PhysMember(Member3D):
|
|
|
989
989
|
combo_names = [combo_name]
|
|
990
990
|
else:
|
|
991
991
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
992
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
992
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
993
993
|
|
|
994
994
|
fig, ax = PhysMember.__plt.subplots()
|
|
995
995
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -1125,7 +1125,7 @@ class PhysMember(Member3D):
|
|
|
1125
1125
|
combo_names = [combo_tags]
|
|
1126
1126
|
else:
|
|
1127
1127
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1128
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
1128
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
1129
1129
|
|
|
1130
1130
|
dmax = None
|
|
1131
1131
|
governing_combo = None
|
|
@@ -1165,7 +1165,7 @@ class PhysMember(Member3D):
|
|
|
1165
1165
|
combo_names = [combo_tags]
|
|
1166
1166
|
else:
|
|
1167
1167
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1168
|
-
if any(tag in combo.combo_tags for tag in combo_tags)]
|
|
1168
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_tags)]
|
|
1169
1169
|
|
|
1170
1170
|
dmin = None
|
|
1171
1171
|
governing_combo = None
|
|
@@ -1229,7 +1229,7 @@ class PhysMember(Member3D):
|
|
|
1229
1229
|
combo_names = [combo_name]
|
|
1230
1230
|
else:
|
|
1231
1231
|
combo_names = [name for name, combo in self.model.load_combos.items()
|
|
1232
|
-
if any(tag in combo.combo_tags for tag in combo_name)]
|
|
1232
|
+
if combo.combo_tags is not None and any(tag in combo.combo_tags for tag in combo_name)]
|
|
1233
1233
|
|
|
1234
1234
|
fig, ax = PhysMember.__plt.subplots()
|
|
1235
1235
|
ax.axhline(0, color='black', lw=1)
|
|
@@ -68,6 +68,9 @@ Here's a list of projects that use Pynite:
|
|
|
68
68
|
* Phaenotyp (https://github.com/bewegende-Architektur/Phaenotyp) (https://youtu.be/shloSw9HjVI)
|
|
69
69
|
|
|
70
70
|
# What's New?
|
|
71
|
+
2.4.1
|
|
72
|
+
* Fixed a bug where enveloped results did not work if both tagged and untagged combos were in a model.
|
|
73
|
+
|
|
71
74
|
2.4.0
|
|
72
75
|
* Member `max` and `min` methods now return governing load combination along with the member max/min forces.
|
|
73
76
|
* Bug fix: Quadrilateral element displacements had corners swapped during VTK visualization. This was a relic from the old MITC4 formulation that has been corrected.
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setuptools.setup(
|
|
7
7
|
name="PyNiteFEA",
|
|
8
|
-
version="2.4.
|
|
8
|
+
version="2.4.1",
|
|
9
9
|
author="D. Craig Brinck, PE, SE",
|
|
10
10
|
author_email="Building.Code@outlook.com",
|
|
11
11
|
description="A simple elastic 3D structural finite element library for Python.",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|