tpass pointer to simulation structure - 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 f592a85d991ec58487fb39ba92a7eb3f32b39f75
(DIR) parent d45ab4c31a7de996f1785ca5d8fb7bc17c06c9dc
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Thu, 17 Mar 2016 16:56:12 -0700
pass pointer to simulation structure
Diffstat:
M slidergrid/main.c | 2 +-
M slidergrid/simulation.c | 57 +++++++++++++++----------------
M slidergrid/simulation.h | 4 ++--
3 files changed, 31 insertions(+), 32 deletions(-)
---
(DIR) diff --git a/slidergrid/main.c b/slidergrid/main.c
t@@ -83,7 +83,7 @@ int main(int argc, char** argv)
sim.dt = find_time_step(sim.sliders, sim.N, 0.07);
// check simulation parameters for missing or wrong parameter values
- if (check_simulation_values(sim)) {
+ if (check_simulation_values(&sim)) {
fprintf(stderr, "\nFatal error: The simulation configuration is "
"invalid.\n\n"
"Please check the setup_simulation() configuration, "
(DIR) diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c
t@@ -19,67 +19,66 @@ simulation create_simulation()
return sim;
}
-int check_simulation_values(const simulation sim)
+int check_simulation_values(const simulation* sim)
{
int return_status = 0;
// Slider-specific parameters
int i;
- for (i=0; i<sim.N; i++) {
+ for (i=0; i<sim->N; i++) {
- if (sim.sliders[i].mass <= 0.0) {
+ if (sim->sliders[i].mass <= 0.0) {
fprintf(stderr, "Error: Mass of slider %d is zero or negative "
- "(%f kg)\n", i, sim.sliders[i].mass);
+ "(%f kg)\n", i, sim->sliders[i].mass);
return_status = 1;
}
- if (sim.sliders[i].moment_of_inertia <= 0.0) {
+ if (sim->sliders[i].moment_of_inertia <= 0.0) {
fprintf(stderr, "Error: Moment of inertia of slider %d is "
"zero or negative (%f kg*m*m)\n",
- i, sim.sliders[i].moment_of_inertia);
+ i, sim->sliders[i].moment_of_inertia);
return_status = 1;
}
}
-
// General parameters
- if (sim.N <= 0) {
+ if (sim->N <= 0) {
fprintf(stderr, "Error: The number of sliders (N = %d) must be a "
- "positive number.\n", sim.N);
+ "positive number.\n", sim->N);
return_status = 1;
}
- if (sim.dt <= 0.0) {
+ if (sim->dt <= 0.0) {
fprintf(stderr, "Error: The numerical time step (dt = %f) must be a "
- "positive value.\n", sim.dt);
+ "positive value.\n", sim->dt);
return_status = 1;
}
- if (sim.dt > 1.0e9) {
+ 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);
+ "invalid. Did you set bond_parallel_stiffness?\n", sim->dt);
return_status = 1;
}
- if (sim.time > sim.time_end) {
+ if (sim->time > sim->time_end) {
fprintf(stderr, "Error: Current time (time = %f s) exceeds "
"total time (time_end = %f s)\n",
- sim.time, sim.time_end);
+ sim->time, sim->time_end);
return_status = 1;
}
- if (sim.bond_length_limit <= 0.0) {
+ if (sim->bond_length_limit <= 0.0) {
fprintf(stderr, "Error: The inter-slider bond length limit "
"(bond_length_limit = %f) must be a positive value.\n",
- sim.bond_length_limit);
+ sim->bond_length_limit);
return_status = 1;
}
- if (sim.file_interval < 0.0) {
+ if (sim->file_interval < 0.0) {
fprintf(stderr, "Error: The output file interval"
"(file_interval = %f) must be a zero or positive value.\n",
- sim.file_interval);
+ sim->file_interval);
return_status = 1;
}
t@@ -122,7 +121,7 @@ int save_slider_positions_to_file(
return 0;
}
-int save_general_state_to_file(const simulation sim, const char* filename)
+int save_general_state_to_file(const simulation* sim, const char* filename)
{
FILE* f = fopen(filename, "w");
if (f == NULL) {
t@@ -130,14 +129,14 @@ int save_general_state_to_file(const simulation sim, const char* filename)
return 1;
}
- fprintf(f, "id = %s\n", sim.id);
- fprintf(f, "N = %d\n", sim.N);
- fprintf(f, "time = %f\n", sim.time);
- fprintf(f, "time_end = %f\n", sim.time_end);
- fprintf(f, "dt = %f\n", sim.dt);
- fprintf(f, "file_interval = %f\n", sim.file_interval);
- fprintf(f, "iteration = %ld\n", sim.iteration);
- fprintf(f, "bond_length_limit = %f\n", sim.bond_length_limit);
+ fprintf(f, "id = %s\n", sim->id);
+ fprintf(f, "N = %d\n", sim->N);
+ fprintf(f, "time = %f\n", sim->time);
+ fprintf(f, "time_end = %f\n", sim->time_end);
+ fprintf(f, "dt = %f\n", sim->dt);
+ fprintf(f, "file_interval = %f\n", sim->file_interval);
+ fprintf(f, "iteration = %ld\n", sim->iteration);
+ fprintf(f, "bond_length_limit = %f\n", sim->bond_length_limit);
fclose(f);
return 0;
t@@ -314,7 +313,7 @@ int write_simulation_output(simulation* sim, char* output_folder)
// other parameters
sprintf(filename, "%s/%s.general.%06d.txt",
output_folder, sim->id, sim->file_number);
- if (save_general_state_to_file(*sim, filename)) {
+ if (save_general_state_to_file(sim, filename)) {
fprintf(stderr, "\nFatal error: Could not save to output file "
"'%s'.\n", filename);
return 1;
(DIR) diff --git a/slidergrid/simulation.h b/slidergrid/simulation.h
t@@ -24,7 +24,7 @@ simulation create_simulation();
Float find_time_step(const slider* sliders, const int N, const Float safety);
// check if simulation parameters have reasonable values
-int check_simulation_values(const simulation sim);
+int check_simulation_values(const simulation* sim);
// save slider positions to a file on the disk
int save_slider_positions_to_file(
t@@ -32,7 +32,7 @@ int save_slider_positions_to_file(
const int N,
const char* filename);
-int save_general_state_to_file(const simulation sim, const char* filename);
+int save_general_state_to_file(const simulation* sim, const char* filename);
int save_sliders_to_vtk_file(
const slider* sliders,