strange facet-sphere behaviour

Bug #850864 reported by Bruno Chareyre on 2011-09-15
16
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Yade
Won't Fix
Medium
Unassigned

Bug Description

See https://answers.launchpad.net/yade/+question/171223

Spheres that are exactly on an edge between facets behave strangely. Maybe related to other (closed, but never solved) bugs in sphere-facet.

vadim (loginov-vadim-1987ad) wrote :

Not those spheres on the edge but all spheres when in contact with facet. I added some new info to the question

The bug holds for the spheres on the edge. For the other ones (or for
all when there is only one facet), there is no bug. See my reply in the
answer.

vadim (loginov-vadim-1987ad) wrote :

Not a bug

Anton Gladky (gladky-anton) wrote :

I think it is a bug. The script in the first message of this question [1]
shows, that spheres, which falling directly on the edges of 2 facets are having
higher velocities, than others.

One can guess, that in this very special case the edge-spheres, are interacting with both facets.
It should be fixed, because it is not quite correct.

[1] https://answers.launchpad.net/yade/+question/171223

Changed in yade:
status: New → Confirmed
importance: Undecided → Medium
Bruno Chareyre (bruno-chareyre) wrote :

I agree Anton. The question is how to fix that?
It needs knowledge of facets connectivity I think, the same kind of problems I got to tackle for chained cylinder. It is not quite well supported by design.

In the cylinder-sphere case, interactions have additional data (e.g. an additional id3) and the connectivity of cylinders is stored in static members of the class ChainedCylinder. (https://blueprints.launchpad.net/yade/+spec/chained-bodies)

Another way would be to define a collection of facet as a unique body to make sure there is only one contact (the problem is there can be multiple contacts on concave shapes...). It would need to assign multiple bboxes to a single body, too.

Can you imagine simpler fix?

Any thought on this question can be usefull since we (in Grenoble) want to implement deformable membranes on this basis one day.

Klaus Thoeni (klaus.thoeni) wrote :

Hi guys,

have a look at the attached script. There is for sure a problem when spheres collide with facets. However, the behaviour is very strange and the problem does not appear always. If you have a look at the plot of the script you will see that the problem appears at the fourth collision. Actually I tried to play as well with the damping coefficient and the time step and for some configurations there is no problem (e.g. use dc=0.1).

In addition you can change the parameters in the script and you can see that the behaviour is very strange if the sphere collides with corners as well (e.g. use b=0, change z...).

Well, this is very strange, any comments? And regarding this bug, I think we should change the priority and fix it is asap.

Cheers

Klaus

Bruno Chareyre (bruno-chareyre) wrote :

Thanks Klaus,
I think the reason for this behaviour is relatively clear: if the contact is exactly on an edge, numerical noise will decide if there is a contact with one or two facets, and it can change randomly during the impact, hence giving unexpectedly high bouncing.

The problem is it is not an easy thing to fix in the current facet implementation. The only way I can see is to implement chained facets like there are chained cylinders, defining the connectivity of facets with the possibility to track interactions moving from one facet to the other. We can change the priority of the bug but more important is the manpower for such implementation. Any volunteer?

Klaus Thoeni (klaus.thoeni) wrote :

Hi Bruno, I might have found a student which can work on it. What do you think? Is it tricky? I didn't have a look at it since last time we talked about it and it seams the bug is still existing. Let me know.

Anton Gladky (gladky-anton) wrote :

Dear developers,

I was trying to fix the bug, but I have got a problem, which I cannot solve for the moment.
As you know, problem appears, when the sphere touches (penetrates) on the edge of 2 or
more facets and gets from all of them the forces. Which is not quite correct.

I was trying to implement the following fix. Facets are united in "chains". The chain consists of
the facets, which are in the common case building a "surface". So the sphere can interact at the same
time only with 1 facet of the chain. All other interactions of the sphere with other elements of the
same chain are switching off.

The fix is working relatively good for quasi-static tasks. But when a sphere rolls over
the surface, it "falls" down after the first facet. Because on the edge it should take an additional
force from the "next" facet, which is not happens. That is what we tried to avoid.

I hope you understood, what I mean. If not, let me know, I will try to explain by other words.
It would be interesting to check other DEM-codes, how this problem is solved there (if it is solved).
Also comments and suggestions are welcome.

Thank you.

Anton

The only solution I can imagine is to define an additional entity: the edge.
Then, the object can touch facet 1, facet 2, or the edge between them.
In the situation you describe, the orientation of the contact normal would thus change progressively from n1 to n2 (n1/n2 the normals of facet1/facet2) while the sphere roll on the edge. The current normal being defined by the line joining the sphere's center and the edge.

Hi Anton,

some time ago I had a quick look into that problem as well. Actually I
mentioned the problem to Dion from ESyS-Particle and he told me that they are
solving this problem by distinguishing contacts with vertices, edges and
facets. I think the sequence of checking is important too.

You are familiar with ESys, aren't you? You could ask Dion where exactly the
code for this problem is.

HTH and thanks for looking at this problem!

Klaus

On Tue, 18 Sep 2012 03:41:08 AM you wrote:
> Dear developers,
>
> I was trying to fix the bug, but I have got a problem, which I cannot solve
> for the moment. As you know, problem appears, when the sphere touches
> (penetrates) on the edge of 2 or more facets and gets from all of them the
> forces. Which is not quite correct.
>
> I was trying to implement the following fix. Facets are united in "chains".
> The chain consists of the facets, which are in the common case building a
> "surface". So the sphere can interact at the same time only with 1 facet
> of the chain. All other interactions of the sphere with other elements of
> the same chain are switching off.
>
> The fix is working relatively good for quasi-static tasks. But when a
> sphere rolls over the surface, it "falls" down after the first facet.
> Because on the edge it should take an additional force from the "next"
> facet, which is not happens. That is what we tried to avoid.
>
> I hope you understood, what I mean. If not, let me know, I will try to
> explain by other words. It would be interesting to check other DEM-codes,
> how this problem is solved there (if it is solved). Also comments and
> suggestions are welcome.
>
> Thank you.
>
> Anton

That's right. You need not only edges but also vertices.
For the contact formulation, I think there is no big problems. I'm sure PFC manual or other papers are giving the equations.
The implementation in Yade is the more tricky part.

FYI, François Kneib should work on a problem very similar in the coming months. The difference is that the geometry of the surface will modelized by thick facets, cylinders for the edges and spheres for the vertices (minkowsky-type geometry). It only changes the contact formulation. The connectivity and other things are strictly the same.

Anton Gladky (gladky-anton) wrote :

Thanks all for opinions!

I do not have enough time/resources to work on the problem
in the nearest time. So I removed my test-code for a while.

The diff can be seen here in commit 193b93 [1].

Thanks,

Anton

[1] https://github.com/yade/trunk/commit/193b93447cd7c957a0cc34c15983f88bf5c19c89

Closing, since it will eventually be solved in a brand new set of classes. The existing facets will keep this "feature" as it is inherent to the logic of independant facets.

Changed in yade:
status: Confirmed → Won't Fix

is there any plan when this new net of classes will be implemented?

Hello Eugen,

I have a plan to implement it in a few months time (summer or autumn, most
likely not spring). Would it be ok for you, or do you need something
earlier?
If my plan changed, I will inform you :-)
cheers
Jan

