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;