twrite slider positions to file, todo: add other params - 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 0f79de37df00ace7285e5b445d648a90a27d6def (DIR) parent bd4fc9c6e32224ee34ffce1e727317cc3b8375f5 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk> Date: Wed, 16 Mar 2016 16:05:11 -0700 write slider positions to file, todo: add other params Diffstat: M slidergrid/main.c | 24 ++++++++++++++++++++++++ M slidergrid/simulation.c | 20 ++++++++++++++++++++ M slidergrid/simulation.h | 3 +++ 3 files changed, 47 insertions(+), 0 deletions(-) --- (DIR) diff --git a/slidergrid/main.c b/slidergrid/main.c t@@ -1,6 +1,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> #include "slider.h" #include "grid.h" #include "simulation.h" t@@ -94,9 +97,19 @@ int main(int argc, char** argv) printf("time step length: dt = %f s\n", sim.dt); } + // create output file directory with simulation id as name and placed in + // current folder if it doesn't already exist + char output_folder[400]; + sprintf("./%s/", output_folder, sim.id); + struct stat st = {0}; + if (stat(output_folder, &st) == -1) + mkdir(output_folder, 0700); + // main temporal loop sim.iteration = 0; Float time_since_status = 0.0; + Float time_since_file = 0.0; + char filename[1000]; for (sim.time = 0.0; sim.time <= sim.time_end; sim.time += sim.dt) { t@@ -115,6 +128,16 @@ int main(int argc, char** argv) update_kinematics(sim.sliders[i], sim.dt, sim.iteration); } + if (time_since_file >= sim.file_interval) { + sprintf(filename, "%s/output%06d.txt", + output_folder, sim.file_number); + if (save_simulation_to_file(sim, filename)) { + fprintf(stderr, "\nFatal error: Could not save to output file " + "'%s'.\n", filename); + return EXIT_FAILURE; + } + } + if (verbose) { if (time_since_status > sim.dt*100. || time_since_status >= sim.file_interval) { t@@ -125,6 +148,7 @@ int main(int argc, char** argv) sim.iteration++; time_since_status += sim.dt; + time_since_file += sim.dt; } print_status(sim); (DIR) diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c t@@ -14,6 +14,7 @@ simulation create_simulation() sim.bond_length_limit = 0; sim.id = "unnamed"; sim.file_interval = 0.0; + sim.file_number = 0; sim.verbose = 0; return sim; } t@@ -120,3 +121,22 @@ int save_slider_positions_to_file( fclose(f); return 0; } + +int save_simulation_to_file(const simulation sim, const char* filename) +{ + FILE* f = fopen(filename, "w"); + if (f == NULL) { + fprintf(stderr, "Could not open output file %s.", filename); + return 1; + } + + int i; + for (i=0; i<sim.N; i++) + printf("%f\t%f\t%f\n", + sim.sliders[i].pos.x, + sim.sliders[i].pos.y, + sim.sliders[i].pos.z); + + fclose(f); + return 0; +} (DIR) diff --git a/slidergrid/simulation.h b/slidergrid/simulation.h t@@ -13,6 +13,7 @@ typedef struct { Float bond_length_limit; char* id; Float file_interval; + int file_number; int verbose; } simulation; t@@ -31,6 +32,8 @@ int save_slider_positions_to_file( const int N, const char* filename); +int save_simulation_to_file(const simulation sim, const char* filename); + // user-defined function which sets up the simulation simulation setup_simulation();