tAllow modification of all simulation parameters through command line arguments - cngf-pf - continuum model for granular flows with pore-pressure dynamics (renamed from 1d_fd_simple_shear)
 (HTM) git clone git://src.adamsgaard.dk/cngf-pf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ec7dfa9f0ee3daeb2dfef45f4703ca6e1399a978
 (DIR) parent bbd24afac544c4afc9772f126eec9c3ba2c602e4
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Wed, 10 Apr 2019 17:01:39 +0200
       
       Allow modification of all simulation parameters through command line arguments
       
       Diffstat:
         M Makefile                            |      18 ++++++------------
         M main.c                              |     134 ++++++++++++++++++++++++++++++-
       
       2 files changed, 136 insertions(+), 16 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -10,18 +10,12 @@ default: 1d_fd_simple_shear.png
                $(CC) $(LDFLAGS) $(OBJ) -o $@
        
        1d_fd_simple_shear.png: 1d_fd_simple_shear 1d_fd_simple_shear.gp
       -        sed -i 's/P_wall = .*;/P_wall = 10e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P10kPa.txt
       -        sed -i 's/P_wall = .*;/P_wall = 20e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P20kPa.txt
       -        sed -i 's/P_wall = .*;/P_wall = 40e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P40kPa.txt
       -        sed -i 's/P_wall = .*;/P_wall = 60e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P60kPa.txt
       -        sed -i 's/P_wall = .*;/P_wall = 80e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P80kPa.txt
       -        sed -i 's/P_wall = .*;/P_wall = 120e3;/' 1d_fd_simple_shear_damsgaard2013.h
       -        rm main.o && make $< && ./$< > $<_P120kPa.txt
       +        ./$< -P  10e3 -N > $<_P10kPa.txt
       +        ./$< -P  20e3 -N > $<_P20kPa.txt
       +        ./$< -P  40e3 -N > $<_P40kPa.txt
       +        ./$< -P  60e3 -N > $<_P60kPa.txt
       +        ./$< -P  80e3 -N > $<_P80kPa.txt
       +        ./$< -P 120e3 -N > $<_P120kPa.txt
                gnuplot $<.gp > $@
        
        .PHONY: watch
 (DIR) diff --git a/main.c b/main.c
       t@@ -1,17 +1,140 @@
        #include <stdio.h>
        #include <stdlib.h>
        #include <math.h>
       +#include <getopt.h>
        
        #include "simulation.h"
        
       -/* set up parameter values for this simulation */
       +#define VERSION "0.1"
       +#define PROGNAME "1d_fd_simple_shear"
       +
       +/* set default simulation parameter values */
        #include "1d_fd_simple_shear_damsgaard2013.h"
       -/* #include "1d_fd_simple_shear_henann_kamrin2016.h" */
        
       +static void usage(void)
       +{
       +    printf("%s: %s [OPTIONS]\n"
       +            "optional arguments:\n"
       +            " -N, --normalize                normalize output velocity\n"
       +            " -G, --gravity VAL              gravity magnitude [m/s^2]\n"
       +            " -P, --pressure VAL             normal stress [Pa]\n"
       +            " -m, --stress-ratio VAL         applied stress ratio [-]\n"
       +            " -V, --velocity-bottom VAL      base velocity at bottom [m/s]\n"
       +            " -A, --nonlocal-amplitude VAL   amplitude of nonlocality [-]\n"
       +            " -b, --rate-dependence VAL      rate dependence beyond yield [-]\n"
       +            " -f, --friction-coefficient VAL grain friction coefficient [-]\n"
       +            " -p, --porosity VAL             porosity fraction [-]\n"
       +            " -d, --grain-size VAL           representative grain size [m]\n"
       +            " -r, --density VAL              grain material density [kg/m^3]\n"
       +            " -n, --resolution VAL           number of cells in domain [-]\n"
       +            " -o, --origo VAL                coordinate system origo [m]\n"
       +            " -L, --length VAL               domain length [m]\n"
       +            " -v, --version                  show version information\n"
       +            " -h, --help                     show this message\n"
       +            , __func__, PROGNAME);
       +}
        
       -int main(int argc, char** argv) {
       +static void version(void)
       +{
       +    printf("%s v%s\n"
       +    "Licensed under the GNU Public License, v3+\n"
       +    "written by Anders Damsgaard, anders@adamsgaard.dk\n"
       +    "https://gitlab.com/admesg/1d_fd_simple_shear\n"
       +    , PROGNAME, VERSION);
       +}
        
       +int main(int argc, char* argv[])
       +{
       +
       +    /* load with default values */
            struct simulation sim = init_sim();
       +
       +    int normalize = 0;
       +
       +    int opt;
       +    const char* optstring = "hvNG:P:m:V:A:b:f:p:d:r:n:o:L:";
       +    const struct option longopts[] = {
       +        {"help",                 no_argument,       NULL, 'h'},
       +        {"version",              no_argument,       NULL, 'v'},
       +        {"gravity",              required_argument, NULL, 'G'},
       +        {"pressure",             required_argument, NULL, 'P'},
       +        {"stress-ratio",         required_argument, NULL, 'm'},
       +        {"velocity-bottom",      required_argument, NULL, 'V'},
       +        {"nonlocal-amplitude",   required_argument, NULL, 'A'},
       +        {"rate-dependence",      required_argument, NULL, 'b'},
       +        {"friction-coefficient", required_argument, NULL, 'f'},
       +        {"porosity",             required_argument, NULL, 'p'},
       +        {"grain-size",           required_argument, NULL, 'd'},
       +        {"density",              required_argument, NULL, 'r'},
       +        {"resolution",           required_argument, NULL, 'n'},
       +        {"origo",                required_argument, NULL, 'o'},
       +        {"length",               required_argument, NULL, 'L'},
       +        {NULL,                   0,                 NULL, 0}
       +    };
       +
       +    while ((opt = getopt_long(argc, argv, optstring, longopts, NULL)) != -1) {
       +        switch (opt) {
       +            case -1:   /* no more arguments */
       +            case 0:    /* long options toggles */
       +                break;
       +
       +            case 'h':
       +                usage();
       +                return 0;
       +            case 'v':
       +                version();
       +                return 0;
       +            case 'N':
       +                normalize = 1;
       +                break;
       +            case 'G':
       +                sim.G = atof(optarg);
       +                break;
       +            case 'P':
       +                sim.P_wall = atof(optarg);
       +                break;
       +            case 'm':
       +                sim.mu_wall = atof(optarg);
       +                break;
       +            case 'V':
       +                sim.v_x_bot = atof(optarg);
       +                break;
       +            case 'A':
       +                sim.A = atof(optarg);
       +                break;
       +            case 'b':
       +                sim.b = atof(optarg);
       +                break;
       +            case 'f':
       +                sim.mu_s = atof(optarg);
       +                break;
       +            case 'p':
       +                sim.phi = atof(optarg);
       +                break;
       +            case 'd':
       +                sim.d = atof(optarg);
       +                break;
       +            case 'r':
       +                sim.rho_s = atof(optarg);
       +                break;
       +            case 'n':
       +                sim.nz = atoi(optarg);
       +                break;
       +            case 'o':
       +                sim.origo_z = atof(optarg);
       +                break;
       +            case 'L':
       +                sim.L_z = atof(optarg);
       +                break;
       +
       +            default:
       +                fprintf(stderr, "%s: invalid option -- %c\n", argv[0], opt);
       +                fprintf(stderr, "Try `%s --help` for more information\n",
       +                        argv[0]);
       +                return -2;
       +        }
       +    }
       +
            prepare_arrays(&sim);
        
            init_pressure(&sim);
       t@@ -30,7 +153,10 @@ int main(int argc, char** argv) {
            compute_shear_strain_rate_plastic(&sim);
            compute_shear_velocity(&sim);
        
       -    print_arrays_2nd_normalized(sim.z, sim.v_x, sim.nz);
       +    if (normalize)
       +        print_arrays_2nd_normalized(sim.z, sim.v_x, sim.nz);
       +    else
       +        print_arrays(sim.z, sim.v_x, sim.nz);
        
            free_arrays(&sim);
            return 0;