tdeborah.c - 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
       ---
       tdeborah.c (2328B)
       ---
            1 #include <unistd.h>
            2 #include <stdio.h>
            3 #include <stdlib.h>
            4 #include <math.h>
            5 #include <getopt.h>
            6 #include <time.h>
            7 #include <err.h>
            8 
            9 #include "simulation.h"
           10 #include "arg.h"
           11 
           12 #define EPS 1e-12
           13 
           14 /* depth accuracy criteria in meter for solver */
           15 #define TOL 1e-10
           16 #define MAX_ITER 100
           17 
           18 /* uncomment to print time spent per time step to stdout */
           19 /* #define BENCHMARK_PERFORMANCE */
           20 
           21 #ifndef M_PI
           22 #define M_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
           23 #endif
           24 
           25 char *argv0;
           26 
           27 static void
           28 usage(void)
           29 {
           30         fprintf(stderr, "usage: %s "
           31                 "[-h] "
           32                 "[-d grain-size] "
           33                 "[-i fluid-viscosity] "
           34                 "[-k fluid-permeability] "
           35                 "[-P grain-compressibility] "
           36                 "[-p grain-porosity] "
           37                 "[-s applied-shear-vel] "
           38                 "[-v] "
           39                 "\n", argv0);
           40         exit(1);
           41 }
           42 
           43 static double
           44 deborah_number(const struct simulation *sim)
           45 {
           46         return sim->alpha * sim->mu_f * sim->d * sim->v_x_fix
           47                 / (sim->k[0] * (1.0 - sim->phi[0]));
           48 }
           49 
           50 int
           51 main(int argc, char *argv[])
           52 {
           53         int i;
           54         double new_phi, new_k;
           55         struct simulation sim;
           56 
           57 #ifdef BENCHMARK_PERFORMANCE
           58         clock_t t_begin, t_end;
           59         double t_elapsed;
           60 
           61 #endif
           62 
           63 #ifdef __OpenBSD__
           64         if (pledge("stdio", NULL) == -1)
           65                 err(2, "pledge failed");
           66 #endif
           67 
           68         init_sim(&sim);
           69         new_phi = sim.phi[0];
           70         new_k = sim.k[0];
           71 
           72         ARGBEGIN {
           73         case 'd':
           74                 sim.d = atof(EARGF(usage()));
           75                 break;
           76         case 'h':
           77                 usage();
           78                 break;
           79         case 'i':
           80                 sim.mu_f = atof(EARGF(usage()));
           81                 break;
           82         case 'k':
           83                 new_k = atof(EARGF(usage()));
           84                 break;
           85         case 'P':
           86                 sim.alpha = atof(EARGF(usage()));
           87                 break;
           88         case 'p':
           89                 new_phi = atof(EARGF(usage()));
           90                 break;
           91         case 's':
           92                 sim.v_x_fix = atof(EARGF(usage()));
           93                 break;
           94         case 'v':
           95                 printf("%s-" VERSION "\n", argv0);
           96                 return 0;
           97                 break;
           98         default:
           99                 usage();
          100         } ARGEND;
          101 
          102         if (argc > 0)
          103                 usage();
          104 
          105         sim.nz = 2;
          106         prepare_arrays(&sim);
          107 
          108         if (!isnan(new_phi))
          109                 for (i = 0; i < sim.nz; ++i)
          110                         sim.phi[i] = new_phi;
          111         if (!isnan(new_k))
          112                 for (i = 0; i < sim.nz; ++i)
          113                         sim.k[i] = new_k;
          114 
          115         check_simulation_parameters(&sim);
          116 
          117 #ifdef BENCHMARK_PERFORMANCE
          118         t_begin = clock();
          119 #endif
          120 
          121         printf("%.17g\n", deborah_number(&sim));
          122 
          123 #ifdef BENCHMARK_PERFORMANCE
          124         t_end = clock();
          125         t_elapsed = (double) (t_end - t_begin) / CLOCKS_PER_SEC;
          126         printf("time spent = %g s\n", t_elapsed);
          127 #endif
          128 
          129         free_arrays(&sim);
          130 
          131         return 0;
          132 }