你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
Sort output materials by ID
这个提交包含在:
@@ -487,17 +487,19 @@ class GeometryObjects:
|
||||
|
||||
ID = G.ID[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
|
||||
# Get materials present in subset of ID array
|
||||
# Get materials present in subset of ID array and sort by material ID
|
||||
material_ids, inverse_map = np.unique(ID, return_inverse=True)
|
||||
get_material = np.vectorize(lambda id: G.materials[id])
|
||||
materials = sorted(get_material(material_ids))
|
||||
|
||||
# Create map from material ID to 0 - number of materials
|
||||
materials_map = {material_id: index for index, material_id in enumerate(material_ids)}
|
||||
materials_map = {material.numID: index for index, material in enumerate(materials)}
|
||||
map_materials = np.vectorize(lambda id: materials_map[id])
|
||||
|
||||
# Remap ID array to the reduced list of materials
|
||||
ID = np.array([materials_map[id] for id in material_ids])[inverse_map].reshape(ID.shape)
|
||||
ID = np.array(map_materials(material_ids))[inverse_map].reshape(ID.shape)
|
||||
|
||||
data = G.solid[self.xs : self.xf, self.ys : self.yf, self.zs : self.zf].astype("int16")
|
||||
map_materials = np.vectorize(lambda id: materials_map[id])
|
||||
data = map_materials(data)
|
||||
|
||||
rigidE = G.rigidE[:, self.xs : self.xf, self.ys : self.yf, self.zs : self.zf]
|
||||
@@ -520,8 +522,8 @@ class GeometryObjects:
|
||||
|
||||
# Write materials list to a text file
|
||||
with open(self.filename_materials, "w") as fmaterials:
|
||||
for numID in material_ids:
|
||||
self.output_material(G.materials[numID], fmaterials)
|
||||
for material in materials:
|
||||
self.output_material(material, fmaterials)
|
||||
|
||||
def output_material(self, material: Material, file: TextIOWrapper):
|
||||
file.write(
|
||||
@@ -586,15 +588,9 @@ class MPIGeometryObjects(GeometryObjects):
|
||||
materials = self.comm.gather(local_materials, root=0)
|
||||
|
||||
if self.comm.rank == 0:
|
||||
# Filter out duplicate materials
|
||||
# Filter out duplicate materials and sort by material ID
|
||||
materials = np.fromiter(chain.from_iterable(materials), dtype=Material)
|
||||
_, indices = np.unique(materials, return_index=True)
|
||||
|
||||
# We want to sort the materials by the order they appear,
|
||||
# not sorted alphabetically by ID (default behaviour using
|
||||
# np.unique). This ensures user defined materials are lower
|
||||
# indexed than compound materials.
|
||||
global_materials = materials[sorted(indices)]
|
||||
global_materials = np.unique(materials)
|
||||
|
||||
global_material_ids = [m.ID for m in global_materials]
|
||||
else:
|
||||
|
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ac30e1b942acb3e17bec7d2a16167429ed3b1590642d9c403ee5d0adb6be27c8
|
||||
oid sha256:2b2fbdb39eb6ad15c35877be207a7a0d3f19cc22faad223d058988f788842f7b
|
||||
size 75462640
|
||||
|
@@ -1,9 +1,8 @@
|
||||
#material: 1 inf 1 0 pec
|
||||
#material: 1 0 1 0 free_space
|
||||
#material: 4.9 0 1 0 myWater
|
||||
#material: 3 0 2 0 boxMaterial
|
||||
#material: 2 0 1.5 0 boxMaterial+boxMaterial+free_space+free_space
|
||||
#material: 1.5 0 1.25 0 boxMaterial+free_space+free_space+free_space
|
||||
#material: 2 0 1.5 0 boxMaterial+free_space+free_space+boxMaterial
|
||||
#material: 1.975 0 1 0 myWater+free_space+free_space+free_space
|
||||
#material: 2.95 0 1 0 myWater+free_space+free_space+myWater
|
||||
#material: 3.925 0 1 0 myWater+myWater+free_space+myWater
|
||||
#material: 1 0 1 0 free_space
|
||||
#material: 1.975 0 1 0 free_space+free_space+free_space+myWater
|
||||
#material: 2.95 0 1 0 free_space+free_space+myWater+myWater
|
||||
#material: 3.925 0 1 0 free_space+myWater+myWater+myWater
|
||||
#material: 4.9 0 1 0 myWater
|
||||
|
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:224975ddea1c1a4cd3f99aaa9e7ce1fb1ec31de07b0352424f66be73a5645a4f
|
||||
oid sha256:6304565819cdb7c5b2af86d57bb25e3f22c92b9aae431934e2c2eca029928d59
|
||||
size 4980400
|
||||
|
@@ -1,9 +1,8 @@
|
||||
#material: 1 inf 1 0 pec
|
||||
#material: 1 0 1 0 free_space
|
||||
#material: 4.9 0 1 0 myWater
|
||||
#material: 3 0 2 0 boxMaterial
|
||||
#material: 2 0 1.5 0 boxMaterial+boxMaterial+free_space+free_space
|
||||
#material: 1.5 0 1.25 0 boxMaterial+free_space+free_space+free_space
|
||||
#material: 2 0 1.5 0 boxMaterial+free_space+free_space+boxMaterial
|
||||
#material: 1.975 0 1 0 myWater+free_space+free_space+free_space
|
||||
#material: 2.95 0 1 0 myWater+free_space+free_space+myWater
|
||||
#material: 3.925 0 1 0 myWater+myWater+free_space+myWater
|
||||
#material: 1 0 1 0 free_space
|
||||
#material: 1.975 0 1 0 free_space+free_space+free_space+myWater
|
||||
#material: 2.95 0 1 0 free_space+free_space+myWater+myWater
|
||||
#material: 3.925 0 1 0 free_space+myWater+myWater+myWater
|
||||
#material: 4.9 0 1 0 myWater
|
||||
|
在新工单中引用
屏蔽一个用户