diff --git a/gprMax/cmds_multiuse.py b/gprMax/cmds_multiuse.py index 49c91ff9..9a654108 100644 --- a/gprMax/cmds_multiuse.py +++ b/gprMax/cmds_multiuse.py @@ -1257,7 +1257,7 @@ class GeometryView(UserObjectMulti): xs, ys, zs = p1 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: logger.exception(self.params_str() + ' the step size should not be less than zero') diff --git a/gprMax/model_build_run.py b/gprMax/model_build_run.py index 3504b228..ebc18f53 100644 --- a/gprMax/model_build_run.py +++ b/gprMax/model_build_run.py @@ -107,22 +107,29 @@ class ModelBuildRun: if not (G.geometryviews or G.geometryobjectswrite) and config.sim_config.args.geometry_only: logger.exception('\nNo geometry views or geometry objects found.') raise ValueError - if G.geometryviews: - logger.info('') - # Write a Paraview data file (.pvd) if there is more than one GeometryView - if len(G.geometryviews) > 1: - G.geometryviews[0].write_vtk_pvd(G.geometryviews) - logger.info(f'Written wrapper for geometry files: {G.geometryviews[0].pvdfile.name}') - for i, gv in enumerate(G.geometryviews): - gv.initialise() - gv.set_filename() - pbar = tqdm(total=gv.datawritesize, unit='byte', unit_scale=True, - desc=f'Writing geometry view file {i + 1}/{len(G.geometryviews)}, {gv.filename.name}', - ncols=get_terminal_width() - 1, file=sys.stdout, - disable=not config.sim_config.general['progressbars']) - gv.write_vtk(G, pbar) - pbar.close() - logger.info('') + + def save_geometry_views(grid): + """Create and save the geometryviews under given grid.""" + if grid.geometryviews: + logger.info('') + # Write a Paraview data file (.pvd) if there is more than one GeometryView + if len(grid.geometryviews) > 1: + grid.geometryviews[0].write_vtk_pvd(grid.geometryviews) + logger.info(f'Written wrapper for geometry files: {grid.geometryviews[0].pvdfile.name}') + for i, gv in enumerate(grid.geometryviews): + gv.initialise() + gv.set_filename() + pbar = tqdm(total=gv.datawritesize, unit='byte', unit_scale=True, + desc=f'Writing geometry view file {i + 1}/{len(grid.geometryviews)}, {gv.filename.name}', + ncols=get_terminal_width() - 1, file=sys.stdout, + disable=not config.sim_config.general['progressbars']) + gv.write_vtk(grid, pbar) + pbar.close() + logger.info('') + + save_geometry_views(G) + [save_geometry_views(sg) for sg in G.subgrids] + if G.geometryobjectswrite: logger.info('') for i, go in enumerate(G.geometryobjectswrite): diff --git a/gprMax/user_inputs.py b/gprMax/user_inputs.py index 552cadaa..f5b90af6 100644 --- a/gprMax/user_inputs.py +++ b/gprMax/user_inputs.py @@ -122,6 +122,9 @@ class MainGridUserInput(UserInput): 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 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()): logger.warning(f"'{cmd_str}' this object traverses the Outer Surface. This is an advanced feature.") 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) + diff --git a/user_models/sub-gridding/subgrid_basic.py b/user_models/sub-gridding/subgrid_basic.py index 37fb2c22..1e512441 100644 --- a/user_models/sub-gridding/subgrid_basic.py +++ b/user_models/sub-gridding/subgrid_basic.py @@ -81,6 +81,12 @@ gv = gprMax.GeometryView(p1=(0, 0, 0), output_type='f', 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 gv_normal = gprMax.GeometryView(p1=(0, 0, 0), @@ -88,7 +94,8 @@ gv_normal = gprMax.GeometryView(p1=(0, 0, 0), dl=dl, filename=fn.with_suffix('').parts[-1] + '_voxels', output_type='n') -scene.add(gv) +#scene.add(gv) +sg.add(gv_sg) #scene.add(gv_normal) gprMax.run(scenes=[scene], n=1, geometry_only=False, outputfile=fn, subgrid=True, autotranslate=True)