| tgrains.c: fix and optimize grain-grain interaction - granular - granular dynam… | |
| git clone git://src.adamsgaard.dk/granular | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit b5116979a34a77b651a34b8e51665749e20dd2f0 | |
| parent f457ddb46d693870cf3f73a76057f606e94415ec | |
| Author: Anders Damsgaard <[email protected]> | |
| 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(-) | |
| --- | |
| diff --git a/grains.c b/grains.c | |
| t@@ -135,7 +135,7 @@ grains_interact(struct grain *g_i, struct grain *g_j, int … | |
| 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, in… | |
| 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… | |
| 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_… | |
| + g_i->contacts[ic].tandisp[d] += (v_t_ij[d] | |
| + - u_t_dot_v_ij * r_ij[d] | |
| + / (r… | |
| + * dt; | |
| free(angvel_cross_r_ij); | |
| free(f_t_cross_r_ij); |