Add class function to create compound material IDs

这个提交包含在:
nmannall
2024-12-05 17:46:13 +00:00
父节点 98507608e5
当前提交 4f2b6f412d
共有 9 个文件被更改,包括 32 次插入24 次删除

查看文件

@@ -117,7 +117,7 @@ class Box(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -119,7 +119,7 @@ class Cone(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -104,7 +104,7 @@ class Cylinder(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -128,7 +128,7 @@ class CylindricalSector(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = f"{materials[0].ID}+{materials[1].ID}+{materials[2].ID}"
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -99,7 +99,7 @@ class Ellipsoid(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -94,7 +94,7 @@ class Sphere(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -145,7 +145,7 @@ class Triangle(UserObjectGeometry):
numIDx = materials[0].numID
numIDy = materials[1].numID
numIDz = materials[2].numID
requiredID = materials[0].ID + "+" + materials[1].ID + "+" + materials[2].ID
requiredID = Material.create_compound_id(materials[0], materials[1], materials[2])
averagedmaterial = [x for x in grid.materials if x.ID == requiredID]
if averagedmaterial:
numID = averagedmaterial.numID

查看文件

@@ -56,16 +56,7 @@ cpdef void create_electric_average(
# Make an ID composed of the names of the four materials that will
# be averaged. Sort the names to ensure the same four component
# materials always form the same ID.
requiredID = "+".join(
sorted(
[
G.materials[numID1].ID,
G.materials[numID2].ID,
G.materials[numID3].ID,
G.materials[numID4].ID,
]
)
)
requiredID = Material.create_compound_id(G.materials[numID1], G.materials[numID2], G.materials[numID3], G.materials[numID4])
# Check if this material already exists
material = [x for x in G.materials if x.ID == requiredID]
@@ -113,14 +104,10 @@ cpdef void create_magnetic_average(
"""
# Make an ID composed of the names of the two materials that will be averaged
requiredID = G.materials[numID1].ID + '+' + G.materials[numID2].ID
requiredID = Material.create_compound_id(G.materials[numID1], G.materials[numID2])
# Check if this material already exists
tmp = requiredID.split('+')
material = [x for x in G.materials if
(x.ID.count(tmp[0]) == requiredID.count(tmp[0]) and
x.ID.count(tmp[1]) == requiredID.count(tmp[1])) or
(x.ID.count(tmp[0]) % 2 == 0 and x.ID.count(tmp[1]) % 2 == 0)]
material = [x for x in G.materials if x.ID == requiredID]
if material:
G.ID[componentID, i, j, k] = material[0].numID

查看文件

@@ -53,7 +53,9 @@ class Material:
if isinstance(value, Material):
return self.ID == value.ID
else:
return super().__eq__(value)
raise TypeError(
f"'==' not supported between instances of 'Material' and '{type(value)}'"
)
def __lt__(self, value: object) -> bool:
if isinstance(value, Material):
@@ -71,6 +73,25 @@ class Material:
f"'>' not supported between instances of 'Material' and '{type(value)}'"
)
@staticmethod
def create_compound_id(*materials: "Material") -> str:
"""Create a compound ID from existing materials.
The new ID will be the IDs of the existing materials joined by a
'+' symbol. The component IDs will be sorted alphabetically and
if two materials are provided, the compound ID will contain each
material twice.
Args:
*materials: Materials to use to create the compound ID.
Returns:
compound_id: New compound id.
"""
if len(materials) == 2:
materials += materials
return "+".join(sorted([material.ID for material in materials]))
def calculate_update_coeffsH(self, G):
"""Calculates the magnetic update coefficients of the material.