Skip to content

Commit c4174dc

Browse files
authored
Merge pull request #27 from OpenSEMBA/unshielded-single-wire
Adds test for unshielded single wire
2 parents a9463f3 + 840b529 commit c4174dc

5 files changed

Lines changed: 122 additions & 11 deletions

File tree

src/ShapesClassification.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ def isOpenProblem(self) -> bool:
9090
return True
9191
if roots[0] in self.dielectrics.keys():
9292
return True
93+
if roots[0] in self.pecs.keys() and roots[0] not in self.nestedGraph.getParentNodes():
94+
return True
9395
return False
9496

9597
def removeConductorsFromDielectrics(self):

test/test_mesher.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,25 +149,25 @@ def test_mesh_dielectric_unshielded_pair(self) -> None:
149149
expectedEntities = [1, 1, 1, 1, 1, 1, 1]
150150

151151
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
152-
152+
153153
gmsh.write(caseName + '.vtk')
154154
gmsh.write(caseName + '.msh')
155155

156156
self.assertPhysicalGroup(expectedNames, expectedEntities)
157157

158158
def test_mesh_dielectric_unshielded_pair_defined_boundary(self) -> None:
159159
caseName = 'DielectricUnshieldedPairDefinedBoundary'
160-
160+
161161
meshing_options = copy.deepcopy(Mesher.DEFAULT_MESHING_OPTIONS)
162162
meshing_options["Mesh.ElementOrder"] = 1
163-
163+
164164
Mesher().meshFromStep(
165-
self.inputFileFromCaseName(caseName),
165+
self.inputFileFromCaseName(caseName),
166166
caseName,
167167
meshingOptions=meshing_options)
168168

169169
gmsh.write(caseName + '.vtk')
170-
170+
171171
expectedNames = [
172172
'Conductor_0', 'Conductor_1',
173173
'Dielectric_0', 'Dielectric_1',
@@ -190,7 +190,7 @@ def test_mesh_from_step_with_five_wires(self):
190190
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
191191

192192
gmsh.write(caseName + '.vtk')
193-
193+
194194
pGs = gmsh.model.getPhysicalGroups()
195195
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
196196
self.assertEqual(sorted(pGNames), sorted(expectedNames))
@@ -365,16 +365,35 @@ def test_lansink2024_single_wire_multipolar(self):
365365
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(
366366
name), expectedEntities[idx], name)
367367

368+
def test_unshielded_single_wire(self):
369+
caseName = 'unshielded_single_wire'
370+
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
371+
372+
expectedNames = [
373+
'Conductor_0',
374+
'OpenBoundary_0',
375+
'Vacuum_0', # Inner region
376+
'Vacuum_1' # Outer region
377+
]
378+
expectedEntities = [1, 1, 1, 1]
379+
380+
# For debugging.
381+
gmsh.write(caseName + '.vtk')
382+
gmsh.write(caseName + '.msh')
383+
# gmsh.fltk.run()
384+
385+
self.assertPhysicalGroup(expectedNames, expectedEntities)
386+
368387
def test_unshielded_nesting(self):
369388
caseName = 'UnshieldedNested'
370389
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
371-
372-
#gmsh.write(caseName + '.msh')
373-
#gmsh.write(caseName + '.vtk')
390+
391+
# gmsh.write(caseName + '.msh')
392+
# gmsh.write(caseName + '.vtk')
374393

