你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
Corrected writing of progress bars for .vtp geometry views.
这个提交包含在:
@@ -59,6 +59,29 @@ class GeometryView(object):
|
||||
self.dz = dz
|
||||
self.basefilename = filename
|
||||
self.type = type
|
||||
if self.type == '.vti':
|
||||
# Calculate number of cells according to requested sampling for geometry view
|
||||
self.vtk_xscells = round_value(self.xs / self.dx)
|
||||
self.vtk_xfcells = round_value(self.xf / self.dx)
|
||||
self.vtk_yscells = round_value(self.ys / self.dy)
|
||||
self.vtk_yfcells = round_value(self.yf / self.dy)
|
||||
self.vtk_zscells = round_value(self.zs / self.dz)
|
||||
self.vtk_zfcells = round_value(self.zf / self.dz)
|
||||
self.vtk_nxcells = self.vtk_xfcells - self.vtk_xscells
|
||||
self.vtk_nycells = self.vtk_yfcells - self.vtk_yscells
|
||||
self.vtk_nzcells = self.vtk_zfcells - self.vtk_zscells
|
||||
self.datawritesize = int(np.dtype(np.uint32).itemsize * self.vtk_nxcells * self.vtk_nycells * self.vtk_nzcells) + 2 * (int(np.dtype(np.int8).itemsize * self.vtk_nxcells * self.vtk_nycells * self.vtk_nzcells))
|
||||
print(self.datawritesize)
|
||||
elif self.type == '.vtp':
|
||||
self.vtk_numpoints = (self.nx + 1) * (self.ny + 1) * (self.nz + 1)
|
||||
self.vtk_numpoint_components = 3
|
||||
self.vtk_numlines = 2 * self.nx * self.ny + 2 * self.ny * self.nz + 2 * self.nx * self.nz + 3 * self.nx * self.ny * self.nz + self.nx + self.ny + self.nz
|
||||
self.vtk_numline_components = 2
|
||||
self.vtk_connectivity_offset = round_value((self.vtk_numpoints * self.vtk_numpoint_components * np.dtype(np.float32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
self.vtk_offsets_offset = round_value(self.vtk_connectivity_offset + (self.vtk_numlines * self.vtk_numline_components * np.dtype(np.uint32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
self.vtk_materials_offset = round_value(self.vtk_offsets_offset + (self.vtk_numlines * np.dtype(np.uint32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
self.datawritesize = np.dtype(np.float32).itemsize * self.vtk_numpoints * self.vtk_numpoint_components + np.dtype(np.uint32).itemsize * self.vtk_numlines * self.vtk_numline_components + np.dtype(np.uint32).itemsize * self.vtk_numlines + np.dtype(np.uint32).itemsize * self.vtk_numlines
|
||||
print(self.datawritesize)
|
||||
|
||||
def set_filename(self, modelrun, numbermodelruns, G):
|
||||
"""Construct filename from user-supplied name and model run number.
|
||||
@@ -88,17 +111,6 @@ class GeometryView(object):
|
||||
"""
|
||||
|
||||
if self.type == '.vti':
|
||||
# Calculate number of cells according to requested sampling for geometry view
|
||||
self.vtk_xscells = round_value(self.xs / self.dx)
|
||||
self.vtk_xfcells = round_value(self.xf / self.dx)
|
||||
self.vtk_yscells = round_value(self.ys / self.dy)
|
||||
self.vtk_yfcells = round_value(self.yf / self.dy)
|
||||
self.vtk_zscells = round_value(self.zs / self.dz)
|
||||
self.vtk_zfcells = round_value(self.zf / self.dz)
|
||||
self.vtk_nxcells = self.vtk_xfcells - self.vtk_xscells
|
||||
self.vtk_nycells = self.vtk_yfcells - self.vtk_yscells
|
||||
self.vtk_nzcells = self.vtk_zfcells - self.vtk_zscells
|
||||
|
||||
# Create arrays and add numeric IDs for PML, sources and receivers (0 is not set, 1 is PML, srcs and rxs numbered thereafter)
|
||||
self.srcs_pml = np.zeros((G.nx + 1, G.ny + 1, G.nz + 1), dtype=np.int8)
|
||||
self.rxs = np.zeros((G.nx + 1, G.ny + 1, G.nz + 1), dtype=np.int8)
|
||||
@@ -157,43 +169,36 @@ class GeometryView(object):
|
||||
self.write_gprmax_info(f, G)
|
||||
|
||||
elif self.type == '.vtp':
|
||||
vtk_numpoints = (self.nx + 1) * (self.ny + 1) * (self.nz + 1)
|
||||
vtk_numpoint_components = 3
|
||||
vtk_numlines = 2 * self.nx * self.ny + 2 * self.ny * self.nz + 2 * self.nx * self.nz + 3 * self.nx * self.ny * self.nz + self.nx + self.ny + self.nz
|
||||
vtk_numline_components = 2
|
||||
|
||||
vtk_connectivity_offset = round_value((vtk_numpoints * vtk_numpoint_components * np.dtype(np.float32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
vtk_offsets_offset = round_value(vtk_connectivity_offset + (vtk_numlines * vtk_numline_components * np.dtype(np.uint32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
vtk_materials_offset = round_value(vtk_offsets_offset + (vtk_numlines * np.dtype(np.uint32).itemsize) + np.dtype(np.uint32).itemsize)
|
||||
|
||||
with open(self.filename, 'wb') as f:
|
||||
f.write('<?xml version="1.0"?>\n'.encode('utf-8'))
|
||||
f.write('<VTKFile type="PolyData" version="1.0" byte_order="{}">\n'.format(GeometryView.byteorder).encode('utf-8'))
|
||||
f.write('<PolyData>\n<Piece NumberOfPoints="{}" NumberOfVerts="0" NumberOfLines="{}" NumberOfStrips="0" NumberOfPolys="0">\n'.format(vtk_numpoints, vtk_numlines).encode('utf-8'))
|
||||
f.write('<PolyData>\n<Piece NumberOfPoints="{}" NumberOfVerts="0" NumberOfLines="{}" NumberOfStrips="0" NumberOfPolys="0">\n'.format(self.vtk_numpoints, self.vtk_numlines).encode('utf-8'))
|
||||
|
||||
f.write('<Points>\n<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="0" />\n</Points>\n'.encode('utf-8'))
|
||||
f.write('<Lines>\n<DataArray type="UInt32" Name="connectivity" format="appended" offset="{}" />\n'.format(vtk_connectivity_offset).encode('utf-8'))
|
||||
f.write('<DataArray type="UInt32" Name="offsets" format="appended" offset="{}" />\n</Lines>\n'.format(vtk_offsets_offset).encode('utf-8'))
|
||||
f.write('<Lines>\n<DataArray type="UInt32" Name="connectivity" format="appended" offset="{}" />\n'.format(self.vtk_connectivity_offset).encode('utf-8'))
|
||||
f.write('<DataArray type="UInt32" Name="offsets" format="appended" offset="{}" />\n</Lines>\n'.format(self.vtk_offsets_offset).encode('utf-8'))
|
||||
|
||||
f.write('<CellData Scalars="Material">\n'.encode('utf-8'))
|
||||
f.write('<DataArray type="UInt32" Name="Material" format="appended" offset="{}" />\n'.format(vtk_materials_offset).encode('utf-8'))
|
||||
f.write('<DataArray type="UInt32" Name="Material" format="appended" offset="{}" />\n'.format(self.vtk_materials_offset).encode('utf-8'))
|
||||
f.write('</CellData>\n'.encode('utf-8'))
|
||||
|
||||
f.write('</Piece>\n</PolyData>\n<AppendedData encoding="raw">\n_'.encode('utf-8'))
|
||||
|
||||
# Write points
|
||||
datasize = np.dtype(np.float32).itemsize * vtk_numpoints * vtk_numpoint_components
|
||||
datasize = np.dtype(np.float32).itemsize * self.vtk_numpoints * self.vtk_numpoint_components
|
||||
f.write(pack('I', datasize))
|
||||
for i in range(self.xs, self.xf + 1):
|
||||
for j in range(self.ys, self.yf + 1):
|
||||
for k in range(self.zs, self.zf + 1):
|
||||
f.write(pack('fff', i * G.dx, j * G.dy, k * G.dz))
|
||||
pbar.update(n=12)
|
||||
f.write(pack('fff', i * G.dx, j * G.dy, k * G.dz))
|
||||
|
||||
# Write cell type (line) connectivity for x components
|
||||
datasize = np.dtype(np.uint32).itemsize * vtk_numlines * vtk_numline_components
|
||||
datasize = np.dtype(np.uint32).itemsize * self.vtk_numlines * self.vtk_numline_components
|
||||
f.write(pack('I', datasize))
|
||||
vtk_x2 = (self.ny + 1) * (self.nz + 1)
|
||||
for vtk_x1 in range(self.nx * (self.ny + 1) * (self.nz + 1)):
|
||||
pbar.update(n=8)
|
||||
f.write(pack('II', vtk_x1, vtk_x2))
|
||||
# print('x {} {}'.format(vtk_x1, vtk_x2))
|
||||
vtk_x2 += 1
|
||||
@@ -206,6 +211,7 @@ class GeometryView(object):
|
||||
vtk_ycnt2 += 1
|
||||
else:
|
||||
vtk_y2 = vtk_y1 + self.nz + 1
|
||||
pbar.update(n=8)
|
||||
f.write(pack('II', vtk_y1, vtk_y2))
|
||||
# print('y {} {}'.format(vtk_y1, vtk_y2))
|
||||
if vtk_ycnt2 == self.nz + 1:
|
||||
@@ -217,6 +223,7 @@ class GeometryView(object):
|
||||
for vtk_z1 in range((self.nx + 1) * (self.ny + 1) * self.nz + (self.nx + 1) * (self.ny + 1)):
|
||||
if vtk_z1 != vtk_zcnt:
|
||||
vtk_z2 = vtk_z1 + 1
|
||||
pbar.update(n=8)
|
||||
f.write(pack('II', vtk_z1, vtk_z2))
|
||||
# print('z {} {}'.format(vtk_z1, vtk_z2))
|
||||
else:
|
||||
@@ -224,27 +231,31 @@ class GeometryView(object):
|
||||
|
||||
# Write cell type (line) offsets
|
||||
vtk_cell_pts = 2
|
||||
datasize = np.dtype(np.uint32).itemsize * vtk_numlines
|
||||
datasize = np.dtype(np.uint32).itemsize * self.vtk_numlines
|
||||
f.write(pack('I', datasize))
|
||||
for vtk_offsets in range(vtk_cell_pts, (vtk_numline_components * vtk_numlines) + vtk_cell_pts, vtk_cell_pts):
|
||||
for vtk_offsets in range(vtk_cell_pts, (self.vtk_numline_components * self.vtk_numlines) + vtk_cell_pts, vtk_cell_pts):
|
||||
pbar.update(n=4)
|
||||
f.write(pack('I', vtk_offsets))
|
||||
|
||||
# Write material IDs per-cell-edge, i.e. from ID array
|
||||
datasize = np.dtype(np.uint32).itemsize * vtk_numlines
|
||||
datasize = np.dtype(np.uint32).itemsize * self.vtk_numlines
|
||||
f.write(pack('I', datasize))
|
||||
for i in range(self.xs, self.xf):
|
||||
for j in range(self.ys, self.yf + 1):
|
||||
for k in range(self.zs, self.zf + 1):
|
||||
pbar.update(n=4)
|
||||
f.write(pack('I', G.ID[0, i, j, k]))
|
||||
|
||||
for i in range(self.xs, self.xf + 1):
|
||||
for j in range(self.ys, self.yf):
|
||||
for k in range(self.zs, self.zf + 1):
|
||||
pbar.update(n=4)
|
||||
f.write(pack('I', G.ID[1, i, j, k]))
|
||||
|
||||
for i in range(self.xs, self.xf + 1):
|
||||
for j in range(self.ys, self.yf + 1):
|
||||
for k in range(self.zs, self.zf):
|
||||
pbar.update(n=4)
|
||||
f.write(pack('I', G.ID[2, i, j, k]))
|
||||
|
||||
f.write('\n</AppendedData>\n</VTKFile>'.encode('utf-8'))
|
||||
|
@@ -459,8 +459,7 @@ def run_model(args, modelrun, numbermodelruns, inputfile, usernamespace):
|
||||
print()
|
||||
for i, geometryview in enumerate(G.geometryviews):
|
||||
geometryview.set_filename(modelrun, numbermodelruns, G)
|
||||
geoiters = 6 * (((geometryview.xf - geometryview.xs) / geometryview.dx) * ((geometryview.yf - geometryview.ys) / geometryview.dy) * ((geometryview.zf - geometryview.zs) / geometryview.dz))
|
||||
pbar = tqdm(total=geoiters, unit='byte', unit_scale=True, desc='Writing geometry file {} of {}, {}'.format(i + 1, len(G.geometryviews), os.path.split(geometryview.filename)[1]), ncols=get_terminal_width() - 1, file=sys.stdout, disable=G.tqdmdisable)
|
||||
pbar = tqdm(total=geometryview.datawritesize, unit='byte', unit_scale=True, desc='Writing geometry file {} of {}, {}'.format(i + 1, len(G.geometryviews), os.path.split(geometryview.filename)[1]), ncols=get_terminal_width() - 1, file=sys.stdout, disable=G.tqdmdisable)
|
||||
geometryview.write_vtk(modelrun, numbermodelruns, G, pbar)
|
||||
pbar.close()
|
||||
if G.geometryobjectswrite:
|
||||
|
在新工单中引用
屏蔽一个用户