Path: blob/devel/ElmerWorkflows/FreeCADBatchFEMTools/tests/cylinders_thermo_structural_contact/cylinders.py
3206 views
# A test case for FreeCAD automatic scripting with thermo-structural (Elmer test is a modified fem/tests/ThermalBiMetal2)1# original date: November 20192# Author: Eelis Takala3# email: [email protected]4doc = App.newDocument('Cylinders')5import sys6import os7import time8import math9import FreeCAD10import Part1112sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))13import FreeCADBatchFEMTools as FBFT1415script_directory = os.path.dirname(__file__)1617def cylinder(r1, r2, h, symmetry_planes=None, name='cyl', mesh_size=10.):18if symmetry_planes == None: symmetry_planes = ['yz','zx', 'xy']19planes_original = list(symmetry_planes)20#if symmetry_planes == None: symmetry_planes = ['yz']21#if symmetry_planes == None: symmetry_planes = ['zx']22#if symmetry_planes == None: symmetry_planes = ['xy']2324cyl = doc.addObject("PartDesign::Body","Cylinder")25sketch = cyl.newObject('Sketcher::SketchObject',name+' sketch')26sketch.MapMode = 'FlatFace'27sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r2),False)28sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r1),False)29doc.recompute()3031pad = cyl.newObject("PartDesign::Pad",name + " pad")32pad.Profile = sketch33pad.Length = h34pad.Length2 = h35pad.Type = 036pad.UpToFace = None37pad.Reversed = 038pad.Midplane = 139pad.Offset = 0.00000040doc.recompute()4142cyl = FBFT.reduce_half_symmetry(cyl, name, App, doc, planes=symmetry_planes)43doc.recompute()4445# create entities dict46#face_picks = [('alpha0', 0), ('b2', 1), ('b3', 2), ('b4', 3), ('b5', 4), ('b6', 5)]47#faces = FBFT.pick_faces_from_geometry(cyl, face_picks)48#faces = []49#for plane in planes_original:50#FBFT.add_symmetry_plane_faces_in_entity_list(faces, cyl, plane)5152#if symmetry_planes == None: symmetry_planes = ['yz']53#if symmetry_planes == None: symmetry_planes = ['zx']54#if symmetry_planes == None: symmetry_planes = ['xy']5556face_picks = [('outer', 0), ('yz', 1), ('xy', 2), ('zx', 3), ('end', 4), ('inner', 5)]57faces = FBFT.pick_faces_from_geometry(cyl, face_picks)5859solids = []60FBFT.add_entity_in_list(solids, name, cyl, {'mesh size': mesh_size})61entities_dict = FBFT.create_entities_dict(name, faces, solids, cyl)6263return entities_dict6465def create_geometry():6667mesh_size_max = 100.68cyl_entities_list = []69cyl_entities_list.append(cylinder(20, 10, 40., name='cyl1', mesh_size=3.))70cyl_entities_list.append(cylinder(30, 20, 20., name='cyl2', mesh_size=4.))71entities_dict = FBFT.merge_entities_dicts(cyl_entities_list, 'All', default_mesh_size=mesh_size_max,72add_prefixes={'solids': False, 'faces': True})73solid_objects = FBFT.get_solids_from_entities_dict(entities_dict)7475mesh_object, compound_filter = FBFT.create_mesh_object_and_compound_filter(solid_objects, mesh_size_max, doc, separate_boundaries=True)7677FBFT.find_boundaries_with_entities_dict(mesh_object, compound_filter, entities_dict, doc, separate_boundaries=True)78FBFT.find_bodies_with_entities_dict(mesh_object, compound_filter, entities_dict, doc)79FBFT.define_mesh_sizes(mesh_object, compound_filter, entities_dict, doc, point_search=False, ignore_list=['air'])8081FBFT.fit_view()82FBFT.create_mesh(mesh_object)83FBFT.export_unv(os.path.join(script_directory, 'cylinders.unv'), mesh_object)8485try:86create_geometry()8788except Exception:89import traceback90print(str(traceback.format_exc()))9192exit()939495