def add_random_cutouts(bm: Beam): h = 0.2 r = 0.02 normal = [0, 1, 0] xdir = [-1, 0, 0] # Polygon Extrusions origin = np.array([0.2, -0.1, -0.1]) points = [(0, 0), (0.1, 0), (0.05, 0.1)] bm.add_penetration(PrimExtrude("Poly1", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.05, 0.1, r)] bm.add_penetration(PrimExtrude("Poly2", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.1, 0.2, r), (0.0, 0.2, r)] bm.add_penetration(PrimExtrude("Poly3", points, h, normal, origin, xdir)) # Cylinder Extrude x = origin[0] + 0.2 bm.add_penetration(PrimCyl("cylinder", (x, -0.1, 0), (x, 0.1, 0), 0.1)) # Box Extrude x += 0.2 bm.add_penetration(PrimBox("box", (x, -0.1, -0.1), (x + 0.2, 0.1, 0.1)))
def test_poly_extrude(): bm = Beam("MyBeam", (0, 0, 0), (2, 0, 0), Section("myIPE", from_str="IPE400")) a = Assembly("Test") / [Part("MyPart") / bm] h = 0.2 r = 0.02 origin = np.array([0.1, 0.1, -0.1]) normal = np.array([0, -1, 0]) xdir = np.array([1, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.05, 0.1, r)] bm.add_penetration(PrimExtrude("my_pen1", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.1, 0.2, r), (0, 0.2, r)] bm.add_penetration(PrimExtrude("my_pen2", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.2, 0, r), (0.25, 0.1, r), (0.25, 0.25, r), (0, 0.25, r)] bm.add_penetration(PrimExtrude("my_pen3", points, h, normal, origin, xdir)) origin += np.array([0.4, 0, 0]) points = [ (0, 0, r), (0.2, 0, r), (0.25, 0.1, r), (0.5, 0.0, r), (0.5, 0.25, r), (0, 0.25, r), ] bm.add_penetration(PrimExtrude("my_pen4", points, h, normal, origin, xdir)) _ = a.to_ifc(test_dir / "penetrations_poly.ifc", return_file_obj=True)
def test_mix_extrude(): bm = Beam("MyBeam", (0, 0, 0), (1.5, 0, 0), Section("myIPE", from_str="IPE400")) a = Assembly("Test", user=User("krande")) / [Part("MyPart") / bm] h = 0.2 r = 0.02 # Polygon Extrusions origin = np.array([0.1, 0.1, -0.1]) normal = np.array([0, -1, 0]) xdir = np.array([1, 0, 0]) points = [(0, 0), (0.05, 0.1), (0.1, 0)] bm.add_penetration(PrimExtrude("my_pen", points, h, normal, origin, xdir)) origin = np.array([0.3, 0.1, -0.1]) points = [(0, 0, r), (0.1, 0, r), (0.05, 0.1, r)] bm.add_penetration(PrimExtrude("my_pen3", points, h, normal, origin, xdir)) origin = np.array([0.5, 0.1, -0.1]) points = [(0, 0, r), (0.1, 0, r), (0.1, 0.2, r), (0.0, 0.2, r)] bm.add_penetration(PrimExtrude("my_pen4", points, h, normal, origin, xdir)) # Cylinder Extrude x = 0.8 bm.add_penetration(PrimCyl("my_pen5", (x, -0.1, 0), (x, 0.1, 0), 0.1)) # Box Extrude x = 1.0 bm.add_penetration(PrimBox("my_pen6", (x, -0.1, -0.1), (x + 0.2, 0.1, 0.1))) _ = a.to_ifc(test_dir / "penetrations_mix.ifc", return_file_obj=True)
def test_mix_extrude(self): bm = Beam("MyBeam", (0, 0, 0), (1.5, 0, 0), Section("myIPE", from_str="IPE400")) a = Assembly("Test", creator="Kristoffer H. Andersen") / [Part("MyPart") / bm] h = 0.2 r = 0.02 # Polygon Extrusions origin = np.array([0.1, 0.1, -0.1]) normal = np.array([0, -1, 0]) xdir = np.array([1, 0, 0]) points = [(0, 0), (0.05, 0.1), (0.1, 0)] bm.add_penetration(PrimExtrude("my_pen", points, h, normal, origin, xdir)) origin = np.array([0.3, 0.1, -0.1]) points = [(0, 0, r), (0.1, 0, r), (0.05, 0.1, r)] bm.add_penetration(PrimExtrude("my_pen3", points, h, normal, origin, xdir)) origin = np.array([0.5, 0.1, -0.1]) points = [(0, 0, r), (0.1, 0, r), (0.1, 0.2, r), (0.0, 0.2, r)] bm.add_penetration(PrimExtrude("my_pen4", points, h, normal, origin, xdir)) # Cylinder Extrude x = 0.8 bm.add_penetration(PrimCyl("my_pen5", (x, -0.1, 0), (x, 0.1, 0), 0.1)) # Box Extrude x = 1.0 bm.add_penetration(PrimBox("my_pen6", (x, -0.1, -0.1), (x + 0.2, 0.1, 0.1))) a.to_ifc(test_folder / "penetrations_mix.ifc")
def beam_ex1(p1=(0, 0, 0), p2=(1.5, 0, 0), profile="IPE400"): """ :return: :rtype: ada.Assembly """ bm = Beam("MyBeam", p1, p2, profile, Material("S355")) a = Assembly("Test", user=User("krande")) / [Part("MyPart") / bm] h = 0.2 r = 0.02 normal = [0, 1, 0] xdir = [-1, 0, 0] # Polygon Extrusions origin = np.array([0.2, -0.1, -0.1]) points = [(0, 0), (0.1, 0), (0.05, 0.1)] bm.add_penetration(PrimExtrude("Poly1", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.05, 0.1, r)] bm.add_penetration(PrimExtrude("Poly2", points, h, normal, origin, xdir)) origin += np.array([0.2, 0, 0]) points = [(0, 0, r), (0.1, 0, r), (0.1, 0.2, r), (0.0, 0.2, r)] bm.add_penetration(PrimExtrude("Poly3", points, h, normal, origin, xdir)) # Cylinder Extrude x = origin[0] + 0.2 bm.add_penetration(PrimCyl("cylinder", (x, -0.1, 0), (x, 0.1, 0), 0.1)) # Box Extrude x += 0.2 bm.add_penetration(PrimBox("box", (x, -0.1, -0.1), (x + 0.2, 0.1, 0.1))) # Create a FEM analysis of the beam as a cantilever subjected to gravity loads p = a.get_part("MyPart") create_beam_mesh(bm, p.fem, "shell") # Add a set containing ALL elements (necessary for Calculix loads). fs = p.fem.add_set(FemSet("Eall", [el for el in p.fem.elements], "elset")) step = a.fem.add_step( Step("gravity", "static", nl_geom=True, init_incr=100.0, total_time=100.0)) step.add_load(Load("grav", "gravity", -9.81 * 800, fem_set=fs)) fix_set = p.fem.add_set(FemSet("bc_nodes", get_beam_end_nodes(bm), "nset")) a.fem.add_bc(Bc("Fixed", fix_set, [1, 2, 3])) return a
def test_plate_mesh(self): import gmsh try: gmsh.finalize() except BaseException as e: logging.error(e) pass gmsh.initialize() gmsh.option.setNumber("General.Terminal", 1) gmsh.option.setNumber("Mesh.SecondOrderIncomplete", 1) gmsh.option.setNumber("Mesh.Algorithm", 8) gmsh.option.setNumber("Mesh.ElementOrder", 1) pl1 = Plate("MyPl", [(0, 0, 0.2), (5, 0, 0.2), (5, 5), (0, 5)], 20e-3, **atts) pl2 = Plate("MyPl2", [(0, 0, 0.2), (5, 0, 0.2), (5, 5), (0, 5)], 20e-3, **atts2) points = [(1, 1, 0.2), (2, 1, 0.2), (2, 2, 0.2), (1, 2, 0.2)] pl1.add_penetration( PrimExtrude("poly_extrude", points, **align_to_plate(pl1))) pl1.add_penetration( PrimExtrude("poly_extrude2", points, **align_to_plate(pl2))) gmsh.model.add("Test") p = Part("MyFem") / [pl1, pl2] create_plate_mesh(pl1, "shell", fem=p.fem, interactive=False, gmsh_session=gmsh) create_plate_mesh(pl2, "shell", fem=p.fem, interactive=False, gmsh_session=gmsh) a = Assembly("Test") / p a.to_ifc(test_folder / "ADA_pl_mesh_ifc") step = a.fem.add_step(Step("gravity", "static", nl_geom=True)) step.add_load(Load("grav", "gravity", -9.81)) a.to_fem("ADA_pl_mesh", "abaqus", scratch_dir=test_folder, overwrite=True)
def test_export_primitives(shape_ifc_test_dir): a = Assembly("Site") / [ PrimBox("VolBox", (0.2, 0.2, 2), (1.2, 1.2, 4)), PrimCyl("VolCyl", (2, 2, 2), (4, 4, 4), 0.2), PrimExtrude("VolExtrude", [(0, 0), (1, 0), (0.5, 1)], 2, (0, 0, 1), (2, 2, 2), (1, 0, 0)), PrimRevolve( "VolRevolve", points2d=[(0, 0), (1, 0), (0.5, 1)], origin=(2, 2, 3), xdir=(0, 0, 1), normal=(1, 0, 0), rev_angle=275, ), ] fp = a.to_ifc(shape_ifc_test_dir / "world_of_shapes.ifc", return_file_obj=True) b = ada.from_ifc(fp) assert len(b.shapes) == 4 print(b)
def test_export_primrextrude(self): a = Assembly("Site") / SimpleStru("SimpleStru") a.add_shape( PrimExtrude("VolExtrude", [(0, 0), (1, 0), (0.5, 1)], 2, (0, 0, 1), (2, 2, 2), (1, 0, 0))) a.to_ifc(test_folder / "world_shape_extrude.ifc")