tshow status during verbose runs, define bond stiffnesses, set temporal parameters - slidergrid - grid of elastic sliders on a frictional surface
 (HTM) git clone git://src.adamsgaard.dk/slidergrid
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit bd4fc9c6e32224ee34ffce1e727317cc3b8375f5
 (DIR) parent 5d6e81a04a1e2fe6151185a4afeab15f67fc41b7
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Wed, 16 Mar 2016 15:39:54 -0700
       
       show status during verbose runs, define bond stiffnesses, set temporal parameters
       
       Diffstat:
         M slidergrid/main.c                   |      45 +++++++++++++++++++++++--------
         M slidergrid/simulation.c             |       9 ++++++++-
         M slidergrid/slider.c                 |      14 ++++++++------
         M test.c                              |      11 +++++++++--
       
       4 files changed, 59 insertions(+), 20 deletions(-)
       ---
 (DIR) diff --git a/slidergrid/main.c b/slidergrid/main.c
       t@@ -14,7 +14,8 @@ void print_usage(char* argv0)
                    "usage: %s [OPTION[S]]\n"
                    "options:\n"
                    "  -h, --help\t\tprint this information\n"
       -            "  -V, --version \tprint version information and exit\n"
       +            "  -v, --version \tprint version information and exit\n"
       +            "  -V, --verbose \tshow status during simulation\n"
                    , argv0, argv0);
        }
        
       t@@ -28,6 +29,13 @@ void print_version(char* argv0)
                    , argv0, VERSION);
        }
        
       +void print_status(simulation sim)
       +{
       +    printf("\r%s: t = %.3f s, t_end = %.3f s (%2.0f%%)             ",
       +            sim.id, sim.time, sim.time_end,
       +            sim.time/sim.time_end*100.);
       +}
       +
        int main(int argc, char** argv)
        {
            int i;
       t@@ -43,22 +51,18 @@ int main(int argc, char** argv)
                    return 0;
                }
        
       -        if (strcmp(argv[i], "-V") == 0 || strcmp(argv[i], "--version") == 0) {
       +        if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) {
                    print_version(argv[0]);
                    return 0;
                }
        
       -
       -
       +        if (strcmp(argv[i], "-V") == 0 || strcmp(argv[i], "--verbose") == 0) {
       +            verbose = 1;
       +            continue;
       +        }
            }
        
        
       -
       -
       -
       -
       -
       -
            // external function which defines the simulation setup and parameters
            simulation sim = setup_simulation();
        
       t@@ -78,14 +82,21 @@ int main(int argc, char** argv)
            // check simulation parameters for missing or wrong parameter values
            if (check_simulation_values(sim)) {
                fprintf(stderr, "\nFatal error: The simulation configuration is "
       -                "invalid.\nPlease check the setup_simulation() configuration, "
       +                "invalid.\n\n"
       +                "Please check the setup_simulation() configuration, "
                        "which is verified in the function check_simulation_values "
                        "(simulation.c).\n");
                return EXIT_FAILURE;
            }
        
       +    if (verbose) {
       +        printf("starting simulation '%s'\n", sim.id);
       +        printf("time step length: dt = %f s\n", sim.dt);
       +    }
       +
            // main temporal loop
            sim.iteration = 0;
       +    Float time_since_status = 0.0;
            for (sim.time = 0.0;
                    sim.time <= sim.time_end;
                    sim.time += sim.dt) {
       t@@ -104,9 +115,21 @@ int main(int argc, char** argv)
                    update_kinematics(sim.sliders[i], sim.dt, sim.iteration);
                }
        
       +        if (verbose) {
       +            if (time_since_status > sim.dt*100. ||
       +                    time_since_status >= sim.file_interval) {
       +                print_status(sim);
       +                time_since_status = 0.;
       +            }
       +        }
       +
                sim.iteration++;
       +        time_since_status += sim.dt;
            }
        
       +    print_status(sim);
       +    puts("");
       +
            // end program
            free(sim.sliders);
            return EXIT_SUCCESS;
 (DIR) diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c
       t@@ -38,8 +38,10 @@ int check_simulation_values(const simulation sim)
                            i, sim.sliders[i].moment_of_inertia);
                    return_status = 1;
                }
       +
            }
        
       +
            // General parameters
            if (sim.N <= 0) {
                fprintf(stderr, "Error: The number of sliders (N = %d) must be a "
       t@@ -53,6 +55,12 @@ int check_simulation_values(const simulation sim)
                return_status = 1;
            }
        
       +    if (sim.dt > 1.0e9) {
       +        fprintf(stderr, "Error: The numerical time step (dt = %f) is "
       +                "invalid. Did you set bond_parallel_stiffness?\n", sim.dt);
       +        return_status = 1;
       +    }
       +
            if (sim.time > sim.time_end) {
                fprintf(stderr, "Error: Current time (time = %f s) exceeds "
                        "total time (time_end = %f s)\n",
       t@@ -74,7 +82,6 @@ int check_simulation_values(const simulation sim)
                return_status = 1;
            }
        
       -
            return return_status;
        }
        
 (DIR) diff --git a/slidergrid/slider.c b/slidergrid/slider.c
       t@@ -8,6 +8,14 @@ void print_slider_position(slider s)
            printf("%f\t%f\t%f\n", s.pos.x, s.pos.y, s.pos.z);
        }
        
       +slider create_slider()
       +{
       +    slider s;
       +
       +
       +    return s;
       +}
       +
        void initialize_slider_values(slider s)
        {
            s.force = zeroes_float3();
       t@@ -24,12 +32,6 @@ void initialize_slider_values(slider s)
        
        }
        
       -void check_slider_values(slider s)
       -{
       -
       -
       -}
       -
        /* Explicit temporal integration scheme based on three-term Taylor expansion.
         * Truncation error O(dt^4) for positions, O(dt^3) for velocities.  Acceleration 
         * change is approximated by backwards differences. */
 (DIR) diff --git a/test.c b/test.c
       t@@ -7,6 +7,7 @@ simulation setup_simulation()
        {
            // create empty simulation structure with default values
            simulation sim = create_simulation();
       +    sim.id = "test";
        
            // initialize grid of sliders
            int nx = 4;
       t@@ -20,9 +21,15 @@ simulation setup_simulation()
            // set slider masses and moments of inertia
            int i;
            for (i=0; i<sim.N; i++) {
       -        sim.sliders[i].mass = 1.;
       -        sim.sliders[i].moment_of_inertia = 1.;
       +        sim.sliders[i].mass = 1.0e3;
       +        sim.sliders[i].moment_of_inertia = 1.0e3;
       +        sim.sliders[i].bond_parallel_stiffness = 1.0e5;
            }
        
       +    // set temporal parameters
       +    sim.time = 0.0;
       +    sim.time_end = 1.0;
       +    sim.file_interval = 0.1;
       +
            return sim;
        }