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] */