Week 8 & 9 Beam_3d class
17 Jul 2018I started implementing Beam_3d
class which can be used to find Shear force, Bending moment, Slope, Deflection and other few things for the Beam object. PR #14883 was created for this.
I implemented Beam_3d class using this paper as a reference. Actually, like Beam class, it uses a few sets of equations to find certain quantities:
-
To find Shear force and Bending moment
where [N, Qy, Qz] and [Mx, My, Mz] are the shear force and bending moment along x-y-z-axes respectively (q and m are applied load and moment).
-
To find Slope and Deflection:
where [wx, wy, wz] and [θx, θy, θz] are deflection and slope along three axes respectively. Example for the API:
There is a beam of l meters long. A constant distributed load of magnitude q is applied along the y-axis from start till the end of the beam. A constant distributed moment of magnitude m is also applied along the z-axis from start till the end of the beam. Beam is fixed at both of its end. So, deflection of the beam at the both ends is restricted.
>>> from sympy.physics.continuum_mechanics.beam import Beam_3d
>>> from sympy import symbols
>>> l, E, G, I, A = symbols('l, E, G, I, A')
>>> b = Beam_3d(l, E, G, I, A)
>>> b.apply_support(0, "fixed")
>>> b.apply_support(l, "fixed")
>>> q, m = symbols('q, m')
>>> b.apply_load(q, dir="y")
>>> b.apply_moment_load(m, dir="z")
>>> b.shear_force()
[0, -q*x, 0]
>>> b.bending_moment()
[0, 0, -m*x + q*x**2/2]
>>> b.solve_slope_deflection()
>>> b.slope()
[0, 0, l*x*(-l*q + 3*l*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)/(2*(A*G*l**2 + 12*E*I)) + 3*m)/(6*E*I)
+ q*x**3/(6*E*I) + x**2*(-l*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)/(2*(A*G*l**2 + 12*E*I))
- m)/(2*E*I)]
>>> b.deflection()
[0, -l**2*q*x**2/(12*E*I) + l**2*x**2*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)/(8*E*I*(A*G*l**2 + 12*E*I))
+ l*m*x**2/(4*E*I) - l*x**3*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)/(12*E*I*(A*G*l**2 + 12*E*I)) - m*x**3/(6*E*I)
+ q*x**4/(24*E*I) + l*x*(A*G*l**2*q - 2*A*G*l*m + 12*E*I*q)/(2*A*G*(A*G*l**2 + 12*E*I)) - q*x**2/(2*A*G), 0]
As this class is relatively new, it would require a few improvements in the future:
- As
Beam_3d
doesn’t useSingularityFunction
, I was unable to find a way to represent point load/moments. So for nowBeam_3d
only supports continous load (applied over the whole span length of beam). - Also, This class assumes that any kind of distributed load/moment is
applied throughout the span of a beam.
For now, after discussing it with Arihant, we decided to raise
NotImplementedError
in such cases.
Next Week
- Make sure PR #14883 gets merge by the end of next week.
- Start implementing plotting methods for Beam class.