Spaces:
Sleeping
Sleeping
| import matplotlib.pyplot as plt | |
| import torch | |
| import numpy as np | |
| from slientruss3d.truss import Truss | |
| from slientruss3d.type import SupportType, MemberType | |
| from slientruss3d.plot import TrussPlotter | |
| def TestPlot(truss): | |
| # -------------------- Global variables -------------------- | |
| # Files settings: | |
| TEST_FILE_NUMBER = 25 | |
| TEST_LOAD_CASE = 0 | |
| TEST_INPUT_FILE = f"./data/bar-{TEST_FILE_NUMBER}_output_{TEST_LOAD_CASE}.json" | |
| TEST_PLOT_SAVE_PATH = f"./plot/bar-{TEST_FILE_NUMBER}_plot_{TEST_LOAD_CASE}.png" | |
| # Truss dimension setting: | |
| TRUSS_DIMENSION = 3 | |
| # Figure layout settings: | |
| IS_SAVE_PLOT = False # Whether to save truss figure or not. | |
| IS_EQUAL_AXIS = True # Whether to use actual aspect ratio in the truss figure or not. | |
| IS_PLOT_STRESS = True # If True, the color of each displaced member gives expression to [stress]. Otherwise, [force magnitude]. | |
| MAX_SCALED_DISPLACEMENT = 15 # Scale the max value of all dimensions of displacements. | |
| MAX_SCALED_FORCE = 50 # Scale the max value of all dimensions of force arrows. | |
| POINT_SIZE_SCALE_FACTOR = 1 # Scale the default size of joint point in the truss figure. | |
| ARROW_SIZE_SCALE_FACTOR = 1 # Scale the default size of force arrow in the truss figure. | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| # truss = Truss(dim=TRUSS_DIMENSION) | |
| # You could directly read the output .json file. | |
| # truss.LoadFromJSON(TEST_INPUT_FILE, isOutputFile=True) | |
| # Show or save the structural analysis result figure: | |
| TrussPlotter(truss, | |
| isEqualAxis=IS_EQUAL_AXIS, | |
| isPlotStress=IS_PLOT_STRESS, | |
| maxScaledDisplace=MAX_SCALED_DISPLACEMENT, | |
| maxScaledForce=MAX_SCALED_FORCE, | |
| pointScale=POINT_SIZE_SCALE_FACTOR, | |
| arrowScale=ARROW_SIZE_SCALE_FACTOR).Plot(IS_SAVE_PLOT, TEST_PLOT_SAVE_PATH) | |
| def Truss10bar(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 2 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [(0, 0), | |
| (360, 0), | |
| (720, 0), | |
| (0, 360), | |
| (360, 360), | |
| (720, 360) | |
| ] | |
| supports = [SupportType.PIN, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.PIN, | |
| SupportType.NO, | |
| SupportType.NO, | |
| ] | |
| forces = [(1, (0, -1e5)), (2, (0, -1e5))] | |
| members = [(0, 1), | |
| (0, 4), | |
| (1, 2), | |
| (1, 3), | |
| (1, 4), | |
| (1, 5), | |
| (2, 4), | |
| (2, 5), | |
| (3, 4), | |
| (4, 5) | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # Default: 0.1, 1e7, 1 | |
| memberType = MemberType(A[index].item(), 10000000.0, 0.1) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.1) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 10000000.0, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, forces, stress, resistance = truss.GetDisplacements(), truss.GetInternalForces(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, forces, stress, resistance, truss, truss.weight | |
| def Truss25bar(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 3 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [(62.5, 100, 200), | |
| (137.5, 100, 200), | |
| (62.5, 137.5, 100), | |
| (137.5, 137.5, 100), | |
| (137.5, 62.5, 100), | |
| (62.5, 62.5, 100), | |
| (0, 200, 0), | |
| (200, 200, 0), | |
| (200, 0, 0), | |
| (0, 0, 0) | |
| ] | |
| supports = [SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN | |
| ] | |
| forces = [(0, (1000, 20000, -5000)), | |
| (1, (0, -20000, -5000)), | |
| (2, (500, 0, 0)), | |
| (5, (500, 0, 0)), | |
| ] | |
| members = [(0, 1), | |
| (0, 3), | |
| (1, 2), | |
| (0, 4), | |
| (1, 5), | |
| (0, 2), | |
| (0, 5), | |
| (1, 3), | |
| (1, 4), | |
| (2, 5), | |
| (3, 4), | |
| (2, 3), | |
| (4, 5), | |
| (2, 9), | |
| (5, 6), | |
| (3, 8), | |
| (4, 7), | |
| (2, 7), | |
| (3, 6), | |
| (5, 8), | |
| (4, 9), | |
| (2, 6), | |
| (3, 7), | |
| (4, 8), | |
| (5, 9), | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # Default: 0.1, 1e7, .1 | |
| memberType = MemberType(A[index].item(), 3e7, .283) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), .283) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 3e7, Rho[index].item()) | |
| # memberType = MemberType(A[index].item(), 1e7, .1) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, forces, stress, resistance = truss.GetDisplacements(), truss.GetInternalForces(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, forces, stress, resistance, truss, truss.weight | |
| def Truss47bar(A, E, Rho, version): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 2 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [(-60, 0), | |
| (60, 0), | |
| (-60, 120), | |
| (60, 120), | |
| (-60, 240), | |
| (60, 240), | |
| (-60, 360), | |
| (60, 360), | |
| (-30, 420), | |
| (30, 420), | |
| (-30, 480), | |
| (30, 480), | |
| (-30, 540), | |
| (30, 540), | |
| (-90, 570), | |
| (90, 570), | |
| (-150, 600), | |
| (-90, 600), | |
| (-30, 600), | |
| (30, 600), | |
| (90, 600), | |
| (150, 600)] | |
| supports = [SupportType.PIN, SupportType.PIN, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO, | |
| SupportType.NO, SupportType.NO] | |
| forces = [(16, (6000, -14000)), | |
| (21, (6000, -14000))] | |
| if version == 1: | |
| forces = [(16, (6000, -14000)), | |
| (21, (6000, -14000))] | |
| elif version == 2: | |
| forces = [(16, (6000, -14000))] | |
| elif version == 3: | |
| forces = [(21, (6000, -14000))] | |
| members = [(0, 2), (0, 3), (1, 2), (1, 3), | |
| (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), | |
| (4, 5), (4, 6), (4, 7), (5, 6), (5, 7), | |
| (6, 7), (6, 8), (6, 9), (7, 8), (7, 9), (8, 9), | |
| (8, 10), (8, 11), (9, 10), (9, 11), | |
| (10, 11), (10, 12), (10, 13), (11, 12), (11, 13), | |
| (12, 13), (12, 14), (12, 18), (12, 19), | |
| (13, 18), (13, 19), (13, 15), (14, 16), | |
| (14, 17), (14, 18), (15, 19), (15, 20), | |
| (15, 21), (16, 17), (17, 18), (18, 19), (19, 20), (20, 21)] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # memberType = MemberType(A[index].item(), 300000000.0, 0.3) | |
| # Default: 0.1, 300000000.0, 0.3 | |
| memberType = MemberType(A[index].item(), 300000000.0, 0.3) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.3) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 300000000.0, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, stress, resistance = truss.GetDisplacements(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, stress, resistance, truss, truss.weight | |
| def Truss120bar(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 3 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [ | |
| (0.0, 0.0, 275.59), | |
| (273.26, 0.0, 230.31), | |
| (236.65010183813573, 136.62999999999997, 230.31), | |
| (136.62999999999997, 236.65010183813573, 230.31), | |
| (0.0, 273.26, 230.31), | |
| (-136.62999999999997, 236.65010183813573, 230.31), | |
| (-236.65010183813573, 136.62999999999997, 230.31), | |
| (-273.26, 0.0, 230.31), | |
| (-236.65010183813573, -136.62999999999997, 230.31), | |
| (-136.62999999999997, -236.65010183813573, 230.31), | |
| (0.0, -273.26, 230.31), | |
| (136.62999999999997, -236.65010183813573, 230.31), | |
| (236.65010183813573, -136.62999999999997, 230.31), | |
| (492.12, 0.0, 118.11), | |
| (475.3514176333763, 127.37002847585251, 118.11), | |
| (426.18842171039796, 246.05999999999997, 118.11), | |
| (347.9813891575237, 347.9813891575237, 118.11), | |
| (246.05999999999997, 426.18842171039796, 118.11), | |
| (127.37002847585251, 475.3514176333763, 118.11), | |
| (0.0, 492.12, 118.11), | |
| (-127.37002847585251, 475.3514176333763, 118.11), | |
| (-246.05999999999997, 426.18842171039796, 118.11), | |
| (-347.9813891575237, 347.9813891575237, 118.11), | |
| (-426.18842171039796, 246.05999999999997, 118.11), | |
| (-475.3514176333763, 127.37002847585251, 118.11), | |
| (-492.12, 0.0, 118.11), | |
| (-475.3514176333763, -127.37002847585251, 118.11), | |
| (-426.18842171039796, -246.05999999999997, 118.11), | |
| (-347.9813891575237, -347.9813891575237, 118.11), | |
| (-246.05999999999997, -426.18842171039796, 118.11), | |
| (-127.37002847585251, -475.3514176333763, 118.11), | |
| (0.0, -492.12, 118.11), | |
| (127.37002847585251, -475.3514176333763, 118.11), | |
| (246.05999999999997, -426.18842171039796, 118.11), | |
| (347.9813891575237, -347.9813891575237, 118.11), | |
| (426.18842171039796, -246.05999999999997, 118.11), | |
| (475.3514176333763, -127.37002847585251, 118.11), | |
| (625.59, 0.0, 0.0), | |
| (541.7768323535071, 312.79499999999996, 0.0), | |
| (312.79499999999996, 541.7768323535071, 0.0), | |
| (0.0, 625.59, 0.0), | |
| (-312.79499999999996, 541.7768323535071, 0.0), | |
| (-541.7768323535071, 312.79499999999996, 0.0), | |
| (-625.59, 0.0, 0.0), | |
| (-541.7768323535071, -312.79499999999996, 0.0), | |
| (-312.79499999999996, -541.7768323535071, 0.0), | |
| (0.0, -625.59, 0.0), | |
| (312.79499999999996, -541.7768323535071, 0.0), | |
| (541.7768323535071, -312.79499999999996, 0.0) | |
| ] | |
| supports = [ | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN | |
| ] | |
| # print(len(joints)) | |
| # print(len(supports)) | |
| forces = [ | |
| (0, (0.0, 0.0, -13490.0)), | |
| (1, (0.0, 0.0, -6744.0)), | |
| (2, (0.0, 0.0, -6744.0)), | |
| (3, (0.0, 0.0, -6744.0)), | |
| (4, (0.0, 0.0, -6744.0)), | |
| (5, (0.0, 0.0, -6744.0)), | |
| (6, (0.0, 0.0, -6744.0)), | |
| (7, (0.0, 0.0, -6744.0)), | |
| (8, (0.0, 0.0, -6744.0)), | |
| (9, (0.0, 0.0, -6744.0)), | |
| (10, (0.0, 0.0, -6744.0)), | |
| (11, (0.0, 0.0, -6744.0)), | |
| (12, (0.0, 0.0, -6744.0)), | |
| (13, (0.0, 0.0, -6744.0)), | |
| (14, (0.0, 0.0, -2248.0)), | |
| (15, (0.0, 0.0, -2248.0)), | |
| (16, (0.0, 0.0, -2248.0)), | |
| (17, (0.0, 0.0, -2248.0)), | |
| (18, (0.0, 0.0, -2248.0)), | |
| (19, (0.0, 0.0, -2248.0)), | |
| (20, (0.0, 0.0, -2248.0)), | |
| (21, (0.0, 0.0, -2248.0)), | |
| (22, (0.0, 0.0, -2248.0)), | |
| (23, (0.0, 0.0, -2248.0)), | |
| (24, (0.0, 0.0, -2248.0)), | |
| (25, (0.0, 0.0, -2248.0)), | |
| (26, (0.0, 0.0, -2248.0)), | |
| (27, (0.0, 0.0, -2248.0)), | |
| (28, (0.0, 0.0, -2248.0)), | |
| (29, (0.0, 0.0, -2248.0)), | |
| (30, (0.0, 0.0, -2248.0)), | |
| (31, (0.0, 0.0, -2248.0)), | |
| (32, (0.0, 0.0, -2248.0)), | |
| (33, (0.0, 0.0, -2248.0)), | |
| (34, (0.0, 0.0, -2248.0)), | |
| (35, (0.0, 0.0, -2248.0)), | |
| (36, (0.0, 0.0, -2248.0)) | |
| ] | |
| members = [ | |
| (0, 1), | |
| (0, 2), | |
| (0, 3), | |
| (0, 4), | |
| (0, 5), | |
| (0, 6), | |
| (0, 7), | |
| (0, 8), | |
| (0, 9), | |
| (0, 10), | |
| (0, 11), | |
| (0, 12), | |
| (1, 2), | |
| (2, 3), | |
| (3, 4), | |
| (4, 5), | |
| (5, 6), | |
| (6, 7), | |
| (7, 8), | |
| (8, 9), | |
| (9, 10), | |
| (10, 11), | |
| (11, 12), | |
| (12, 1), | |
| (1, 13), | |
| (2, 15), | |
| (3, 17), | |
| (4, 19), | |
| (5, 21), | |
| (6, 23), | |
| (7, 25), | |
| (8, 27), | |
| (9, 29), | |
| (10, 31), | |
| (11, 33), | |
| (12, 35), | |
| (1, 14), | |
| (2, 14), | |
| (2, 16), | |
| (3, 16), | |
| (3, 18), | |
| (4, 18), | |
| (4, 20), | |
| (5, 20), | |
| (5, 22), | |
| (6, 22), | |
| (6, 24), | |
| (7, 24), | |
| (7, 26), | |
| (8, 26), | |
| (8, 28), | |
| (9, 28), | |
| (9, 30), | |
| (10, 30), | |
| (10, 32), | |
| (11, 32), | |
| (11, 34), | |
| (12, 34), | |
| (12, 36), | |
| (1, 36), | |
| (13, 14), | |
| (14, 15), | |
| (15, 16), | |
| (16, 17), | |
| (17, 18), | |
| (18, 19), | |
| (19, 20), | |
| (20, 21), | |
| (21, 22), | |
| (22, 23), | |
| (23, 24), | |
| (24, 25), | |
| (25, 26), | |
| (26, 27), | |
| (27, 28), | |
| (28, 29), | |
| (29, 30), | |
| (30, 31), | |
| (31, 32), | |
| (32, 33), | |
| (33, 34), | |
| (34, 35), | |
| (35, 36), | |
| (36, 13), | |
| (13, 37), | |
| (15, 38), | |
| (17, 39), | |
| (19, 40), | |
| (21, 41), | |
| (23, 42), | |
| (25, 43), | |
| (27, 44), | |
| (29, 45), | |
| (31, 46), | |
| (33, 47), | |
| (35, 48), | |
| (14, 37), | |
| (14, 38), | |
| (16, 38), | |
| (16, 39), | |
| (18, 39), | |
| (18, 40), | |
| (20, 40), | |
| (20, 41), | |
| (22, 41), | |
| (22, 42), | |
| (24, 42), | |
| (24, 43), | |
| (26, 43), | |
| (26, 44), | |
| (28, 44), | |
| (28, 45), | |
| (30, 45), | |
| (30, 46), | |
| (32, 46), | |
| (32, 47), | |
| (34, 47), | |
| (34, 48), | |
| (36, 48), | |
| (36, 37) | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # memberType = MemberType(A[index].item(), 30450000, 0.288) | |
| # print(A.shape) | |
| memberType = MemberType(A[index].item(), 30450000, 0.288) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.288) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 30450000, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, forces, stress, resistance = truss.GetDisplacements(), truss.GetInternalForces(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, forces, stress, resistance, truss, truss.weight | |
| def Truss72bar_4forces(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 3 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [ | |
| (0.0, 0.0, 0.0), | |
| (120.0, 0.0, 0.0), | |
| (120.0, 120.0, 0.0), | |
| (0.0, 120.0, 0.0), | |
| (0.0, 0.0, 60.0), | |
| (120.0, 0.0, 60.0), | |
| (120.0, 120.0, 60.0), | |
| (0.0, 120.0, 60.0), | |
| (0.0, 0.0, 120.0), | |
| (120.0, 0.0, 120.0), | |
| (120.0, 120.0, 120.0), | |
| (0.0, 120.0, 120.0), | |
| (0.0, 0.0, 180.0), | |
| (120.0, 0.0, 180.0), | |
| (120.0, 120.0, 180.0), | |
| (0.0, 120.0, 180.0), | |
| (0.0, 0.0, 240.0), | |
| (120.0, 0.0, 240.0), | |
| (120.0, 120.0, 240.0), | |
| (0.0, 120.0, 240.0) | |
| ] | |
| supports = supports = [ | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO | |
| ] | |
| forces = [ | |
| (0, (0.0, 0.0, 0.0)), | |
| (1, (0.0, 0.0, 0.0)), | |
| (2, (0.0, 0.0, 0.0)), | |
| (3, (0.0, 0.0, 0.0)), | |
| (4, (0.0, 0.0, 0.0)), | |
| (5, (0.0, 0.0, 0.0)), | |
| (6, (0.0, 0.0, 0.0)), | |
| (7, (0.0, 0.0, 0.0)), | |
| (8, (0.0, 0.0, 0.0)), | |
| (9, (0.0, 0.0, 0.0)), | |
| (10, (0.0, 0.0, 0.0)), | |
| (11, (0.0, 0.0, 0.0)), | |
| (12, (0.0, 0.0, 0.0)), | |
| (13, (0.0, 0.0, 0.0)), | |
| (14, (0.0, 0.0, 0.0)), | |
| (15, (0.0, 0.0, 0.0)), | |
| (16, (0.0, 0.0, -5000.0)), | |
| (17, (0.0, 0.0, -5000.0)), | |
| (18, (0.0, 0.0, -5000.0)), | |
| (19, (0.0, 0.0, -5000.0)) | |
| ] | |
| members = [ | |
| (0, 4), | |
| (1, 5), | |
| (2, 6), | |
| (3, 7), | |
| (1, 4), | |
| (0, 5), | |
| (1, 6), | |
| (2, 5), | |
| (2, 7), | |
| (3, 6), | |
| (0, 7), | |
| (3, 4), | |
| (4, 5), | |
| (5, 6), | |
| (6, 7), | |
| (7, 4), | |
| (4, 6), | |
| (5, 7), | |
| (4, 8), | |
| (5, 9), | |
| (6, 10), | |
| (7, 11), | |
| (5, 8), | |
| (4, 9), | |
| (5, 10), | |
| (6, 9), | |
| (6, 11), | |
| (7, 10), | |
| (4, 11), | |
| (7, 8), | |
| (8, 9), | |
| (9, 10), | |
| (10, 11), | |
| (11, 8), | |
| (8, 10), | |
| (9, 11), | |
| (8, 12), | |
| (9, 13), | |
| (10, 14), | |
| (11, 15), | |
| (9, 12), | |
| (8, 13), | |
| (9, 14), | |
| (10, 13), | |
| (10, 15), | |
| (11, 14), | |
| (8, 15), | |
| (11, 12), | |
| (12, 13), | |
| (13, 14), | |
| (14, 15), | |
| (15, 12), | |
| (12, 14), | |
| (13, 15), | |
| (12, 16), | |
| (13, 17), | |
| (14, 18), | |
| (15, 19), | |
| (13, 16), | |
| (12, 17), | |
| (13, 18), | |
| (14, 17), | |
| (14, 19), | |
| (15, 18), | |
| (12, 19), | |
| (15, 16), | |
| (16, 17), | |
| (17, 18), | |
| (18, 19), | |
| (19, 16), | |
| (16, 18), | |
| (17, 19) | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # memberType = MemberType(A[index].item(), 10000000.0, 0.1) | |
| memberType = MemberType(A[index].item(), 10000000.0, 0.1) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.1) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 10000000.0, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, forces, stress, resistance = truss.GetDisplacements(), truss.GetInternalForces(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, forces, stress, resistance, truss, truss.weight | |
| def Truss72bar_single(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 3 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [ | |
| (0.0, 0.0, 0.0), | |
| (120.0, 0.0, 0.0), | |
| (120.0, 120.0, 0.0), | |
| (0.0, 120.0, 0.0), | |
| (0.0, 0.0, 60.0), | |
| (120.0, 0.0, 60.0), | |
| (120.0, 120.0, 60.0), | |
| (0.0, 120.0, 60.0), | |
| (0.0, 0.0, 120.0), | |
| (120.0, 0.0, 120.0), | |
| (120.0, 120.0, 120.0), | |
| (0.0, 120.0, 120.0), | |
| (0.0, 0.0, 180.0), | |
| (120.0, 0.0, 180.0), | |
| (120.0, 120.0, 180.0), | |
| (0.0, 120.0, 180.0), | |
| (0.0, 0.0, 240.0), | |
| (120.0, 0.0, 240.0), | |
| (120.0, 120.0, 240.0), | |
| (0.0, 120.0, 240.0) | |
| ] | |
| supports = [ | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.PIN, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO, | |
| SupportType.NO | |
| ] | |
| forces = [ | |
| (0, (0.0, 0.0, 0.0)), | |
| (1, (0.0, 0.0, 0.0)), | |
| (2, (0.0, 0.0, 0.0)), | |
| (3, (0.0, 0.0, 0.0)), | |
| (4, (0.0, 0.0, 0.0)), | |
| (5, (0.0, 0.0, 0.0)), | |
| (6, (0.0, 0.0, 0.0)), | |
| (7, (0.0, 0.0, 0.0)), | |
| (8, (0.0, 0.0, 0.0)), | |
| (9, (0.0, 0.0, 0.0)), | |
| (10, (0.0, 0.0, 0.0)), | |
| (11, (0.0, 0.0, 0.0)), | |
| (12, (0.0, 0.0, 0.0)), | |
| (13, (0.0, 0.0, 0.0)), | |
| (14, (0.0, 0.0, 0.0)), | |
| (15, (0.0, 0.0, 0.0)), | |
| (16, (5000.0, 5000.0, -5000.0)), | |
| (17, (0.0, 0.0, 0.0)), | |
| (18, (0.0, 0.0, 0.0)), | |
| (19, (0.0, 0.0, 0.0)) | |
| ] | |
| members = [ | |
| (0, 4), | |
| (1, 5), | |
| (2, 6), | |
| (3, 7), | |
| (1, 4), | |
| (0, 5), | |
| (1, 6), | |
| (2, 5), | |
| (2, 7), | |
| (3, 6), | |
| (0, 7), | |
| (3, 4), | |
| (4, 5), | |
| (5, 6), | |
| (6, 7), | |
| (7, 4), | |
| (4, 6), | |
| (5, 7), | |
| (4, 8), | |
| (5, 9), | |
| (6, 10), | |
| (7, 11), | |
| (5, 8), | |
| (4, 9), | |
| (5, 10), | |
| (6, 9), | |
| (6, 11), | |
| (7, 10), | |
| (4, 11), | |
| (7, 8), | |
| (8, 9), | |
| (9, 10), | |
| (10, 11), | |
| (11, 8), | |
| (8, 10), | |
| (9, 11), | |
| (8, 12), | |
| (9, 13), | |
| (10, 14), | |
| (11, 15), | |
| (9, 12), | |
| (8, 13), | |
| (9, 14), | |
| (10, 13), | |
| (10, 15), | |
| (11, 14), | |
| (8, 15), | |
| (11, 12), | |
| (12, 13), | |
| (13, 14), | |
| (14, 15), | |
| (15, 12), | |
| (12, 14), | |
| (13, 15), | |
| (12, 16), | |
| (13, 17), | |
| (14, 18), | |
| (15, 19), | |
| (13, 16), | |
| (12, 17), | |
| (13, 18), | |
| (14, 17), | |
| (14, 19), | |
| (15, 18), | |
| (12, 19), | |
| (15, 16), | |
| (16, 17), | |
| (17, 18), | |
| (18, 19), | |
| (19, 16), | |
| (16, 18), | |
| (17, 19) | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # memberType = MemberType(A[index].item(), 10000000.0, 0.1) | |
| memberType = MemberType(A[index].item(), 10000000.0, 0.1) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.1) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 10000000.0, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, stress, resistance = truss.GetDisplacements(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, stress, resistance, truss, truss.weight | |
| def Truss942bar(A, E, Rho): | |
| # -------------------- Global variables -------------------- | |
| TEST_OUTPUT_FILE = f"./test_output.json" | |
| TRUSS_DIMENSION = 3 | |
| # ---------------------------------------------------------- | |
| # Truss object: | |
| truss = Truss(dim=TRUSS_DIMENSION) | |
| init_truss = truss | |
| # Truss settings: | |
| joints = [ | |
| [24.5, 24.5, 312.0], | |
| [38.5, 24.5, 312.0], | |
| [24.5, 38.5, 312.0], | |
| [38.5, 38.5, 312.0], | |
| [24.5, 24.5, 300.0], | |
| [38.5, 24.5, 300.0], | |
| [24.5, 38.5, 300.0], | |
| [38.5, 38.5, 300.0], | |
| [24.5, 24.5, 288.0], | |
| [38.5, 24.5, 288.0], | |
| [24.5, 38.5, 288.0], | |
| [38.5, 38.5, 288.0], | |
| [24.5, 24.5, 276.0], | |
| [38.5, 24.5, 276.0], | |
| [24.5, 38.5, 276.0], | |
| [38.5, 38.5, 276.0], | |
| [24.5, 24.5, 264.0], | |
| [38.5, 24.5, 264.0], | |
| [24.5, 38.5, 264.0], | |
| [38.5, 38.5, 264.0], | |
| [24.5, 24.5, 252.0], | |
| [38.5, 24.5, 252.0], | |
| [24.5, 38.5, 252.0], | |
| [38.5, 38.5, 252.0], | |
| [21.6005, 21.6005, 240.0], | |
| [31.5, 17.5, 240.0], | |
| [41.3995, 21.6005, 240.0], | |
| [17.5, 31.5, 240.0], | |
| [45.5, 31.5, 240.0], | |
| [21.6005, 41.3995, 240.0], | |
| [31.5, 45.5, 240.0], | |
| [41.3995, 41.3995, 240.0], | |
| [21.6005, 21.6005, 228.0], | |
| [31.5, 17.5, 228.0], | |
| [41.3995, 21.6005, 228.0], | |
| [17.5, 31.5, 228.0], | |
| [45.5, 31.5, 228.0], | |
| [21.6005, 41.3995, 228.0], | |
| [31.5, 45.5, 228.0], | |
| [41.3995, 41.3995, 228.0], | |
| [21.6005, 21.6005, 216.0], | |
| [31.5, 17.5, 216.0], | |
| [41.3995, 21.6005, 216.0], | |
| [17.5, 31.5, 216.0], | |
| [45.5, 31.5, 216.0], | |
| [21.6005, 41.3995, 216.0], | |
| [31.5, 45.5, 216.0], | |
| [41.3995, 41.3995, 216.0], | |
| [21.6005, 21.6005, 204.0], | |
| [31.5, 17.5, 204.0], | |
| [41.3995, 21.6005, 204.0], | |
| [17.5, 31.5, 204.0], | |
| [45.5, 31.5, 204.0], | |
| [21.6005, 41.3995, 204.0], | |
| [31.5, 45.5, 204.0], | |
| [41.3995, 41.3995, 204.0], | |
| [21.6005, 21.6005, 192.0], | |
| [31.5, 17.5, 192.0], | |
| [41.3995, 21.6005, 192.0], | |
| [17.5, 31.5, 192.0], | |
| [45.5, 31.5, 192.0], | |
| [21.6005, 41.3995, 192.0], | |
| [31.5, 45.5, 192.0], | |
| [41.3995, 41.3995, 192.0], | |
| [21.6005, 21.6005, 180.0], | |
| [31.5, 17.5, 180.0], | |
| [41.3995, 21.6005, 180.0], | |
| [17.5, 31.5, 180.0], | |
| [45.5, 31.5, 180.0], | |
| [21.6005, 41.3995, 180.0], | |
| [31.5, 45.5, 180.0], | |
| [41.3995, 41.3995, 180.0], | |
| [21.6005, 21.6005, 168.0], | |
| [31.5, 17.5, 168.0], | |
| [41.3995, 21.6005, 168.0], | |
| [17.5, 31.5, 168.0], | |
| [45.5, 31.5, 168.0], | |
| [21.6005, 41.3995, 168.0], | |
| [31.5, 45.5, 168.0], | |
| [41.3995, 41.3995, 168.0], | |
| [21.6005, 21.6005, 156.0], | |
| [31.5, 17.5, 156.0], | |
| [41.3995, 21.6005, 156.0], | |
| [17.5, 31.5, 156.0], | |
| [45.5, 31.5, 156.0], | |
| [21.6005, 41.3995, 156.0], | |
| [31.5, 45.5, 156.0], | |
| [41.3995, 41.3995, 156.0], | |
| [7.0, 24.5, 144.0], | |
| [11.1199, 11.1199, 144.0], | |
| [24.5, 7.0, 144.0], | |
| [38.5, 7.0, 144.0], | |
| [51.8801, 11.1199, 144.0], | |
| [56.0, 24.5, 144.0], | |
| [7.0, 38.5, 144.0], | |
| [11.1199, 51.8801, 144.0], | |
| [24.5, 56.0, 144.0], | |
| [38.5, 56.0, 144.0], | |
| [51.8801, 51.8801, 144.0], | |
| [56.0, 38.5, 144.0], | |
| [7.0, 24.5, 132.0], | |
| [11.1199, 11.1199, 132.0], | |
| [24.5, 7.0, 132.0], | |
| [38.5, 7.0, 132.0], | |
| [51.8801, 11.1199, 132.0], | |
| [56.0, 24.5, 132.0], | |
| [7.0, 38.5, 132.0], | |
| [11.1199, 51.8801, 132.0], | |
| [24.5, 56.0, 132.0], | |
| [38.5, 56.0, 132.0], | |
| [51.8801, 51.8801, 132.0], | |
| [56.0, 38.5, 132.0], | |
| [7.0, 24.5, 120.0], | |
| [11.1199, 11.1199, 120.0], | |
| [24.5, 7.0, 120.0], | |
| [38.5, 7.0, 120.0], | |
| [51.8801, 11.1199, 120.0], | |
| [56.0, 24.5, 120.0], | |
| [7.0, 38.5, 120.0], | |
| [11.1199, 51.8801, 120.0], | |
| [24.5, 56.0, 120.0], | |
| [38.5, 56.0, 120.0], | |
| [51.8801, 51.8801, 120.0], | |
| [56.0, 38.5, 120.0], | |
| [7.0, 24.5, 108.0], | |
| [11.1199, 11.1199, 108.0], | |
| [24.5, 7.0, 108.0], | |
| [38.5, 7.0, 108.0], | |
| [51.8801, 11.1199, 108.0], | |
| [56.0, 24.5, 108.0], | |
| [7.0, 38.5, 108.0], | |
| [11.1199, 51.8801, 108.0], | |
| [24.5, 56.0, 108.0], | |
| [38.5, 56.0, 108.0], | |
| [51.8801, 51.8801, 108.0], | |
| [56.0, 38.5, 108.0], | |
| [7.0, 24.5, 96.0], | |
| [11.1199, 11.1199, 96.0], | |
| [24.5, 7.0, 96.0], | |
| [38.5, 7.0, 96.0], | |
| [51.8801, 11.1199, 96.0], | |
| [56.0, 24.5, 96.0], | |
| [7.0, 38.5, 96.0], | |
| [11.1199, 51.8801, 96.0], | |
| [24.5, 56.0, 96.0], | |
| [38.5, 56.0, 96.0], | |
| [51.8801, 51.8801, 96.0], | |
| [56.0, 38.5, 96.0], | |
| [7.0, 24.5, 84.0], | |
| [11.1199, 11.1199, 84.0], | |
| [24.5, 7.0, 84.0], | |
| [38.5, 7.0, 84.0], | |
| [51.8801, 11.1199, 84.0], | |
| [56.0, 24.5, 84.0], | |
| [7.0, 38.5, 84.0], | |
| [11.1199, 51.8801, 84.0], | |
| [24.5, 56.0, 84.0], | |
| [38.5, 56.0, 84.0], | |
| [51.8801, 51.8801, 84.0], | |
| [56.0, 38.5, 84.0], | |
| [7.0, 24.5, 72.0], | |
| [11.1199, 11.1199, 72.0], | |
| [24.5, 7.0, 72.0], | |
| [38.5, 7.0, 72.0], | |
| [51.8801, 11.1199, 72.0], | |
| [56.0, 24.5, 72.0], | |
| [7.0, 38.5, 72.0], | |
| [11.1199, 51.8801, 72.0], | |
| [24.5, 56.0, 72.0], | |
| [38.5, 56.0, 72.0], | |
| [51.8801, 51.8801, 72.0], | |
| [56.0, 38.5, 72.0], | |
| [7.0, 24.5, 60.0], | |
| [11.1199, 11.1199, 60.0], | |
| [24.5, 7.0, 60.0], | |
| [38.5, 7.0, 60.0], | |
| [51.8801, 11.1199, 60.0], | |
| [56.0, 24.5, 60.0], | |
| [7.0, 38.5, 60.0], | |
| [11.1199, 51.8801, 60.0], | |
| [24.5, 56.0, 60.0], | |
| [38.5, 56.0, 60.0], | |
| [51.8801, 51.8801, 60.0], | |
| [56.0, 38.5, 60.0], | |
| [7.0, 24.5, 48.0], | |
| [11.1199, 11.1199, 48.0], | |
| [24.5, 7.0, 48.0], | |
| [38.5, 7.0, 48.0], | |
| [51.8801, 11.1199, 48.0], | |
| [56.0, 24.5, 48.0], | |
| [7.0, 38.5, 48.0], | |
| [11.1199, 51.8801, 48.0], | |
| [24.5, 56.0, 48.0], | |
| [38.5, 56.0, 48.0], | |
| [51.8801, 51.8801, 48.0], | |
| [56.0, 38.5, 48.0], | |
| [7.0, 24.5, 36.0], | |
| [11.1199, 11.1199, 36.0], | |
| [24.5, 7.0, 36.0], | |
| [38.5, 7.0, 36.0], | |
| [51.8801, 11.1199, 36.0], | |
| [56.0, 24.5, 36.0], | |
| [7.0, 38.5, 36.0], | |
| [11.1199, 51.8801, 36.0], | |
| [24.5, 56.0, 36.0], | |
| [38.5, 56.0, 36.0], | |
| [51.8801, 51.8801, 36.0], | |
| [56.0, 38.5, 36.0], | |
| [7.0, 24.5, 24.0], | |
| [11.1199, 11.1199, 24.0], | |
| [24.5, 7.0, 24.0], | |
| [38.5, 7.0, 24.0], | |
| [51.8801, 11.1199, 24.0], | |
| [56.0, 24.5, 24.0], | |
| [7.0, 38.5, 24.0], | |
| [11.1199, 51.8801, 24.0], | |
| [24.5, 56.0, 24.0], | |
| [38.5, 56.0, 24.0], | |
| [51.8801, 51.8801, 24.0], | |
| [56.0, 38.5, 24.0], | |
| [7.0, 24.5, 12.0], | |
| [11.1199, 11.1199, 12.0], | |
| [24.5, 7.0, 12.0], | |
| [38.5, 7.0, 12.0], | |
| [51.8801, 11.1199, 12.0], | |
| [56.0, 24.5, 12.0], | |
| [7.0, 38.5, 12.0], | |
| [11.1199, 51.8801, 12.0], | |
| [24.5, 56.0, 12.0], | |
| [38.5, 56.0, 12.0], | |
| [51.8801, 51.8801, 12.0], | |
| [56.0, 38.5, 12.0], | |
| [7.0, 24.5, 0.0], | |
| [11.1199, 11.1199, 0.0], | |
| [24.5, 7.0, 0.0], | |
| [38.5, 7.0, 0.0], | |
| [51.8801, 11.1199, 0.0], | |
| [56.0, 24.5, 0.0], | |
| [7.0, 38.5, 0.0], | |
| [11.1199, 51.8801, 0.0], | |
| [24.5, 56.0, 0.0], | |
| [38.5, 56.0, 0.0], | |
| [51.8801, 51.8801, 0.0], | |
| [56.0, 38.5, 0.0] | |
| ] | |
| supports = [] | |
| for ii in range(244-12): | |
| supports.append(SupportType.NO) | |
| for ii in range(12): | |
| supports.append(SupportType.PIN) | |
| forces = [ | |
| (0, (1.5, -1.0, -3.0)), | |
| (1, (-1.0, -1.0, -3.0)), | |
| (2, (1.5, -1.0, -3.0)), | |
| (3, (-1.0, 1.0, -3.0)), | |
| (4, (1.5, -1.0, -3.0)), | |
| (5, (-1.0, -1.0, -3.0)), | |
| (6, (1.5, -1.0, -3.0)), | |
| (7, (-1.0, 1.0, -3.0)), | |
| (8, (1.5, -1.0, -3.0)), | |
| (9, (-1.0, -1.0, -3.0)), | |
| (10, (1.5, -1.0, -3.0)), | |
| (11, (-1.0, 1.0, -3.0)), | |
| (12, (1.5, -1.0, -3.0)), | |
| (13, (-1.0, -1.0, -3.0)), | |
| (14, (1.5, -1.0, -3.0)), | |
| (15, (-1.0, 1.0, -3.0)), | |
| (16, (1.5, -1.0, -3.0)), | |
| (17, (-1.0, -1.0, -3.0)), | |
| (18, (1.5, -1.0, -3.0)), | |
| (19, (-1.0, 1.0, -3.0)), | |
| (20, (1.5, -1.0, -3.0)), | |
| (21, (-1.0, -1.0, -3.0)), | |
| (22, (1.5, -1.0, -3.0)), | |
| (23, (-1.0, 1.0, -3.0)), | |
| (24, (1.5, -1.0, -3.0)), | |
| (25, (0.0, -1.0, -3.0)), | |
| (26, (-1.0, -1.0, -3.0)), | |
| (27, (1.5, 0.0, -3.0)), | |
| (28, (-1.0, 0.0, -3.0)), | |
| (29, (1.5, 1.0, -3.0)), | |
| (30, (0.0, 1.0, -3.0)), | |
| (31, (-1.0, 1.0, -3.0)), | |
| (32, (1.5, -1.0, -6.0)), | |
| (33, (0.0, -1.0, -6.0)), | |
| (34, (-1.0, -1.0, -6.0)), | |
| (35, (1.5, 0.0, -6.0)), | |
| (36, (-1.0, 0.0, -6.0)), | |
| (37, (1.5, 1.0, -6.0)), | |
| (38, (0.0, 1.0, -6.0)), | |
| (39, (-1.0, 1.0, -6.0)), | |
| (40, (1.5, -1.0, -6.0)), | |
| (41, (0.0, -1.0, -6.0)), | |
| (42, (-1.0, -1.0, -6.0)), | |
| (43, (1.5, 0.0, -6.0)), | |
| (44, (-1.0, 0.0, -6.0)), | |
| (45, (1.5, 1.0, -6.0)), | |
| (46, (0.0, 1.0, -6.0)), | |
| (47, (-1.0, 1.0, -6.0)), | |
| (48, (1.5, -1.0, -6.0)), | |
| (49, (0.0, -1.0, -6.0)), | |
| (50, (-1.0, -1.0, -6.0)), | |
| (51, (1.5, 0.0, -6.0)), | |
| (52, (-1.0, 0.0, -6.0)), | |
| (53, (1.5, 1.0, -6.0)), | |
| (54, (0.0, 1.0, -6.0)), | |
| (55, (-1.0, 1.0, -6.0)), | |
| (56, (1.5, -1.0, -6.0)), | |
| (57, (0.0, -1.0, -6.0)), | |
| (58, (-1.0, -1.0, -6.0)), | |
| (59, (1.5, 0.0, -6.0)), | |
| (60, (-1.0, 0.0, -6.0)), | |
| (61, (1.5, 1.0, -6.0)), | |
| (62, (0.0, 1.0, -6.0)), | |
| (63, (-1.0, 1.0, -6.0)), | |
| (64, (1.5, -1.0, -6.0)), | |
| (65, (0.0, -1.0, -6.0)), | |
| (66, (-1.0, -1.0, -6.0)), | |
| (67, (1.5, 0.0, -6.0)), | |
| (68, (-1.0, 0.0, -6.0)), | |
| (69, (1.5, 1.0, -6.0)), | |
| (70, (0.0, 1.0, -6.0)), | |
| (71, (-1.0, 1.0, -6.0)), | |
| (72, (1.5, -1.0, -6.0)), | |
| (73, (0.0, -1.0, -6.0)), | |
| (74, (-1.0, -1.0, -6.0)), | |
| (75, (1.5, 0.0, -6.0)), | |
| (76, (-1.0, 0.0, -6.0)), | |
| (77, (1.5, 1.0, -6.0)), | |
| (78, (0.0, 1.0, -6.0)), | |
| (79, (-1.0, 1.0, -6.0)), | |
| (80, (1.5, -1.0, -6.0)), | |
| (81, (0.0, -1.0, -6.0)), | |
| (82, (-1.0, -1.0, -6.0)), | |
| (83, (1.5, 0.0, -6.0)), | |
| (84, (-1.0, 0.0, -6.0)), | |
| (85, (1.5, 1.0, -6.0)), | |
| (86, (0.0, 1.0, -6.0)), | |
| (87, (-1.0, 1.0, -6.0)), | |
| (88, (1.5, -1.0, -6.0)), | |
| (89, (1.5, -1.0, -6.0)), | |
| (90, (1.5, -1.0, -6.0)), | |
| (91, (-1.0, -1.0, -6.0)), | |
| (92, (-1.0, -1.0, -6.0)), | |
| (93, (-1.0, -1.0, -6.0)), | |
| (94, (1.5, 1.0, -6.0)), | |
| (95, (1.5, 1.0, -6.0)), | |
| (96, (1.5, 1.0, -6.0)), | |
| (97, (-1.0, 1.0, -6.0)), | |
| (98, (-1.0, 1.0, -6.0)), | |
| (99, (-1.0, 1.0, -6.0)), | |
| (100, (1.5, -1.0, -9.0)), | |
| (101, (1.5, -1.0, -9.0)), | |
| (102, (1.5, -1.0, -9.0)), | |
| (103, (-1.0, -1.0, -9.0)), | |
| (104, (-1.0, -1.0, -9.0)), | |
| (105, (-1.0, -1.0, -9.0)), | |
| (106, (1.5, 1.0, -9.0)), | |
| (107, (1.5, 1.0, -9.0)), | |
| (108, (1.5, 1.0, -9.0)), | |
| (109, (-1.0, 1.0, -9.0)), | |
| (110, (-1.0, 1.0, -9.0)), | |
| (111, (-1.0, 1.0, -9.0)), | |
| (112, (1.5, -1.0, -9.0)), | |
| (113, (1.5, -1.0, -9.0)), | |
| (114, (1.5, -1.0, -9.0)), | |
| (115, (-1.0, -1.0, -9.0)), | |
| (116, (-1.0, -1.0, -9.0)), | |
| (117, (-1.0, -1.0, -9.0)), | |
| (118, (1.5, 1.0, -9.0)), | |
| (119, (1.5, 1.0, -9.0)), | |
| (120, (1.5, 1.0, -9.0)), | |
| (121, (-1.0, 1.0, -9.0)), | |
| (122, (-1.0, 1.0, -9.0)), | |
| (123, (-1.0, 1.0, -9.0)), | |
| (124, (1.5, -1.0, -9.0)), | |
| (125, (1.5, -1.0, -9.0)), | |
| (126, (1.5, -1.0, -9.0)), | |
| (127, (-1.0, -1.0, -9.0)), | |
| (128, (-1.0, -1.0, -9.0)), | |
| (129, (-1.0, -1.0, -9.0)), | |
| (130, (1.5, 1.0, -9.0)), | |
| (131, (1.5, 1.0, -9.0)), | |
| (132, (1.5, 1.0, -9.0)), | |
| (133, (-1.0, 1.0, -9.0)), | |
| (134, (-1.0, 1.0, -9.0)), | |
| (135, (-1.0, 1.0, -9.0)), | |
| (136, (1.5, -1.0, -9.0)), | |
| (137, (1.5, -1.0, -9.0)), | |
| (138, (1.5, -1.0, -9.0)), | |
| (139, (-1.0, -1.0, -9.0)), | |
| (140, (-1.0, -1.0, -9.0)), | |
| (141, (-1.0, -1.0, -9.0)), | |
| (142, (1.5, 1.0, -9.0)), | |
| (143, (1.5, 1.0, -9.0)), | |
| (144, (1.5, 1.0, -9.0)), | |
| (145, (-1.0, 1.0, -9.0)), | |
| (146, (-1.0, 1.0, -9.0)), | |
| (147, (-1.0, 1.0, -9.0)), | |
| (148, (1.5, -1.0, -9.0)), | |
| (149, (1.5, -1.0, -9.0)), | |
| (150, (1.5, -1.0, -9.0)), | |
| (151, (-1.0, -1.0, -9.0)), | |
| (152, (-1.0, -1.0, -9.0)), | |
| (153, (-1.0, -1.0, -9.0)), | |
| (154, (1.5, 1.0, -9.0)), | |
| (155, (1.5, 1.0, -9.0)), | |
| (156, (1.5, 1.0, -9.0)), | |
| (157, (-1.0, 1.0, -9.0)), | |
| (158, (-1.0, 1.0, -9.0)), | |
| (159, (-1.0, 1.0, -9.0)), | |
| (160, (1.5, -1.0, -9.0)), | |
| (161, (1.5, -1.0, -9.0)), | |
| (162, (1.5, -1.0, -9.0)), | |
| (163, (-1.0, -1.0, -9.0)), | |
| (164, (-1.0, -1.0, -9.0)), | |
| (165, (-1.0, -1.0, -9.0)), | |
| (166, (1.5, 1.0, -9.0)), | |
| (167, (1.5, 1.0, -9.0)), | |
| (168, (1.5, 1.0, -9.0)), | |
| (169, (-1.0, 1.0, -9.0)), | |
| (170, (-1.0, 1.0, -9.0)), | |
| (171, (-1.0, 1.0, -9.0)), | |
| (172, (1.5, -1.0, -9.0)), | |
| (173, (1.5, -1.0, -9.0)), | |
| (174, (1.5, -1.0, -9.0)), | |
| (175, (-1.0, -1.0, -9.0)), | |
| (176, (-1.0, -1.0, -9.0)), | |
| (177, (-1.0, -1.0, -9.0)), | |
| (178, (1.5, 1.0, -9.0)), | |
| (179, (1.5, 1.0, -9.0)), | |
| (180, (1.5, 1.0, -9.0)), | |
| (181, (-1.0, 1.0, -9.0)), | |
| (182, (-1.0, 1.0, -9.0)), | |
| (183, (-1.0, 1.0, -9.0)), | |
| (184, (1.5, -1.0, -9.0)), | |
| (185, (1.5, -1.0, -9.0)), | |
| (186, (1.5, -1.0, -9.0)), | |
| (187, (-1.0, -1.0, -9.0)), | |
| (188, (-1.0, -1.0, -9.0)), | |
| (189, (-1.0, -1.0, -9.0)), | |
| (190, (1.5, 1.0, -9.0)), | |
| (191, (1.5, 1.0, -9.0)), | |
| (192, (1.5, 1.0, -9.0)), | |
| (193, (-1.0, 1.0, -9.0)), | |
| (194, (-1.0, 1.0, -9.0)), | |
| (195, (-1.0, 1.0, -9.0)), | |
| (196, (1.5, -1.0, -9.0)), | |
| (197, (1.5, -1.0, -9.0)), | |
| (198, (1.5, -1.0, -9.0)), | |
| (199, (-1.0, -1.0, -9.0)), | |
| (200, (-1.0, -1.0, -9.0)), | |
| (201, (-1.0, -1.0, -9.0)), | |
| (202, (1.5, 1.0, -9.0)), | |
| (203, (1.5, 1.0, -9.0)), | |
| (204, (1.5, 1.0, -9.0)), | |
| (205, (-1.0, 1.0, -9.0)), | |
| (206, (-1.0, 1.0, -9.0)), | |
| (207, (-1.0, 1.0, -9.0)), | |
| (208, (1.5, -1.0, -9.0)), | |
| (209, (1.5, -1.0, -9.0)), | |
| (210, (1.5, -1.0, -9.0)), | |
| (211, (-1.0, -1.0, -9.0)), | |
| (212, (-1.0, -1.0, -9.0)), | |
| (213, (-1.0, -1.0, -9.0)), | |
| (214, (1.5, 1.0, -9.0)), | |
| (215, (1.5, 1.0, -9.0)), | |
| (216, (1.5, 1.0, -9.0)), | |
| (217, (-1.0, 1.0, -9.0)), | |
| (218, (-1.0, 1.0, -9.0)), | |
| (219, (-1.0, 1.0, -9.0)), | |
| (220, (1.5, -1.0, -9.0)), | |
| (221, (1.5, -1.0, -9.0)), | |
| (222, (1.5, -1.0, -9.0)), | |
| (223, (-1.0, -1.0, -9.0)), | |
| (224, (-1.0, -1.0, -9.0)), | |
| (225, (-1.0, -1.0, -9.0)), | |
| (226, (1.5, 1.0, -9.0)), | |
| (227, (1.5, 1.0, -9.0)), | |
| (228, (1.5, 1.0, -9.0)), | |
| (229, (-1.0, 1.0, -9.0)), | |
| (230, (-1.0, 1.0, -9.0)), | |
| (231, (-1.0, 1.0, -9.0)) | |
| ] | |
| members = [ | |
| (0, 3), | |
| (1, 2), | |
| (0, 1), | |
| (2, 3), | |
| (0, 2), | |
| (1, 3), | |
| (4, 5), | |
| (6, 7), | |
| (4, 6), | |
| (5, 7), | |
| (1, 5), | |
| (0, 4), | |
| (3, 7), | |
| (2, 6), | |
| (5, 9), | |
| (4, 8), | |
| (7, 11), | |
| (6, 10), | |
| (1, 4), | |
| (0, 5), | |
| (1, 7), | |
| (3, 5), | |
| (3, 6), | |
| (2, 7), | |
| (0, 6), | |
| (2, 4), | |
| (5, 8), | |
| (4, 9), | |
| (5, 11), | |
| (7, 9), | |
| (7, 10), | |
| (6, 11), | |
| (6, 8), | |
| (4, 10), | |
| (8, 9), | |
| (10, 11), | |
| (8, 10), | |
| (9, 11), | |
| (12, 13), | |
| (14, 15), | |
| (12, 14), | |
| (13, 15), | |
| (16, 17), | |
| (18, 19), | |
| (16, 18), | |
| (17, 19), | |
| (9, 13), | |
| (8, 12), | |
| (11, 15), | |
| (10, 14), | |
| (13, 17), | |
| (12, 16), | |
| (15, 19), | |
| (16, 18), | |
| (17, 21), | |
| (16, 20), | |
| (19, 23), | |
| (18, 22), | |
| (8, 13), | |
| (9, 12), | |
| (9, 15), | |
| (11, 13), | |
| (11, 14), | |
| (10, 15), | |
| (10, 12), | |
| (8, 14), | |
| (12, 17), | |
| (13, 16), | |
| (13, 19), | |
| (15, 17), | |
| (15, 18), | |
| (14, 19), | |
| (14, 16), | |
| (12, 18), | |
| (16, 21), | |
| (17, 20), | |
| (17, 23), | |
| (19, 21), | |
| (19, 22), | |
| (18, 23), | |
| (18, 20), | |
| (16, 22), | |
| (20, 21), | |
| (22, 23), | |
| (20, 22), | |
| (21, 23), | |
| (21, 24), | |
| (20, 26), | |
| (21, 31), | |
| (23, 26), | |
| (23, 29), | |
| (22, 31), | |
| (22, 24), | |
| (20, 29), | |
| (21, 26), | |
| (20, 24), | |
| (23, 31), | |
| (22, 29), | |
| (21, 25), | |
| (20, 25), | |
| (21, 28), | |
| (23, 28), | |
| (23, 30), | |
| (22, 30), | |
| (22, 27), | |
| (20, 27), | |
| (24, 25), | |
| (25, 26), | |
| (24, 27), | |
| (27, 29), | |
| (29, 30), | |
| (30, 31), | |
| (26, 28), | |
| (28, 31), | |
| (32, 33), | |
| (33, 34), | |
| (32, 35), | |
| (35, 37), | |
| (37, 38), | |
| (38, 39), | |
| (34, 36), | |
| (36, 39), | |
| (24, 32), | |
| (26, 34), | |
| (29, 37), | |
| (31, 39), | |
| (32, 40), | |
| (34, 42), | |
| (37, 45), | |
| (39, 47), | |
| (24, 33), | |
| (25, 32), | |
| (25, 34), | |
| (26, 33), | |
| (27, 32), | |
| (24, 35), | |
| (26, 36), | |
| (28, 34), | |
| (28, 39), | |
| (31, 36), | |
| (31, 38), | |
| (30, 39), | |
| (30, 37), | |
| (29, 38), | |
| (29, 35), | |
| (27, 37), | |
| (32, 41), | |
| (33, 40), | |
| (33, 42), | |
| (34, 41), | |
| (34, 44), | |
| (36, 42), | |
| (36, 47), | |
| (39, 44), | |
| (39, 46), | |
| (38, 47), | |
| (38, 45), | |
| (37, 46), | |
| (37, 43), | |
| (35, 45), | |
| (35, 40), | |
| (32, 43), | |
| (25, 33), | |
| (27, 35), | |
| (30, 38), | |
| (28, 36), | |
| (33, 41), | |
| (35, 43), | |
| (38, 46), | |
| (36, 44), | |
| (40, 41), | |
| (41, 42), | |
| (40, 43), | |
| (42, 44), | |
| (43, 45), | |
| (45, 46), | |
| (46, 47), | |
| (44, 47), | |
| (48, 49), | |
| (49, 50), | |
| (48, 51), | |
| (50, 52), | |
| (51, 53), | |
| (53, 54), | |
| (54, 55), | |
| (52, 55), | |
| (42, 50), | |
| (40, 48), | |
| (45, 53), | |
| (47, 55), | |
| (48, 56), | |
| (50, 58), | |
| (53, 61), | |
| (55, 63), | |
| (40, 49), | |
| (41, 48), | |
| (41, 50), | |
| (42, 49), | |
| (42, 52), | |
| (44, 50), | |
| (44, 55), | |
| (47, 52), | |
| (47, 54), | |
| (46, 55), | |
| (46, 53), | |
| (45, 54), | |
| (45, 51), | |
| (43, 53), | |
| (43, 48), | |
| (40, 51), | |
| (48, 57), | |
| (49, 56), | |
| (49, 58), | |
| (50, 57), | |
| (50, 60), | |
| (52, 58), | |
| (52, 63), | |
| (55, 60), | |
| (55, 62), | |
| (54, 63), | |
| (54, 61), | |
| (53, 62), | |
| (53, 59), | |
| (51, 61), | |
| (51, 56), | |
| (48, 59), | |
| (41, 49), | |
| (43, 51), | |
| (44, 52), | |
| (46, 54), | |
| (49, 57), | |
| (51, 59), | |
| (52, 60), | |
| (54, 62), | |
| (56, 57), | |
| (57, 58), | |
| (56, 59), | |
| (58, 60), | |
| (59, 61), | |
| (60, 63), | |
| (61, 62), | |
| (62, 63), | |
| (64, 65), | |
| (65, 66), | |
| (64, 67), | |
| (66, 68), | |
| (67, 69), | |
| (68, 71), | |
| (69, 70), | |
| (70, 71), | |
| (72, 73), | |
| (73, 74), | |
| (72, 75), | |
| (74, 76), | |
| (75, 77), | |
| (76, 79), | |
| (77, 78), | |
| (78, 79), | |
| (56, 64), | |
| (58, 66), | |
| (61, 69), | |
| (63, 71), | |
| (64, 72), | |
| (66, 74), | |
| (69, 77), | |
| (71, 79), | |
| (72, 80), | |
| (74, 82), | |
| (77, 85), | |
| (79, 87), | |
| (56, 65), | |
| (57, 64), | |
| (57, 66), | |
| (58, 65), | |
| (58, 68), | |
| (60, 66), | |
| (60, 71), | |
| (63, 68), | |
| (63, 70), | |
| (62, 71), | |
| (62, 69), | |
| (61, 70), | |
| (61, 67), | |
| (59, 69), | |
| (59, 64), | |
| (56, 67), | |
| (64, 73), | |
| (65, 72), | |
| (65, 74), | |
| (66, 73), | |
| (66, 76), | |
| (68, 74), | |
| (68, 79), | |
| (71, 76), | |
| (71, 78), | |
| (70, 79), | |
| (70, 77), | |
| (69, 78), | |
| (69, 75), | |
| (67, 77), | |
| (67, 72), | |
| (64, 75), | |
| (72, 81), | |
| (73, 80), | |
| (73, 82), | |
| (74, 81), | |
| (74, 84), | |
| (76, 82), | |
| (76, 87), | |
| (79, 84), | |
| (79, 86), | |
| (78, 87), | |
| (78, 85), | |
| (77, 86), | |
| (77, 83), | |
| (75, 85), | |
| (75, 80), | |
| (72, 83), | |
| (57, 65), | |
| (59, 67), | |
| (60, 68), | |
| (62, 70), | |
| (65, 73), | |
| (67, 75), | |
| (68, 76), | |
| (70, 78), | |
| (73, 81), | |
| (75, 83), | |
| (76, 84), | |
| (78, 86), | |
| (80, 81), | |
| (81, 82), | |
| (80, 83), | |
| (82, 84), | |
| (83, 85), | |
| (84, 87), | |
| (85, 86), | |
| (86, 87), | |
| (80, 89), | |
| (82, 92), | |
| (85, 95), | |
| (87, 98), | |
| (81, 89), | |
| (81, 92), | |
| (84, 92), | |
| (84, 98), | |
| (83, 95), | |
| (83, 89), | |
| (86, 95), | |
| (86, 98), | |
| (82, 91), | |
| (80, 90), | |
| (82, 93), | |
| (87, 99), | |
| (80, 88), | |
| (85, 94), | |
| (85, 96), | |
| (87, 97), | |
| (81, 91), | |
| (81, 90), | |
| (83, 88), | |
| (83, 94), | |
| (84, 93), | |
| (84, 99), | |
| (86, 96), | |
| (86, 97), | |
| (89, 90), | |
| (91, 92), | |
| (88, 89), | |
| (92, 93), | |
| (94, 95), | |
| (95, 96), | |
| (97, 98), | |
| (98, 99), | |
| (101, 102), | |
| (103, 104), | |
| (100, 101), | |
| (104, 105), | |
| (106, 107), | |
| (107, 108), | |
| (109, 110), | |
| (110, 111), | |
| (90, 91), | |
| (88, 94), | |
| (93, 99), | |
| (96, 97), | |
| (102, 103), | |
| (100, 106), | |
| (105, 111), | |
| (108, 109), | |
| (89, 101), | |
| (92, 104), | |
| (95, 107), | |
| (98, 110), | |
| (101, 113), | |
| (104, 116), | |
| (107, 119), | |
| (110, 122), | |
| (92, 103), | |
| (91, 104), | |
| (89, 102), | |
| (90, 101), | |
| (88, 101), | |
| (89, 100), | |
| (92, 105), | |
| (93, 104), | |
| (99, 110), | |
| (98, 111), | |
| (98, 109), | |
| (97, 110), | |
| (96, 107), | |
| (95, 108), | |
| (95, 106), | |
| (94, 107), | |
| (101, 114), | |
| (102, 113), | |
| (101, 112), | |
| (100, 113), | |
| (103, 116), | |
| (104, 115), | |
| (104, 117), | |
| (105, 116), | |
| (111, 122), | |
| (110, 123), | |
| (110, 121), | |
| (109, 122), | |
| (108, 119), | |
| (107, 120), | |
| (107, 118), | |
| (106, 119), | |
| (90, 102), | |
| (91, 103), | |
| (96, 108), | |
| (97, 109), | |
| (88, 100), | |
| (94, 106), | |
| (93, 105), | |
| (99, 111), | |
| (102, 114), | |
| (103, 115), | |
| (108, 120), | |
| (109, 121), | |
| (100, 112), | |
| (106, 118), | |
| (105, 117), | |
| (111, 123), | |
| (90, 103), | |
| (91, 102), | |
| (96, 109), | |
| (97, 108), | |
| (88, 106), | |
| (94, 100), | |
| (93, 111), | |
| (99, 105), | |
| (102, 115), | |
| (103, 114), | |
| (108, 121), | |
| (109, 120), | |
| (105, 123), | |
| (111, 117), | |
| (100, 118), | |
| (106, 112), | |
| (112, 113), | |
| (113, 114), | |
| (115, 116), | |
| (116, 117), | |
| (118, 119), | |
| (119, 120), | |
| (121, 122), | |
| (122, 123), | |
| (124, 125), | |
| (125, 126), | |
| (127, 128), | |
| (128, 129), | |
| (130, 131), | |
| (131, 132), | |
| (133, 134), | |
| (134, 135), | |
| (136, 137), | |
| (137, 138), | |
| (139, 140), | |
| (140, 141), | |
| (142, 143), | |
| (143, 144), | |
| (145, 146), | |
| (146, 147), | |
| (114, 115), | |
| (120, 121), | |
| (112, 118), | |
| (117, 123), | |
| (126, 127), | |
| (132, 133), | |
| (124, 130), | |
| (129, 135), | |
| (138, 139), | |
| (144, 145), | |
| (136, 142), | |
| (141, 147), | |
| (113, 125), | |
| (116, 128), | |
| (119, 131), | |
| (122, 134), | |
| (125, 137), | |
| (128, 140), | |
| (131, 143), | |
| (134, 146), | |
| (137, 149), | |
| (140, 152), | |
| (143, 155), | |
| (146, 158), | |
| (112, 125), | |
| (113, 124), | |
| (113, 126), | |
| (114, 125), | |
| (115, 128), | |
| (116, 127), | |
| (116, 129), | |
| (117, 128), | |
| (118, 131), | |
| (119, 130), | |
| (119, 132), | |
| (120, 131), | |
| (121, 134), | |
| (122, 133), | |
| (122, 135), | |
| (123, 134), | |
| (124, 137), | |
| (125, 136), | |
| (125, 138), | |
| (126, 137), | |
| (127, 140), | |
| (128, 139), | |
| (128, 141), | |
| (129, 140), | |
| (130, 143), | |
| (131, 142), | |
| (131, 144), | |
| (132, 143), | |
| (133, 146), | |
| (134, 145), | |
| (134, 147), | |
| (135, 146), | |
| (136, 149), | |
| (137, 148), | |
| (137, 150), | |
| (138, 149), | |
| (139, 152), | |
| (140, 151), | |
| (140, 153), | |
| (141, 152), | |
| (142, 155), | |
| (143, 154), | |
| (143, 156), | |
| (144, 155), | |
| (145, 158), | |
| (146, 157), | |
| (146, 159), | |
| (147, 158), | |
| (114, 126), | |
| (115, 127), | |
| (120, 132), | |
| (121, 133), | |
| (112, 124), | |
| (118, 130), | |
| (117, 129), | |
| (123, 135), | |
| (126, 138), | |
| (127, 139), | |
| (132, 144), | |
| (133, 145), | |
| (124, 136), | |
| (130, 142), | |
| (129, 141), | |
| (135, 147), | |
| (138, 150), | |
| (139, 151), | |
| (144, 156), | |
| (145, 157), | |
| (136, 148), | |
| (142, 154), | |
| (141, 153), | |
| (147, 159), | |
| (114, 127), | |
| (115, 126), | |
| (120, 133), | |
| (121, 132), | |
| (112, 130), | |
| (118, 124), | |
| (117, 135), | |
| (123, 129), | |
| (126, 139), | |
| (127, 138), | |
| (132, 145), | |
| (133, 144), | |
| (124, 142), | |
| (130, 136), | |
| (129, 147), | |
| (135, 141), | |
| (138, 151), | |
| (139, 150), | |
| (144, 157), | |
| (145, 156), | |
| (136, 154), | |
| (142, 148), | |
| (141, 153), | |
| (147, 153), | |
| (148, 149), | |
| (149, 150), | |
| (151, 152), | |
| (152, 153), | |
| (154, 155), | |
| (155, 156), | |
| (157, 158), | |
| (158, 159), | |
| (160, 161), | |
| (161, 162), | |
| (163, 164), | |
| (164, 165), | |
| (166, 167), | |
| (167, 168), | |
| (169, 170), | |
| (170, 171), | |
| (172, 173), | |
| (173, 174), | |
| (175, 176), | |
| (176, 177), | |
| (178, 179), | |
| (179, 180), | |
| (181, 182), | |
| (182, 183), | |
| (150, 151), | |
| (156, 157), | |
| (148, 154), | |
| (153, 159), | |
| (162, 163), | |
| (168, 169), | |
| (160, 166), | |
| (165, 171), | |
| (174, 175), | |
| (180, 181), | |
| (172, 178), | |
| (177, 183), | |
| (149, 161), | |
| (152, 164), | |
| (155, 167), | |
| (158, 170), | |
| (161, 173), | |
| (164, 176), | |
| (167, 179), | |
| (170, 182), | |
| (173, 185), | |
| (176, 188), | |
| (179, 191), | |
| (182, 194), | |
| (148, 161), | |
| (149, 160), | |
| (149, 162), | |
| (150, 161), | |
| (151, 164), | |
| (152, 163), | |
| (152, 165), | |
| (153, 164), | |
| (154, 167), | |
| (155, 166), | |
| (155, 168), | |
| (156, 167), | |
| (157, 170), | |
| (158, 169), | |
| (158, 171), | |
| (159, 170), | |
| (160, 173), | |
| (161, 172), | |
| (161, 174), | |
| (162, 173), | |
| (163, 176), | |
| (164, 175), | |
| (164, 177), | |
| (165, 176), | |
| (166, 179), | |
| (167, 178), | |
| (167, 180), | |
| (168, 179), | |
| (169, 182), | |
| (170, 181), | |
| (170, 183), | |
| (171, 182), | |
| (172, 185), | |
| (173, 184), | |
| (173, 186), | |
| (174, 185), | |
| (175, 188), | |
| (176, 187), | |
| (176, 189), | |
| (177, 188), | |
| (178, 191), | |
| (179, 190), | |
| (179, 192), | |
| (180, 191), | |
| (181, 194), | |
| (182, 193), | |
| (182, 195), | |
| (183, 194), | |
| (150, 162), | |
| (151, 163), | |
| (156, 168), | |
| (157, 169), | |
| (148, 160), | |
| (154, 166), | |
| (153, 165), | |
| (159, 171), | |
| (162, 174), | |
| (163, 175), | |
| (168, 180), | |
| (169, 181), | |
| (160, 172), | |
| (166, 178), | |
| (165, 177), | |
| (171, 183), | |
| (174, 186), | |
| (175, 187), | |
| (180, 192), | |
| (181, 193), | |
| (172, 184), | |
| (178, 190), | |
| (177, 189), | |
| (183, 195), | |
| (150, 163), | |
| (151, 162), | |
| (156, 169), | |
| (157, 168), | |
| (148, 166), | |
| (154, 160), | |
| (153, 171), | |
| (159, 165), | |
| (162, 175), | |
| (163, 174), | |
| (168, 181), | |
| (169, 180), | |
| (160, 178), | |
| (166, 172), | |
| (165, 183), | |
| (171, 177), | |
| (174, 187), | |
| (175, 186), | |
| (180, 193), | |
| (180, 192), | |
| (172, 190), | |
| (178, 184), | |
| (177, 195), | |
| (183, 189), | |
| (184, 185), | |
| (185, 186), | |
| (187, 188), | |
| (188, 189), | |
| (190, 191), | |
| (191, 192), | |
| (193, 194), | |
| (194, 195), | |
| (196, 197), | |
| (197, 198), | |
| (199, 200), | |
| (200, 201), | |
| (202, 203), | |
| (203, 204), | |
| (205, 206), | |
| (206, 207), | |
| (208, 209), | |
| (209, 210), | |
| (211, 212), | |
| (212, 213), | |
| (214, 215), | |
| (215, 216), | |
| (217, 218), | |
| (218, 219), | |
| (186, 187), | |
| (192, 193), | |
| (184, 190), | |
| (189, 195), | |
| (198, 199), | |
| (204, 205), | |
| (196, 202), | |
| (201, 207), | |
| (210, 211), | |
| (216, 217), | |
| (208, 214), | |
| (213, 219), | |
| (185, 197), | |
| (188, 200), | |
| (191, 203), | |
| (194, 206), | |
| (197, 209), | |
| (200, 212), | |
| (203, 215), | |
| (206, 218), | |
| (209, 221), | |
| (212, 224), | |
| (215, 227), | |
| (218, 230), | |
| (184, 197), | |
| (185, 196), | |
| (185, 198), | |
| (186, 197), | |
| (187, 200), | |
| (188, 199), | |
| (188, 201), | |
| (189, 200), | |
| (190, 203), | |
| (191, 202), | |
| (191, 204), | |
| (192, 203), | |
| (193, 206), | |
| (194, 205), | |
| (194, 207), | |
| (195, 206), | |
| (196, 209), | |
| (197, 208), | |
| (197, 210), | |
| (198, 209), | |
| (199, 212), | |
| (200, 211), | |
| (200, 213), | |
| (201, 212), | |
| (202, 215), | |
| (203, 214), | |
| (203, 216), | |
| (204, 215), | |
| (205, 218), | |
| (206, 217), | |
| (206, 219), | |
| (207, 218), | |
| (208, 221), | |
| (209, 220), | |
| (209, 222), | |
| (210, 221), | |
| (211, 224), | |
| (212, 223), | |
| (212, 225), | |
| (213, 224), | |
| (214, 227), | |
| (215, 226), | |
| (215, 228), | |
| (216, 227), | |
| (217, 230), | |
| (218, 229), | |
| (218, 231), | |
| (219, 230), | |
| (186, 198), | |
| (187, 199), | |
| (192, 204), | |
| (193, 205), | |
| (184, 196), | |
| (190, 202), | |
| (189, 201), | |
| (195, 207), | |
| (198, 210), | |
| (199, 211), | |
| (204, 216), | |
| (205, 217), | |
| (196, 208), | |
| (202, 214), | |
| (201, 213), | |
| (207, 219), | |
| (210, 222), | |
| (211, 223), | |
| (216, 228), | |
| (217, 229), | |
| (208, 220), | |
| (214, 226), | |
| (213, 225), | |
| (219, 231), | |
| (186, 199), | |
| (187, 198), | |
| (192, 205), | |
| (193, 204), | |
| (184, 202), | |
| (190, 196), | |
| (189, 207), | |
| (195, 201), | |
| (198, 211), | |
| (199, 210), | |
| (204, 217), | |
| (205, 216), | |
| (196, 214), | |
| (202, 208), | |
| (201, 219), | |
| (207, 213), | |
| (210, 223), | |
| (211, 222), | |
| (216, 229), | |
| (217, 228), | |
| (208, 220), | |
| (214, 226), | |
| (213, 225), | |
| (219, 231), | |
| (220, 221), | |
| (221, 222), | |
| (223, 224), | |
| (224, 225), | |
| (226, 227), | |
| (227, 228), | |
| (229, 230), | |
| (230, 231), | |
| (222, 223), | |
| (228, 229), | |
| (220, 226), | |
| (225, 231), | |
| (221, 233), | |
| (224, 236), | |
| (227, 239), | |
| (230, 242), | |
| (222, 233), | |
| (220, 233), | |
| (223, 236), | |
| (225, 236), | |
| (226, 239), | |
| (228, 239), | |
| (229, 242), | |
| (231, 242), | |
| (221, 234), | |
| (221, 232), | |
| (224, 235), | |
| (224, 237), | |
| (227, 238), | |
| (227, 240), | |
| (230, 241), | |
| (230, 243), | |
| (222, 234), | |
| (223, 235), | |
| (228, 240), | |
| (229, 241), | |
| (220, 232), | |
| (226, 238), | |
| (225, 237), | |
| (231, 243), | |
| (222, 235), | |
| (223, 234), | |
| (228, 241), | |
| (229, 240), | |
| (220, 238), | |
| (226, 232), | |
| (225, 243), | |
| (231, 237) | |
| ] | |
| # memberType : Member type which contain the information about | |
| # 1) cross-sectional area, | |
| # 2) Young's modulus, | |
| # 3) density of this member. | |
| # Read data in this [.py]: | |
| for joint, support in zip(joints, supports): | |
| truss.AddNewJoint(joint, support) | |
| for jointID, force in forces: | |
| truss.AddExternalForce(jointID, force) | |
| index = 0 | |
| for jointID0, jointID1 in members: | |
| # memberType = MemberType(A[index].item(), 10000.0, 0.1) | |
| memberType = MemberType(A[index].item(), 10000.0, 0.1) | |
| if (E != None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), E[index].item(), Rho[index].item()) | |
| elif (E != None) & (Rho==None): | |
| memberType = MemberType(A[index].item(), E[index].item(), 0.1) | |
| elif (E == None) & (Rho!=None): | |
| memberType = MemberType(A[index].item(), 10000.0, Rho[index].item()) | |
| truss.AddNewMember(jointID0, jointID1, memberType) | |
| index += 1 | |
| # Do direct stiffness method: | |
| truss.Solve() | |
| # Dump all the structural analysis results into a .json file: | |
| # truss.DumpIntoJSON(TEST_OUTPUT_FILE) | |
| # Get result of structural analysis: | |
| displace, stress, resistance = truss.GetDisplacements(), truss.GetInternalStresses(), truss.GetResistances() | |
| return displace, stress, resistance, truss, truss.weight | |
| ########################################################################################## | |
| ########################################################################################## | |
| ########################################################################################## | |
| ########################################################################################## | |
| ########################################################################################## | |
| def Truss10D_Scaling(X): | |
| assert torch.is_tensor(X) and X.size(1) == 10, "Input must be an n-by-10 PyTorch tensor." | |
| X_scaled = X * (35-0.1) + 0.1 | |
| return X_scaled | |
| def Truss25D_Scaling(X): | |
| assert torch.is_tensor(X) and X.size(1) == 25, "Input must be an n-by-25 PyTorch tensor." | |
| X_scaled = X * (10-0.31) + 0.31 | |
| return X_scaled | |
| def Truss72D_Scaling(X): | |
| assert torch.is_tensor(X) and X.size(1) == 72, "Input must be an n-by-72 PyTorch tensor." | |
| X_scaled = X * (10-0.1) + 0.1 | |
| return X_scaled | |
| def Truss120D_Scaling(X): | |
| assert torch.is_tensor(X) and X.size(1) == 120, "Input must be an n-by-120 PyTorch tensor." | |
| X_scaled = X * (20-0.775) + 0.775 | |
| return X_scaled | |
| def Truss360D_Scaling(X): | |
| assert torch.is_tensor(X) and X.size(1) == 360, "Input must be an n-by-120 PyTorch tensor." | |
| X_scaled = torch.zeros(X.shape) | |
| X_scaled[:,:120] = X[:,:120] * (20-0.775) + 0.775 | |
| X_scaled[:,120:240] = X[:,120:240] * (5e4-1e3) + 1e3 | |
| X_scaled[:,240:360] = X[:,240:360] * (0.3-0.05) + 0.05 | |
| return X_scaled | |
| def Truss10D(A): | |
| assert torch.is_tensor(A) and A.size(1) == 10, "Input must be an n-by-10 PyTorch tensor." | |
| E = None | |
| Rho = None | |
| n = A.size(0) | |
| fx = torch.zeros(n,1) | |
| # 10 bar stress constraints, 4 displacement constraints | |
| gx = torch.zeros(n,14) | |
| for ii in range(n): | |
| displace, _, stress, _, _, weights = Truss10bar(A[ii,:], None, None) | |
| if (E != None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss10bar(A[ii,:], E[ii,:], Rho[ii,:]) | |
| elif (E != None) & (Rho==None): | |
| displace, _, stress, _, _, weights = Truss10bar(A[ii,:], E[ii,:], None) | |
| elif (E == None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss10bar(A[ii,:], None, Rho[ii,:]) | |
| fx[ii,0] = -weights # Negate for maximizing optimization | |
| for ss in range(10): | |
| gx[ii,ss] = abs(stress[ss]) - 25000 | |
| gx[ii,10] = max(abs(displace[1][0]), abs(displace[1][1])) - 2 | |
| gx[ii,11] = max(abs(displace[2][0]), abs(displace[2][1])) - 2 | |
| gx[ii,12] = max(abs(displace[4][0]), abs(displace[4][1])) - 2 | |
| gx[ii,13] = max(abs(displace[5][0]), abs(displace[5][1])) - 2 | |
| return gx, fx | |
| def Truss25D(A): | |
| assert torch.is_tensor(A) and A.size(1) == 25, "Input must be an n-by-25 PyTorch tensor." | |
| E = None | |
| Rho = None | |
| n = A.size(0) | |
| fx = torch.zeros(n,1) | |
| # 25 bar stress constraints, 6 displacement constraints | |
| gx = torch.zeros(n,31) | |
| for ii in range(n): | |
| displace, _, stress, _, _, weights = Truss25bar(A[ii,:], None, None) | |
| if (E != None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss25bar(A[ii,:], E[ii,:], Rho[ii,:]) | |
| elif (E != None) & (Rho==None): | |
| displace, _, stress, _, _, weights = Truss25bar(A[ii,:], E[ii,:], None) | |
| elif (E == None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss25bar(A[ii,:], None, Rho[ii,:]) | |
| fx[ii,0] = -weights # Negate for maximizing optimization | |
| # Max stress less than 40ksi (34809) | |
| for ss in range(25): | |
| gx[ii,ss] = abs(stress[ss]) - 34809 | |
| # Max displacement in x and y direction less than .4 inches | |
| for dd in range(6): | |
| # print(displace[dd]) | |
| gx[ii,25+dd] = max(abs(displace[dd][0]), abs(displace[dd][1])) - 0.039 | |
| return gx, fx | |
| def Truss72D_4forces(A): | |
| assert torch.is_tensor(A) and A.size(1) == 72, "Input must be an n-by-72 PyTorch tensor." | |
| E = None | |
| Rho = None | |
| n = A.size(0) | |
| fx = torch.zeros(n,1) | |
| # 72 bar stress constraints, 4 displacement constraints | |
| gx = torch.zeros(n,76) | |
| for ii in range(n): | |
| displace, _, stress, _, _, weights = Truss72bar_4forces(A[ii,:], None, None) | |
| if (E != None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss72bar_4forces(A[ii,:], E[ii,:], Rho[ii,:]) | |
| elif (E != None) & (Rho==None): | |
| displace, _, stress, _, _, weights = Truss72bar_4forces(A[ii,:], E[ii,:], None) | |
| elif (E == None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss72bar_4forces(A[ii,:], None, Rho[ii,:]) | |
| fx[ii,0] = -weights # Negate for maximizing optimization | |
| # Max stress less than 25000 | |
| for ss in range(72): | |
| gx[ii,ss] = abs(stress[ss]) - 25000 | |
| # Max displacement in x and y direction less than .25 inches | |
| # print(displace[16], displace[17], displace[18], displace[19]) | |
| gx[ii,72] = max(abs(displace[16][0]), abs(displace[16][1])) - 0.25 | |
| gx[ii,73] = max(abs(displace[17][0]), abs(displace[17][1])) - 0.25 | |
| gx[ii,74] = max(abs(displace[18][0]), abs(displace[18][1])) - 0.25 | |
| gx[ii,75] = max(abs(displace[19][0]), abs(displace[19][1])) - 0.25 | |
| return gx, fx | |
| def Truss120D(A): | |
| assert torch.is_tensor(A) and A.size(1) == 120, "Input must be an n-by-120 PyTorch tensor." | |
| E = None | |
| Rho = None | |
| n = A.size(0) | |
| fx = torch.zeros(n,1) | |
| # 120 bar stress constraints, 1 displacement constraints | |
| gx = torch.zeros(n,121) | |
| for ii in range(n): | |
| # print(ii) | |
| # print(A[ii,:].shape) | |
| displace, _, stress, _, _, weights = Truss120bar(A[ii,:], None, None) | |
| if (E != None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss120bar(A[ii,:], E[ii,:], Rho[ii,:]) | |
| elif (E != None) & (Rho==None): | |
| displace, _, stress, _, _, weights = Truss120bar(A[ii,:], E[ii,:], None) | |
| elif (E == None) & (Rho!=None): | |
| displace, _, stress, _, _, weights = Truss120bar(A[ii,:], None, Rho[ii,:]) | |
| fx[ii,0] = -weights # Negate for maximizing optimization | |
| # Max stress less than 34800 | |
| for ss in range(120): | |
| gx[ii,ss] = abs(stress[ss]) - 34800 | |
| # Max displacement in x and y direction less than | |
| MAX_DIST = 0 | |
| for dd in range(len(displace)): | |
| if max(displace[dd]) > MAX_DIST: | |
| MAX_DIST = max(abs(displace[dd])) | |
| gx[ii,120] = MAX_DIST - 0.1969 | |
| return gx, fx | |
| def Truss360D(X): | |
| assert torch.is_tensor(X) and X.size(1) == 360, "Input must be an n-by-120 PyTorch tensor." | |
| A = X[:,:120] | |
| E = X[:,120:240] | |
| Rho = X[:,240:360] | |
| n = A.size(0) | |
| fx = torch.zeros(n,1) | |
| # 120 bar stress constraints, 1 displacement constraints | |
| gx = torch.zeros(n,121) | |
| for ii in range(n): | |
| # print(ii) | |
| # print(A[ii,:].shape) | |
| displace, _, stress, _, _, weights = Truss120bar(A[ii,:], E[ii,:], Rho[ii,:]) | |
| # if (E != None) & (Rho!=None): | |
| # displace, _, stress, _, _, weights = Truss120bar(A[ii,:], E[ii,:], Rho[ii,:]) | |
| # elif (E != None) & (Rho==None): | |
| # displace, _, stress, _, _, weights = Truss120bar(A[ii,:], E[ii,:], None) | |
| # elif (E == None) & (Rho!=None): | |
| # displace, _, stress, _, _, weights = Truss120bar(A[ii,:], None, Rho[ii,:]) | |
| fx[ii,0] = -weights # Negate for maximizing optimization | |
| # Max stress less than 34800 | |
| for ss in range(120): | |
| gx[ii,ss] = abs(stress[ss]) - 34800 | |
| # gx[ii,ss] = abs(stress[ss]) - 34800 | |
| # Max displacement in x and y direction less than | |
| MAX_DIST = 0 | |
| for dd in range(len(displace)): | |
| if max(displace[dd]) > MAX_DIST: | |
| MAX_DIST = max(abs(displace[dd])) | |
| gx[ii,120] = MAX_DIST - 0.1969 | |
| return gx, fx | |