cngf-pf

continuum model for granular flows with pore-pressure dynamics (renamed from 1d_fd_simple_shear)
git clone git://src.adamsgaard.dk/cngf-pf # fast
git clone https://src.adamsgaard.dk/cngf-pf.git # slow
Log | Files | Refs | README | LICENSE Back to index

commit 9f3947dfb50b3757b433ba0516ae486795be91ad
parent fb6ea6a60071ea36a485ef60394b247e00918e89
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Thu, 10 Jun 2021 14:34:14 +0200

add program for computing Deborah number

Diffstat:
MMakefile | 6++++++
Adeborah.1 | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adeborah.c | 132+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 200 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -10,6 +10,7 @@ DOCPREFIX = ${PREFIX}/share/doc/${NAME} BIN = \ cngf-pf\ + deborah\ max_depth_simple_shear\ shear_flux SRC = ${BIN:=.c} arrays.c fluid.c simulation.c @@ -49,6 +50,11 @@ cngf-pf: cngf-pf.o arrays.o fluid.o simulation.o cngf-pf.o arrays.o fluid.o simulation.o\ -o $@ ${CNGFPFLDFLAGS} +deborah: deborah.o arrays.o fluid.o simulation.o + ${CC}\ + deborah.o arrays.o fluid.o simulation.o\ + -o $@ ${CNGFPFLDFLAGS} + max_depth_simple_shear: max_depth_simple_shear.o arrays.o fluid.o simulation.o ${CC}\ max_depth_simple_shear.o arrays.o fluid.o simulation.o\ diff --git a/deborah.1 b/deborah.1 @@ -0,0 +1,62 @@ +.Dd $Mdocdate$ +.Dt MAX_DEPTH_SIMPLE_SHEAR 1 +.Os +.Sh NAME +.Nm max_depth_simple_shear +.Nd deformation characteristics from fluid perturbation +.Sh SYNOPSIS +.Nm +.Op Fl d Ar grain-size +.Op Fl h +.Op Fl i Ar fluid-viscosity +.Op Fl k Ar fluid-permeability +.Op Fl P Ar grain-compressibility +.Op Fl p Ar grain-porosity +.Op Fl s Ar applied-shear-vel +.Op Fl v +.Sh DESCRIPTION +The +.Nm +utility outputs the modified Deborah number. Values much smaller than 1 correspond to instantaneous fluid-pressure equilibration, and numbers greater than 1 imply that fluid-pressure effects are expected. +.Pp +The arguments mirror the sister program +.Xr cngf-pf 1 +and are as follows: +.Bl -tag -width Ds +.It Fl d Ar grain-size +Granular material representative grain size [m] (default 0.04). +.It Fl i Ar fluid-viscosity +Fluid dynamic viscosity [Pa*s] (1.787e-3). +.It Fl k Ar fluid-permeability +Darcian intrinsic permeability of granular material [m^2] (default +1.9e-15). +.It Fl P Ar grain-compressibility +Granular material compressibility [Pa^-1] (default 1e-8). +.It Fl p Ar grain-porosity +Granular material porosity [-] (default 0.25). +.It Fl s Ar applied-shear-vel +Shear the material under constant velocity [m/s] instead of a friction value. +.It Fl v +Show version information. +.El +.Pp +The result is written to stdout. +.Sh EXIT STATUS +.Nm +exits 0 on succes, and >0 if a runtime error occurs: +.Pp +.Bl -tag -width Ds -compact +.It 0 +successful exit +.It 1 +unspecified error +.It 2 +.Xr pledge 2 +error +.El +.Sh SEE ALSO +.Xr cngf-pf 1 , +.Xr max_depth_simple_shear 1 , +.Xr shear_flux 1 +.Sh AUTHORS +.An Anders Damsgaard Aq Mt anders@adamsgaard.dk diff --git a/deborah.c b/deborah.c @@ -0,0 +1,132 @@ +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <getopt.h> +#include <time.h> +#include <err.h> + +#include "simulation.h" +#include "arg.h" + +#define EPS 1e-12 + +/* depth accuracy criteria in meter for solver */ +#define TOL 1e-10 +#define MAX_ITER 100 + +/* uncomment to print time spent per time step to stdout */ +/* #define BENCHMARK_PERFORMANCE */ + +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062 +#endif + +char *argv0; + +static void +usage(void) +{ + fprintf(stderr, "usage: %s " + "[-h] " + "[-d grain-size] " + "[-i fluid-viscosity] " + "[-k fluid-permeability] " + "[-P grain-compressibility] " + "[-p grain-porosity] " + "[-s applied-shear-vel] " + "[-v] " + "\n", argv0); + exit(1); +} + +static double +deborah_number(const struct simulation *sim) +{ + return sim->alpha * sim->mu_f * sim->d * sim->v_x_fix + / (sim->k[0] * (1.0 - sim->phi[0])); +} + +int +main(int argc, char *argv[]) +{ + int i; + double new_phi, new_k; + struct simulation sim; + +#ifdef BENCHMARK_PERFORMANCE + clock_t t_begin, t_end; + double t_elapsed; + +#endif + +#ifdef __OpenBSD__ + if (pledge("stdio", NULL) == -1) + err(2, "pledge failed"); +#endif + + init_sim(&sim); + new_phi = sim.phi[0]; + new_k = sim.k[0]; + + ARGBEGIN { + case 'd': + sim.d = atof(EARGF(usage())); + break; + case 'h': + usage(); + break; + case 'i': + sim.mu_f = atof(EARGF(usage())); + break; + case 'k': + new_k = atof(EARGF(usage())); + break; + case 'P': + sim.alpha = atof(EARGF(usage())); + break; + case 'p': + new_phi = atof(EARGF(usage())); + break; + case 's': + sim.v_x_fix = atof(EARGF(usage())); + break; + case 'v': + printf("%s-" VERSION "\n", argv0); + return 0; + break; + default: + usage(); + } ARGEND; + + if (argc > 0) + usage(); + + sim.nz = 2; + prepare_arrays(&sim); + + if (!isnan(new_phi)) + for (i = 0; i < sim.nz; ++i) + sim.phi[i] = new_phi; + if (!isnan(new_k)) + for (i = 0; i < sim.nz; ++i) + sim.k[i] = new_k; + + check_simulation_parameters(&sim); + +#ifdef BENCHMARK_PERFORMANCE + t_begin = clock(); +#endif + + printf("%.17g\n", deborah_number(&sim)); + +#ifdef BENCHMARK_PERFORMANCE + t_end = clock(); + t_elapsed = (double) (t_end - t_begin) / CLOCKS_PER_SEC; + printf("time spent = %g s\n", t_elapsed); +#endif + + free_arrays(&sim); + + return 0; +}