PyNite
PyNite copied to clipboard
Automatic subdivision of members with intermediate nodes
I'd love to see functionality where the solver automatically recognizes the presence of an intermediate node within the length of a member, and internally divides the member into smaller sub-members. With that functionality, an intermediate framing member will behave correctly, without having to subdivide the member by hand. This functionality is really nice to have in commercial solvers.
Definitely a feature I've been wanting to add. I've been slow to get to it knowing it will take a fair effort, and could cost some computational overhead if I don't do it right.
There definitely is. Is that what your code above does?
Yes it's a minimal working example to generate the example image above. I have not done extensive testing, but from the examples I have run, it is correctly breaking up members at intersections then correctly reassigning the relevant releases, distributed loads, and point loads.
I'm working on incorporating this into Node3D/Member3D/Model3D now. I'll come back with a link shortly.
I've put it up here: https://github.com/maderero/PyNite/tree/repair_model
Please try the example under Examples/Braced Frame - Repair Usage.py
This will create intersecting vertical and horizontal members. The added repair
method takes care of the subdivisions.
I am seeing some warnings coming out of the Visualizer (related to how I am breaking up the distributed loads):
.../PyNite/PyNite/Visualization.py:1173: RuntimeWarning: divide by zero encountered in double_scalars
step = loadLength/num_steps
.../PyNite/PyNite/Visualization.py:1179: RuntimeWarning: invalid value encountered in double_scalars
position = (position1[0] + i*step*lineDirCos[0], position1[1] + i*step*lineDirCos[1], position1[2] + i*step*lineDirCos[2])
.../PyNite/PyNite/Visualization.py:1182: RuntimeWarning: invalid value encountered in double_scalars
length = length1 + (length2 - length1)/loadLength*i*step
Any ideas?
I just pushed a commit d1b03ed
that substantially reduces the runtime.
An update on this feature:
This is my current focus for PyNite. I think I've found a simple way to implement this with minimal code using class inheritance to nest members within other specialized members. I need to modify a few more parts of PyNite, and then run tests and debug, but I expect to have this done very soon.
Update #2:
I think I've got it implemented. I'm starting to run tests on this feature. Once I'm done testing it I'll roll it out in a new version.
This feature is now complete as of v0.0.67.