tAdd option to change fluid-pressure pulse waveform shape - 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 f2663e1123ac994ca9f60a747addf5559786f887 (DIR) parent 5419eee7ed46ffaae98e60ea4391d713d1731668 (HTM) 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: M fluid.c | 35 ++++++++++++++++++++++++------- M main.c | 8 +++++++- M parameter_defaults.h | 1 + M simulation.h | 1 + 4 files changed, 36 insertions(+), 9 deletions(-) --- (DIR) diff --git a/fluid.c b/fluid.c t@@ -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; t@@ -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) { t@@ -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); (DIR) diff --git a/main.c b/main.c t@@ -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" t@@ -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'}, t@@ -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'}, t@@ -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; (DIR) diff --git a/parameter_defaults.h b/parameter_defaults.h t@@ -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; } (DIR) diff --git a/simulation.h b/simulation.h t@@ -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] */