tgrains.c: fix and optimize grain-grain interaction - granular - granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/granular
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b5116979a34a77b651a34b8e51665749e20dd2f0
 (DIR) parent f457ddb46d693870cf3f73a76057f606e94415ec
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Thu, 22 Apr 2021 13:47:47 +0200
       
       grains.c: fix and optimize grain-grain interaction
       
       Diffstat:
         M grains.c                            |      16 +++++++++-------
       
       1 file changed, 9 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/grains.c b/grains.c
       t@@ -135,7 +135,7 @@ grains_interact(struct grain *g_i, struct grain *g_j, int ic, double dt)
                           d_i, d_j,
                           r_ij[3], r_ij_norm,
                       m_i, m_j, m_ij,
       -                   E_ij, nu_ij, mu_ij,
       +                   mu_ij,
                           gamma_n_ij, gamma_t_ij,
                       k_n_ij, k_t_ij, A_ij,
                           angvel_ij[3], u_t_dot_v_ij,
       t@@ -171,14 +171,14 @@ grains_interact(struct grain *g_i, struct grain *g_j, int ic, double dt)
                        v_t_ij[d] = v_ij[d] - v_n_ij[d] - 0.5 * angvel_cross_r_ij[d];
                }
        
       -        E_ij = fmin(g_i->youngs_modulus, g_j->youngs_modulus);
       -        nu_ij = fmin(g_i->poissons_ratio, g_j->poissons_ratio);
                mu_ij = fmin(g_i->friction_coeff, g_j->friction_coeff);
                gamma_n_ij = fmin(g_i->damping_n, g_j->damping_n);
                gamma_t_ij = fmin(g_i->damping_t, g_j->damping_t);
        
       -        k_n_ij = 2.0 / 3.0 * E_ij / (1.0 - pow(nu_ij, 2.0));
       -        k_t_ij = 2.0 * E_ij / (1.0 + nu_ij) * (2.0 - nu_ij);
       +        k_n_ij = fmin(grain_stiffness_normal(g_i),
       +                      grain_stiffness_normal(g_j));
       +        k_t_ij = fmin(grain_stiffness_tangential(g_i),
       +                      grain_stiffness_tangential(g_j));
        
                A_ij = sqrt(delta_ij) * sqrt(d_i * d_j / (2.0 * (d_i + d_j)));
        
       t@@ -204,8 +204,10 @@ grains_interact(struct grain *g_i, struct grain *g_j, int ic, double dt)
                g_i->contacts[ic].age += dt;
                u_t_dot_v_ij = dot(g_i->contacts[ic].tandisp, v_ij, 3);
                for (d = 0; d < 3; d++)
       -                g_i->contacts[ic].tandisp[d] += v_t_ij[d] * dt
       -                                              - u_t_dot_v_ij / (r_ij_norm * r_ij_norm);
       +                g_i->contacts[ic].tandisp[d] += (v_t_ij[d]
       +                                              - u_t_dot_v_ij * r_ij[d] 
       +                                                                          / (r_ij_norm * r_ij_norm))
       +                                                                          * dt;
        
                free(angvel_cross_r_ij);
                free(f_t_cross_r_ij);