anaStruct
anaStruct copied to clipboard
Axial Load Applied at the Location of an Inclined Roller Support Gives Incorrect Results
If an axial load is applied at the same node at which an inclined roller support is located, then the results are blatantly wrong, with sum of loads != sum of reactions.
Example script:
from anastruct.fem.system import SystemElements
sys = SystemElements(mesh=250)
sys.add_element(location=[(0.0, 0), (1.0, 0)], EA=356000.0, EI=1332.0000000000002)
sys.add_support_hinged(node_id=sys.find_node_id((0, 0)))
sys.add_support_roll(node_id=sys.find_node_id((1.0, 0)), angle=45)
sys.point_load(Fx=10.0, Fy=0, node_id=2)
sys.solve()
sys.validate()
sys.show_reaction_force()
Which results in the following:
Note that sum of reactions = 30, though total applied load = 10.
I really don't think axial forces on supports will be possible in current implementation as both modify the system matrix. When we place this force a bit behind/before the support we do have equilibrium.
Maybe I should add a warning when such a thing is tried by a user. :thinking:
from anastruct.fem.system import SystemElements
sys = SystemElements(mesh=250)
sys.add_element(location=[(0.0, 0), (.99, 0)], EA=1e9, EI=1e6)
sys.add_element(location=[(.99, 0), (1, 0)], EA=1e9, EI=1e6)
sys.add_support_hinged(node_id=1)
sys.add_support_roll(node_id=3, angle=45)
sys.point_load(Fx=10.0, Fy=0, node_id=2)
I can't imagine it's a remotely common scenario. We were just doing some testing, and found the issue. I agree with you - probably just adding a warning or error for the scenario is the right answer. My ticket is just that it gives plainly incorrect results right now.