tRewrite shear_flux program in 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
       ---
 (DIR) commit dd8acb3ca5ee35f5d8d6c9080191b1c9d276b627
 (DIR) parent 5d4a2cef872d8b3cbb45892042bf5df43a0c7616
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Tue, 24 Mar 2020 16:10:47 +0100
       
       Rewrite shear_flux program in C
       
       Diffstat:
         M Makefile                            |      10 ++++++++--
         D shear_flux                          |      16 ----------------
         A shear_flux.c                        |      78 +++++++++++++++++++++++++++++++
       
       3 files changed, 86 insertions(+), 18 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -6,6 +6,7 @@ MANPREFIX ?= ${PREFIX}/man
        DOCPREFIX ?= ${PREFIX}/share/doc/${NAME}
        
        HDR = \
       +        arg.h\
                arrays.h\
                fluid.h\
                parameter_defaults.h\
       t@@ -22,8 +23,8 @@ DOC = \
                README.md\
                LICENSE
        
       -HERE_CFLAGS = ${CFLAGS} -std=c99 -pedantic -Wall -O2 -g
       -HERE_LDFLAGS = ${LDFLAGS} -lm
       +HERE_CFLAGS = ${CFLAGS} -std=c99 -pedantic -Wall -O0 -g
       +HERE_LDFLAGS = ${LDFLAGS} -lm -g
        GLOBALCONST = -DVERSION=\"${VERSION}\"
        
        all: ${BIN}
       t@@ -44,6 +45,11 @@ max_depth_simple_shear: max_depth_simple_shear.o arrays.o fluid.o simulation.o $
                        max_depth_simple_shear.o arrays.o fluid.o simulation.o\
                        -o $@
        
       +shear_flux: shear_flux.o ${HDR}
       +        ${CC} ${HERE_LDFLAGS}\
       +                shear_flux.o\
       +                -o $@
       +
        install: ${BIN}
                # installing executables
                mkdir -p ${DESTDIR}${PREFIX}/bin
 (DIR) diff --git a/shear_flux b/shear_flux
       t@@ -1,16 +0,0 @@
       -#!/usr/bin/awk -f
       -BEGIN {
       -        getline
       -        integral = 0.0
       -}
       -NF{
       -        if (NR > 1)
       -        {
       -                integral += ($2 + v_prev)/2.0*($1 - z_prev);
       -        }
       -        z_prev = $1;
       -        v_prev = $2;
       -}
       -END{
       -        print integral
       -}
 (DIR) diff --git a/shear_flux.c b/shear_flux.c
       t@@ -0,0 +1,78 @@
       +#include <err.h>
       +#include <unistd.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <math.h>
       +
       +#include "arg.h"
       +
       +char *argv0;
       +
       +static void
       +usage(void)
       +{
       +        dprintf(2, "usage: %s "
       +                "[-v] "
       +                "[-h] "
       +                "[file ...] "
       +                "\n", argv0);
       +        exit(1);
       +}
       +
       +/* input format: positions<TAB>shear_velocities */
       +double
       +find_flux(FILE *f)
       +{
       +        int i;
       +        double pos, vel, pos_prev, vel_prev, flux;
       +
       +        i = 0;
       +        flux = 0.0;
       +        while (fscanf(f, "%lf\t%lf%*[^\n]", &pos, &vel) == 2) {
       +                if (i++ > 0)
       +                        flux += (vel + vel_prev)/2.0*(pos - pos_prev);
       +                pos_prev = pos;
       +                vel_prev = vel;
       +        }
       +
       +        return flux;
       +}
       +
       +int
       +main(int argc, char* argv[])
       +{
       +        int i;
       +        FILE *fp;
       +
       +#ifdef __OpenBSD__
       +        if (pledge("stdio rpath", NULL) == -1) {
       +                fprintf(stderr, "error: pledge failed");
       +                exit(1);
       +        }
       +#endif
       +
       +        ARGBEGIN {
       +        case 'h':
       +                usage();
       +                break;
       +        case 'v':
       +                printf("%s-"VERSION"\n", argv0);
       +                return 0;
       +                break;
       +        default:
       +                usage();
       +        } ARGEND;
       +
       +        if (argc > 0) {
       +                for (i = 0; i < argc; i++) {
       +                        if (!(fp = fopen(argv[i], "r")))
       +                                err(1, "fopen: %s", argv[i]);
       +
       +                        printf("%.17g\n", find_flux(fp));
       +                        fclose(fp);
       +                }
       +        } else
       +                printf("%.17g\n", find_flux(stdin));
       +
       +        return 0;
       +}