pynite-tools: A series of functions that enhance the capabilities of PyniteFEA.
Project description
Pynite Tools
Super-charge your Pynite workflows
PyniteFEA is excellent and it is generally design-ready. The functions in this package give Pynite powers it does not currently have (such as bulk results export and exporting analysis-ready models to JSON).
These are opinionated tools that are not intended to be part of the core PyniteFEA package but instead enhance the eco-system around Pynite for production-level engineering work.
Modules included:
visualize: Plot yourFEModel3Dusing plotly (previously in thepynite_plotlypackage)reports: Quickly export node and member results in structured dictionaries (previously in thepynite_reportingpackage)serialize: Export and importFEModel3Dobjects to JSONcombos: Convenience function for bulk-adding load combinations toFEModel3Dobjects
Installation
pip install pynite-tools
Dependencies
- Python >= 3.11
PyniteFEA>= 1.1.0numpy>= 2.0.0deepmerge>= 2.0.0pydantic>= 2.0.0
Examples: visualize
from Pynite import FEModel3D
import pynite_tools.visualize as pv
model = FEModel3D(...) # Build your model
# pv.plot_model is the "express" function
pv.plot_model(model, combo_name="LC1")
# pv.Renderer is a class that gives you detailed control of the plot
model_renderer = pv.Renderer(model, combo_name="LC1")
## For example...
model_renderer.annotation_size = 5
model_renderer.window_width = 1200
model_renderer.window_height = 1000
## Now render the model
model_renderer.render_model()
Examples: reports
from Pynite import FEModel3D
import pynite_tools.reporting as pr
model = FEModel3D(...) # Build your model here
# Selected load combinations in your model
lcs = [
# 'LC1',
'LC2',
'LC3',
# 'LC4',
# 'LC5',
]
# All the below functions optionally take a list of load combos
# so you can select which combos to extract
## Additionally, each function accepts a results_key parameter.
## This optional parameter is set to a default str value, unique for each function.
## When you set the results_key=None, then your results tree will be one level shallower.
# Return reactions for all supports, all load combos
reactions = pr.extract_node_reactions(
model,
# load_combinations=lcs,
# results_key=None
)
# Returns all node deflections for all load combos
node_displacements = pr.extract_node_displacements(
model,
# load_combinations=lcs,
# results_key=None
)
# Return force arrays for all members, all load combos
force_arrays = pr.extract_member_arrays(
model,
# n_points=1000,
# as_lists=False,
# load_combinations=lcs,
# results_key=None
)
# Return force min/max/absmax envelope for all members, all load combos
# Values will not necessarily be at concurrent locations
forces_minmax = pr.extract_member_envelopes(
model,
# load_combinations=lcs,
# results_key=None
)
# Return force min/max envelope for each span in all members, all load combos
forces_minmax_spans = pr.extract_span_envelopes(
model,
# load_combinations=lcs,
# results_key=None
)
# Return forces for all load combos at specific locations along the global member length
forces_at_locations = pr.extract_member_actions_by_location(
model,
force_extraction_locations={"Member01": [0, 2000, 3600]},
# load_combinations=lcs,
# results_key=None
)
# Return forces for all load combos at 1/4 points for *each span* of the given members
forces_at_location_ratios = pr.extract_member_actions_by_location(
model,
force_extraction_ratios={"Member05": [0.25, 0.5, 0.75]},
by_span=True,
# load_combinations=lcs,
# results_key=None
)
# Merge result trees into a single tree for serializing to JSON
merged_tree = pr.merge_result_trees([force_arrays, forces_minmax, forces_at_locations])
Examples: serialize
import pynite_tools.serialize as ps
from Pynite import FEModel3D
model = FEModel3D(...) # Build your model
# Dumping/serializing functions
## ps.dump
with open('model.json', 'w') as file:
ps.dump(model, file)
## ps.dumps
json_str = ps.dumps(model)
## ps.dump_dict
json_dict = ps.dump_dict(model)
## ps.to_json (same as ps.dump but in one line)
ps.to_json(model, "model.json")
# Loading/de-serializing functions
## ps.load
with open('model.json', 'r') as file:
remodel = ps.load(file)
## ps.loads
remodel = ps.loads(json_str)
## ps.load_dict
remodel = ps.load_dict(json_dict)
## ps.from_json (same as ps.load but in one line)
remodel = ps.from_json("model.json")
### Analyze your model!
remodel.analyze(check_statics=True)
### Confirm you get the same results from your original model!
model.analyze(check_statics=True)
Examples: combos
import json
from Pynite import FEModel3D
import pynite_tools.combos as pc
model = FEModel3D(...)
# Load up some load combinations on disk
with open("load_combo_library/current_combos.json", 'r') as file:
load_combos = json.load(file)
# Add combos by modifying the model in place
pc.model_add_combos(load_combos, model)
# Add combos by returning a copy of the modified model
model = pc.model_add_combos(load_combos, model, as_copy=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pynite_tools-0.4.0.tar.gz.
File metadata
- Download URL: pynite_tools-0.4.0.tar.gz
- Upload date:
- Size: 85.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
431aab3b05da714eed733978864bc7420e8d512d5910665f2f2d3dbb9cabdb91
|
|
| MD5 |
81699fb638becde9b230f2d10c4914eb
|
|
| BLAKE2b-256 |
25b7a4808c7854f7d2f74b1bdf14475f6a77ae1246f421f9af139ec704db7eff
|
File details
Details for the file pynite_tools-0.4.0-py3-none-any.whl.
File metadata
- Download URL: pynite_tools-0.4.0-py3-none-any.whl
- Upload date:
- Size: 30.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54a078f04efb575fe94006ce666dfa2d6dd747c93c5e9ee4aff0773740ca339a
|
|
| MD5 |
ed40bc41370668da6f9aabf1f93fbaba
|
|
| BLAKE2b-256 |
01d9815573a6f8f8b4da27e41768b692c2ff4655e4f17b209e4e7c1000bab9b4
|