tadd simple neighbor search - slidergrid - grid of elastic sliders on a frictional surface (HTM) git clone git://src.adamsgaard.dk/slidergrid (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 6c55b2b5c3ebfea7827b1513dd5db5ac6cafd94b (DIR) parent 732f66ba25f3f657fb4adbfa37cc27f071a05b38 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk> Date: Tue, 15 Mar 2016 15:11:10 -0700 add simple neighbor search Diffstat: M grid.c | 25 ++++++++++++++++++------- M slider.h | 4 +++- 2 files changed, 21 insertions(+), 8 deletions(-) --- (DIR) diff --git a/grid.c b/grid.c t@@ -15,7 +15,7 @@ slider* create_regular_slider_grid( slider* sliders; sliders = malloc(sizeof(slider)*nx*ny*nz); - int i = 0; int ix, iy, iz; + int i = 0; int ix, iy, iz, j; for (iz = 0; iz < nz; iz++) { for (iy = 0; iy < ny; iy++) { for (ix = 0; ix < nx; ix++) { t@@ -23,6 +23,9 @@ slider* create_regular_slider_grid( sliders[i].pos.y = dy * iy; sliders[i].pos.z = dz * iz; i++; + + for (j=0; j<MAX_NEIGHBORS; j++) + sliders[i].neighbors[j] = -1; } } } t@@ -32,21 +35,29 @@ slider* create_regular_slider_grid( /* Find neighboring sliders within a defined cutoff distance */ void find_neighbors_n2( - const slider* sliders, + slider* sliders, const int N, const Float cutoff) { int i, j; + int n_neighbors = 0; Float3 dist; Float dist_norm; - for (j=0; j<N; j++) { - for (i=0; i<N; i++) { - dist = subtract_float3(sliders[i].pos, sliders[j].pos); - dist_norm = norm_float3(dist); + for (i=0; i<N; i++) { + for (j=0; j<N; j++) { + if (i != j) { + dist = subtract_float3(sliders[i].pos, sliders[j].pos); + dist_norm = norm_float3(dist); + if (dist_norm < cutoff) { + sliders[i].neighbors[n_neighbors++] = j; + + if (n_neighbors == MAX_NEIGHBORS - 1) + fprintf(stderr, "Error: MAX_NEIGHBORS exceeded.\n"); + } + } } } - //sliders[i].neighbors = malloc(sizeof(int)* } (DIR) diff --git a/slider.h b/slider.h t@@ -3,6 +3,8 @@ #include "typedefs.h" +#define MAX_NEIGHBORS 32 + typedef struct { Float3 pos; // spatial position [m] Float3 vel; // spatial velocity [m/s] t@@ -10,7 +12,7 @@ typedef struct { Float3 force; // sum of forces [N] Float mass; // mass [kg] Float spring_stiffness; // elastic compressibility [N/m] - int neighbors[]; // indexes of sliders this one is bonded to + int neighbors[MAX_NEIGHBORS]; // indexes of sliders this one is bonded to } slider;