tadd first packing algorithm - granular - granular dynamics simulation | |
git clone git://src.adamsgaard.dk/granular | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 2411376bd4ea88e2184dce638984407b56208f9a | |
parent 054a2cc1416d4760f8a25499d5db265877f4d359 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 18 Mar 2021 14:33:47 +0100 | |
add first packing algorithm | |
Diffstat: | |
A packing.c | 38 +++++++++++++++++++++++++++++… | |
A packing.h | 19 +++++++++++++++++++ | |
2 files changed, 57 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/packing.c b/packing.c | |
t@@ -0,0 +1,38 @@ | |
+#include <err.h> | |
+#include "util.h" | |
+#include "granular.h" | |
+#include "grain.h" | |
+#include "arrays.h" | |
+ | |
+struct grain * | |
+rectangular_packing(size_t n[3], | |
+ double radius_min, double radius_max, | |
+ double (*gsd)(double min, double max), | |
+ double padding_factor, | |
+ double origo[3]) | |
+{ | |
+ size_t i, j, k, l, ig; | |
+ struct grain *grains; | |
+ double dx_padding = radius_max * 2.0 * padding_factor; | |
+ double dx = radius_max * 2.0 + dx_padding; | |
+ | |
+ if (!(grains = calloc(n[0] * n[1] * n[2], sizeof(struct grain)))) | |
+ err(1, "%s: grains calloc", __func__); | |
+ | |
+ for (k = 0; k < n[2]; k++) | |
+ for (j = 0; j < n[1]; j++) | |
+ for (i = 0; i < n[0]; i++) { | |
+ ig = idx3(i, j, k, n[0], n[1]); | |
+ grain_defaults(&grains[ig]); | |
+ grains[ig].radius = gsd(radius_min, radius_max… | |
+ grains[ig].pos[0] = i*dx + 0.5*dx + origo[0]; | |
+ grains[ig].pos[1] = j*dx + 0.5*dx + origo[1]; | |
+ grains[ig].pos[2] = k*dx + 0.5*dx + origo[2]; | |
+ for (l = 0; l < 3; l++) | |
+ grains[ig].pos[l] += | |
+ random_value_uniform(-0.5 * dx… | |
+ 0.5 * dx_… | |
+ } | |
+ | |
+ return grains; | |
+} | |
diff --git a/packing.h b/packing.h | |
t@@ -0,0 +1,19 @@ | |
+#ifndef GRANULAR_PACKING_ | |
+#define GRANULAR_PACKING_ | |
+ | |
+#include "grain.h" | |
+#include "simulation.h" | |
+ | |
+struct grain * rectangular_packing(size_t n[3], | |
+ double radius_min, double radius_max, | |
+ double (*gsd)(double min, double max), | |
+ double padd… | |
+ double *ori… | |
+ | |
+struct grain ** triangular_packing_2d(int nx, int ny, | |
+ double radius_min, double radius_max); | |
+ | |
+struct grain ** irregular_packing_2d(int nx, int ny, | |
+ double radius_min, double radius_max); | |
+ | |
+#endif |