timplement 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 732f66ba25f3f657fb4adbfa37cc27f071a05b38
(DIR) parent e9b6a38b8abbc6939db719054f932214fb1fba4e
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Tue, 15 Mar 2016 14:58:04 -0700
implement neighbor search
Diffstat:
M grid.c | 66 +++++++++++++++++++++++++++++--
M grid.h | 12 ++++++++++--
M main.c | 2 +-
M vector_math.c | 8 ++++++++
M vector_math.h | 3 +++
5 files changed, 85 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/grid.c b/grid.c
t@@ -1,13 +1,19 @@
+#include <stdio.h>
#include <stdlib.h>
#include "typedefs.h"
#include "slider.h"
+#include "vector_math.h"
slider* create_regular_slider_grid(
- int nx, int ny, int nz, // number of sliders in each direction
- Float dx, Float dy, Float dz) // spacing of sliders in each direction
+ const int nx,
+ const int ny,
+ const int nz,
+ const Float dx,
+ const Float dy,
+ const Float dz)
{
slider* sliders;
- sliders = malloc(sizeof(slider) * nx * ny * nz);
+ sliders = malloc(sizeof(slider)*nx*ny*nz);
int i = 0; int ix, iy, iz;
for (iz = 0; iz < nz; iz++) {
t@@ -23,3 +29,57 @@ slider* create_regular_slider_grid(
return sliders;
}
+
+/* Find neighboring sliders within a defined cutoff distance */
+void find_neighbors_n2(
+ const slider* sliders,
+ const int N,
+ const Float cutoff)
+{
+ int i, j;
+ 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);
+
+ }
+ }
+ //sliders[i].neighbors = malloc(sizeof(int)*
+
+
+}
+
+// From the list of neighbors, find which sliders are within the debonding
+// distance
+void bond_to_neighbors(
+ const slider* sliders,
+ const int N,
+ const Float debonding_distance)
+{
+
+ // bond slider to the two closest neighbors in each direction
+ //sliders[i].neighbors = malloc(sizeof(int)*
+
+}
+
+int save_slider_positions_to_file(
+ const slider* sliders,
+ const int N,
+ const char* filename)
+{
+ FILE* f = fopen(filename, "w");
+ if (f == NULL) {
+ fprintf(stderr, "Could not open output file %s.", filename);
+ return 1;
+ }
+
+ int i;
+ for (i=0; i<N; i++)
+ printf("%f\t%f\t%f\n",
+ sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z);
+
+ fclose(f);
+ return 0;
+}
(DIR) diff --git a/grid.h b/grid.h
t@@ -3,7 +3,15 @@
#include "slider.h"
slider* create_regular_slider_grid(
- int nx, int ny, int nz, // number of sliders in each direction
- Float dx, Float dy, Float dz); // spacing of sliders in each direction
+ const int nx,
+ const int ny,
+ const int nz,
+ const Float dx,
+ const Float dy,
+ const Float dz);
+int save_slider_positions_to_file(
+ const slider* sliders,
+ const int N,
+ const char* filename);
#endif
(DIR) diff --git a/main.c b/main.c
t@@ -19,7 +19,7 @@ int main(int argc, char** argv)
sliders[i].mass = 1.;
// temporal loop
- Float t = 0.;
+ Float t;
const Float t_end = 1.;
//Float dt = calculate_time_step();
Float dt = 1.0;
(DIR) diff --git a/vector_math.c b/vector_math.c
t@@ -1,3 +1,4 @@
+#include <math.h>
#include "typedefs.h"
t@@ -8,11 +9,18 @@ inline Float3 make_float3(Float x, Float y, Float z)
return v;
}
+
+// single-vector operations
inline Float3 copy_float3(Float3 v)
{
return make_float3(v.x, v.y, v.z);
}
+inline Float norm_float3(Float3 v)
+{
+ return sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
+}
+
// vector-vector operations
inline Float3 add_float3(Float3 v1, Float3 v2)
(DIR) diff --git a/vector_math.h b/vector_math.h
t@@ -2,7 +2,10 @@
// constructor
Float3 make_float3(Float x, Float y, Float z);
+
+// single-vector operations
Float3 copy_float3(Float3 v);
+Float norm_float3(Float3 v);
// vector-vector operations
Float3 add_float3(Float3 v1, Float3 v2);