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;
}