dispersive updates for subgrid

这个提交包含在:
John Hartley
2019-08-23 15:45:28 +01:00
父节点 2d16ccc1f6
当前提交 d80489e786
共有 2 个文件被更改,包括 12 次插入8 次删除

查看文件

@@ -21,7 +21,8 @@ from gprMax.utilities import timer
from .grid import FDTDGrid from .grid import FDTDGrid
from .grid import GPUGrid from .grid import GPUGrid
import gprMax.config as config 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): def create_G(sim_config):
@@ -42,7 +43,8 @@ def create_solver(G, sim_config):
updates = GPUUpdates(G) updates = GPUUpdates(G)
solver = Solver(updates) solver = Solver(updates)
elif sim_config.subgrid: elif sim_config.subgrid:
solver = create_subgrid_solver(G) updates = create_subgrid_updates(G)
solver = SubGridSolver(G, updates)
else: else:
updates = CPUUpdates(G) updates = CPUUpdates(G)
solver = Solver(updates) 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 # a large range of function exist to advance the time step for dispersive
# materials. The correct function is set here based on the # materials. The correct function is set here based on the
# the required numerical precision and dispersive material type. # the required numerical precision and dispersive material type.
#props = updates.adapt_dispersive_config(config) props = updates.adapt_dispersive_config(config)
#updates.set_dispersive_updates(props) updates.set_dispersive_updates(props)
class Solver: class Solver:

查看文件

@@ -18,7 +18,7 @@ from ..updates import CPUUpdates
def create_solver(G): def create_updates(G):
"""Return the solver for the given subgrids.""" """Return the solver for the given subgrids."""
updaters = [] updaters = []
@@ -36,9 +36,7 @@ def create_solver(G):
updaters.append(sgu) updaters.append(sgu)
updates = SubgridUpdates(G, updaters) updates = SubgridUpdates(G, updaters)
solver = SubGridSolver(G, updates) return updates
return solver
class SubgridUpdates(CPUUpdates): class SubgridUpdates(CPUUpdates):
@@ -174,6 +172,7 @@ class SubgridUpdater(CPUUpdates):
self.update_electric_pml() self.update_electric_pml()
precursors.interpolate_magnetic_in_time(int(m + sub_grid.ratio / 2 - 0.5)) precursors.interpolate_magnetic_in_time(int(m + sub_grid.ratio / 2 - 0.5))
sub_grid.update_electric_is(precursors) sub_grid.update_electric_is(precursors)
self.update_electric_b()
self.update_sub_grid_electric_sources() self.update_sub_grid_electric_sources()
@@ -188,6 +187,7 @@ class SubgridUpdater(CPUUpdates):
self.update_electric_pml() self.update_electric_pml()
precursors.calc_exact_magnetic_in_time() precursors.calc_exact_magnetic_in_time()
sub_grid.update_electric_is(precursors) sub_grid.update_electric_is(precursors)
self.update_electric_b()
self.update_sub_grid_electric_sources() self.update_sub_grid_electric_sources()
sub_grid.update_electric_os(G) sub_grid.update_electric_os(G)
@@ -216,6 +216,8 @@ class SubgridUpdater(CPUUpdates):
precursors.interpolate_magnetic_in_time(m) precursors.interpolate_magnetic_in_time(m)
sub_grid.update_electric_is(precursors) sub_grid.update_electric_is(precursors)
self.update_electric_b()
self.update_sub_grid_electric_sources() self.update_sub_grid_electric_sources()
self.update_magnetic() self.update_magnetic()