tfix contact removal - granular - granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/granular
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit fce305fb77886ba66ae39544d7f829048ec3da3a
 (DIR) parent 01f75f59b3a0ddbaacdf66d98100c45300652fbd
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Fri, 23 Apr 2021 06:42:11 +0200
       
       fix contact removal
       
       Diffstat:
         M grain.c                             |       2 +-
         M simulation.c                        |       6 ++----
       
       2 files changed, 3 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/grain.c b/grain.c
       t@@ -355,7 +355,7 @@ grain_register_contact(struct grain *g, size_t i, size_t j,
        
                /* first pass: check if contact is already registered */
                for (ic = 0; ic < MAXCONTACTS; ic++)
       -                if (g->contacts[ic].j == j) {
       +                if (g->contacts[ic].active && g->contacts[ic].j == j) {
                                g->contacts[ic].overlap = overlap;
                                for (d = 0; d < 3; d++)
                                        g->contacts[ic].centerdist[d] = centerdist[d];
 (DIR) diff --git a/simulation.c b/simulation.c
       t@@ -139,8 +139,7 @@ sim_check_add_contact(struct simulation *sim, size_t i, size_t j)
                overlap = 0.5*(sim->grains[i].diameter + sim->grains[j].diameter)
                        - euclidean_norm(centerdist, 3);
        
       -        if (overlap > 0.0)
       -                grain_register_contact(&sim->grains[i], i, j, centerdist, overlap);
       +        grain_register_contact(&sim->grains[i], i, j, centerdist, overlap);
        }
        
        void
       t@@ -192,8 +191,7 @@ sim_resolve_interactions(struct simulation *sim)
        
                for (i = 0; i < sim->ng; i++)
                        for (ic = 0; ic < MAXCONTACTS; ic++)
       -                        if (sim->grains[i].contacts[ic].active &&
       -                            i < sim->grains[i].contacts[ic].j)
       +                        if (sim->grains[i].contacts[ic].active && i < sim->grains[i].contacts[ic].j)
                                        grains_interact(&sim->grains[i],
                                                        &sim->grains[sim->grains[i].contacts[ic].j],
                                                        ic, sim->dt);