你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-08 07:24:19 +08:00
subgrid only fine geometry view
这个提交包含在:
@@ -1257,7 +1257,7 @@ class GeometryView(UserObjectMulti):
|
|||||||
xs, ys, zs = p1
|
xs, ys, zs = p1
|
||||||
xf, yf, zf = p2
|
xf, yf, zf = p2
|
||||||
|
|
||||||
dx, dy, dz = uip.discretise_point(dl)
|
dx, dy, dz = uip.discretise_static_point(dl)
|
||||||
|
|
||||||
if dx < 0 or dy < 0 or dz < 0:
|
if dx < 0 or dy < 0 or dz < 0:
|
||||||
logger.exception(self.params_str() + ' the step size should not be less than zero')
|
logger.exception(self.params_str() + ' the step size should not be less than zero')
|
||||||
|
@@ -107,22 +107,29 @@ class ModelBuildRun:
|
|||||||
if not (G.geometryviews or G.geometryobjectswrite) and config.sim_config.args.geometry_only:
|
if not (G.geometryviews or G.geometryobjectswrite) and config.sim_config.args.geometry_only:
|
||||||
logger.exception('\nNo geometry views or geometry objects found.')
|
logger.exception('\nNo geometry views or geometry objects found.')
|
||||||
raise ValueError
|
raise ValueError
|
||||||
if G.geometryviews:
|
|
||||||
|
def save_geometry_views(grid):
|
||||||
|
"""Create and save the geometryviews under given grid."""
|
||||||
|
if grid.geometryviews:
|
||||||
logger.info('')
|
logger.info('')
|
||||||
# Write a Paraview data file (.pvd) if there is more than one GeometryView
|
# Write a Paraview data file (.pvd) if there is more than one GeometryView
|
||||||
if len(G.geometryviews) > 1:
|
if len(grid.geometryviews) > 1:
|
||||||
G.geometryviews[0].write_vtk_pvd(G.geometryviews)
|
grid.geometryviews[0].write_vtk_pvd(grid.geometryviews)
|
||||||
logger.info(f'Written wrapper for geometry files: {G.geometryviews[0].pvdfile.name}')
|
logger.info(f'Written wrapper for geometry files: {grid.geometryviews[0].pvdfile.name}')
|
||||||
for i, gv in enumerate(G.geometryviews):
|
for i, gv in enumerate(grid.geometryviews):
|
||||||
gv.initialise()
|
gv.initialise()
|
||||||
gv.set_filename()
|
gv.set_filename()
|
||||||
pbar = tqdm(total=gv.datawritesize, unit='byte', unit_scale=True,
|
pbar = tqdm(total=gv.datawritesize, unit='byte', unit_scale=True,
|
||||||
desc=f'Writing geometry view file {i + 1}/{len(G.geometryviews)}, {gv.filename.name}',
|
desc=f'Writing geometry view file {i + 1}/{len(grid.geometryviews)}, {gv.filename.name}',
|
||||||
ncols=get_terminal_width() - 1, file=sys.stdout,
|
ncols=get_terminal_width() - 1, file=sys.stdout,
|
||||||
disable=not config.sim_config.general['progressbars'])
|
disable=not config.sim_config.general['progressbars'])
|
||||||
gv.write_vtk(G, pbar)
|
gv.write_vtk(grid, pbar)
|
||||||
pbar.close()
|
pbar.close()
|
||||||
logger.info('')
|
logger.info('')
|
||||||
|
|
||||||
|
save_geometry_views(G)
|
||||||
|
[save_geometry_views(sg) for sg in G.subgrids]
|
||||||
|
|
||||||
if G.geometryobjectswrite:
|
if G.geometryobjectswrite:
|
||||||
logger.info('')
|
logger.info('')
|
||||||
for i, go in enumerate(G.geometryobjectswrite):
|
for i, go in enumerate(G.geometryobjectswrite):
|
||||||
|
@@ -122,6 +122,9 @@ class MainGridUserInput(UserInput):
|
|||||||
|
|
||||||
return p1, p2, p3
|
return p1, p2, p3
|
||||||
|
|
||||||
|
def discretise_static_point(self, p):
|
||||||
|
"""Function to get the index of a continuous point regardless of the point of origin of the grid."""
|
||||||
|
return super().discretise_point(p)
|
||||||
|
|
||||||
class SubgridUserInput(MainGridUserInput):
|
class SubgridUserInput(MainGridUserInput):
|
||||||
"""Class to handle (x, y, z) points supplied by the user in the sub grid.
|
"""Class to handle (x, y, z) points supplied by the user in the sub grid.
|
||||||
@@ -175,3 +178,8 @@ class SubgridUserInput(MainGridUserInput):
|
|||||||
np.greater(p_t, self.outer_bound).any()):
|
np.greater(p_t, self.outer_bound).any()):
|
||||||
logger.warning(f"'{cmd_str}' this object traverses the Outer Surface. This is an advanced feature.")
|
logger.warning(f"'{cmd_str}' this object traverses the Outer Surface. This is an advanced feature.")
|
||||||
return p_t
|
return p_t
|
||||||
|
|
||||||
|
def discretise_static_point(self, p):
|
||||||
|
"""Function to get the index of a continuous point regardless of the point of origin of the grid."""
|
||||||
|
return super().discretise_point(p)
|
||||||
|
|
||||||
|
@@ -81,6 +81,12 @@ gv = gprMax.GeometryView(p1=(0, 0, 0),
|
|||||||
output_type='f',
|
output_type='f',
|
||||||
multi_grid=True)
|
multi_grid=True)
|
||||||
|
|
||||||
|
# create a geometry view of the sub grid
|
||||||
|
gv_sg = gprMax.GeometryView(p1=sg_p0,
|
||||||
|
p2=sg_p1,
|
||||||
|
dl=(1e-3, 1e-3, 1e-3),
|
||||||
|
filename=fn.with_suffix('').parts[-1] + '_only',
|
||||||
|
output_type='f')
|
||||||
|
|
||||||
# create a geometry view of the main grid and the sub grid stitched together
|
# create a geometry view of the main grid and the sub grid stitched together
|
||||||
gv_normal = gprMax.GeometryView(p1=(0, 0, 0),
|
gv_normal = gprMax.GeometryView(p1=(0, 0, 0),
|
||||||
@@ -88,7 +94,8 @@ gv_normal = gprMax.GeometryView(p1=(0, 0, 0),
|
|||||||
dl=dl,
|
dl=dl,
|
||||||
filename=fn.with_suffix('').parts[-1] + '_voxels',
|
filename=fn.with_suffix('').parts[-1] + '_voxels',
|
||||||
output_type='n')
|
output_type='n')
|
||||||
scene.add(gv)
|
#scene.add(gv)
|
||||||
|
sg.add(gv_sg)
|
||||||
#scene.add(gv_normal)
|
#scene.add(gv_normal)
|
||||||
|
|
||||||
gprMax.run(scenes=[scene], n=1, geometry_only=False, outputfile=fn, subgrid=True, autotranslate=True)
|
gprMax.run(scenes=[scene], n=1, geometry_only=False, outputfile=fn, subgrid=True, autotranslate=True)
|
||||||
|
在新工单中引用
屏蔽一个用户