tenable shear resisting forces - 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 0098826894734f6e3f5db2e76a707860f42c8c7e
 (DIR) parent bb119cc1c3bf9c0fe083b7137eadd76e39f0d0f5
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Tue,  5 Apr 2016 14:16:13 -0700
       
       enable shear resisting forces
       
       Diffstat:
         M slidergrid/main.c                   |       3 ++-
         M slidergrid/slider.c                 |      47 ++++++++++++++++---------------
         M slidergrid/slider.h                 |       3 ++-
         M tests/elasticity/normal.c           |       2 +-
       
       4 files changed, 29 insertions(+), 26 deletions(-)
       ---
 (DIR) diff --git a/slidergrid/main.c b/slidergrid/main.c
       t@@ -154,7 +154,8 @@ int main(int argc, char** argv)
                            &sim.sliders[i],
                            sim.sliders,
                            sim.N,
       -                    sim.iteration);
       +                    sim.iteration,
       +                    sim.dt);
        
        #ifdef DEBUG_SLIDER_FORCE_TORQUE_AND_NEIGHBORS
                    int j;
 (DIR) diff --git a/slidergrid/slider.c b/slidergrid/slider.c
       t@@ -251,10 +251,10 @@ void bond_normal_deformation(slider* s1, const slider s2,
        
        // Find the bond deformation
        void bond_deformation(slider* s1, const slider s2,
       -        const int idx_neighbor, const int iteration)
       +        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);
       +    bond_normal_deformation(s1, s2, idx_neighbor, iteration, dt);
        }
        
        
       t@@ -322,34 +322,34 @@ void bond_shear_kelvin_voigt(slider* s1, const slider s2,
                 + 1.0e-40);
        
            // bond-parallel Kelvin-Voigt elasticity
       -    const Float3 f_n_elastic =
       +    const Float3 f_t_elastic =
                multiply_scalar_float3(bond_shear_kv_stiffness,
       -                s1->neighbor_relative_distance_displacement[idx_neighbor]);
       +                s1->neighbor_relative_tangential_displacement[idx_neighbor]);
        
            // bond-parallel Kelvin-Voigt viscosity
       -    const Float3 f_n_viscous =
       +    const Float3 f_t_viscous =
                multiply_scalar_float3(bond_shear_kv_viscosity,
       -                s1->neighbor_relative_distance_velocity[idx_neighbor]);
       +                s1->neighbor_relative_tangential_velocity[idx_neighbor]);
        
            // bond-parallel Kelvin-Voigt force, counteracts tension and compression
       -    const Float3 f_n = multiply_scalar_float3(-1.0,
       -            add_float3(f_n_elastic, f_n_viscous));
       +    const Float3 f_t = multiply_scalar_float3(-1.0,
       +            add_float3(f_t_elastic, f_t_viscous));
        
            // add bond-parallel Kelvin-Voigt force to sum of forces on slider
       -    s1->force = add_float3(s1->force, f_n);
       +    s1->force = add_float3(s1->force, f_t);
        
        #ifdef DEBUG_SLIDER_FORCE_COMPONENTS
       -    printf("slider_interaction KV-shear: f_n = %f %f %f, "
       -            "f_n_elastic = %f %f %f, f_n_viscous = %f %f %f\n",
       -            f_n.x,
       -            f_n.y,
       -            f_n.z,
       -            f_n_elastic.x,
       -            f_n_elastic.y,
       -            f_n_elastic.z,
       -            f_n_viscous.x,
       -            f_n_viscous.y,
       -            f_n_viscous.z);
       +    printf("slider_interaction KV-shear: f_t = %f %f %f, "
       +            "f_t_elastic = %f %f %f, f_t_viscous = %f %f %f\n",
       +            f_t.x,
       +            f_t.y,
       +            f_t.z,
       +            f_t_elastic.x,
       +            f_t_elastic.y,
       +            f_t_elastic.z,
       +            f_t_viscous.x,
       +            f_t_viscous.y,
       +            f_t_viscous.z);
        #endif
        }
        
       t@@ -358,7 +358,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_normal_kelvin_voigt(s1, s2, idx_neighbor);
       +    bond_shear_kelvin_voigt(s1, s2, idx_neighbor);
        }
        
        
       t@@ -367,7 +367,8 @@ void slider_neighbor_interaction(
                slider* s,
                const slider* sliders,
                const int N,
       -        const int iteration)
       +        const int iteration,
       +        const Float dt)
        {
            int idx_neighbor;
            for (idx_neighbor=0; idx_neighbor<MAX_NEIGHBORS; idx_neighbor++) {
       t@@ -384,7 +385,7 @@ void slider_neighbor_interaction(
        
                    bond_deformation(
                            s, sliders[s->neighbors[idx_neighbor]],
       -                    idx_neighbor, iteration);
       +                    idx_neighbor, iteration, dt);
        
                    /*printf("- %d: rel_disp = %f %f %f\n",
                            idx_neighbor, 
 (DIR) diff --git a/slidergrid/slider.h b/slidergrid/slider.h
       t@@ -69,7 +69,8 @@ void slider_neighbor_interaction(
                slider* s,
                const slider* sliders,
                const int N,
       -        const int iteration);
       +        const int iteration,
       +        const Float dt);
        
        void slider_viscous_damping(slider* s);
        void slider_nonviscous_damping(slider* s);
 (DIR) diff --git a/tests/elasticity/normal.c b/tests/elasticity/normal.c
       t@@ -39,7 +39,7 @@ simulation setup_simulation()
        
            // set temporal parameters
            sim.time = 0.0;
       -    sim.time_end = 1000.0;
       +    sim.time_end = 100.0;
            sim.file_interval = 1.0;
        
            return sim;