commit f2663e1123ac994ca9f60a747addf5559786f887
parent 5419eee7ed46ffaae98e60ea4391d713d1731668
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Tue, 17 Sep 2019 10:28:51 +0200
Add option to change fluid-pressure pulse waveform shape
Diffstat:
4 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/fluid.c b/fluid.c
@@ -60,10 +60,10 @@ sine_wave(const double time,
}
static double
-pulse(const double time,
- const double peak_amplitude,
- const double frequency,
- const double peak_time)
+triangular_pulse(const double time,
+ const double peak_amplitude,
+ const double frequency,
+ const double peak_time)
{
if (peak_time - 1.0/(2.0*frequency) < time && time <= peak_time)
return peak_amplitude*2.0*frequency*(time - peak_time) + peak_amplitude;
@@ -73,6 +73,19 @@ pulse(const double time,
return 0.0;
}
+static double
+square_pulse(const double time,
+ const double peak_amplitude,
+ const double frequency,
+ const double peak_time)
+{
+ if (peak_time - 1.0/(2.0*frequency) < time &&
+ time < peak_time + 1.0/(2.0*frequency))
+ return peak_amplitude;
+ else
+ return 0.0;
+}
+
static void
set_fluid_bcs(struct simulation* sim, const double p_f_top)
{
@@ -186,10 +199,16 @@ darcy_solver_1d(struct simulation* sim,
sim->p_f_mod_freq,
sim->p_f_mod_phase);
else
- p_f_top = sim->p_f_top + pulse(sim->t,
- sim->p_f_mod_ampl,
- sim->p_f_mod_freq,
- sim->p_f_mod_pulse_time);
+ if (sim->p_f_mod_pulse_shape == 1)
+ p_f_top = sim->p_f_top + square_pulse(sim->t,
+ sim->p_f_mod_ampl,
+ sim->p_f_mod_freq,
+ sim->p_f_mod_pulse_time);
+ else
+ p_f_top = sim->p_f_top + triangular_pulse(sim->t,
+ sim->p_f_mod_ampl,
+ sim->p_f_mod_freq,
+ sim->p_f_mod_pulse_time);
/* set fluid BCs (1 of 2) */
set_fluid_bcs(sim, p_f_top);
diff --git a/main.c b/main.c
@@ -68,6 +68,8 @@ usage(void)
" -H, --fluid-pressure-phase VAL fluid pressure at +z edge [Pa] (default %g)\n"
" -u, --fluid-pressure-pulse-time VAL fluid pressure pulse peak time [s]\n"
" (default %g)\n"
+ " -S, --fluid-pressure-pulse-shape VAL\n"
+ " 0: triangular (default), 1: square\n"
" -t, --time VAL simulation start time [s] (default %g)\n"
" -T, --time-end VAL simulation end time [s] (default %g)\n"
" -I, --file-interval VAL interval between output files [s] (default %g)\n"
@@ -143,7 +145,7 @@ main(int argc, char* argv[])
norm = 0;
- optstring = "hvNn:G:P:m:s:l:V:A:b:f:C:Fp:d:r:o:L:c:i:R:k:O:a:q:H:T:t:T:D:I:";
+ optstring = "hvNn:G:P:m:s:l:V:A:b:f:C:Fp:d:r:o:L:c:i:R:k:O:a:q:H:T:S:t:T:D:I:";
const struct option longopts[] = {
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'v'},
@@ -174,6 +176,7 @@ main(int argc, char* argv[])
{"fluid-pressure-freq", required_argument, NULL, 'q'},
{"fluid-pressure-phase", required_argument, NULL, 'H'},
{"fluid-pressure-pulse-time", required_argument, NULL, 'u'},
+ {"fluid-pressure-pulse-shape",required_argument, NULL, 'S'},
{"time", required_argument, NULL, 't'},
{"time-end", required_argument, NULL, 'T'},
{"file-interval", required_argument, NULL, 'I'},
@@ -279,6 +282,9 @@ main(int argc, char* argv[])
case 'u':
sim.p_f_mod_pulse_time = atof(optarg);
break;
+ case 'S':
+ sim.p_f_mod_pulse_shape = atoi(optarg);
+ break;
case 't':
sim.t = atof(optarg);
break;
diff --git a/parameter_defaults.h b/parameter_defaults.h
@@ -106,6 +106,7 @@ struct simulation init_sim(void)
sim.p_f_mod_freq = 1.0;
sim.p_f_mod_phase = 0.0;
sim.p_f_mod_pulse_time = NAN;
+ sim.p_f_mod_pulse_shape = 0;
return sim;
}
diff --git a/simulation.h b/simulation.h
@@ -85,6 +85,7 @@ struct simulation {
double p_f_mod_freq; /* frequency of fluid pressure variations [s^-1] */
double p_f_mod_phase; /* phase of fluid pressure variations [s^-1] */
double p_f_mod_pulse_time; /* single pressure pulse at this time [s] */
+ int p_f_mod_pulse_shape; /* waveform for fluid-pressure pulse */
double beta_f; /* adiabatic fluid compressibility [Pa^-1] */
double mu_f; /* fluid dynamic viscosity [Pa*s] */
double rho_f; /* fluid density [kg/m^3] */