timprove debugging output, save bond-parallel displacement as scalar - 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 dea4dc1c1b2f140a281656f0f58b35625d90d027
 (DIR) parent 3246bf804bdc996d1bd737dbeb3acadad09fae2d
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       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(-)
       ---
 (DIR) 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 individual 
        // 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
 (DIR) 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, contacts = ",
       +            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,
 (DIR) 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 s2,
            // 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 s2,
        
            // 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 s2,
        
            // 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 s2,
            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,
 (DIR) 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];