PyNite icon indicating copy to clipboard operation
PyNite copied to clipboard

Changing member to Timoshenko beam

Open jrrifareal opened this issue 5 months ago • 8 comments

Changes:

  • Stiffness matrix of Member3D was modified to account for shear deformation. A derivation is included.
  • Fixed-end reactions were also modified. Derivations were also included.
  • Section was modified to accept optional arguments for shear correction factors

Everything still defaults to Euler-Bernoulli beam unless shear_deformable=True is set (see example). The stiffness matrix and fixed-end reactions reduce to Euler-Bernoulli beam if shear_deformable=False.

If you do not like the idea of directly changing the formulas in Member3D, I have created another version which has a new class that inherits to Member3D and just overrides the stiffness and fixed-end reaction calculation.

Thanks.

jrrifareal avatar Nov 13 '25 14:11 jrrifareal

Thanks for this contribution! I am currently reviewing another pull request that includes dynamic analysis. When I'm done with that review I'll review this one. It's great to see contributions like this coming from the community. Pynite's capabilities are growing very quickly with help from individuals like you.

JWock82 avatar Nov 13 '25 15:11 JWock82

Looks good. I look forward to checking the modal analysis again after this has been merged to see if it improves the match with the OpenSees sample modal analysis.

UPDATE: I have checked the OpenSees elementBeamColumn and I think it doesn't account for shear (so that isn't the reason for discrepancies with higher modes. They have a different Timoshenko beam element for that.

boustrephon avatar Nov 16 '25 15:11 boustrephon

@boustrephon from what I’ve reviewed, it seemed that you had Iz and Iy mixed up. Iz is the strong axis. That might be the source of your discrepancy.

JWock82 avatar Nov 16 '25 15:11 JWock82

@boustrephon also in Pynite the default vertical axis is Y rather than Z.

JWock82 avatar Nov 16 '25 15:11 JWock82

@boustrephon also in Pynite the default vertical axis is Y rather than Z.

Oh dear. I think I knew about Y being the default, but I wanted to match the way that Opensees had done it. I did note in one of my checks that I needed to change major and minor. Did I make mistakes that affect the code, or only the example? Do I need to fix anything?

Incidentally, even if the default is Y, which I think I knew, does that mean there are problems with assigning Z as vertical.

boustrephon avatar Nov 16 '25 15:11 boustrephon

I’ve altered it in the code already and I’ll get it corrected in the example too before the next release. I’m working through all the modal analysis code one more time and reformatting it to be consistent with the rest of Pynite’s conventions. I should note that I removed the M trace output from the logs. From what I can tell, that output is meaningless when a consistent mass matrix is used.

JWock82 avatar Nov 16 '25 15:11 JWock82

I’ve altered it in the code already and I’ll get it corrected in the example too before the next release. I’m working through all the modal analysis code one more time and reformatting it to be consistent with the rest of Pynite’s conventions. I should note that I removed the M trace output from the logs. From what I can tell, that output is meaningless when a consistent mass matrix is used.

Yes, sorry about leaving that trace in. I thought I had removed it.

boustrephon avatar Nov 16 '25 15:11 boustrephon

No apologies necessary. I appreciate your contribution. It’s very helpful. Something I’ve wanted to add for a long time but just didn’t have time to prioritize. I’m glad you found time to do it.

JWock82 avatar Nov 16 '25 15:11 JWock82