From 611942f0223e4f1d98e36cbe7eb3d6558f82255f Mon Sep 17 00:00:00 2001 From: Rafael Ravedutti <rafaelravedutti@gmail.com> Date: Tue, 28 Nov 2023 20:44:13 +0100 Subject: [PATCH] Use subdomain for cell lists Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com> --- src/pairs/sim/cell_lists.py | 15 ++++++++------- src/pairs/sim/domain_partitioning.py | 6 ++++++ src/pairs/sim/simulation.py | 6 +++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/pairs/sim/cell_lists.py b/src/pairs/sim/cell_lists.py index 4d3fb98..bf1beec 100644 --- a/src/pairs/sim/cell_lists.py +++ b/src/pairs/sim/cell_lists.py @@ -16,9 +16,9 @@ from pairs.sim.lowerable import Lowerable class CellLists: - def __init__(self, sim, grid, spacing, cutoff_radius): + def __init__(self, sim, dom_part, spacing, cutoff_radius): self.sim = sim - self.grid = grid + self.dom_part = dom_part self.spacing = spacing if isinstance(spacing, list) else [spacing for d in range(sim.ndims())] self.cutoff_radius = cutoff_radius self.nneighbor_cells = [math.ceil(cutoff_radius / self.spacing[d]) for d in range(sim.ndims())] @@ -26,8 +26,8 @@ class CellLists: # Data introduced in the simulation self.nstencil = self.sim.add_var('nstencil', Types.Int32) self.ncells = self.sim.add_var('ncells', Types.Int32, 1) - self.ncells_capacity = self.sim.add_var('ncells_capacity', Types.Int32, 100) - self.cell_capacity = self.sim.add_var('cell_capacity', Types.Int32, 20) + self.ncells_capacity = self.sim.add_var('ncells_capacity', Types.Int32, 100000) + self.cell_capacity = self.sim.add_var('cell_capacity', Types.Int32, 64) self.dim_ncells = self.sim.add_array('dim_cells', self.sim.ndims(), Types.Int32) self.shapes_buffer = self.sim.add_array('shapes_buffer', self.sim.max_shapes(), Types.Int32) self.cell_particles = self.sim.add_array('cell_particles', [self.ncells_capacity, self.cell_capacity], Types.Int32) @@ -62,8 +62,8 @@ class BuildCellListsStencil(Lowerable): Assign(self.sim, shapes_buffer[s], self.sim.get_shape_id(s)) for dim in range(self.sim.ndims()): - dim_min = self.sim.grid.min(dim) - spacing[dim] - dim_max = self.sim.grid.max(dim) + spacing[dim] + dim_min = self.cell_lists.dom_part.min(dim) - spacing[dim] + dim_max = self.cell_lists.dom_part.max(dim) + spacing[dim] Assign(self.sim, dim_ncells[dim], Ceil(self.sim, (dim_max - dim_min) / spacing[dim]) + 1) ntotal_cells *= dim_ncells[dim] @@ -96,6 +96,7 @@ class BuildCellLists(Lowerable): spacing = self.cell_lists.spacing dim_ncells = self.cell_lists.dim_ncells ncells = self.cell_lists.ncells + dom_part = self.cell_lists.dom_part positions = self.sim.position() self.sim.module_name("build_cell_lists") @@ -110,7 +111,7 @@ class BuildCellLists(Lowerable): for _ in Filter(self.sim, ASTTerm.not_op(particle_flags[i] & Flags.Infinite)): cell_index = [ Cast.int(self.sim, - (positions[i][dim] - (self.sim.grid.min(dim) - spacing[dim])) / spacing[dim]) \ + (positions[i][dim] - (dom_part.min(dim) - spacing[dim])) / spacing[dim]) \ for dim in range(self.sim.ndims())] index = None diff --git a/src/pairs/sim/domain_partitioning.py b/src/pairs/sim/domain_partitioning.py index f3c6f4e..901df44 100644 --- a/src/pairs/sim/domain_partitioning.py +++ b/src/pairs/sim/domain_partitioning.py @@ -16,6 +16,12 @@ class DimensionRanges: self.pbc = sim.add_static_array('pbc', [sim.ndims() * 2], Types.Int32) self.subdom = sim.add_static_array('subdom', [sim.ndims() * 2], Types.Real) + def min(self, dim): + return self.subdom[dim * 2 + 0] + + def max(self, dim): + return self.subdom[dim * 2 + 1] + def number_of_steps(self): return self.sim.ndims() diff --git a/src/pairs/sim/simulation.py b/src/pairs/sim/simulation.py index c32c935..67899b1 100644 --- a/src/pairs/sim/simulation.py +++ b/src/pairs/sim/simulation.py @@ -43,7 +43,7 @@ class Simulation: self.features = Features(self) self.feature_properties = FeatureProperties(self) self.contact_properties = ContactProperties(self) - self.particle_capacity = self.add_var('particle_capacity', Types.Int32, 200000) + self.particle_capacity = self.add_var('particle_capacity', Types.Int32, 800000) self.neighbor_capacity = self.add_var('neighbor_capacity', Types.Int32, 100) self.nlocal = self.add_var('nlocal', Types.Int32) self.nghost = self.add_var('nghost', Types.Int32) @@ -217,11 +217,11 @@ class Simulation: self.setups.add_statement(CopperFCCLattice(self, nx, ny, nz, rho, temperature, ntypes)) def build_cell_lists(self, spacing): - self.cell_lists = CellLists(self, self.grid, spacing, spacing) + self.cell_lists = CellLists(self, self._dom_part, spacing, spacing) return self.cell_lists def build_neighbor_lists(self, spacing): - self.cell_lists = CellLists(self, self.grid, spacing, spacing) + self.cell_lists = CellLists(self, self._dom_part, spacing, spacing) self.neighbor_lists = NeighborLists(self.cell_lists) return self.neighbor_lists -- GitLab