def test_simple_hinged_beam(test_dir): bm = Beam("MyBeam", (0, 0, 0), (1, 0, 0), "IPE400") bm.hinge_prop = HingeProp(end1=Hinge([1, 2, 3, 4, 6], Csys("MyBeam_hinge"))) p = Part("MyPart") / bm p.fem = p.to_fem_obj(0.1) convert_hinges_2_couplings(p.fem) assert len(p.fem.constraints.values()) == 1
def mesh_mixed_shell_and_beams(p: Part): p.connections.find() with GmshSession(silent=True, options=GmshOptions(Mesh_Algorithm=8)) as gs: gmap = dict() for obj in p.get_all_physical_objects(): if type(obj) is Beam: li = gs.add_obj(obj, geom_repr="line", build_native_lines=False) gmap[obj] = li.entities elif type(obj) is Plate: pl = gs.add_obj(obj, geom_repr="shell") gmap[obj] = pl.entities beams = list(p.get_all_physical_objects(by_type=Beam)) gs.open_gui() for pl in p.get_all_physical_objects(by_type=Plate): intersecting_beams = [] for pl_dim, pl_ent in gmap[pl]: for bm in find_beams_connected_to_plate(pl, beams): for li_dim, li_ent in gmap[bm]: intersecting_beams.append(li_ent) gs.model.mesh.embed(1, intersecting_beams, 2, pl_ent) gs.model.geo.synchronize() gs.mesh(0.1) p.fem = gs.get_fem()
def test_simplestru_fem_cache(bm_ipe300): model_name = "ParamAssembly" start = time.time() pfem = Part("ParamModel") / bm_ipe300 a = Assembly(model_name, clear_cache=True, enable_experimental_cache=True) / pfem pfem.fem = pfem.to_fem_obj(0.1) time1 = time.time() - start a.update_cache() start = time.time() b = Assembly(model_name, enable_experimental_cache=True) time2 = time.time() - start cache_validation(a, b) print( f"Model generation time reduced from {time1:.2f}s to {time2:.2f}s -> {time1 / time2:.2f} x Improvement" )
def to_fem( self, mesh_size, geom_repr, name: str, fem_format: str, options: GmshOptions = None, silent=True, use_quads=False, use_hex=False, return_assembly=False, **kwargs, ): from ada import Assembly, Part p = Part(name) p.fem = self.to_fem_obj(mesh_size, geom_repr, options, silent, use_quads, use_hex, name) a = Assembly() / (p / self) if return_assembly: return a a.to_fem(name, fem_format, **kwargs)