Skip to content

Commit d6d8d5b

Browse files
authored
Merge pull request #20 from OpenSEMBA/dev
Dev
2 parents 755322b + cb177a3 commit d6d8d5b

6 files changed

Lines changed: 252 additions & 4 deletions

File tree

partially_filled_coax.areas.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"geometries": [
3+
{
4+
"geometry": "Vacuum_0",
5+
"area": 4005.5306333269873
6+
},
7+
{
8+
"geometry": "Dielectric_1",
9+
"area": 1884.9555921538756
10+
},
11+
{
12+
"geometry": "Conductor_0",
13+
"area": 7853.98163397448
14+
},
15+
{
16+
"geometry": "Conductor_1",
17+
"area": 1963.49540849362
18+
}
19+
]
20+
}

src/ShapesClassification.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def _buildClosedVacuumDomain(self) -> Tuple[int, int]:
125125
return dict([[0, dom]])
126126

127127
def _buildDefaultVacuumDomain(self):
128-
NEAR_REGION_BOUNDING_BOX_SCALING_FACTOR = 1.2
128+
NEAR_REGION_BOUNDING_BOX_SCALING_FACTOR = 1.25
129129
FAR_REGION_DISK_SCALING_FACTOR = 4.0
130130
nonVacuumSurfaces = []
131131
for _, surf in self.pecs.items():
@@ -149,15 +149,19 @@ def _buildDefaultVacuumDomain(self):
149149
farVacuum = [(2, gmsh.model.occ.addDisk(
150150
*boundingBox.getCenter(),
151151
farVacuumDiameter, farVacuumDiameter))]
152-
152+
153153
gmsh.model.occ.synchronize()
154+
self.open = dict([[0, gmsh.model.getBoundary(farVacuum)]])
154155

155156
farVacuum = gmsh.model.occ.cut(
156157
farVacuum, nearVacuum, removeObject=True, removeTool=False)[0]
157158

159+
158160
nearVacuum = gmsh.model.occ.cut(
159161
nearVacuum, nonVacuumSurfaces, removeObject=True, removeTool=False)[0]
160162

163+
gmsh.model.occ.synchronize()
164+
161165
# -- Set mesh size for near vacuum region
162166
bb = BoundingBox(
163167
gmsh.model.getBoundingBox(2, nearVacuum[0][1]))
@@ -167,7 +171,7 @@ def _buildDefaultVacuumDomain(self):
167171
gmsh.model.mesh.setSize(innerRegion, minSide / 20)
168172

169173

170-
self.open = dict([[0, gmsh.model.getBoundary(farVacuum)]])
174+
171175
gmsh.model.occ.synchronize()
172176

173177
return dict([[0, nearVacuum], [1, farVacuum]])

src/mesher.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Mesher():
2121
"General.DrawBoundingBoxes": 1,
2222
"General.Axes": 1,
2323

24-
"Geometry.SurfaceType": 2, # Diplay surfaces as solids rather than dashed lines.
24+
"Geometry.SurfaceType": 2, # Display surfaces as solids rather than dashed lines.
2525
# "Geometry.OCCBoundsUseStl": 1,
2626
# "Geometry.OCCSewFaces": 1,
2727
# "Geometry.Tolerance": 1e-3,

test/test_mesher.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,28 @@ def test_unshielded_multiwire(self):
238238
for idx, name in enumerate(expectedNames):
239239
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
240240

