你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
Add class function to create compound material IDs
这个提交包含在:
@@ -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.
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户