JWock82 / Pynite

A 3D structural engineering finite element library for Python.
MIT License
454 stars 93 forks source link

Incorrect (Zero) Reaction Observed in Z-Direction for Cantilevered Beam with Spring Supports #175

Closed njhoffman11 closed 12 months ago

njhoffman11 commented 1 year ago

Describe the bug I have created a model of a cantilevered beam with spring supports in the Y and Z directions along the length of the beam and loads in the Y and Z directions on the end. I observe that the displacements in the Y and Z directions are the same, as expected, but the reaction in the Z direction is 0. Obviously, there should be a non-zero reaction in the Z direction. I have verified that I am running the latest version 0.0.80 of PyNiteFEA.

To Reproduce from PyNite import FEModel3D

beam = FEModel3D()

beam.add_node('N1', 0, 0, 0) beam.add_node('N2', 20, 0, 0) beam.add_node('N3', 40, 0, 0) beam.add_node('N4', 60, 0, 0) beam.add_node('N5', 80, 0, 0) beam.add_node('N6', 100, 0, 0) beam.add_node('N7', 120, 0, 0) beam.add_node('N8', 140, 0, 0) beam.add_node('N9', 160, 0, 0)

E = 29000 # Modulus of elasticity (ksi) G = 11200 # Shear modulus of elasticity (ksi) nu = 0.3 # Poisson's ratio rho = 2.836e-4 # Density (kci) beam.add_material('Steel', E, G, nu, rho)

beam.add_member('M1', 'N1', 'N9', 'Steel', 100, 100, 250, 20)

beam.def_support('N1', True, True, True, True, True, True) # Fixed Support at the base

for i in range(1, 10): beam.def_support_spring('N' + str(i), 'DY', 10, direction=None) for i in range(1, 10): beam.def_support_spring('N' + str(i), 'DZ', 10, direction=None)

beam.add_node_load('N9', 'FZ', -1) # Loads in the Y and Z directions at the end of the beam beam.add_node_load('N9', 'FY', -1)

beam.analyze()

print('Y Reaction at N9:', beam.Nodes['N9'].RxnFY, 'kip') print('Z Reaction at N9:', beam.Nodes['N9'].RxnFZ, 'kip') print('Y Displacement at N9:', beam.Nodes['N9'].DY, 'in') print('Z Displacement at N9:', beam.Nodes['N9'].DZ, 'in')

from PyNite.Visualization import Renderer renderer = Renderer(beam) renderer.annotation_size = 6 renderer.deformed_shape = True renderer.deformed_scale = 100 renderer.render_loads = True renderer.render_model()

Expected behavior Reaction forces should be the same in the Y and Z directions.

Screenshots N/A

Additional context Running this code produces the following output:

Y Reaction at N9: {'Combo 1': -0.43234915558749026} kip Z Reaction at N9: {'Combo 1': 0.0} kip Y Displacement at N9: {'Combo 1': -0.043234915558749025} in Z Displacement at N9: {'Combo 1': -0.04323491555874857} in

ghost commented 12 months ago

Thanks for reporting this. I’ll have a closer look this weekend. I think I might know what’s going on here.

JWock82 commented 12 months ago

I've fixed this bug and released it as version 0.0.81. The program was only considering one spring support when calculating reactions. Note this only affected reaction calculations. Other calculations were correct.

Do you mind if I convert your code snippet into a unit test for PyNite to run in the future anytime a change is made to the program?

JWock82 commented 12 months ago

Fixed

njhoffman11 commented 12 months ago

Thanks, I pulled 0.0.81 and the results look correct now. Feel free to use my code as a unit test (most of it is copied from the documentation anyway).

On Sat, Oct 7, 2023 at 11:33 AM Craig @.***> wrote:

I've fixed this bug and released it as version 0.0.81. The program was only considering one spring support when calculating reactions. Note this only affected reaction calculations. Other calculations were correct.

Do you mind if I convert your code snippet into a unit test for PyNite to run in the future anytime a change is made to the program?

— Reply to this email directly, view it on GitHub https://github.com/JWock82/PyNite/issues/175#issuecomment-1751739801, or unsubscribe https://github.com/notifications/unsubscribe-auth/AK3UT73HNHG7MSPBJCXTSPDX6FY5DAVCNFSM6AAAAAA5UWYPE6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONJRG4ZTSOBQGE . You are receiving this because you authored the thread.Message ID: @.***>