def build_test_beam(): a = Assembly("MyAssembly") p = Part("MyPart") p.add_beam(Beam("Bm", (0, 0, 0), (1, 0, 0), "IPE300")) p.gmsh.mesh(0.5) a.add_part(p) return a
def build_test_beam(): a = Assembly('MyAssembly') p = Part('MyPart') p.add_beam(Beam('Bm', (0, 0, 0), (1, 0, 0), 'IPE300')) p.gmsh.mesh(0.5) a.add_part(p) return a
def test_profiles_to_ifc(self): a = Assembly("MyAssembly") p = Part("MyPart") p.add_beam( Beam("bm1", n1=[0, 0, 0], n2=[2, 0, 0], sec="IPE220", colour="red")) p.add_beam( Beam("bm2", n1=[0, 0, 1], n2=[2, 0, 1], sec="HP220x10", colour="blue")) p.add_beam( Beam("bm3", n1=[0, 0, 2], n2=[2, 0, 2], sec="BG800x400x20x40", colour="green")) p.add_beam( Beam("bm4", n1=[0, 0, 3], n2=[2, 0, 3], sec="CIRC200", colour="green")) p.add_beam( Beam("bm5", n1=[0, 0, 4], n2=[2, 0, 4], sec="TUB200x10", colour="green")) a.add_part(p) a.to_ifc(test_folder / "my_beam_profiles.ifc")
def test_fem(self): a = Assembly("MyAssembly") p = Part("MyPart") p.add_beam(Beam("Bm", (0, 0, 0), (1, 0, 0), "IPE300")) a.add_part(p) a.gmsh.mesh() a._repr_html_() a._renderer.toggle_mesh_visibility()
def test_profiles_to_ifc(ifc_test_dir): a = Assembly("MyAssembly") p = Part("MyPart") p.add_beam(Beam("bm1", n1=[0, 0, 0], n2=[2, 0, 0], sec="IPE220", colour="red")) p.add_beam(Beam("bm2", n1=[0, 0, 1], n2=[2, 0, 1], sec="HP220x10", colour="blue")) p.add_beam(Beam("bm3", n1=[0, 0, 2], n2=[2, 0, 2], sec="BG800x400x20x40", colour="green")) p.add_beam(Beam("bm4", n1=[0, 0, 3], n2=[2, 0, 3], sec="CIRC200", colour="green")) p.add_beam(Beam("bm5", n1=[0, 0, 4], n2=[2, 0, 4], sec="TUB200x10", colour="green")) a.add_part(p) _ = a.to_ifc(ifc_test_dir / "my_beam_profiles.ifc", return_file_obj=True)
def create_ifc(name, up=(0, 0, 1)): a = Assembly("MyAssembly") p = Part(name) p.add_beam( Beam( "bm_up", n1=[0, 0, 0], n2=[2, 0, 0], sec="HP200x10", mat=Material("SteelMat", CarbonSteel("S420")), colour="red", up=up, )) a.add_part(p) a.to_ifc(test_folder / name)
def get_fsec_bm_collection(): sec = Section('myIPE', from_str='BG800x400x30x40') mat = Material('my_mat') p = Part('my_part') bm = Beam('my_beam', (0, 0, 0), (1, 0, 0), sec, mat) elem = Elem(1, [bm.n1, bm.n2], 'B31') fem_set = FemSet('my_set', [elem], 'elset') fem_sec = FemSection('my_sec', 'beam', fem_set, mat, sec, local_z=(0, 0, 1)) p.add_beam(bm) p.fem.elements.add(elem) p.fem.sets.add(fem_set) p.fem.sections.add(fem_sec) return p
def get_fsec_bm_collection(): sec = Section("myIPE", from_str="BG800x400x30x40") mat = Material("my_mat") p = Part("my_part") bm = Beam("my_beam", (0, 0, 0), (1, 0, 0), sec, mat) elem = Elem(1, [bm.n1, bm.n2], "B31") fem_set = FemSet("my_set", [elem], "elset") fem_sec = FemSection("my_sec", "beam", fem_set, mat, sec, local_z=(0, 0, 1)) p.add_beam(bm) p.fem.elements.add(elem) p.fem.sets.add(fem_set) p.fem.sections.add(fem_sec) return p
def test_ifc_groups(self): a = Assembly("MySiteName", project="MyTestProject") p = Part( "MyTopSpatialLevel", metadata=dict(ifctype="spatial", description="MyTopLevelSpace"), ) p.add_beam(Beam("bm1", n1=[0, 0, 0], n2=[2, 0, 0], sec="IPE220", colour="red")) a.add_part(p) newp = Part( "MySecondLevel", metadata=dict(ifctype="spatial", description="MySecondLevelSpace"), ) newp.add_beam(Beam("bm2", n1=[0, 0, 0], n2=[0, 2, 0], sec="IPE220", colour="blue")) p.add_part(newp) newp2 = Part( "MyThirdLevel", metadata=dict(ifctype="spatial", description="MyThirdLevelSpace"), ) newp2.add_beam(Beam("bm3", n1=[0, 0, 0], n2=[0, 0, 2], sec="IPE220", colour="green")) newp2.add_plate( Plate( "pl1", [(0, 0, 0), (0, 0, 2), (0, 2, 2), (0, 2.0, 0.0)], 0.01, use3dnodes=True, ) ) newp.add_part(newp2) a.to_ifc(test_folder / "my_test_groups.ifc")
def test_beam_mesh(self): import gmsh try: gmsh.finalize() except: pass bm = Beam(f"bm1", n1=[0, 0, 0], n2=[1, 0, 0], sec="IPE220") bm.add_penetration( PrimCyl("Cylinder", (0.5, -0.5, 0), (0.5, 0.5, 0), 0.05)) p = Part('MyFem') p.add_beam(bm) create_beam_mesh(bm, p.fem, "solid", interactive=False) a = Assembly('Test') / p a.to_fem('my_test', 'xdmf', scratch_dir=test_folder, fem_converter='meshio', overwrite=True)
def test_beam_directions(self): a = Assembly("AdaRotatedProfiles") p = Part("Part") a.add_part(p) props = dict(spre="/JSB_VA-DIN-SPEC/Y26IPE400", matr="/GR.355-II(Y26)_jsb_va") p.add_beam( Beam( "bm_test2X0", n1=[0, 0, 0], n2=[5, 0, 0], sec=section, angle=0, metadata=dict(props=props), ) ) p.add_beam( Beam( "bm_test2X90", n1=[0, 0, 1], n2=[5, 0, 1], sec=section, angle=90, metadata=dict(props=props), ) ) p.add_beam( Beam( "bm_test2Y0", n1=[0, 0, 2], n2=[0, 5, 2], sec=section, angle=0, metadata=dict(props=props), ) ) p.add_beam( Beam( "bm_test2Y90", n1=[0, 0, 3], n2=[0, 5, 3], sec=section, angle=90, metadata=dict(props=props), ) ) a.to_ifc(test_folder / "my_angled_profiles.ifc")
def test_beam_mesh(self): import gmsh try: gmsh.finalize() except BaseException as e: logging.error(e) pass bm = Beam("bm1", n1=[0, 0, 0], n2=[1, 0, 0], sec="IPE220") bm.add_penetration( PrimCyl("Cylinder", (0.5, -0.5, 0), (0.5, 0.5, 0), 0.05)) p = Part("MyFem") p.add_beam(bm) create_beam_mesh(bm, p.fem, "solid", interactive=False) a = Assembly("Test") / p a.to_fem("my_test", "xdmf", scratch_dir=test_folder, fem_converter="meshio", overwrite=True)
def test_meter_to_millimeter(self): a = Assembly("MySiteName", project="MyTestProject") p = Part( "MyTopSpatialLevel", metadata=dict(ifctype="storey", description="MyTopLevelSpace"), ) bm1 = Beam("bm1", n1=[0, 0, 0], n2=[2, 0, 0], sec="IPE220", colour="red") p.add_beam(bm1) a.add_part(p) newp = Part( "MySecondLevel", metadata=dict(ifctype="storey", description="MySecondLevelSpace"), ) bm2 = Beam("bm2", n1=[0, 0, 0], n2=[0, 2, 0], sec="IPE220", colour="blue") newp.add_beam(bm2) p.add_part(newp) newp2 = Part( "MyThirdLevel", metadata=dict(ifctype="storey", description="MyThirdLevelSpace"), ) bm3 = Beam("bm3", n1=[0, 0, 0], n2=[0, 0, 2], sec="IPE220", colour="green") newp2.add_beam(bm3) pl1 = Plate( "pl1", [(0, 0, 0), (0, 0, 2), (0, 2, 2), (0, 2.0, 0.0)], 0.01, use3dnodes=True, ) newp2.add_plate(pl1) newp.add_part(newp2) a.to_ifc(test_folder / "my_test_in_meter.ifc") a.units = "mm"
def test_beam_rotation_by_angle(self): # Define beam rotations using vectors a = Assembly("AdaRotatedProfiles") p = Part("Part") a.add_part(p) for i, angle in enumerate(angles): # Along X-Axis bm = Beam( f"bmX_n{i}_a", n1=[0, 0, 0], n2=[5, 0, 0], sec=section, angle=angle, metadata=dict(props=dict(axis="X", angle=angle, vector=None)), ) assert tuple(bm.up.tolist()) == vectorX[i] p.add_beam(bm) bm = Beam( f"bmX_n{i}_v", n1=[0, 0, 0], n2=[5, 0, 0], sec=section, up=vectorX[i], metadata=dict(props=dict(axis="X", angle=None, vector=vectorX[i])), ) p.add_beam(bm) # Must fix error in 270 deg angle calculation # assert bm._angle == angle # Along Y-Axis bm = Beam( f"bmY_n{i}_a", n1=[0, 0, 0], n2=[0, 5, 0], sec=section, angle=angle, metadata=dict(props=dict(axis="Y", angle=angle, vector=None)), ) p.add_beam(bm) assert tuple(bm.up.tolist()) == vectorY[i] bm = Beam( f"bmY_n{i}_v", n1=[0, 0, 0], n2=[0, 5, 0], sec=section, up=vectorY[i], metadata=dict(props=dict(axis="Y", angle=None, vector=vectorY[i])), ) p.add_beam(bm) # assert bm._angle == angle # Along Z-Axis bm = Beam( f"bmZ_n{i}_a", n1=[0, 0, 0], n2=[0, 0, 5], sec=section, angle=angle, metadata=dict(props=dict(axis="Z", angle=angle, vector=None)), ) p.add_beam(bm) assert tuple(bm.up.tolist()) == vectorZ[i] bm = Beam( f"bmZ_n{i}_v", n1=[0, 0, 0], n2=[0, 0, 5], sec=section, up=vectorZ[i], metadata=dict(props=dict(axis="Z", angle=None, vector=vectorZ[i])), ) p.add_beam(bm) # assert bm._angle == angle p.to_stp(test_folder / "my_angle_rotated_profiles.stp") a.to_ifc(test_folder / "my_angle_rotated_profiles.ifc")