2013/3/27 Eugen Kubowsky <email address hidden>

> is there any plan when this new net of classes will be implemented?
>
> --
> You received this bug notification because you are a member of Yade
> developers, which is subscribed to Yade.
> https://bugs.launchpad.net/bugs/850864
>
> Title:
> strange facet-sphere behaviour
>
> Status in Yet Another Dynamic Engine:
> Won't Fix
>
> Bug description:
> See https://answers.launchpad.net/yade/+question/171223
>
> Spheres that are exactly on an edge between facets behave strangely.
> Maybe related to other (closed, but never solved) bugs in sphere-
> facet.
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/yade/+bug/850864/+subscriptions
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-dev
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-dev
> More help : https://help.launchpad.net/ListHelp
>

Klaus Thoeni (klaus.thoeni) wrote :

Hi guys,

I just found this paper:

http://onlinelibrary.wiley.com/doi/10.1002/nme.4487/abstract

Maybe it could be one way to implement the contact detection between spheres and facets in yade.

What do you think?

Klaus

Hi Klaus,
Thanks for the pointer.
After a quick look, it has strong similarities with what we are already planing (and what colleagues have implemented here in SDEC), the key feature being mutual exclusion of contacts on node/edge/facet based on a connectivity table.
The main difficulties are in the practical implementation more than in the conceptual algorithm.
For instance, the article present a global loop on interactions in order to eliminate mutually exclusive contacts. Fine, but there is currently no place for such loop in Yade. Instead, we have to split this loop into many local checks at each contact, so that the same series of checks is done at the end of the day.

One very important thing not adressed in the paper (or my look was too quick) is the fact that the same contact can persist while changing status during a tangent motion: sphere-edge1 -> sphere-facet -> sphere-edge2 - etc. This is really the tricky part.

Another note: the local checks for exclusion are a lot easier now, since interactions are stored in bodies. François Kneib used this property for the grid model.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers