test_truss.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from sympy.core.symbol import Symbol, symbols
  2. from sympy.physics.continuum_mechanics.truss import Truss
  3. from sympy import sqrt
  4. def test_truss():
  5. A = Symbol('A')
  6. B = Symbol('B')
  7. C = Symbol('C')
  8. AB, BC, AC = symbols('AB, BC, AC')
  9. P = Symbol('P')
  10. t = Truss()
  11. assert t.nodes == []
  12. assert t.node_labels == []
  13. assert t.node_positions == []
  14. assert t.members == {}
  15. assert t.loads == {}
  16. assert t.supports == {}
  17. assert t.reaction_loads == {}
  18. assert t.internal_forces == {}
  19. # testing the add_node method
  20. t.add_node((A, 0, 0), (B, 2, 2), (C, 3, 0))
  21. assert t.nodes == [(A, 0, 0), (B, 2, 2), (C, 3, 0)]
  22. assert t.node_labels == [A, B, C]
  23. assert t.node_positions == [(0, 0), (2, 2), (3, 0)]
  24. assert t.loads == {}
  25. assert t.supports == {}
  26. assert t.reaction_loads == {}
  27. # testing the remove_node method
  28. t.remove_node(C)
  29. assert t.nodes == [(A, 0, 0), (B, 2, 2)]
  30. assert t.node_labels == [A, B]
  31. assert t.node_positions == [(0, 0), (2, 2)]
  32. assert t.loads == {}
  33. assert t.supports == {}
  34. t.add_node((C, 3, 0))
  35. # testing the add_member method
  36. t.add_member((AB, A, B), (BC, B, C), (AC, A, C))
  37. assert t.members == {AB: [A, B], BC: [B, C], AC: [A, C]}
  38. assert t.internal_forces == {AB: 0, BC: 0, AC: 0}
  39. # testing the remove_member method
  40. t.remove_member(BC)
  41. assert t.members == {AB: [A, B], AC: [A, C]}
  42. assert t.internal_forces == {AB: 0, AC: 0}
  43. t.add_member((BC, B, C))
  44. D, CD = symbols('D, CD')
  45. # testing the change_label methods
  46. t.change_node_label((B, D))
  47. assert t.nodes == [(A, 0, 0), (D, 2, 2), (C, 3, 0)]
  48. assert t.node_labels == [A, D, C]
  49. assert t.loads == {}
  50. assert t.supports == {}
  51. assert t.members == {AB: [A, D], BC: [D, C], AC: [A, C]}
  52. t.change_member_label((BC, CD))
  53. assert t.members == {AB: [A, D], CD: [D, C], AC: [A, C]}
  54. assert t.internal_forces == {AB: 0, CD: 0, AC: 0}
  55. # testing the apply_load method
  56. t.apply_load((A, P, 90), (A, P/4, 90), (A, 2*P,45), (D, P/2, 90))
  57. assert t.loads == {A: [[P, 90], [P/4, 90], [2*P, 45]], D: [[P/2, 90]]}
  58. assert t.loads[A] == [[P, 90], [P/4, 90], [2*P, 45]]
  59. # testing the remove_load method
  60. t.remove_load((A, P/4, 90))
  61. assert t.loads == {A: [[P, 90], [2*P, 45]], D: [[P/2, 90]]}
  62. assert t.loads[A] == [[P, 90], [2*P, 45]]
  63. # testing the apply_support method
  64. t.apply_support((A, "pinned"), (D, "roller"))
  65. assert t.supports == {A: 'pinned', D: 'roller'}
  66. assert t.reaction_loads == {}
  67. assert t.loads == {A: [[P, 90], [2*P, 45], [Symbol('R_A_x'), 0], [Symbol('R_A_y'), 90]], D: [[P/2, 90], [Symbol('R_D_y'), 90]]}
  68. # testing the remove_support method
  69. t.remove_support(A)
  70. assert t.supports == {D: 'roller'}
  71. assert t.reaction_loads == {}
  72. assert t.loads == {A: [[P, 90], [2*P, 45]], D: [[P/2, 90], [Symbol('R_D_y'), 90]]}
  73. t.apply_support((A, "pinned"))
  74. # testing the solve method
  75. t.solve()
  76. assert t.reaction_loads['R_A_x'] == -sqrt(2)*P
  77. assert t.reaction_loads['R_A_y'] == -sqrt(2)*P - P
  78. assert t.reaction_loads['R_D_y'] == -P/2
  79. assert t.internal_forces[AB]/P == 0
  80. assert t.internal_forces[CD] == 0
  81. assert t.internal_forces[AC] == 0