test_arch.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from sympy.physics.continuum_mechanics.arch import Arch
  2. from sympy import Symbol, simplify
  3. x = Symbol('x')
  4. t = Symbol('t')
  5. def test_arch_init():
  6. a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
  7. assert a.get_loads == {'distributed': {}, 'concentrated': {}}
  8. assert a.reaction_force == {Symbol('R_A_x'):0, Symbol('R_A_y'):0, Symbol('R_B_x'):0, Symbol('R_B_y'):0}
  9. assert a.supports == {'left':'hinge', 'right':'hinge'}
  10. assert a.left_support == (0,0)
  11. assert a.right_support == (10,0)
  12. assert a.get_shape_eqn == 5 - ((x-5)**2)/5
  13. a = Arch((0,0),(10,1),crown_x=6)
  14. a.change_support_type(left_support='roller')
  15. a.add_member(0.5)
  16. assert a.supports == {'left':'roller', 'right':'hinge'}
  17. assert simplify(a.get_shape_eqn) == simplify(9/5 - (x - 6)**2/20)
  18. def test_arch_support():
  19. a = Arch((0,0),(40,0),crown_x=20,crown_y=12)
  20. a.apply_load(-1,'C',8,150,angle=270)
  21. a.apply_load(0,'D',start=20,end=40,mag=-4)
  22. a.solve()
  23. assert abs(a.reaction_force[Symbol("R_A_x")] - 83.33333333333333) < 10e-12
  24. assert abs(a.reaction_force[Symbol("R_B_y")] - 90.00000000000000) < 10e-12
  25. assert abs(a.reaction_force[Symbol("R_B_x")] + 83.33333333333333) < 10e-12
  26. assert abs(a.reaction_force[Symbol("R_A_y")] - 140.00000000000000) < 10e-12
  27. def test_arch_member():
  28. a = Arch((0,0),(40,0),crown_x=20,crown_y=15)
  29. a.change_support_type(right_support='roller')
  30. a.add_member(0)
  31. a.apply_load(-1,'D',start=12,mag=3,angle=270)
  32. a.apply_load(-1,'E',start=6,mag=4,angle=270)
  33. a.apply_load(-1,'C',start=30,mag=5,angle=270)
  34. a.solve()
  35. assert a.reaction_force[Symbol("R_A_x")] == 0
  36. assert abs(a.reaction_force[Symbol("R_A_y")] - 6.750000000000000) < 10e-12
  37. assert a.reaction_force[Symbol("R_B_x")] == 0
  38. assert abs(a.reaction_force[Symbol("R_B_y")] - 5.250000000000000) < 10e-12
  39. def test_symbol_magnitude():
  40. a = Arch((0,0),(16,0),crown_x=8,crown_y=5)
  41. a.apply_load(0,'C',start=3,end=5,mag=t)
  42. a.solve()
  43. assert a.reaction_force[Symbol("R_A_x")] == -(4*t)/5
  44. assert a.reaction_force[Symbol("R_A_y")] == -(3*t)/2
  45. assert a.reaction_force[Symbol("R_B_x")] == (4*t)/5
  46. assert a.reaction_force[Symbol("R_B_y")] == -t/2
  47. assert a.bending_moment_at(4) == -5*t/2
  48. def test_forces():
  49. a = Arch((0,0),(40,0),crown_x=20,crown_y=12)
  50. a.apply_load(-1,'C',8,150,angle=270)
  51. a.apply_load(0,'D',start=20,end=40,mag=-4)
  52. a.solve()
  53. assert abs(a.axial_force_at(7.999999999999999)-149.430523405935) < 1e-12
  54. assert abs(a.shear_force_at(7.999999999999999)-64.9227473161196) < 1e-12