# Spheres with no physical contact but have interactions

Hi,
I'm trying to generate a set of spheres which are arranged along a spherical surface based on Fibonacci algorithm (see MWE), these spheres generally have no physical contact with each other. However, after run one step (or more), some of them have interactions but there is no physical overlap for these balls. Here is the MWE, the problematic balls are shown in red color.
##################
import math
import numpy as np
import random
from random import gauss

numBalls=500
Gl1_Sphere.quality=3
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
NewtonIntegrator(damping=0.4),
]

rnd = random.random() * numBalls
offset = 2. / numBalls
increment = math.pi * (3. - math.sqrt(5.))
ballsList=[]
for i in range(numBalls):
y = ((i * offset) - 1) + (offset / 2);
r = math.sqrt(1 - pow(y, 2))

phi = ((i + rnd) % numBalls) * increment

x = math.cos(phi) * r
z = math.sin(phi) * r
Center =1.05 * np.array([x, y, z])
ballsList.append(
O.bodies.append(sphere((Center, Center, Center), radius=0.05, color=[1, 1, 1])))

O.step()
OverlapBalls=set()
def findOverlapBalls():
for i in ballsList:
for j in ballsList:
if i>=j:
continue
else:
if O.interactions.has(i,j):
findOverlapBalls()
print 'There are',len(OverlapBalls),'balls which have interactions'

def changeColor():
for i in OverlapBalls:
O.bodies[i].shape.color=[1,0,0]

changeColor()
###############
My Yade version is 2018.02b on Ubuntu 18.04.
So, why these balls with no contact but have interactions?

Thanks
Leonard

## Question information

Language:
English Edit question
Status:
Solved
For:
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2019-10-14
Last query:
2019-10-14
2019-10-12 Jan Stránský (honzik) said on 2019-10-12: #1

Hi Leonard,

see  (parts about collision detection) and change
###
if O.interactions.has(i,j):
###

to

###
if O.interactions.has(i,j):
if O.interactions[i,j].isReal:
###

In Yade, interactions are created by a collider, which creates interactions wherever there is a "potential of physical interactions", i.e. when bounding boxes overlap (the approximate collision detection phase).
It is then a work of Ig2/Law2 to do exact contact detection, "marking" the interaction as real if there is a "physical overlap" or not.

cheers
Jan

 Leonard (z2521899293) said on 2019-10-14: #2

Thanks Jan Stránský, that solved my question.