Skip to content
Merged

Dev #28

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/ShapesClassification.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ def isOpenProblem(self) -> bool:
return True
if roots[0] in self.dielectrics.keys():
return True
if roots[0] in self.pecs.keys() and roots[0] not in self.nestedGraph.getParentNodes():
return True
return False

def removeConductorsFromDielectrics(self):
Expand Down
42 changes: 31 additions & 11 deletions test/test_mesher.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,25 +149,25 @@ def test_mesh_dielectric_unshielded_pair(self) -> None:
expectedEntities = [1, 1, 1, 1, 1, 1, 1]

Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)

gmsh.write(caseName + '.vtk')
gmsh.write(caseName + '.msh')

self.assertPhysicalGroup(expectedNames, expectedEntities)

def test_mesh_dielectric_unshielded_pair_defined_boundary(self) -> None:
caseName = 'DielectricUnshieldedPairDefinedBoundary'

meshing_options = copy.deepcopy(Mesher.DEFAULT_MESHING_OPTIONS)
meshing_options["Mesh.ElementOrder"] = 1

Mesher().meshFromStep(
self.inputFileFromCaseName(caseName),
self.inputFileFromCaseName(caseName),
caseName,
meshingOptions=meshing_options)

gmsh.write(caseName + '.vtk')

expectedNames = [
'Conductor_0', 'Conductor_1',
'Dielectric_0', 'Dielectric_1',
Expand All @@ -190,7 +190,7 @@ def test_mesh_from_step_with_five_wires(self):
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)

gmsh.write(caseName + '.vtk')

pGs = gmsh.model.getPhysicalGroups()
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
self.assertEqual(sorted(pGNames), sorted(expectedNames))
Expand Down Expand Up @@ -365,16 +365,35 @@ def test_lansink2024_single_wire_multipolar(self):
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(
name), expectedEntities[idx], name)

def test_unshielded_single_wire(self):
caseName = 'unshielded_single_wire'
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)

expectedNames = [
'Conductor_0',
'OpenBoundary_0',
'Vacuum_0', # Inner region
'Vacuum_1' # Outer region
]
expectedEntities = [1, 1, 1, 1]

# For debugging.
gmsh.write(caseName + '.vtk')
gmsh.write(caseName + '.msh')
# gmsh.fltk.run()

self.assertPhysicalGroup(expectedNames, expectedEntities)

def test_unshielded_nesting(self):
caseName = 'UnshieldedNested'
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
#gmsh.write(caseName + '.msh')
#gmsh.write(caseName + '.vtk')

# gmsh.write(caseName + '.msh')
# gmsh.write(caseName + '.vtk')

pGs = gmsh.model.getPhysicalGroups()
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
expectedNames = ['Conductor_0',
expectedNames = ['Conductor_0',
'Conductor_1',
'Conductor_2',
'OpenBoundary_0',
Expand All @@ -385,7 +404,8 @@ def test_unshielded_nesting(self):
self.assertEqual(sorted(pGNames), sorted(expectedNames))

for idx, name in enumerate(expectedNames):
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(
name), expectedEntities[idx], name)


if __name__ == '__main__':
Expand Down
Binary file not shown.
10 changes: 10 additions & 0 deletions testData/unshielded_single_wire/unshielded_single_wire.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"CrossSection": [
{
"name": "Conductor",
"material": {
"type": "PEC"
}
}
]
}
79 changes: 79 additions & 0 deletions testData/unshielded_single_wire/unshielded_single_wire.step
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-03-11T12:53:42',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('Conductor','Conductor','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#15),#42);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = SHELL_BASED_SURFACE_MODEL('',(#16));
#16 = OPEN_SHELL('',(#17));
#17 = ADVANCED_FACE('',(#18),#31,.T.);
#18 = FACE_BOUND('',#19,.T.);
#19 = EDGE_LOOP('',(#20));
#20 = ORIENTED_EDGE('',*,*,#21,.T.);
#21 = EDGE_CURVE('',#22,#22,#24,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(21.,0.,0.));
#24 = SURFACE_CURVE('',#25,(#30),.PCURVE_S1.);
#25 = CIRCLE('',#26,1.);
#26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);
#27 = CARTESIAN_POINT('',(20.,0.,0.));
#28 = DIRECTION('',(0.,0.,1.));
#29 = DIRECTION('',(1.,0.,0.));
#30 = PCURVE('',#31,#36);
#31 = PLANE('',#32);
#32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
#33 = CARTESIAN_POINT('',(20.,1.910944170279E-18,0.));
#34 = DIRECTION('',(0.,0.,1.));
#35 = DIRECTION('',(1.,0.,0.));
#36 = DEFINITIONAL_REPRESENTATION('',(#37),#41);
#37 = CIRCLE('',#38,1.);
#38 = AXIS2_PLACEMENT_2D('',#39,#40);
#39 = CARTESIAN_POINT('',(0.,-1.910944170279E-18));
#40 = DIRECTION('',(1.,0.));
#41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#46)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
(#43,#44,#45)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#43 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#44 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#45 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#46 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#43,
'distance_accuracy_value','confusion accuracy');
#47 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
#48 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#49),
#42);
#49 = STYLED_ITEM('color',(#50),#17);
#50 = PRESENTATION_STYLE_ASSIGNMENT((#51,#57));
#51 = SURFACE_STYLE_USAGE(.BOTH.,#52);
#52 = SURFACE_SIDE_STYLE('',(#53));
#53 = SURFACE_STYLE_FILL_AREA(#54);
#54 = FILL_AREA_STYLE('',(#55));
#55 = FILL_AREA_STYLE_COLOUR('',#56);
#56 = COLOUR_RGB('',0.800000010877,0.800000010877,0.800000010877);
#57 = CURVE_STYLE('',#58,POSITIVE_LENGTH_MEASURE(0.1),#59);
#58 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
#59 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02,
9.803921802644E-02);
ENDSEC;
END-ISO-10303-21;
Loading