tgranularpacking: add options for padding and grain size, fix n types - granular - granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/granular
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b24ca7409f3bc811c3a2240d3d8261e2c060d557
 (DIR) parent 7d7ae93157bd64531fa0ad995af60b9cd11556c5
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Thu, 25 Mar 2021 14:25:40 +0100
       
       granularpacking: add options for padding and grain size, fix n types
       
       Diffstat:
         M granularpacking.1                   |       9 +++++++++
         M granularpacking.c                   |      27 ++++++++++++++++++++-------
       
       2 files changed, 29 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/granularpacking.1 b/granularpacking.1
       t@@ -7,6 +7,7 @@
        .Sh SYNOPSIS
        .Nm
        .Op Fl h
       +.Op Fl t
        .Op Fl X Ar x-offset
        .Op Fl x Ar nx
        .Op Fl Y Ar y-offset
       t@@ -25,6 +26,14 @@ The options are as wollows:
        .Bl -tag -width Ds
        .It Fl h
        Show help text.
       +.It Fl t
       +Generate triangular packing (default: rectangular).
       +.It Fl p Ar padding-factor
       +Add padding between grains and add corresponding random variation to placement with the specified multiplier, respective to thegrain radius (default 0.0). 
       +.It Fl R Ar max-radius
       +Specify maximum radius of generated grains (default 1.0).
       +.It Fl r Ar min-radius
       +Specify minimum radius of generated grains (default 1.0).
        .It Fl X Ar x-offset
        Add the specified offset to all output x positions (default 0.0).
        .It Fl x Ar nx
 (DIR) diff --git a/granularpacking.c b/granularpacking.c
       t@@ -14,6 +14,8 @@ static void
        usage(void)
        {
                errx(1, "usage: %s [-ht] "
       +                 "[-R max-radius] "
       +                 "[-r min-radius] "
                         "[-X x-offset] "
                         "[-x nx] "
                         "[-Y y-offset] "
       t@@ -28,6 +30,8 @@ main(int argc, char *argv[])
                size_t n[3], np = 0;
                n[0] = 10; n[1] = 10; n[2] = 1;
                double *origo = zeros(3);
       +        double padding = 0.0;
       +        double r_max = 1.0, r_min = 1.0;
                struct simulation sim = sim_new();
                int packing = 0;
        
       t@@ -38,23 +42,32 @@ main(int argc, char *argv[])
                case 't':
                        packing = 1;
                        break;
       +        case 'p':
       +                padding = atof(EARGF(usage()));
       +                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;
                case 'x':
       -                n[0] = atof(EARGF(usage()));
       +                n[0] = atoi(EARGF(usage()));
                        break;
                case 'Y':
                        origo[1] = atof(EARGF(usage()));
                        break;
                case 'y':
       -                n[1] = atof(EARGF(usage()));
       +                n[1] = atoi(EARGF(usage()));
                        break;
                case 'Z':
                        origo[2] = atof(EARGF(usage()));
                        break;
                case 'z':
       -                n[2] = atof(EARGF(usage()));
       +                n[2] = atoi(EARGF(usage()));
                        break;
                default:
                        usage();
       t@@ -65,12 +78,12 @@ main(int argc, char *argv[])
                
                switch (packing) {
                case 0:
       -                np = rectangular_packing(&sim.grains, n, 1.0, 1.0,
       -                                         random_value_uniform, 0.0, &origo);
       +                np = rectangular_packing(&sim.grains, n, r_min, r_max,
       +                                         random_value_uniform, padding, &origo);
                        break;
                case 1:
       -                np = triangular_packing(&sim.grains, n, 1.0, 1.0,
       -                                        random_value_uniform, 0.0, &origo);
       +                np = triangular_packing(&sim.grains, n, r_min, r_max,
       +                                        random_value_uniform, padding, &origo);
                        break;
                default:
                        errx(1, "unknown packing mode");