test_truss.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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)
  21. t.add_node(B, 2, 2)
  22. t.add_node(C, 3, 0)
  23. assert t.nodes == [(A, 0, 0), (B, 2, 2), (C, 3, 0)]
  24. assert t.node_labels == [A, B, C]
  25. assert t.node_positions == [(0, 0), (2, 2), (3, 0)]
  26. assert t.loads == {}
  27. assert t.supports == {}
  28. assert t.reaction_loads == {}
  29. # testing the remove_node method
  30. t.remove_node(C)
  31. assert t.nodes == [(A, 0, 0), (B, 2, 2)]
  32. assert t.node_labels == [A, B]
  33. assert t.node_positions == [(0, 0), (2, 2)]
  34. assert t.loads == {}
  35. assert t.supports == {}
  36. t.add_node(C, 3, 0)
  37. # testing the add_member method
  38. t.add_member(AB, A, B)
  39. t.add_member(BC, B, C)
  40. t.add_member(AC, A, C)
  41. assert t.members == {AB: [A, B], BC: [B, C], AC: [A, C]}
  42. assert t.internal_forces == {AB: 0, BC: 0, AC: 0}
  43. # testing the remove_member method
  44. t.remove_member(BC)
  45. assert t.members == {AB: [A, B], AC: [A, C]}
  46. assert t.internal_forces == {AB: 0, AC: 0}
  47. t.add_member(BC, B, C)
  48. D, CD = symbols('D, CD')
  49. # testing the change_label methods
  50. t.change_node_label(B, D)
  51. assert t.nodes == [(A, 0, 0), (D, 2, 2), (C, 3, 0)]
  52. assert t.node_labels == [A, D, C]
  53. assert t.loads == {}
  54. assert t.supports == {}
  55. assert t.members == {AB: [A, D], BC: [D, C], AC: [A, C]}
  56. t.change_member_label(BC, CD)
  57. assert t.members == {AB: [A, D], CD: [D, C], AC: [A, C]}
  58. assert t.internal_forces == {AB: 0, CD: 0, AC: 0}
  59. # testing the apply_load method
  60. t.apply_load(A, P, 90)
  61. t.apply_load(A, P/4, 90)
  62. t.apply_load(A, 2*P,45)
  63. t.apply_load(D, P/2, 90)
  64. assert t.loads == {A: [[P, 90], [P/4, 90], [2*P, 45]], D: [[P/2, 90]]}
  65. assert t.loads[A] == [[P, 90], [P/4, 90], [2*P, 45]]
  66. # testing the remove_load method
  67. t.remove_load(A, P/4, 90)
  68. assert t.loads == {A: [[P, 90], [2*P, 45]], D: [[P/2, 90]]}
  69. assert t.loads[A] == [[P, 90], [2*P, 45]]
  70. # testing the apply_support method
  71. t.apply_support(A, "pinned")
  72. t.apply_support(D, "roller")
  73. assert t.supports == {A: 'pinned', D: 'roller'}
  74. assert t.reaction_loads == {}
  75. 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]]}
  76. # testing the remove_support method
  77. t.remove_support(A)
  78. assert t.supports == {D: 'roller'}
  79. assert t.reaction_loads == {}
  80. assert t.loads == {A: [[P, 90], [2*P, 45]], D: [[P/2, 90], [Symbol('R_D_y'), 90]]}
  81. t.apply_support(A, "pinned")
  82. # testing the solve method
  83. t.solve()
  84. assert t.reaction_loads['R_A_x'] == -sqrt(2)*P
  85. assert t.reaction_loads['R_A_y'] == -sqrt(2)*P - P
  86. assert t.reaction_loads['R_D_y'] == -P/2
  87. assert t.internal_forces[AB]/P == 0
  88. assert t.internal_forces[CD] == 0
  89. assert t.internal_forces[AC] == 0