tstable behavior with elastic bond model - 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 29dcc40d11391606b585ee8c16d62ffab38d835d
(DIR) parent 22987b940714da80cd5638c1bd3367747956b4ee
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Wed, 23 Mar 2016 12:11:05 -0700
stable behavior with elastic bond model
Diffstat:
M slidergrid/debug.h | 10 +++++++---
M slidergrid/main.c | 26 ++++++++++++++++++++++++--
M slidergrid/slider.c | 14 ++++++++++----
M slidergrid/slider.h | 2 +-
M test.c | 9 +++++----
5 files changed, 47 insertions(+), 14 deletions(-)
---
(DIR) diff --git a/slidergrid/debug.h b/slidergrid/debug.h
t@@ -5,12 +5,16 @@
// slider-bond initialization function
//#define DEBUG_FIND_AND_BOND_TO_NEIGHBORS
+// if defined, verbose information to stdout will be shown about the individual
+// components of the sum of forces
+//#define DEBUG_SLIDER_FORCE_COMPONENTS
+
// if defined, verbose information to stdout will be shown before the slider
// integration
#define DEBUG_SLIDER_FORCE_TORQUE_AND_NEIGHBORS
-// if defined, verbose information to stdout will be shown about the individual
-// components of the sum of forces
-#define DEBUG_SLIDER_FORCE_COMPONENTS
+// if defined, verbose information to stdout will be shown after the slider
+// integration
+#define DEBUG_SLIDER_KINEMATICS
#endif
(DIR) diff --git a/slidergrid/main.c b/slidergrid/main.c
t@@ -134,8 +134,10 @@ int main(int argc, char** argv)
sim.sliders[i].vel.y,
sim.sliders[i].vel.z);*/
- for (i=0; i<sim.N; i++)
+ for (i=0; i<sim.N; i++) {
project_slider_position(&sim.sliders[i], sim.dt, sim.iteration);
+ zero_slider_force_torque(&sim.sliders[i]);
+ }
/*for (i=0; i<sim.N; i++)
printf("%d: pos = %f %f %f, pos_future = %f %f %f\n", i,
t@@ -169,13 +171,33 @@ int main(int argc, char** argv)
for (j=0; j<MAX_NEIGHBORS; j++)
if (sim.sliders[i].neighbors[j] >= 0)
printf("%d ", sim.sliders[i].neighbors[j]);
- puts("\n");
+ //puts("\n");
+ puts("");
#endif
}
for (i=0; i<sim.N; i++)
update_kinematics(&sim.sliders[i], sim.dt, sim.iteration);
+#ifdef DEBUG_SLIDER_KINEMATICS
+ for (i=0; i<sim.N; i++) {
+ int j;
+ printf("main.c: Slider %d: pos = %f %f %f, vel = %f %f %f, "
+ "acc = %f %f %f\n",
+ i,
+ sim.sliders[i].pos.x,
+ sim.sliders[i].pos.y,
+ sim.sliders[i].pos.z,
+ sim.sliders[i].vel.x,
+ sim.sliders[i].vel.y,
+ sim.sliders[i].vel.z,
+ sim.sliders[i].acc.x,
+ sim.sliders[i].acc.y,
+ sim.sliders[i].acc.z);
+ }
+ puts("");
+#endif
+
if (time_since_file >= sim.file_interval) {
if (write_simulation_output(&sim, output_folder)) {
fprintf(stderr, "\nFatal error: Could not write one or more "
(DIR) diff --git a/slidergrid/slider.c b/slidergrid/slider.c
t@@ -52,8 +52,11 @@ void project_slider_position(slider* s, Float dt, long int iteration)
s->angpos.x + s->angvel.x*dt + 0.5*s->angacc.x*dt*dt,
s->angpos.y + s->angvel.y*dt + 0.5*s->angacc.y*dt*dt,
s->angpos.z + s->angvel.z*dt + 0.5*s->angacc.z*dt*dt);
+}
- // reset sum of forces and torques on slider
+// reset sum of forces and torques on slider
+void zero_slider_force_torque(slider* s)
+{
s->force = zeroes_float3();
s->torque = zeroes_float3();
}
t@@ -155,8 +158,11 @@ void slider_displacement(slider* s1, const slider s2,
// increment in inter-slider distance, divide by two to get displacement
// over 1 time step
- Float3 ddist = divide_float3_scalar(
- subtract_float3(dist_future, dist0), 2.0);
+ //const Float3 ddist = divide_float3_scalar(
+ //subtract_float3(dist_future, dist0), 2.0);
+
+ // Get displacement change from previous and current inter-slider distance
+ const Float3 ddist = subtract_float3(dist, dist0);
//if (iteration == 0)
//ddist = zeroes_float3();
t@@ -177,7 +183,7 @@ void slider_displacement(slider* s1, const slider s2,
s1->neighbor_relative_distance_velocity[idx_neighbor] =
multiply_float3_scalar(n, vel_n);
- printf("displacement = %f %f %f\n", ddist.x, ddist.y, ddist.z);
+ //printf("displacement = %f %f %f\n", ddist.x, ddist.y, ddist.z);
}
(DIR) diff --git a/slidergrid/slider.h b/slidergrid/slider.h
t@@ -50,9 +50,9 @@ typedef struct {
void print_slider_position(slider s);
void initialize_slider_values(slider* s);
-//void check_slider_values(slider s);
void project_slider_position(slider* s, Float dt, long int iteration);
+void zero_slider_force_torque(slider* s);
void update_kinematics(slider* s, Float dt, long int iteration);
void slider_neighbor_interaction(
(DIR) diff --git a/test.c b/test.c
t@@ -12,7 +12,8 @@ simulation setup_simulation()
sim.id = "test";
// initialize grid of sliders
- int nx = 10;
+ //int nx = 10;
+ int nx = 2;
int ny = 1;
int nz = 1;
sim.N = nx*ny*nz;
t@@ -28,17 +29,17 @@ simulation setup_simulation()
initialize_slider_values(&sim.sliders[i]);
// set custom values for certain parameters
- sim.sliders[i].mass = 1.0e3;
+ sim.sliders[i].mass = 1.0;
sim.sliders[i].moment_of_inertia = 1.0e3;
sim.sliders[i].bond_parallel_stiffness = 1.0e5;
//sim.sliders[i].bond_parallel_viscosity = 1.0e2;
}
- sim.sliders[0].vel.x = 1.0;
+ sim.sliders[0].vel.x = 0.1;
// set temporal parameters
sim.time = 0.0;
- sim.time_end = 1.0;
+ sim.time_end = 10.0;
sim.file_interval = 0.1;
return sim;