375394
pGs = gmsh.model.getPhysicalGroups()
376395
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
377-
expectedNames = ['Conductor_0',
396+
expectedNames = ['Conductor_0',
378397
'Conductor_1',
379398
'Conductor_2',
380399
'OpenBoundary_0',
@@ -385,7 +404,8 @@ def test_unshielded_nesting(self):
385404
self.assertEqual(sorted(pGNames), sorted(expectedNames))
386405

387406
for idx, name in enumerate(expectedNames):
388-
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
407+
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(
408+
name), expectedEntities[idx], name)
389409

390410

391411
if __name__ == '__main__':
5.33 KB
Binary file not shown.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"CrossSection": [
3+
{
4+
"name": "Conductor",
5+
"material": {
6+
"type": "PEC"
7+
}
8+
}
9+
]
10+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
ISO-10303-21;
2+
HEADER;
3+
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
4+
FILE_NAME('Open CASCADE Shape Model','2026-03-11T12:53:42',(''),(''),
5+
'Open CASCADE STEP processor 7.8','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','Conductor','',(#8));
18+
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
19+
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
20+
#10 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#15),#42);
21+
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
22+
#12 = CARTESIAN_POINT('',(0.,0.,0.));
23+
#13 = DIRECTION('',(0.,0.,1.));
24+
#14 = DIRECTION('',(1.,0.,-0.));
25+
#15 = SHELL_BASED_SURFACE_MODEL('',(#16));
26+
#16 = OPEN_SHELL('',(#17));
27+
#17 = ADVANCED_FACE('',(#18),#31,.T.);
28+
#18 = FACE_BOUND('',#19,.T.);
29+
#19 = EDGE_LOOP('',(#20));
30+
#20 = ORIENTED_EDGE('',*,*,#21,.T.);
31+
#21 = EDGE_CURVE('',#22,#22,#24,.T.);
32+
#22 = VERTEX_POINT('',#23);
33+
#23 = CARTESIAN_POINT('',(21.,0.,0.));
34+
#24 = SURFACE_CURVE('',#25,(#30),.PCURVE_S1.);
35+
#25 = CIRCLE('',#26,1.);
36+
#26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);
37+
#27 = CARTESIAN_POINT('',(20.,0.,0.));
38+
#28 = DIRECTION('',(0.,0.,1.));
39+
#29 = DIRECTION('',(1.,0.,0.));
40+
#30 = PCURVE('',#31,#36);
41+
#31 = PLANE('',#32);
42+
#32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
43+
#33 = CARTESIAN_POINT('',(20.,1.910944170279E-18,0.));
44+
#34 = DIRECTION('',(0.,0.,1.));
45+
#35 = DIRECTION('',(1.,0.,0.));
46+
#36 = DEFINITIONAL_REPRESENTATION('',(#37),#41);
47+
#37 = CIRCLE('',#38,1.);
48+
#38 = AXIS2_PLACEMENT_2D('',#39,#40);
49+
#39 = CARTESIAN_POINT('',(0.,-1.910944170279E-18));
50+
#40 = DIRECTION('',(1.,0.));
51+
#41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
52+
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
53+
) );
54+
#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
55+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#46)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
56+
(#43,#44,#45)) REPRESENTATION_CONTEXT('Context #1',
57+
'3D Context with UNIT and UNCERTAINTY') );
58+
#43 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
59+
#44 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
60+
#45 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
61+
#46 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#43,
62+
'distance_accuracy_value','confusion accuracy');
63+
#47 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
64+
#48 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#49),
65+
#42);
66+
#49 = STYLED_ITEM('color',(#50),#17);
67+
#50 = PRESENTATION_STYLE_ASSIGNMENT((#51,#57));
68+
#51 = SURFACE_STYLE_USAGE(.BOTH.,#52);
69+
#52 = SURFACE_SIDE_STYLE('',(#53));
70+
#53 = SURFACE_STYLE_FILL_AREA(#54);
71+
#54 = FILL_AREA_STYLE('',(#55));
72+
#55 = FILL_AREA_STYLE_COLOUR('',#56);
73+
#56 = COLOUR_RGB('',0.800000010877,0.800000010877,0.800000010877);
74+
#57 = CURVE_STYLE('',#58,POSITIVE_LENGTH_MEASURE(0.1),#59);
75+
#58 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
76+
#59 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02,
77+
9.803921802644E-02);
78+
ENDSEC;
79+
END-ISO-10303-21;

0 commit comments

Comments
 (0)