def test_roundtrip_fillets(place1, place2): a = ada.Assembly("ExportedPlates") p = ada.Part("MyPart") a.add_part(p) pl1 = ada.Plate("MyPl", [(0, 0, 0.2), (5, 0), (5, 5), (0, 5)], 20e-3, **place1) p.add_plate(pl1) pl2 = ada.Plate("MyPl2", [(0, 0, 0.2), (5, 0, 0.2), (5, 5), (0, 5)], 20e-3, **place2) p.add_plate(pl2) fp = a.to_ifc(test_dir / "my_plate_simple.ifc", return_file_obj=True) b = ada.from_ifc(fp) _ = b.to_ifc(test_dir / "my_plate_simple_re_exported.ifc", return_file_obj=True)
def test_ex2(): origin = [362857.44778571784, 100000.0, 561902.5557556185] csys = [ [0.0, 1.0, 0.0], [-0.9756456931466083, 0.0, 0.2193524138104576], [0.2193524138104576, 0.0, 0.9756456931466083], ] local_points2d = [ [-35.000000000029075, 246.8832348783828], [-15.0, 154.3], [6.4472604556706474e-15, 74.98044924694155], [0.0, -170.7], [-3.376144703353855e-14, -320.6997855533479], [-330.0, -320.7, -1.0189517968329821e-10], [-400.0, -235.7, 50.0], [-400.0, -70.7, 50.0], [-325.0, 154.3, 50.0], [-85.00004587117287, 500.03303441608927, 24.99999999997542], [-34.99999999999994, 500.0330344161669, -7.881391015070461e-12], ] thick = 30 pl = ada.Plate( "test2", local_points2d, thick, placement=ada.Placement(origin=origin, zdir=csys[2], xdir=csys[0]), units="mm" ) assert tuple(pl.placement.origin) == tuple(origin)
def test_floaty_input_ex1(): origin = [362237.0037951513, 100000.0, 560985.9095763591] csys = [ [0.0, -1.0, 0.0], [-0.4626617625735456, 0.0, 0.8865348799975894], [-0.8865348799975894, 0.0, -0.4626617625735456], ] local_points2d = [ [4.363213751783499e-11, 229.80445306040926], [1.4557793281525672e-11, -57.217605078163196], [2.912511939794014e-11, -207.22885580839431], [-330.0, -207.25, -4.518217213237464e-11], [-400.0, -122.2, 50.0], [-400.0, 42.79, 50.0], [-325.0, 267.83, 50.0], [-85.00004587126028, 650.0198678083951, 24.999999999931404], [-35.0, 650.02, -7.881391015070461e-12], [-35.0, 350.1], [-15.14, 261.52], ] thick = 30 pl = ada.Plate( "test", local_points2d, thick, placement=ada.Placement(origin=origin, zdir=csys[2], xdir=csys[0]), units="mm" ) assert tuple(pl.placement.origin) == tuple(origin) assert tuple(pl.placement.zdir) == tuple(csys[2]) assert vector_length(pl.nodes[0].p - np.array([362130.68206185, 100000.0, 561189.63923958])) < 1e-8
def test_3d_input(dummy_display): pl1 = ada.Plate("MyPl", [(0, 0, 0), (5, 0, 0), (5, 5, 0), (0, 5, 0)], 20e-3, use3dnodes=True) origin = np.array([0, 0, 0]) assert vector_length(pl1.placement.origin - origin) < 1e-8 assert vector_length(pl1.placement.zdir - np.array([0, 0, 1])) < 1e-8 assert vector_length(pl1.poly.nodes[0].p - origin) < 1e-8 assert_points = [(0.0, 0.0), (5.0, 0.0), (5.0, -5.0), (0.0, -5.0)] for i, (x, y) in enumerate(pl1.poly.points2d): x_, y_ = assert_points[i] assert x_ == x and y_ == y dummy_display(pl1)
def test_hex_meshed_plate(test_meshing_dir): pl = ada.Plate("pl1", [(0, 0), (1, 0), (1, 1), (0, 1)], 10e-3) with GmshSession(silent=True) as gs: gs.add_obj(pl, "solid") gs.mesh(0.1, use_hex=True) # gs.open_gui() fem = gs.get_fem() fem.options.ABAQUS.default_elements.SOLID.HEXAHEDRON = "C3D8" el_types = {el_type: list(group) for el_type, group in fem.elements.group_by_type()} assert len(el_types.keys()) == 1 assert len(el_types["HEXAHEDRON"]) == 100
def test_quad_meshed_plate_with_hole(test_meshing_dir): pl = ada.Plate("pl1", [(0, 0), (1, 0), (1, 1), (0, 1)], 10e-3) pl.add_penetration( ada.PrimCyl("Mycyl", (0.5, 0.5, -0.5), (0.5, 0.5, 0.5), 0.2)) with GmshSession(options=GmshOptions(Mesh_ElementOrder=1), silent=True) as gs: gs.add_obj(pl, "shell") gs.mesh(0.1, use_quads=True) fem = gs.get_fem() el_types = { el_type: list(group) for el_type, group in fem.elements.group_by_type() } assert len(el_types.keys()) == 1 assert len(el_types["QUAD"]) == 117
def test_edges_intersect(test_meshing_dir): bm_name = Counter(1, "bm") pl = ada.Plate("pl1", [(0, 0), (1, 0), (1, 1), (0, 1)], 10e-3) points = pl.poly.points3d objects = [pl] # Beams along 3 of 4 along circumference for p1, p2 in zip(points[:-1], points[1:]): objects.append(ada.Beam(next(bm_name), p1, p2, "IPE100")) # Beam along middle in x-dir objects.append( ada.Beam(next(bm_name), (0, 0.5, 0.0), (1, 0.5, 0), "IPE100")) # Beam along diagonal objects.append(ada.Beam(next(bm_name), (0, 0, 0.0), (1, 1, 0), "IPE100")) a = ada.Assembly() / (ada.Part("MyPart") / objects) p = a.get_part("MyPart") # p.connections.find() p.fem = p.to_fem_obj(0.1, interactive=False)
def plate1(): return ada.Plate("MyPlate", [(0, 0), (1, 0), (1, 1), (0, 1)], 20e-3)
def test_2dinit(place1, dummy_display): pl1 = ada.Plate("MyPl", [(0, 0, 0.2), (5, 0), (5, 5), (0, 5)], 20e-3, **place1) dummy_display(pl1)
def test_triangle(): pl = ada.Plate("test", [(0, 0), (1, 0, 0.1), (0.5, 0.5)], 20e-3) assert len(pl.poly.seg_list) == 4
def test_2ifc_simple(place2): pl2 = ada.Plate("MyPl2", [(0, 0, 0.2), (5, 0, 0.2), (5, 5), (0, 5)], 20e-3, **place2) seg_list = pl2.poly.seg_list seg1 = seg_list[0] assert len(pl2.poly.seg_list) == 6 assert type(seg1) is ada.ArcSegment
def plate() -> ada.Plate: return ada.Plate("pl1", [(0, 0), (1, 0), (1, 1), (0, 1)], 10e-3)