tUse general functions for producing output to stdout and files - cngf-pf - con… | |
git clone git://src.adamsgaard.dk/cngf-pf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit d856e07363afbd999ce4a98ccd109a86a13e45f7 | |
parent eff39df93aa04c4858b33363827bd7b27fa607aa | |
Author: Anders Damsgaard <[email protected]> | |
Date: Sat, 6 Jul 2019 10:11:07 +0200 | |
Use general functions for producing output to stdout and files | |
Diffstat: | |
M arrays.c | 24 ++++++++++++++++++++++++ | |
M arrays.h | 2 ++ | |
M main.c | 25 +++++++------------------ | |
M simulation.c | 65 +++++++++++++++++++++--------… | |
M simulation.h | 2 ++ | |
5 files changed, 80 insertions(+), 38 deletions(-) | |
--- | |
diff --git a/arrays.c b/arrays.c | |
t@@ -217,3 +217,27 @@ copy_values(const double* in, double* out, const int n) | |
for (i=0; i<n; ++i) | |
out[i] = in[i]; | |
} | |
+ | |
+double* | |
+copy(const double* in, const int n) | |
+{ | |
+ double *out; | |
+ out = empty(n); | |
+ copy_values(in, out, n); | |
+ return out; | |
+} | |
+ | |
+double* | |
+normalize(const double* in, const int n) | |
+{ | |
+ int i; | |
+ double max_val; | |
+ double *out; | |
+ | |
+ out = malloc(n*sizeof(double)); | |
+ copy_values(in, out, n); | |
+ max_val = max(out, n); | |
+ for (i=0; i<n; ++i) | |
+ out[i] /= max_val; | |
+ return out; | |
+} | |
diff --git a/arrays.h b/arrays.h | |
t@@ -48,5 +48,7 @@ void fprint_three_arrays( | |
const int n); | |
void copy_values(const double* in, double* out, const int n); | |
+double* copy(const double* in, const int n); | |
+double* normalize(const double* in, const int n); | |
#endif | |
diff --git a/main.c b/main.c | |
t@@ -91,16 +91,16 @@ version(void) | |
int | |
main(int argc, char* argv[]) | |
{ | |
- int normalize, opt, i; | |
+ int norm, opt, i; | |
struct simulation sim; | |
const char* optstring; | |
unsigned long iter; | |
- double new_phi, new_k, filetimeclock, max_v_x; | |
+ double new_phi, new_k, filetimeclock; | |
/* load with default values */ | |
sim = init_sim(); | |
- normalize = 0; | |
+ norm = 0; | |
optstring = "hvNn:G:P:m:V:A:b:f:Fp:d:r:o:L:c:i:R:k:O:a:q:H:t:T:D:I:"; | |
const struct option longopts[] = { | |
t@@ -157,7 +157,7 @@ main(int argc, char* argv[]) | |
sim.nz = atoi(optarg); | |
break; | |
case 'N': | |
- normalize = 1; | |
+ norm = 1; | |
break; | |
case 'G': | |
sim.G = atof(optarg); | |
t@@ -289,26 +289,15 @@ main(int argc, char* argv[]) | |
iter++; | |
if (filetimeclock >= sim.file_dt || iter == 0) { | |
- write_output_file(&sim, normalize); | |
+ write_output_file(&sim, norm); | |
filetimeclock = 0.0; | |
} | |
} | |
- if (normalize) { | |
- max_v_x = max(sim.v_x, sim.nz); | |
- for (i=0; i<sim.nz; ++i) | |
- sim.v_x[i] /= max_v_x; | |
- } | |
- | |
if (sim.fluid) | |
- for (i=0; i<sim.nz; ++i) | |
- printf("%.17g\t%.17g\t%.17g\t%.17g\n", | |
- sim.z[i], | |
- sim.v_x[i], | |
- sim.sigma_n_eff[i], | |
- sim.p_f_ghost[idx1g(i)]); | |
+ print_wet_output(stdout, &sim, norm); | |
else | |
- print_three_arrays(sim.z, sim.v_x, sim.sigma_n_eff, sim.nz); | |
+ print_dry_output(stdout, &sim, norm); | |
free_arrays(&sim); | |
return 0; | |
diff --git a/simulation.c b/simulation.c | |
t@@ -437,34 +437,59 @@ implicit_1d_jacobian_poisson_solver(struct simulation* s… | |
void | |
write_output_file(struct simulation* sim, const int normalize) | |
{ | |
- int i; | |
char outfile[200]; | |
FILE *fp; | |
- double *v_x_out; | |
- double max_v_x; | |
sprintf(outfile, "%s.output%05d.txt", sim->name, sim->n_file++); | |
- v_x_out = malloc(sim->nz*sizeof(double)); | |
- copy_values(sim->v_x, v_x_out, sim->nz); | |
- if (normalize) { | |
- max_v_x = max(v_x_out, sim->nz); | |
- for (i=0; i<sim->nz; ++i) | |
- v_x_out[i] /= max_v_x; | |
- } | |
- | |
fp = fopen(outfile, "w"); | |
if (sim->fluid) | |
- for (i=0; i<sim->nz; ++i) | |
- fprintf(fp, "%.17g\t%.17g\t%.17g\t%.17g\t%.17g\n", | |
- sim->z[i], | |
- v_x_out[i], | |
- sim->sigma_n_eff[i], | |
- sim->p_f_ghost[idx1g(i)], | |
- sim->mu[i]); | |
+ print_wet_output(fp, sim, normalize); | |
else | |
- fprint_three_arrays(fp, sim->z, v_x_out, sim->sigma_n_eff, sim… | |
+ print_dry_output(fp, sim, normalize); | |
- free(v_x_out); | |
fclose(fp); | |
} | |
+ | |
+void | |
+print_dry_output(FILE* fp, struct simulation* sim, const int norm) | |
+{ | |
+ int i; | |
+ double *v_x_out; | |
+ | |
+ if (norm) | |
+ v_x_out = normalize(sim->v_x, sim->nz); | |
+ else | |
+ v_x_out = copy(sim->v_x, sim->nz); | |
+ | |
+ for (i=0; i<sim->nz; ++i) | |
+ fprintf(fp, "%.17g\t%.17g\t%.17g\n", | |
+ sim->z[i], | |
+ v_x_out[i], | |
+ sim->sigma_n_eff[i]); | |
+ | |
+ free(v_x_out); | |
+} | |
+ | |
+void | |
+print_wet_output(FILE* fp, struct simulation* sim, const int norm) | |
+{ | |
+ int i; | |
+ double *v_x_out; | |
+ | |
+ if (norm) | |
+ v_x_out = normalize(sim->v_x, sim->nz); | |
+ else | |
+ v_x_out = copy(sim->v_x, sim->nz); | |
+ | |
+ for (i=0; i<sim->nz; ++i) | |
+ fprintf(fp, "%.17g\t%.17g\t%.17g\t%.17g\t%.17g\t%.17g\n", | |
+ sim->z[i], | |
+ v_x_out[i], | |
+ sim->sigma_n_eff[i], | |
+ sim->p_f_ghost[idx1g(i)], | |
+ sim->mu[i], | |
+ sim->gamma_dot_p[i]); | |
+ | |
+ free(v_x_out); | |
+} | |
diff --git a/simulation.h b/simulation.h | |
t@@ -124,5 +124,7 @@ int implicit_1d_jacobian_poisson_solver( | |
const double rel_tol); | |
void write_output_file(struct simulation* sim, const int normalize); | |
+void print_dry_output(FILE* fp, struct simulation* sim, const int normalize); | |
+void print_wet_output(FILE* fp, struct simulation* sim, const int normalize); | |
#endif |