Sort output materials by ID

这个提交包含在:
nmannall
2024-12-05 17:52:58 +00:00
父节点 4f2b6f412d
当前提交 8db2383f38
共有 5 个文件被更改,包括 24 次插入30 次删除

查看文件

@@ -487,17 +487,19 @@ class GeometryObjects:
ID = G.ID[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1] 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) 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 # 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 # 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") 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) data = map_materials(data)
rigidE = G.rigidE[:, self.xs : self.xf, self.ys : self.yf, self.zs : self.zf] 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 # Write materials list to a text file
with open(self.filename_materials, "w") as fmaterials: with open(self.filename_materials, "w") as fmaterials:
for numID in material_ids: for material in materials:
self.output_material(G.materials[numID], fmaterials) self.output_material(material, fmaterials)
def output_material(self, material: Material, file: TextIOWrapper): def output_material(self, material: Material, file: TextIOWrapper):
file.write( file.write(
@@ -586,15 +588,9 @@ class MPIGeometryObjects(GeometryObjects):
materials = self.comm.gather(local_materials, root=0) materials = self.comm.gather(local_materials, root=0)
if self.comm.rank == 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) materials = np.fromiter(chain.from_iterable(materials), dtype=Material)
_, indices = np.unique(materials, return_index=True) global_materials = np.unique(materials)
# 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_material_ids = [m.ID for m in global_materials] global_material_ids = [m.ID for m in global_materials]
else: else:

查看文件

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ac30e1b942acb3e17bec7d2a16167429ed3b1590642d9c403ee5d0adb6be27c8 oid sha256:2b2fbdb39eb6ad15c35877be207a7a0d3f19cc22faad223d058988f788842f7b
size 75462640 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: 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: 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 0 1 0 free_space
#material: 1.975 0 1 0 myWater+free_space+free_space+free_space #material: 1.975 0 1 0 free_space+free_space+free_space+myWater
#material: 2.95 0 1 0 myWater+free_space+free_space+myWater #material: 2.95 0 1 0 free_space+free_space+myWater+myWater
#material: 3.925 0 1 0 myWater+myWater+free_space+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 version https://git-lfs.github.com/spec/v1
oid sha256:224975ddea1c1a4cd3f99aaa9e7ce1fb1ec31de07b0352424f66be73a5645a4f oid sha256:6304565819cdb7c5b2af86d57bb25e3f22c92b9aae431934e2c2eca029928d59
size 4980400 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: 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: 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 0 1 0 free_space
#material: 1.975 0 1 0 myWater+free_space+free_space+free_space #material: 1.975 0 1 0 free_space+free_space+free_space+myWater
#material: 2.95 0 1 0 myWater+free_space+free_space+myWater #material: 2.95 0 1 0 free_space+free_space+myWater+myWater
#material: 3.925 0 1 0 myWater+myWater+free_space+myWater #material: 3.925 0 1 0 free_space+myWater+myWater+myWater
#material: 4.9 0 1 0 myWater