tgranularpacking.c: add powerlaw option and fix diameter options - granular - g… | |
git clone git://src.adamsgaard.dk/granular | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 2be85b00f5f100ff705fda0948ac89e973ff9636 | |
parent 39fd8dcf8a449c4d6b3c828267e3cd413b2648e6 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 25 Mar 2021 20:41:46 +0100 | |
granularpacking.c: add powerlaw option and fix diameter options | |
Diffstat: | |
M granularpacking.1 | 8 ++++++-- | |
M granularpacking.c | 32 +++++++++++++++++++----------… | |
M util.h | 2 +- | |
3 files changed, 27 insertions(+), 15 deletions(-) | |
--- | |
diff --git a/granularpacking.1 b/granularpacking.1 | |
t@@ -6,10 +6,12 @@ | |
.Nd generate a packing of granular data | |
.Sh SYNOPSIS | |
.Nm | |
-.Op Fl h | |
-.Op Fl t | |
.Op Fl D Ar max-diameter | |
.Op Fl d Ar min-diameter | |
+.Op Fl h | |
+.Op Fl P | |
+.Op Fl p Ar padding-factor | |
+.Op Fl t | |
.Op Fl X Ar x-offset | |
.Op Fl x Ar nx | |
.Op Fl Y Ar y-offset | |
t@@ -34,6 +36,8 @@ Specify minimum size of generated grains (default 1.0). | |
Show help text. | |
.It Fl t | |
Generate triangular packing (default: rectangular). | |
+.It Fl P | |
+Draw random diameters using a power-law distribution (default: uniform). | |
.It Fl p Ar padding-factor | |
Add padding between grains and add corresponding random variation | |
to placement with the specified multiplier, respective to the grain | |
diff --git a/granularpacking.c b/granularpacking.c | |
t@@ -13,10 +13,12 @@ char *argv0; | |
static void | |
usage(void) | |
{ | |
- errx(1, "usage: %s [-ht] " | |
+ errx(1, "usage: %s " | |
"[-D max-diameter] " | |
"[-d min-diameter] " | |
+ "[-hP] " | |
"[-p padding-factor] " | |
+ "[-t] " | |
"[-X x-offset] " | |
"[-x nx] " | |
"[-Y y-offset] " | |
t@@ -31,26 +33,30 @@ main(int argc, char *argv[]) | |
size_t n[] = {10, 10, 1}; | |
double origo[] = {0.0, 0.0, 0.0}; | |
double padding = 0.0; | |
- double r_max = 1.0, r_min = 1.0; | |
+ double d_max = 1.0, d_min = 1.0; | |
struct simulation sim = sim_new(); | |
int packing = 0; | |
+ double (*sizefunc)(double min, double max) = random_value_uniform; | |
ARGBEGIN { | |
+ case 'D': | |
+ d_max = atof(EARGF(usage())); | |
+ break; | |
+ case 'd': | |
+ d_min = atof(EARGF(usage())); | |
+ break; | |
case 'h': | |
usage(); | |
break; | |
+ case 'P': | |
+ sizefunc = (*random_value_powerlaw); | |
+ break; | |
case 'p': | |
padding = atof(EARGF(usage())); | |
break; | |
case 't': | |
packing = 1; | |
break; | |
- case 'R': | |
- r_max = atof(EARGF(usage())); | |
- break; | |
- case 'r': | |
- r_min = atof(EARGF(usage())); | |
- break; | |
case 'X': | |
origo[0] = atof(EARGF(usage())); | |
break; | |
t@@ -78,12 +84,14 @@ main(int argc, char *argv[]) | |
switch (packing) { | |
case 0: | |
- sim.np += rectangular_packing(&sim.grains, n, r_min, r_max, | |
- random_value_uniform, padding, o… | |
+ sim.np += rectangular_packing(&sim.grains, n, | |
+ d_min / 2.0, d_max / 2.0, | |
+ sizefunc, padding, origo); | |
break; | |
case 1: | |
- sim.np += triangular_packing(&sim.grains, n, r_min, r_max, | |
- random_value_uniform, padding, or… | |
+ sim.np += triangular_packing(&sim.grains, n, | |
+ d_min / 2.0, d_max / 2.0, | |
+ sizefunc, padding, origo); | |
break; | |
default: | |
errx(1, "unknown packing mode"); | |
diff --git a/util.h b/util.h | |
t@@ -13,7 +13,7 @@ void check_int_non_negative(const char name[], const int val… | |
double residual(const double new_val, const double old_val); | |
double random_value_uniform(double min, double max); | |
-double random_value_powerlaw(double power, double min, double max); | |
+double random_value_powerlaw(double min, double max); | |
void * xreallocarray(void *m, size_t n, size_t s); | |