tshear_flux.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
       ---
       tshear_flux.c (1187B)
       ---
            1 #include <err.h>
            2 #include <unistd.h>
            3 #include <stdio.h>
            4 #include <stdlib.h>
            5 #include <err.h>
            6 
            7 #include "arg.h"
            8 
            9 char *argv0;
           10 
           11 static void
           12 usage(void)
           13 {
           14         fprintf(stderr, "usage: %s "
           15                 "[-v] "
           16                 "[-h] "
           17                 "[file ...] "
           18                 "\n", argv0);
           19         exit(1);
           20 }
           21 
           22 /* input format: positions<TAB>shear_velocities */
           23 static double
           24 find_flux(FILE *f)
           25 {
           26         int i = 0;
           27         double pos, vel, pos_prev, vel_prev, flux = 0.0;
           28 
           29         while (fscanf(f, "%lf\t%lf%*[^\n]", &pos, &vel) == 2) {
           30                 if (i++ > 0)
           31                         flux += (vel + vel_prev) / 2.0 * (pos - pos_prev);
           32                 pos_prev = pos;
           33                 vel_prev = vel;
           34         }
           35         if (i == 1)
           36                 err(1, "could not read input data");
           37 
           38         return flux;
           39 }
           40 
           41 int
           42 main(int argc, char *argv[])
           43 {
           44         int i;
           45         FILE *fp;
           46 
           47 #ifdef __OpenBSD__
           48         if (pledge("stdio rpath", NULL) == -1)
           49                 err(2, "pledge failed");
           50 #endif
           51 
           52         ARGBEGIN {
           53         case 'h':
           54                 usage();
           55                 break;
           56         case 'v':
           57                 printf("%s-"VERSION"\n", argv0);
           58                 return 0;
           59                 break;
           60         default:
           61                 usage();
           62         } ARGEND;
           63 
           64         if (argc > 0) {
           65                 for (i = 0; i < argc; i++) {
           66                         if (!(fp = fopen(argv[i], "r")))
           67                                 err(1, "fopen: %s", argv[i]);
           68 
           69                         printf("%.17g\n", find_flux(fp));
           70                         fclose(fp);
           71                 }
           72         } else
           73                 printf("%.17g\n", find_flux(stdin));
           74 
           75         return 0;
           76 }