From 46f6d8796614c86c9a587c00b04f4d1b3dec9c19 Mon Sep 17 00:00:00 2001
From: Rafael Ravedutti <rafaelravedutti@gmail.com>
Date: Fri, 15 Dec 2023 18:58:00 +0100
Subject: [PATCH] Always put particles into closest valid cell

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
---
 runtime/copper_fcc_lattice.hpp | 1 -
 src/pairs/sim/cell_lists.py    | 6 ++++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/runtime/copper_fcc_lattice.hpp b/runtime/copper_fcc_lattice.hpp
index c883d65..48fec71 100644
--- a/runtime/copper_fcc_lattice.hpp
+++ b/runtime/copper_fcc_lattice.hpp
@@ -1,6 +1,5 @@
 #include <iostream>
 #include <math.h>
-#include <mpi.h>
 //---
 #include "pairs.hpp"
 
diff --git a/src/pairs/sim/cell_lists.py b/src/pairs/sim/cell_lists.py
index bf1beec..c64e81f 100644
--- a/src/pairs/sim/cell_lists.py
+++ b/src/pairs/sim/cell_lists.py
@@ -9,6 +9,7 @@ from pairs.ir.cast import Cast
 from pairs.ir.loops import For, ParticleFor, While
 from pairs.ir.math import Ceil
 from pairs.ir.scalars import ScalarOp
+from pairs.ir.select import Select
 from pairs.ir.types import Types
 from pairs.ir.utils import Print
 from pairs.sim.flags import Flags
@@ -116,8 +117,9 @@ class BuildCellLists(Lowerable):
 
                 index = None
                 for dim in range(self.sim.ndims()):
-                    index = cell_index[dim] if index is None \
-                            else index * dim_ncells[dim] + cell_index[dim]
+                    dcell = Select(self.sim, cell_index[dim] >= 0, cell_index[dim], 0)
+                    dcell = Select(self.sim, dcell < dim_ncells[dim], dcell, dim_ncells[dim] - 1)
+                    index = dcell if index is None else index * dim_ncells[dim] + dcell
 
                 Assign(self.sim, flat_index, index + 1)
 
-- 
GitLab