1d_fd_simple_shear

Continuum model for granular flows with pore-pressure dynamics
git clone git://src.adamsgaard.dk/1d_fd_simple_shear
Log | Files | Refs | README | LICENSE

commit ec7dfa9f0ee3daeb2dfef45f4703ca6e1399a978
parent bbd24afac544c4afc9772f126eec9c3ba2c602e4
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:
MMakefile | 18++++++------------
Mmain.c | 134++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 136 insertions(+), 16 deletions(-)

diff --git a/Makefile b/Makefile @@ -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 diff --git a/main.c b/main.c @@ -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); @@ -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;