tadd simulation constructor, fix neighbor construction - 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 3f412993d74c736d82c909dbc66e0848fad84dc2
(DIR) parent 6fba7f184af58122623eadbe40e902759fef2a25
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Wed, 16 Mar 2016 14:25:21 -0700
add simulation constructor, fix neighbor construction
Diffstat:
M debug.h | 2 +-
M grid.c | 24 ++----------------------
M grid.h | 4 ----
M simulation.c | 41 +++++++++++++++++++++++++++++++
M simulation.h | 14 +++++++++++++-
M test.c | 6 +++---
6 files changed, 60 insertions(+), 31 deletions(-)
---
(DIR) diff --git a/debug.h b/debug.h
t@@ -3,6 +3,6 @@
// if defined, verbose information to stdout will be shown during the
// slider-bond initialization function
-#define DEBUG_FIND_AND_BOND_TO_NEIGHBORS
+//#define DEBUG_FIND_AND_BOND_TO_NEIGHBORS
#endif
(DIR) diff --git a/grid.c b/grid.c
t@@ -40,11 +40,11 @@ void find_and_bond_to_neighbors_n2(
const int N,
const Float cutoff)
{
- int i, j;
- int n_neighbors = 0;
+ int i, j, n_neighbors;
Float3 dist;
Float dist_norm;
for (i=0; i<N; i++) {
+ n_neighbors = 0;
for (j=0; j<N; j++) {
if (i != j) {
dist = subtract_float3(sliders[i].pos, sliders[j].pos);
t@@ -69,23 +69,3 @@ void find_and_bond_to_neighbors_n2(
}
}
}
-
-int save_slider_positions_to_file(
- const slider* sliders,
- const int N,
- 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<N; i++)
- printf("%f\t%f\t%f\n",
- sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z);
-
- fclose(f);
- return 0;
-}
(DIR) diff --git a/grid.h b/grid.h
t@@ -15,8 +15,4 @@ void find_and_bond_to_neighbors_n2(
const int N,
const Float cutoff);
-int save_slider_positions_to_file(
- const slider* sliders,
- const int N,
- const char* filename);
#endif
(DIR) diff --git a/simulation.c b/simulation.c
t@@ -52,10 +52,31 @@ int check_simulation_values(const simulation sim)
return_status = 1;
}
+ 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);
+ return_status = 1;
+ }
+
return return_status;
}
+simulation create_simulation()
+{
+ simulation sim;
+ sim.N = 0;
+ sim.time = 0.0;
+ sim.time_end = 0.0;
+ sim.dt = 0.1;
+ sim.iteration = 0;
+ sim.bond_length_limit = 0;
+ sim.id = "unnamed";
+ sim.file_interval = 0.0;
+ return sim;
+}
+
Float find_time_step(const slider* sliders, const int N, const Float safety)
{
Float smallest_mass = 1.0e20;
t@@ -71,3 +92,23 @@ Float find_time_step(const slider* sliders, const int N, const Float safety)
return safety/sqrt(largest_stiffness/smallest_mass);
}
+
+int save_slider_positions_to_file(
+ const slider* sliders,
+ const int N,
+ 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<N; i++)
+ printf("%f\t%f\t%f\n",
+ sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z);
+
+ fclose(f);
+ return 0;
+}
(DIR) diff --git a/simulation.h b/simulation.h
t@@ -11,13 +11,25 @@ typedef struct {
Float dt;
long int iteration;
Float bond_length_limit;
-
+ char* id;
+ Float file_interval;
} simulation;
+// create simulation with default values
+simulation create_simulation();
+
+// calculate the longest stable time step
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);
+// save slider positions to a file on the disk
+int save_slider_positions_to_file(
+ const slider* sliders,
+ const int N,
+ const char* filename);
+
// user-defined function which sets up the simulation
simulation setup_simulation();
(DIR) diff --git a/test.c b/test.c
t@@ -5,13 +5,13 @@
// test a regular, 2d, orthogonal grid of sliders
simulation setup_simulation()
{
- // create empty simulation structure
- simulation sim;
+ // create empty simulation structure with default values
+ simulation sim = new_simulation();
// initialize grid of sliders
int nx = 4;
int ny = 4;
- int nz = 4;
+ int nz = 1;
sim.N = nx*ny*nz;
sim.sliders = create_regular_slider_grid(nx, ny, nz, 1.0, 1.0, 1.0);