PyNite icon indicating copy to clipboard operation
PyNite copied to clipboard

Automatic subdivision of members with intermediate nodes

Open trevdna opened this issue 2 years ago • 7 comments

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.

trevdna avatar Sep 11 '21 21:09 trevdna

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.

JWock82 avatar Sep 16 '21 17:09 JWock82

Hey is there any interest in this still? image

Code here: repair_mwe.py

maderero avatar Mar 23 '22 21:03 maderero

There definitely is. Is that what your code above does?

JWock82 avatar Mar 23 '22 21:03 JWock82

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.

maderero avatar Mar 23 '22 22:03 maderero

I'm working on incorporating this into Node3D/Member3D/Model3D now. I'll come back with a link shortly.

maderero avatar Mar 24 '22 16:03 maderero

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?

maderero avatar Mar 24 '22 22:03 maderero

I just pushed a commit d1b03ed that substantially reduces the runtime.

maderero avatar Mar 28 '22 17:03 maderero

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.

JWock82 avatar Sep 09 '22 01:09 JWock82

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.

JWock82 avatar Sep 10 '22 16:09 JWock82

This feature is now complete as of v0.0.67.

JWock82 avatar Sep 13 '22 12:09 JWock82