1d_fd_simple_shear

Continuum model for granular flows with pore-pressure dynamics
git clone git://src.adamsgaard.dk/1d_fd_simple_shear
Log | Files | Refs | README | LICENSE

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:
Mfluid.c | 35+++++++++++++++++++++++++++--------
Mmain.c | 8+++++++-
Mparameter_defaults.h | 1+
Msimulation.h | 1+
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] */