tRewrite shear_flux program in C - cngf-pf - continuum model for granular flows… | |
git clone git://src.adamsgaard.dk/cngf-pf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dd8acb3ca5ee35f5d8d6c9080191b1c9d276b627 | |
parent 5d4a2cef872d8b3cbb45892042bf5df43a0c7616 | |
Author: Anders Damsgaard <[email protected]> | |
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(-) | |
--- | |
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 f… | |
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 | |
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 | |
-} | |
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; | |
+} |