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);