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();