Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerWorkflows/FreeCADBatchFEMTools/tests/cylinders_thermo_structural/cylinders.py
3206 views
1
# A test case for FreeCAD automatic scripting with thermo-structural (Elmer test is a modified fem/tests/ThermalBiMetal2)
2
# original date: November 2019
3
# Author: Eelis Takala
4
# email: [email protected]
5
doc = App.newDocument('Cylinders')
6
import sys
7
import os
8
import time
9
import math
10
import FreeCAD
11
import Part
12
13
14
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
15
import FreeCADBatchFEMTools as FBFT
16
17
script_directory = os.path.dirname(__file__)
18
19
def cylinder(r1, r2, h, name='cyl', mesh_size=10.):
20
21
cyl = doc.addObject("PartDesign::Body","Cylinder")
22
sketch = cyl.newObject('Sketcher::SketchObject',name+' sketch')
23
sketch.MapMode = 'FlatFace'
24
sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r2),False)
25
sketch.addGeometry(Part.Circle(App.Vector(0.000000,0.000000,0),App.Vector(0,0,1),r1),False)
26
doc.recompute()
27
28
pad = cyl.newObject("PartDesign::Pad",name + " pad")
29
pad.Profile = sketch
30
pad.Length = h
31
pad.Length2 = h
32
pad.Type = 0
33
pad.UpToFace = None
34
pad.Reversed = 0
35
pad.Midplane = 1
36
pad.Offset = 0.000000
37
doc.recompute()
38
39
# create entities dict
40
face_picks = [('b1', 0), ('b2', 1), ('b3', 2)]
41
faces = FBFT.pick_faces_from_geometry(cyl, face_picks)
42
solids = []
43
FBFT.add_entity_in_list(solids, name, cyl, {'mesh size': mesh_size})
44
entities_dict = FBFT.create_entities_dict(name, faces, solids, cyl)
45
46
return entities_dict
47
48
def create_geometry():
49
50
mesh_size_max = 100.
51
cyl_entities_list = []
52
cyl_entities_list.append(cylinder(20, 10, 40., name='cyl1', mesh_size=3.))
53
cyl_entities_list.append(cylinder(30, 20, 20., name='cyl2', mesh_size=4.))
54
entities_dict = FBFT.merge_entities_dicts(cyl_entities_list, 'All', default_mesh_size=mesh_size_max,
55
add_prefixes={'solids': False, 'faces': True})
56
solid_objects = FBFT.get_solids_from_entities_dict(entities_dict)
57
58
mesh_object, compound_filter = FBFT.create_mesh_object_and_compound_filter(solid_objects, mesh_size_max, doc)
59
60
FBFT.find_boundaries_with_entities_dict(mesh_object, compound_filter, entities_dict, doc)
61
body_mesh_groups = FBFT.find_bodies_with_entities_dict(mesh_object, compound_filter, entities_dict, doc, point_search=False)
62
FBFT.define_mesh_sizes(mesh_object, compound_filter, entities_dict, doc, point_search=False, ignore_list=['air'])
63
64
FBFT.fit_view()
65
FBFT.create_mesh(mesh_object)
66
FBFT.export_unv(os.path.join(script_directory, 'cylinders.unv'), mesh_object)
67
68
try:
69
create_geometry()
70
71
except Exception:
72
import traceback
73
print(str(traceback.format_exc()))
74
75
exit()
76
77