diff --git a/gprMax/solvers.py b/gprMax/solvers.py index 26de9bb8..9a759e94 100644 --- a/gprMax/solvers.py +++ b/gprMax/solvers.py @@ -21,7 +21,8 @@ from gprMax.utilities import timer from .grid import FDTDGrid from .grid import GPUGrid import gprMax.config as config -from .subgrids.solver import create_solver as create_subgrid_solver +from .subgrids.solver import create_updates as create_subgrid_updates +from .subgrids.solver import SubGridSolver def create_G(sim_config): @@ -42,7 +43,8 @@ def create_solver(G, sim_config): updates = GPUUpdates(G) solver = Solver(updates) elif sim_config.subgrid: - solver = create_subgrid_solver(G) + updates = create_subgrid_updates(G) + solver = SubGridSolver(G, updates) else: updates = CPUUpdates(G) solver = Solver(updates) @@ -52,8 +54,8 @@ def create_solver(G, sim_config): # a large range of function exist to advance the time step for dispersive # materials. The correct function is set here based on the # the required numerical precision and dispersive material type. - #props = updates.adapt_dispersive_config(config) - #updates.set_dispersive_updates(props) + props = updates.adapt_dispersive_config(config) + updates.set_dispersive_updates(props) class Solver: diff --git a/gprMax/subgrids/solver.py b/gprMax/subgrids/solver.py index 8cb01e8d..ec5d4db6 100644 --- a/gprMax/subgrids/solver.py +++ b/gprMax/subgrids/solver.py @@ -18,7 +18,7 @@ from ..updates import CPUUpdates -def create_solver(G): +def create_updates(G): """Return the solver for the given subgrids.""" updaters = [] @@ -36,9 +36,7 @@ def create_solver(G): updaters.append(sgu) updates = SubgridUpdates(G, updaters) - solver = SubGridSolver(G, updates) - return solver - + return updates class SubgridUpdates(CPUUpdates): @@ -174,6 +172,7 @@ class SubgridUpdater(CPUUpdates): self.update_electric_pml() precursors.interpolate_magnetic_in_time(int(m + sub_grid.ratio / 2 - 0.5)) sub_grid.update_electric_is(precursors) + self.update_electric_b() self.update_sub_grid_electric_sources() @@ -188,6 +187,7 @@ class SubgridUpdater(CPUUpdates): self.update_electric_pml() precursors.calc_exact_magnetic_in_time() sub_grid.update_electric_is(precursors) + self.update_electric_b() self.update_sub_grid_electric_sources() sub_grid.update_electric_os(G) @@ -216,6 +216,8 @@ class SubgridUpdater(CPUUpdates): precursors.interpolate_magnetic_in_time(m) sub_grid.update_electric_is(precursors) + self.update_electric_b() + self.update_sub_grid_electric_sources() self.update_magnetic()