← Back to team overview

yade-users team mailing list archive

Re: [Question #698493]: Spheres overlap in periodic simulations

 

Question #698493 on Yade changed:
https://answers.launchpad.net/yade/+question/698493

Description changed to:
Hello,

I am currently performing a simulation of an inclined flume that goes
across the X-axis with periodic walls on the sides(Y-axis). This runs
without any major concern mainly thanks to the help provided on this
website to many other users. However, when it comes to doing the post-
processing, I have noticed that when a sphere crosses the periodic
border the following thing occurs:

The sphere's Y-axis(width) coordinates do not restart despite being now
on the opposite side of the flume. Instead, they keep increasing "out of
the flume". This is not a big concern since this can be easily adjusted
on the post-processing and I'm aware this could be useful in other
scenarios. Nevertheless, When the sphere crosses the periodic border, it
seems that no contact is considered against those particles that did not
cross the periodic boundary(or did it more than once). This is observed
after manually calculating each contact overlap. When doing this,
spheres on the same "coordinates" do have normal overlaps but those who
are not on the same boundary have a huge range of overlap(up to one
radius) as if no interaction occurs.

Based on this I am curious if this could be a bug or if I am missing any contact law that would allow contact between particles that are not on the same "coordinates". 
Finally, I have attached a few code lines regarding the engines used and how I add the spheres. 
If any additional information is required, or if there are any suggestions(or ideas), I'd be delighted to read about it.
Best,

Andrés

Additional information:

How spheres are added:
(This is not really relevant, just to emphasize that I add spheres through  O.bodies.append(utils.sphere()) command. 

for i in np.arange(4*d,lr,2*d):
  for j in np.arange(d+hr,5*hr,2*d):
      for k in np.arange(-wc/2+3*d,wc/2-3*d,2*d):
          O.bodies.append(utils.sphere((i,k,j),radius=float(random.randint(int(100000*(d-disp)),int(100000*(d+disp))))/100000,material=sphereMat))


Engines:
O.engines=[
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()],allowBiggerThanPeriod=True),
   InteractionLoop(
#  handle sphere+sphere and box+sphere collisions
   [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
   [Ip2_ViscElMat_ViscElMat_ViscElPhys()],
   [Law2_ScGeom_ViscElPhys_Basic()]),
   NewtonIntegrator(gravity=(g*sin(slope),0,-g*cos(slope)), damping=0), #add gravity
   VTKRecorder(fileName=addrec+'3d-'+str(zeta)+'-vtk-',recorders=['all'],iterPeriod=it),
]

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.