timprove debugging output, save bond-parallel displacement as scalar - slidergr… | |
git clone git://src.adamsgaard.dk/slidergrid | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dea4dc1c1b2f140a281656f0f58b35625d90d027 | |
parent 3246bf804bdc996d1bd737dbeb3acadad09fae2d | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 14 Apr 2016 12:24:45 -0700 | |
improve debugging output, save bond-parallel displacement as scalar | |
Diffstat: | |
M slidergrid/debug.h | 8 ++++---- | |
M slidergrid/main.c | 15 ++++++++++++++- | |
M slidergrid/slider.c | 69 +++++++++++++++++------------… | |
M slidergrid/slider.h | 2 +- | |
4 files changed, 58 insertions(+), 36 deletions(-) | |
--- | |
diff --git a/slidergrid/debug.h b/slidergrid/debug.h | |
t@@ -6,18 +6,18 @@ | |
//#define DEBUG_FIND_AND_BOND_TO_NEIGHBORS | |
// if defined, show information on the resolved inter-slider bond deformation | |
-#define DEBUG_BOND_DEFORMATION | |
+//#define DEBUG_BOND_DEFORMATION | |
// if defined, verbose information to stdout will be shown about the individua… | |
// components of the sum of forces | |
-#define DEBUG_SLIDER_FORCE_COMPONENTS | |
+//#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 | |
+//#define DEBUG_SLIDER_FORCE_TORQUE_AND_NEIGHBORS | |
// if defined, verbose information to stdout will be shown after the slider | |
// integration | |
-#define DEBUG_SLIDER_KINEMATICS | |
+//#define DEBUG_SLIDER_KINEMATICS | |
#endif | |
diff --git a/slidergrid/main.c b/slidergrid/main.c | |
t@@ -127,6 +127,14 @@ int main(int argc, char** argv) | |
sim.time <= sim.time_end; | |
sim.time += sim.dt) { | |
+#if defined(DEBUG_FIND_AND_BOND_TO_NEIGHBORS) ||\ | |
+ defined(DEBUG_BOND_DEFORMATION) ||\ | |
+ defined(DEBUG_SLIDER_FORCE_COMPONENTS) ||\ | |
+ defined(DEBUG_SLIDER_FORCE_TORQUE_AND_NEIGHBORS) ||\ | |
+ defined(DEBUG_SLIDER_KINEMATICS) | |
+ printf("\n---- ITERATION %d ----\n", sim.iteration); | |
+#endif | |
+ | |
/*for (i=0; i<sim.N; i++) | |
printf("%d: vel = %f %f %f\n", i, | |
sim.sliders[i].vel.x, | |
t@@ -149,6 +157,10 @@ int main(int argc, char** argv) | |
// resolve slider-to-slider interaction | |
for (i=0; i<sim.N; i++) { | |
+#ifdef DEBUG_BOND_DEFORMATION | |
+ printf("\n-- Loop of slider %d (%p) --\n", | |
+ i, &sim.sliders[i]); | |
+#endif | |
slider_neighbor_interaction( | |
&sim.sliders[i], | |
t@@ -159,7 +171,8 @@ int main(int argc, char** argv) | |
#ifdef DEBUG_SLIDER_FORCE_TORQUE_AND_NEIGHBORS | |
int j; | |
- printf("main.c: Slider %d: F = %f %f %f, T = %f %f %f, mass = %f, … | |
+ printf(" main.c: Slider %d:\n\tF = %f %f %f\n" | |
+ "\tT = %f %f %f\n\tmass = %f\n\tcontacts = ", | |
i, | |
sim.sliders[i].force.x, | |
sim.sliders[i].force.y, | |
diff --git a/slidergrid/slider.c b/slidergrid/slider.c | |
t@@ -41,7 +41,7 @@ void initialize_slider_values(slider* s) | |
for (i=0; i<MAX_NEIGHBORS; i++) { | |
s->neighbors[i] = -1; | |
s->neighbor_distance[i] = zeroes_float3(); | |
- s->neighbor_relative_distance_displacement[i] = zeroes_float3(); | |
+ s->neighbor_relative_distance_displacement[i] = 0.0; | |
s->neighbor_relative_distance_velocity[i] = zeroes_float3(); | |
s->neighbor_relative_tangential_displacement[i] = zeroes_float3(); | |
s->neighbor_relative_tangential_velocity[i] = zeroes_float3(); | |
t@@ -143,6 +143,17 @@ void bond_parallel_deformation(slider* s1, const slider s… | |
// unit vector pointing from neighbor (s2) to slider s1 | |
const Float3 n = divide_float3_scalar(dist, dist_norm); | |
+#ifdef DEBUG_BOND_DEFORMATION | |
+ printf("\tdist = %f %f %f\n\tdist_norm = %f\n\tn = %f %f %f\n", | |
+ dist.x, | |
+ dist.y, | |
+ dist.z, | |
+ dist_norm, | |
+ n.x, | |
+ n.y, | |
+ n.z); | |
+#endif | |
+ | |
// relative contact interface velocity w/o rolling | |
const Float3 vel_linear = subtract_float3(s1->vel, s2.vel); | |
t@@ -165,12 +176,11 @@ void bond_parallel_deformation(slider* s1, const slider … | |
// total relative displacement in inter-slider distance | |
if (iteration == 0) | |
- s1->neighbor_relative_distance_displacement[idx_neighbor] = ddist; | |
- else | |
s1->neighbor_relative_distance_displacement[idx_neighbor] = | |
- add_float3( | |
- s1->neighbor_relative_distance_displacement[idx_neighbor], | |
- ddist); | |
+ dot_float3(n, ddist); | |
+ else | |
+ s1->neighbor_relative_distance_displacement[idx_neighbor] += | |
+ dot_float3(n, ddist); | |
// total relative displacement in inter-slider distance | |
s1->neighbor_relative_distance_velocity[idx_neighbor] = | |
t@@ -254,13 +264,17 @@ void bond_deformation(slider* s1, const slider s2, | |
const int idx_neighbor, const int iteration, const Float dt) | |
{ | |
bond_parallel_deformation(s1, s2, idx_neighbor, iteration); | |
- bond_normal_deformation(s1, s2, idx_neighbor, iteration, dt); | |
+ //bond_normal_deformation(s1, s2, idx_neighbor, iteration, dt); | |
} | |
void bond_parallel_kelvin_voigt(slider* s1, const slider s2, | |
const int idx_neighbor) | |
{ | |
+ // unit vector pointing from neighbor (s2) to slider s1 | |
+ const Float3 n = divide_float3_scalar(s1->neighbor_distance[idx_neighbor], | |
+ norm_float3(s1->neighbor_distance[idx_neighbor])); | |
+ | |
// determine the bond-parallel KV stiffness from the harmonic mean. | |
// differs from Potyondy & Stack 2004, eq. 6. | |
const Float bond_parallel_kv_stiffness = | |
t@@ -276,8 +290,9 @@ void bond_parallel_kelvin_voigt(slider* s1, const slider s… | |
// bond-parallel Kelvin-Voigt elasticity | |
const Float3 f_n_elastic = | |
- multiply_scalar_float3(bond_parallel_kv_stiffness, | |
- s1->neighbor_relative_distance_displacement[idx_neighbor]); | |
+ multiply_scalar_float3(bond_parallel_kv_stiffness * | |
+ s1->neighbor_relative_distance_displacement[idx_neighbor], | |
+ n); | |
// bond-parallel Kelvin-Voigt viscosity | |
const Float3 f_n_viscous = | |
t@@ -292,8 +307,12 @@ void bond_parallel_kelvin_voigt(slider* s1, const slider … | |
s1->force = add_float3(s1->force, f_n); | |
#ifdef DEBUG_SLIDER_FORCE_COMPONENTS | |
- printf("slider_interaction KV-parallel: f_n = %f %f %f, " | |
- "f_n_elastic = %f %f %f, f_n_viscous = %f %f %f\n", | |
+ printf(" slider_interaction KV-parallel:\n" | |
+ "\tn = %f %f %f\n\tf_n = %f %f %f\n\t" | |
+ "f_n_elastic = %f %f %f\n\tf_n_viscous = %f %f %f\n", | |
+ n.x, | |
+ n.y, | |
+ n.z, | |
f_n.x, | |
f_n.y, | |
f_n.z, | |
t@@ -354,8 +373,9 @@ void bond_shear_kelvin_voigt(slider* s1, const slider s2, | |
f_t)));*/ | |
#ifdef DEBUG_SLIDER_FORCE_COMPONENTS | |
- printf("slider_interaction KV-shear: f_t = %f %f %f, torque = %f %f %f, " | |
- "f_t_elastic = %f %f %f, f_t_viscous = %f %f %f\n", | |
+ printf(" slider_interaction KV-shear:\n\tf_t = %f %f %f\n" | |
+ "\ttorque = %f %f %f\n\t" | |
+ "f_t_elastic = %f %f %f\n\tf_t_viscous = %f %f %f\n", | |
f_t.x, | |
f_t.y, | |
f_t.z, | |
t@@ -376,7 +396,7 @@ void bond_shear_kelvin_voigt(slider* s1, const slider s2, | |
void slider_interaction(slider* s1, const slider s2, const int idx_neighbor) | |
{ | |
bond_parallel_kelvin_voigt(s1, s2, idx_neighbor); | |
- //bond_shear_kelvin_voigt(s1, s2, idx_neighbor); | |
+ bond_shear_kelvin_voigt(s1, s2, idx_neighbor); | |
} | |
t@@ -391,32 +411,21 @@ void slider_neighbor_interaction( | |
int idx_neighbor; | |
for (idx_neighbor=0; idx_neighbor<MAX_NEIGHBORS; idx_neighbor++) { | |
- // reset sum of forces and torques on slider | |
- /*s->force.x = 0.; | |
- s->force.y = 0.; | |
- s->force.z = 0.; | |
- s->torque.x = 0.; | |
- s->torque.y = 0.; | |
- s->torque.z = 0.;*/ | |
- | |
if (s->neighbors[idx_neighbor] != -1) { | |
+#ifdef DEBUG_BOND_DEFORMATION | |
+ printf("%p = %d:\n", s, idx_neighbor); | |
+#endif | |
bond_deformation( | |
s, sliders[s->neighbors[idx_neighbor]], | |
idx_neighbor, iteration, dt); | |
#ifdef DEBUG_BOND_DEFORMATION | |
- int j; | |
- for (j=0; j<MAX_NEIGHBORS; j++) | |
- printf("%p = %d:\n" | |
- "\trel_dist_disp = %f %f %f\n" | |
+ printf("\trel_dist_disp = %f \n" | |
"\trel_dist_vel = %f %f %f\n" | |
"\trel_tan_disp = %f %f %f\n" | |
"\trel_tan_vel = %f %f %f\n", | |
- s, idx_neighbor, | |
- s->neighbor_relative_distance_displacement[idx_neighbor].x, | |
- s->neighbor_relative_distance_displacement[idx_neighbor].y, | |
- s->neighbor_relative_distance_displacement[idx_neighbor].z, | |
+ s->neighbor_relative_distance_displacement[idx_neighbor], | |
s->neighbor_relative_distance_velocity[idx_neighbor].x, | |
s->neighbor_relative_distance_velocity[idx_neighbor].y, | |
s->neighbor_relative_distance_velocity[idx_neighbor].z, | |
diff --git a/slidergrid/slider.h b/slidergrid/slider.h | |
t@@ -51,7 +51,7 @@ typedef struct { | |
// relative spatial movement between this slider and its neighbors | |
Float3 neighbor_distance[MAX_NEIGHBORS]; | |
- Float3 neighbor_relative_distance_displacement[MAX_NEIGHBORS]; | |
+ Float neighbor_relative_distance_displacement[MAX_NEIGHBORS]; | |
Float3 neighbor_relative_distance_velocity[MAX_NEIGHBORS]; | |
Float3 neighbor_relative_tangential_displacement[MAX_NEIGHBORS]; | |
Float3 neighbor_relative_tangential_velocity[MAX_NEIGHBORS]; |