241+
def test_conductor_and_outer_dielectric(self):
242+
caseName = 'conductor_and_outer_dielectric'
243+
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
244+
245+
gmsh.write(caseName + '.vtk')
246+
247+
pGs = gmsh.model.getPhysicalGroups()
248+
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
249+
expectedNames = ['Conductor_0',
250+
'Dielectric_0',
251+
'OpenBoundary_0',
252+
'Vacuum_0', 'Vacuum_1']
253+
expectedEntities = [1,
254+
1,
255+
1,
256+
2, 1]
257+
self.assertEqual(sorted(pGNames), sorted(expectedNames))
258+
259+
for idx, name in enumerate(expectedNames):
260+
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
261+
262+
241263
def test_lansink2024_single_wire_multipolar(self):
242264
caseName = 'lansink2024_single_wire_multipolar'
243265
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
Binary file not shown.
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
ISO-10303-21;
2+
HEADER;
3+
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
4+
FILE_NAME('Open CASCADE Shape Model','2025-09-05T12:34:40',(''),(''),
5+
'Open CASCADE STEP processor 7.6','FreeCAD','Unknown');
6+
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
7+
ENDSEC;
8+
DATA;
9+
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
10+
'automotive_design',2000,#2);
11+
#2 = APPLICATION_CONTEXT(
12+
'core data for automotive mechanical design processes');
13+
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
14+
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
15+
#5 = PRODUCT_DEFINITION('design','',#6,#9);
16+
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
17+
#7 = PRODUCT('conductor_and_outer_dielectric',
18+
'conductor_and_outer_dielectric','',(#8));
19+
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
20+
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
21+
#10 = SHAPE_REPRESENTATION('',(#11,#15,#19),#23);
22+
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
23+
#12 = CARTESIAN_POINT('',(0.,0.,0.));
24+
#13 = DIRECTION('',(0.,0.,1.));
25+
#14 = DIRECTION('',(1.,0.,-0.));
26+
#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18);
27+
#16 = CARTESIAN_POINT('',(-1.209,5.934,0.));
28+
#17 = DIRECTION('',(0.,0.,1.));
29+
#18 = DIRECTION('',(1.,0.,0.));
30+
#19 = AXIS2_PLACEMENT_3D('',#20,#21,#22);
31+
#20 = CARTESIAN_POINT('',(0.,0.,0.));
32+
#21 = DIRECTION('',(0.,0.,1.));
33+
#22 = DIRECTION('',(1.,0.,0.));
34+
#23 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
35+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#27)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
36+
(#24,#25,#26)) REPRESENTATION_CONTEXT('Context #1',
37+
'3D Context with UNIT and UNCERTAINTY') );
38+
#24 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
39+
#25 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
40+
#26 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
41+
#27 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#24,
42+
'distance_accuracy_value','confusion accuracy');
43+
#28 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
44+
#29 = SHAPE_DEFINITION_REPRESENTATION(#30,#36);
45+
#30 = PRODUCT_DEFINITION_SHAPE('','',#31);
46+
#31 = PRODUCT_DEFINITION('design','',#32,#35);
47+
#32 = PRODUCT_DEFINITION_FORMATION('','',#33);
48+
#33 = PRODUCT('Conductor_000','Conductor_000','',(#34));
49+
#34 = PRODUCT_CONTEXT('',#2,'mechanical');
50+
#35 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
51+
#36 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#37),#64);
52+
#37 = SHELL_BASED_SURFACE_MODEL('',(#38));
53+
#38 = OPEN_SHELL('',(#39));
54+
#39 = ADVANCED_FACE('',(#40),#53,.T.);
55+
#40 = FACE_BOUND('',#41,.T.);
56+
#41 = EDGE_LOOP('',(#42));
57+
#42 = ORIENTED_EDGE('',*,*,#43,.T.);
58+
#43 = EDGE_CURVE('',#44,#44,#46,.T.);
59+
#44 = VERTEX_POINT('',#45);
60+
#45 = CARTESIAN_POINT('',(1.15,0.,0.));
61+
#46 = SURFACE_CURVE('',#47,(#52),.PCURVE_S1.);
62+
#47 = CIRCLE('',#48,1.15);
63+
#48 = AXIS2_PLACEMENT_3D('',#49,#50,#51);
64+
#49 = CARTESIAN_POINT('',(0.,0.,0.));
65+
#50 = DIRECTION('',(0.,0.,1.));
66+
#51 = DIRECTION('',(1.,0.,0.));
67+
#52 = PCURVE('',#53,#58);
68+
#53 = PLANE('',#54);
69+
#54 = AXIS2_PLACEMENT_3D('',#55,#56,#57);
70+
#55 = CARTESIAN_POINT('',(-1.5E-16,6.E-17,0.));
71+
#56 = DIRECTION('',(0.,0.,1.));
72+
#57 = DIRECTION('',(1.,0.,0.));
73+
#58 = DEFINITIONAL_REPRESENTATION('',(#59),#63);
74+
#59 = CIRCLE('',#60,1.15);
75+
#60 = AXIS2_PLACEMENT_2D('',#61,#62);
76+
#61 = CARTESIAN_POINT('',(1.5E-16,-6.E-17));
77+
#62 = DIRECTION('',(1.,0.));
78+
#63 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
79+
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
80+
) );
81+
#64 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
82+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#68)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
83+
(#65,#66,#67)) REPRESENTATION_CONTEXT('Context #1',
84+
'3D Context with UNIT and UNCERTAINTY') );
85+
#65 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
86+
#66 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
87+
#67 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
88+
#68 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#65,
89+
'distance_accuracy_value','confusion accuracy');
90+
#69 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#70,#72);
91+
#70 = ( REPRESENTATION_RELATIONSHIP('','',#36,#10)
92+
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#71)
93+
SHAPE_REPRESENTATION_RELATIONSHIP() );
94+
#71 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15);
95+
#72 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#73);
96+
#73 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('153','Conductor_000','',#5,#31,$);
97+
#74 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#33));
98+
#75 = SHAPE_DEFINITION_REPRESENTATION(#76,#82);
99+
#76 = PRODUCT_DEFINITION_SHAPE('','',#77);
100+
#77 = PRODUCT_DEFINITION('design','',#78,#81);
101+
#78 = PRODUCT_DEFINITION_FORMATION('','',#79);
102+
#79 = PRODUCT('Dielectric_000','Dielectric_000','',(#80));
103+
#80 = PRODUCT_CONTEXT('',#2,'mechanical');
104+
#81 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
105+
#82 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#83),#129);
106+
#83 = SHELL_BASED_SURFACE_MODEL('',(#84));
107+
#84 = OPEN_SHELL('',(#85));
108+
#85 = ADVANCED_FACE('',(#86,#110),#99,.T.);
109+
#86 = FACE_BOUND('',#87,.T.);
110+
#87 = EDGE_LOOP('',(#88));
111+
#88 = ORIENTED_EDGE('',*,*,#89,.T.);
112+
#89 = EDGE_CURVE('',#90,#90,#92,.T.);
113+
#90 = VERTEX_POINT('',#91);
114+
#91 = CARTESIAN_POINT('',(8.05,0.,0.));
115+
#92 = SURFACE_CURVE('',#93,(#98),.PCURVE_S1.);
116+
#93 = CIRCLE('',#94,8.05);
117+
#94 = AXIS2_PLACEMENT_3D('',#95,#96,#97);
118+
#95 = CARTESIAN_POINT('',(0.,0.,0.));
119+
#96 = DIRECTION('',(0.,0.,1.));
120+
#97 = DIRECTION('',(1.,0.,0.));
121+
#98 = PCURVE('',#99,#104);
122+
#99 = PLANE('',#100);
123+
#100 = AXIS2_PLACEMENT_3D('',#101,#102,#103);
124+
#101 = CARTESIAN_POINT('',(-6.8E-16,-3.3E-16,0.));
125+
#102 = DIRECTION('',(0.,0.,1.));
126+
#103 = DIRECTION('',(1.,0.,0.));
127+
#104 = DEFINITIONAL_REPRESENTATION('',(#105),#109);
128+
#105 = CIRCLE('',#106,8.05);
129+
#106 = AXIS2_PLACEMENT_2D('',#107,#108);
130+
#107 = CARTESIAN_POINT('',(6.8E-16,3.3E-16));
131+
#108 = DIRECTION('',(1.,0.));
132+
#109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
133+
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
134+
) );
135+
#110 = FACE_BOUND('',#111,.T.);
136+
#111 = EDGE_LOOP('',(#112));
137+
#112 = ORIENTED_EDGE('',*,*,#113,.F.);
138+
#113 = EDGE_CURVE('',#114,#114,#116,.T.);
139+
#114 = VERTEX_POINT('',#115);
140+
#115 = CARTESIAN_POINT('',(7.95,0.,0.));
141+
#116 = SURFACE_CURVE('',#117,(#122),.PCURVE_S1.);
142+
#117 = CIRCLE('',#118,7.95);
143+
#118 = AXIS2_PLACEMENT_3D('',#119,#120,#121);
144+
#119 = CARTESIAN_POINT('',(0.,0.,0.));
145+
#120 = DIRECTION('',(0.,0.,1.));
146+
#121 = DIRECTION('',(1.,0.,0.));
147+
#122 = PCURVE('',#99,#123);
148+
#123 = DEFINITIONAL_REPRESENTATION('',(#124),#128);
149+
#124 = CIRCLE('',#125,7.95);
150+
#125 = AXIS2_PLACEMENT_2D('',#126,#127);
151+
#126 = CARTESIAN_POINT('',(6.8E-16,3.3E-16));
152+
#127 = DIRECTION('',(1.,0.));
153+
#128 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
154+
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
155+
) );
156+
#129 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
157+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#133)) GLOBAL_UNIT_ASSIGNED_CONTEXT
158+
((#130,#131,#132)) REPRESENTATION_CONTEXT('Context #1',
159+
'3D Context with UNIT and UNCERTAINTY') );
160+
#130 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
161+
#131 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
162+
#132 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
163+
#133 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#130,
164+
'distance_accuracy_value','confusion accuracy');
165+
#134 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#135,#137);
166+
#135 = ( REPRESENTATION_RELATIONSHIP('','',#82,#10)
167+
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#136)
168+
SHAPE_REPRESENTATION_RELATIONSHIP() );
169+
#136 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19);
170+
#137 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#138
171+
);
172+
#138 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('154','Dielectric_000','',#5,#77,$
173+
);
174+
#139 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#79));
175+
#140 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#141)
176+
,#64);
177+
#141 = STYLED_ITEM('color',(#142),#39);
178+
#142 = PRESENTATION_STYLE_ASSIGNMENT((#143,#149));
179+
#143 = SURFACE_STYLE_USAGE(.BOTH.,#144);
180+
#144 = SURFACE_SIDE_STYLE('',(#145));
181+
#145 = SURFACE_STYLE_FILL_AREA(#146);
182+
#146 = FILL_AREA_STYLE('',(#147));
183+
#147 = FILL_AREA_STYLE_COLOUR('',#148);
184+
#148 = COLOUR_RGB('',0.333333345507,0.666666687201,1.);
185+
#149 = CURVE_STYLE('',#150,POSITIVE_LENGTH_MEASURE(0.1),#151);
186+
#150 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
187+
#151 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02,
188+
9.803921802644E-02);
189+
#152 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#153)
190+
,#129);
191+
#153 = STYLED_ITEM('color',(#154),#85);
192+
#154 = PRESENTATION_STYLE_ASSIGNMENT((#155,#161));
193+
#155 = SURFACE_STYLE_USAGE(.BOTH.,#156);
194+
#156 = SURFACE_SIDE_STYLE('',(#157));
195+
#157 = SURFACE_STYLE_FILL_AREA(#158);
196+
#158 = FILL_AREA_STYLE('',(#159));
197+
#159 = FILL_AREA_STYLE_COLOUR('',#160);
198+
#160 = DRAUGHTING_PRE_DEFINED_COLOUR('red');
199+
#161 = CURVE_STYLE('',#162,POSITIVE_LENGTH_MEASURE(0.1),#151);
200+
#162 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
201+
ENDSEC;
202+
END-ISO-10303-21;

0 commit comments

Comments
 (0)