你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
Remove extra materials output by serial geometry objects
这个提交包含在:
@@ -411,45 +411,45 @@ class GeometryObjects:
|
||||
pbar: Progress bar class instance.
|
||||
"""
|
||||
|
||||
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
|
||||
material_ids, inverse_map = np.unique(ID, return_inverse=True)
|
||||
|
||||
# Create map from material ID to 0 - number of materials
|
||||
materials_map = {material_id: index for index, material_id in enumerate(material_ids)}
|
||||
|
||||
# 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)
|
||||
|
||||
data = G.solid[self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1].astype(
|
||||
"int16"
|
||||
)
|
||||
map_materials = np.vectorize(lambda id: materials_map[id])
|
||||
data = map_materials(data)
|
||||
|
||||
rigidE = G.rigidE[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
rigidH = G.rigidH[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
|
||||
with h5py.File(self.filename_hdf5, "w") as fdata:
|
||||
fdata.attrs["gprMax"] = __version__
|
||||
fdata.attrs["Title"] = title
|
||||
fdata.attrs["dx_dy_dz"] = (G.dx, G.dy, G.dz)
|
||||
|
||||
# Get minimum and maximum integers of materials in geometry objects volume
|
||||
minmat = np.amin(
|
||||
G.ID[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
)
|
||||
maxmat = np.amax(
|
||||
G.ID[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
)
|
||||
fdata["/data"] = (
|
||||
G.solid[self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1].astype(
|
||||
"int16"
|
||||
)
|
||||
- minmat
|
||||
)
|
||||
fdata["/data"] = data
|
||||
pbar.update(self.solidsize)
|
||||
fdata["/rigidE"] = G.rigidE[
|
||||
:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1
|
||||
]
|
||||
fdata["/rigidH"] = G.rigidH[
|
||||
:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1
|
||||
]
|
||||
|
||||
fdata["/rigidE"] = rigidE
|
||||
fdata["/rigidH"] = rigidH
|
||||
pbar.update(self.rigidsize)
|
||||
fdata["/ID"] = (
|
||||
G.ID[:, self.xs : self.xf + 1, self.ys : self.yf + 1, self.zs : self.zf + 1]
|
||||
- minmat
|
||||
)
|
||||
|
||||
fdata["/ID"] = ID
|
||||
pbar.update(self.IDsize)
|
||||
|
||||
# Write materials list to a text file
|
||||
# This includes all materials in range whether used in volume or not
|
||||
with open(self.filename_materials, "w") as fmaterials:
|
||||
for numID in range(minmat, maxmat + 1):
|
||||
for material in G.materials:
|
||||
if material.numID == numID:
|
||||
self.output_material(material, fmaterials)
|
||||
for numID in material_ids:
|
||||
self.output_material(G.materials[numID], fmaterials)
|
||||
|
||||
def output_material(self, material: Material, file: TextIOWrapper):
|
||||
file.write(
|
||||
|
在新工单中引用
屏蔽一个用户