← Back to team overview

yade-users team mailing list archive

Re: Periodic Boundary Conditions in DEM



Sorry for late reply, I'm buried under tons of work currently :) (The
lattice model for yade ;)

Yes, you should investigate the collider. I think it is possible to make
that work without ghost spheres.

The collider works in following way:

- it keeps three one-dimensional lists that hold the information where
bounding volume of each sphere starts, and ends in each of three x,y,z

- those lists are updated on each time step, to keep them spatially

- in some point in the list a bounding volume is marked to have a
beginning, in some other point in the list a bounding volume is marked
to have a spatial end. If between the start and end of this bounding
volume any other bounding volume starts (or ends) we have a possible
interaction between the two.

- if the same possible interactions happens on all three lists (x,y,z)
between the same two bounding volumes, then we are sure that they are
corssing each other, so interaction for them is created.

- this interaction is later filled to contain iteraction data, by class 
  InteractingSphere2InteractingSphere4SpheresContactGeometry (it is an
  EngineeUnit called by MetaEngine)

What you have to do:

modify the collider to be boundary-aware. So that the list that it keeps
is wrapped. This can be as simple as checking if x>periodic_boundary,
then check 'bounding volune start-end' with elementes from the x<0
(beginning of the list). Then all the "periodic boundary" interactions
will be detected automatically together with normal interactions.

Now that you have the interactions detected you have to correctly
calculate them. You have to modify
InteractingSphere2InteractingSphere4SpheresContactGeometry, so that it
will detect the case that a sphere is interacting with another sphere
which is "far far away". Then you will simply adjust the x-coordinate
(or other coordinates) only for the purposes of calculating this single
interaction. For later calculations the original coordinates can be
retained. This will create a valid periodic boundary interaction. And
resultant forces acting on the spheres will be calculated correctly.

And finally you will have to add some kind of BoundaryWrapper which
will move spheres if their centers "cross" the boundary. Otherwise all
interactions and calculations will work, until a sphere somehow gets
"pushed off" the limits. This will be a new class, say, StandAloneEngine.

Please tell if you need more help.

Janek Kozicki                                                         |
Yade-users mailing list