Skip to content

Commit f82fe1a

Browse files
committed
[WIP] Ensuring conductor areas are computed correctly
1 parent c80ddcd commit f82fe1a

5 files changed

Lines changed: 31 additions & 48 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
*.FCStd1
22
*.pyc
3-
*.msh
43
.vscode/
54
.pytest_cache/
65
.idea/
76
tmpFolder/
87
venv/
98
gmshDoc/
9+
10+
*.msh
1011
*.vtk
12+
*.areas.json

src/AreaExporterService.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,23 @@ def addComputedArea(self, geometry:str, label:str, area:float):
1919
}
2020
self.computedAreas['geometries'].append(geometry)
2121

22-
def addPhysicalModelOfDimension(self, mappedElements:Dict[str,str], dimension=2):
23-
physicalGroups = gmsh.model.getPhysicalGroups(dimension)
22+
def addPhysicalModelForConductors(self, mappedElements:Dict[str,str]):
23+
physicalGroups = gmsh.model.getPhysicalGroups(1)
2424
for physicalGroup in physicalGroups:
2525
entityTags = gmsh.model.getEntitiesForPhysicalGroup(*physicalGroup)
2626
geometryName = gmsh.model.getPhysicalName(*physicalGroup)
27-
label = ''
28-
for key, geometry in mappedElements.items():
29-
if geometry == geometryName:
30-
label = key
31-
for tag in entityTags:
32-
if dimension == 1:
33-
rad = gmsh.model.occ.getMass(dimension, tag) / (2*np.pi)
34-
area = rad*rad*np.pi
35-
if dimension == 2:
36-
area = gmsh.model.occ.getMass(dimension, tag)
27+
if geometryName.startswith("Conductor_"):
28+
loop = gmsh.model.geo.addCurveLoop(entityTags)
29+
surface = gmsh.model.geo.addPlaneSurface([loop])
30+
gmsh.model.geo.synchronize()
31+
area = gmsh.model.occ.getMass(2, surface)
32+
gmsh.model.occ.remove([(2, surface)])
33+
34+
label = ''
35+
for key, geometry in mappedElements.items():
36+
if geometry == geometryName:
37+
label = key
38+
break
3739
if geometryName != AreaExporterService._EMPTY_NAME_CASE:
3840
self.addComputedArea(geometryName, label, area)
3941

src/ShapesClassification.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def getNumberFromName(entity_name: str, label: str):
4040
num = int(entity_name[ini:])
4141
return num
4242

43-
def get_entities_by_material_type(self, entity_tags, material_type: str, entity_dim: int = 2) -> Dict[str, List[Tuple[int,int]]]:
43+
def get_entities_by_material_type(self, entity_tags, material_type: str, entity_dim: int = 2) \
44+
-> Dict[str, List[Tuple[int,int]]]:
4445
"""
4546
Generic method to extract entities by material type from the cross-section data.
4647

test/test_AreaExporterService.py

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ def testAreaExporterReturnsTrueValues(self):
3030
caseName = 'five_wires'
3131
mappedElements = Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
3232
areaExporter = AreaExporterService()
33-
areaExporter.addPhysicalModelOfDimension(mappedElements=mappedElements, dimension=1)
34-
areaExporter.addPhysicalModelOfDimension(mappedElements=mappedElements, dimension=2)
33+
areaExporter.addPhysicalModelForConductors(mappedElements=mappedElements)
3534
geometries = areaExporter.computedAreas['geometries']
3635

3736
internalElements = []
@@ -48,9 +47,8 @@ def testJsonFormat(self) -> None:
4847
caseName = 'DielectricUnshieldedPair'
4948
mappedElements = Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
5049
areaExporter = AreaExporterService()
51-
areaExporter.addPhysicalModelOfDimension(mappedElements=mappedElements, dimension=1)
52-
areaExporter.addPhysicalModelOfDimension(mappedElements=mappedElements, dimension=2)
53-
50+
areaExporter.addPhysicalModelForConductors(mappedElements=mappedElements)
51+
5452
expectedDict = {
5553
'geometries': [
5654
{
@@ -61,32 +59,8 @@ def testJsonFormat(self) -> None:
6159
{
6260
'area': 201.06193,
6361
'geometry': 'Conductor_0',
64-
'label': 'LeftConductor'},
65-
{
66-
'area': 312048.117187,
67-
'geometry': 'OpenBoundary_0',
68-
'label': 'OpenBoundary_0'
69-
},
70-
{
71-
'area': 603.185789,
72-
'geometry': 'Dielectric_1',
73-
'label': 'RightDielectric'
74-
},
75-
{
76-
'area': 603.185789,
77-
'geometry': 'Dielectric_0',
78-
'label': 'LeftDielectric'
79-
},
80-
{
81-
'area': 6491.504606,
82-
'geometry': 'Vacuum_0',
83-
'label': 'Vacuum_0'
84-
},
85-
{
86-
'area': 303948.117142,
87-
'geometry': 'Vacuum_1',
88-
'label': 'Vacuum_1'
89-
}
62+
'label': 'LeftConductor'
63+
}
9064
]
9165
}
9266
self.maxDiff = None

test/test_mesher.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def test_mesh_from_step_with_two_wires_open(self):
140140
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(
141141
name), expectedEntities[idx], name)
142142

143-
def test_mesh_dielectric_pair_open(self) -> None:
143+
def test_mesh_dielectric_unshielded_pair(self) -> None:
144144
caseName = 'DielectricUnshieldedPair'
145145
expectedNames = [
146146
'Conductor_0', 'Conductor_1',
@@ -149,11 +149,13 @@ def test_mesh_dielectric_pair_open(self) -> None:
149149
expectedEntities = [1, 1, 1, 1, 1, 1, 1]
150150

151151
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
152-
# gmsh.write(caseName + '.vtk')
152+
153+
gmsh.write(caseName + '.vtk')
154+
gmsh.write(caseName + '.msh')
153155

154156
self.assertPhysicalGroup(expectedNames, expectedEntities)
155157

156-
def test_mesh_dielectric_pair_open_defined_boundary(self) -> None:
158+
def test_mesh_dielectric_unshielded_pair_defined_boundary(self) -> None:
157159
caseName = 'DielectricUnshieldedPairDefinedBoundary'
158160

159161
meshing_options = copy.deepcopy(Mesher.DEFAULT_MESHING_OPTIONS)
@@ -187,6 +189,8 @@ def test_mesh_from_step_with_five_wires(self):
187189
caseName = 'five_wires'
188190
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
189191

192+
gmsh.write(caseName + '.vtk')
193+
190194
pGs = gmsh.model.getPhysicalGroups()
191195
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
192196
self.assertEqual(sorted(pGNames), sorted(expectedNames))

0 commit comments

Comments
 (0)