Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-31 Thread Bruno Chareyre
Good to hear!
Thank you for reporting, it made me spot the problem with clump.

Bruno

On 31/01/12 00:59, Klaus Thoeni wrote:
 Hi Bruno,

 thanks for having a look at my scripts!

 I know that the clump is disappearing sometimes on the display but the 
 simulation itself seems to be ok so I never had a closer look at it. But it 
 was good you did ;-)

 I just had a look at rev 3010 and now I got some speed up too which is great. 
 I will get rid of the GravityEngine and just use NewtonIntegrator::gravity.

 Thanks again,

 Klaus


 On Tue, 31 Jan 2012 08:02:30 AM Bruno Chareyre wrote:
   (Don't use Newton::gravity though, it breaks something in your

 script and I'm still investigating).
 It is not related to the new Newton::gravity, it only revealed another
 bug in eigen's quaternions.
 In your script, Klaus, the clump sometimes disappear, did you notice? It
 is because the axisAngle conversion of clump members orientation is nan
 from time to time
 Actually, no... The nan quaternions break the display but they seem to
 be harmless. The problem was https://bugs.launchpad.net/yade/+bug/923929
 It is fixed in bzr3009. Below is what I get with your 02_net-wall_par.py
 script Klaus (-j2, default collider setting, for 3009 this is without
 gravity engine).
 The speedup is only 25%. As said before, it can't be much better since
 the collider takes only 14% of total time initially.
 Still, all engines are a bit faster. :)

 Bruno


 bzr2999
 Name
 Count TimeRel. time
 ---
  ForceResetter 
20050
 7068191us3.38%
 InsertionSortCollider  1855
 29429129us   14.06%
 InteractionLoop   20050
 92135400us   44.03%
 gravity 20050
 23556447us   11.26%
 newton  20050
 57063846us   27.27%
 TOTAL
 209253016us  100.00%

 bzr3009
 Name
 Count TimeRel. time
 ---
  ForceResetter 
20050
 7087997us4.68%
 InsertionSortCollider   634
 11046290us7.29%
 InteractionLoop   20050
 80287582us   52.98%
 newton  20050
 53130390us   35.06%
 TOTAL
 151552261us  100.00%
 ___
 Mailing list: https://launchpad.net/~yade-dev
 Post to : yade-dev@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-dev
 More help   : https://help.launchpad.net/ListHelp



-- 
___
Bruno Chareyre
Associate Professor
ENSE³ - Grenoble INP
11, rue des Mathématiques
BP 46
38402 St Martin d'Hères, France
Tél : +33 4 56 52 86 21
Fax : +33 4 76 82 70 43



___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-31 Thread Anton Gladky
I have got also a good speedup!

Just need to test it a little more, compare results etc.

Also we need to think about jumping spheres problem. For example, we
could create one more container in the scene, for example, where will
be pointers on just created spheres... Anyway, I need to have a
better look into the new collider-code to understand, how it actually
works.

Thanks!

Anton

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-31 Thread Bruno Chareyre

 I have got also a good speedup!

Very good. :)
I was not sure it would improve in such granular flow case (my mind
was more on quasi-static situations when working on that).

 Just need to test it a little more, compare results etc.

Remember there is a wiki page to report results. I'm stilll not sure how
to define the default parameters.
 Also we need to think about jumping spheres problem. For example, we
 could create one more container in the scene, for example, where will
 be pointers on just created spheres...
It should not be difficult to set dirty=true (or something like that)
each time a body is added to scene. It would trigger the collider
automatically, and it would work always. How to input spheres the
optimal way is a different question, and I must confess I didn't expect
people would delete/create bodies at such rates as in your script
(interesting script btw).
I think optimality of such feature should be handled in sphere factory
(and the additional container could be there to), it is not really the
collider's business to find free slots for new spheres.

  Anyway, I need to have a
 better look into the new collider-code to understand, how it actually
 works.
And I need to document it too... I didn't want to spend time for
documentation before positive feedback on the functionality. It is not
really different as before in fact. The main difference is that striding
is based on exact displacements instead of velocity-based estimates, but
it does not explain everything. A good part of the speedup is also in
also due to little changes here and there, removing useless operations
in the bottlenecks (special thanks to valgrind/callgrind/kcachegrind). 

Bruno


___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre
Hi,

Thanks for the script Anton. This is what I found:
- A crash sometimes (not very often) occurs in GLrender(), it is
apparently due to deleted body. i could reproduce it before and after
bzr3001. I never crashed without opening the GL view.
- There was a typo in the modified probe(), it is fixed. There was also
the problem of comparing the ref. positions of aabb instead of current
position of body, it is fixed too.
- One problem in your script it there are no spheres at startup, hence
the collider can't determine a verletDist and then it runs at each
iteration, which take a lot of time. I got a significant speedup by
setting verletDist explicitely to something positive (e.g. 0.002). I
added a message warning the user at runtime when the collider fails
finding a valid verletDist.
- I saved a bit more cpu by removing gravityEngine and using
Newton::gravity instead.

I'm sending the fixed script.
Please let me know how bzr3007 works in your true working scripts.

Klaus,
I found that clumps were still using an old function from Newton. As a
consequence, striding was broken and the collider was acting at each
iteration. I get speedup on your script with bzr3007, give it a try.
(Don't use Newton::gravity though, it breaks something in your script
and I'm still investigating).

Bruno



On 27/01/12 21:03, Anton Gladky wrote:
 Hi, Bruno,
 I have prepared a small test-script from examples/packs.py. It is
 similar to one, which is crashes in my case,I could not catch a
 crash with this test-script, but it seems, BoxFactory creates new
 spheres not in the right places:some of particles are jumping, it
 can be caused by the initial overlapping.
 Anton



 On Fri, Jan 27, 2012 at 7:43 AM, Anton Gladky gladky.an...@gmail.com wrote:
 Ok, I have got a segmentation fault.

 Will try to prepare a simple test-script.

 Anton



 On Thu, Jan 26, 2012 at 12:22 PM, Bruno Chareyre
 bruno.chare...@hmg.inpg.fr wrote:
 Could you please try bzr3006?

 B
 I have tried one of my working scripts and the results are not good.
 The new version is dramatically slower. Not sure what is the reason,
 but it seems
 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.

 Bruno, is there an opportunity to use both algorithms: old and new one?

 It is very difficult to keep both logics Anton, it would combine
 disadvantages from each side. I should understand what the problem is in
 SpheresFactory and fix it. Since I didn't touch this code, I'm really
 curious about the problem. Are you doing operations in SpheresFactory at
 runtime?
 Could you send an example script?

 Bruno



 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp


 --
 ___
 Bruno Chareyre
 Associate Professor
 ENSE³ - Grenoble INP
 11, rue des Mathématiques
 BP 46
 38402 St Martin d'Hères, France
 Tél : +33 4 56 52 86 21
 Fax : +33 4 76 82 70 43
 


 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp


 ___
 Mailing list: https://launchpad.net/~yade-dev
 Post to : yade-dev@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-dev
 More help   : https://help.launchpad.net/ListHelp


-- 
___
Bruno Chareyre
Associate Professor
ENSE³ - Grenoble INP
11, rue des Mathématiques
BP 46
38402 St Martin d'Hères, France
Tél : +33 4 56 52 86 21
Fax : +33 4 76 82 70 43


#!/usr/bin/python
# -*- coding: utf-8 -*-
from yade import pack,ymport,export,log,geom,bodiesHandling
import math

 This script demonstrates how to use 2 components of creating packings:

1. packing generators pack.regularHexa, pack.regularOrtho etc. generate vertices and filter them
using predicates. (Note that this will be enhanced to irregular packings in the future)

2. predicates are functors returning True/False for points that are given by the packing generator.
Their names are mostly self-explanatory, see their docstrings for meaning of their arguments.

Predicates can be combined using set arithmetics to get their Intersection (p1  p2), union (p1 | p2),
difference (p1 - p2) and symmetric difference (XOR, p1 ^ p2). This is demontrated on the head (which
has sphere taken off at the back and also a notch) and the body (with cylidrical hole inside).



rad,gap=.15,.02

#Add material
O.materials.append(FrictMat(young=10e9,poisson=.25,frictionAngle=0.5,density=1e3))

#Parameters, which will be passed into spheres and facets creators
kw={'material':0}
kwBoxes={'color':[1,0,0],'wire':False,'dynamic':False,'material':0}

Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre

   (Don't use Newton::gravity though, it breaks something in your
 script and I'm still investigating).

It is not related to the new Newton::gravity, it only revealed another
bug in eigen's quaternions.
In your script, Klaus, the clump sometimes disappear, did you notice? It
is because the axisAngle conversion of clump members orientation is nan
from time to time (especially just after impact, when the roation of the
clump is very small).
For some reasons, this feature breaks the time integration when the
gravity engine is removed and replaced by Newton.gravity=-9.81.
Adding a GravityEngine in the loop with gravity=(0,0,0) fixes the
problem, although it doesn't touch orientation at all...
I'm really scared of eigen's quaternions. It's not the first time they
give weird behavior.

The conclusion is: if you have problems with clumps rotations, add a
null gravity engine in your simulation... :(

Bruno




___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Anton Gladky
Hi Bruno,

 - A crash sometimes (not very often) occurs in GLrender(), it is apparently 
 due to deleted body. i could reproduce it before and after bzr3001. I never 
 crashed without opening the GL view.

I know about the problem with OpenGL-crashes. But for working
simulations I do not use graphic at all. Anyway I have catched the
backtrace from the crash (rev. 3007):

===
python: /usr/include/boost/smart_ptr/shared_ptr.hpp:418: T*
boost::shared_ptr template-parameter-1-1 ::operator-() const
[with T = Bound]: Assertion `px != 0' failed.
===

Please, have a look.

 - One problem in your script it there are no spheres at startup, hence the
 collider can't determine a verletDist and then it runs at each iteration,
 which take a lot of time. I got a significant speedup by setting verletDist
 explicitely to something positive (e.g. 0.002). I added a message warning
 the user at runtime when the collider fails finding a valid verletDist.
Ok

 - I saved a bit more cpu by removing gravityEngine and using Newton::gravity
 instead.
Thanks for the tip. Will try on my working scripts.


Anton



On Mon, Jan 30, 2012 at 1:41 PM, Bruno Chareyre
bruno.chare...@hmg.inpg.fr wrote:
 Hi,

 Thanks for the script Anton. This is what I found:
 - A crash sometimes (not very often) occurs in GLrender(), it is apparently
 due to deleted body. i could reproduce it before and after bzr3001. I never
 crashed without opening the GL view.
 - There was a typo in the modified probe(), it is fixed. There was also the
 problem of comparing the ref. positions of aabb instead of current position
 of body, it is fixed too.
 - One problem in your script it there are no spheres at startup, hence the
 collider can't determine a verletDist and then it runs at each iteration,
 which take a lot of time. I got a significant speedup by setting verletDist
 explicitely to something positive (e.g. 0.002). I added a message warning
 the user at runtime when the collider fails finding a valid verletDist.
 - I saved a bit more cpu by removing gravityEngine and using Newton::gravity
 instead.

 I'm sending the fixed script.
 Please let me know how bzr3007 works in your true working scripts.

 Klaus,
 I found that clumps were still using an old function from Newton. As a
 consequence, striding was broken and the collider was acting at each
 iteration. I get speedup on your script with bzr3007, give it a try. (Don't
 use Newton::gravity though, it breaks something in your script and I'm still
 investigating).

 Bruno




 On 27/01/12 21:03, Anton Gladky wrote:

 Hi, Bruno,
 I have prepared a small test-script from examples/packs.py. It is
 similar to one, which is crashes in my case,I could not catch a
 crash with this test-script, but it seems, BoxFactory creates new
 spheres not in the right places:some of particles are jumping, it
 can be caused by the initial overlapping.
 Anton



 On Fri, Jan 27, 2012 at 7:43 AM, Anton Gladky gladky.an...@gmail.com
 wrote:

 Ok, I have got a segmentation fault.

 Will try to prepare a simple test-script.

 Anton



 On Thu, Jan 26, 2012 at 12:22 PM, Bruno Chareyre
 bruno.chare...@hmg.inpg.fr wrote:

 Could you please try bzr3006?

 B

 I have tried one of my working scripts and the results are not good.
 The new version is dramatically slower. Not sure what is the reason,
 but it seems
 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.

 Bruno, is there an opportunity to use both algorithms: old and new one?

 It is very difficult to keep both logics Anton, it would combine
 disadvantages from each side. I should understand what the problem is in
 SpheresFactory and fix it. Since I didn't touch this code, I'm really
 curious about the problem. Are you doing operations in SpheresFactory at
 runtime?
 Could you send an example script?

 Bruno



 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp


 --
 ___
 Bruno Chareyre
 Associate Professor
 ENSE³ - Grenoble INP
 11, rue des Mathématiques
 BP 46
 38402 St Martin d'Hères, France
 Tél : +33 4 56 52 86 21
 Fax : +33 4 76 82 70 43
 


 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp

 ___
 Mailing list: https://launchpad.net/~yade-dev
 Post to : yade-dev@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-dev
 More help   : https://help.launchpad.net/ListHelp



 --
 ___
 Bruno Chareyre
 Associate Professor
 ENSE³ - Grenoble INP
 11, rue des Mathématiques
 BP 46
 38402 St Martin d'Hères, France
 Tél : 

Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre

 ===
 python: /usr/include/boost/smart_ptr/shared_ptr.hpp:418: T*
 boost::shared_ptr template-parameter-1-1 ::operator-() const
 [with T = Bound]: Assertion `px != 0' failed.
 ===

 Please, have a look.


Ok, I was suspecting that to. I don't know why it happens precisely but
it must come from probe() when stride is used (since the collider was
acting at each iteration, it did not appear before). I'll add the check.
Could you confirm that the crash is in probeBoundingVolume from full
backtrace?

Bruno


___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre

   (Don't use Newton::gravity though, it breaks something in your
 script and I'm still investigating).
 It is not related to the new Newton::gravity, it only revealed another
 bug in eigen's quaternions.
 In your script, Klaus, the clump sometimes disappear, did you notice? It
 is because the axisAngle conversion of clump members orientation is nan
 from time to time
Actually, no... The nan quaternions break the display but they seem to
be harmless. The problem was https://bugs.launchpad.net/yade/+bug/923929
It is fixed in bzr3009. Below is what I get with your 02_net-wall_par.py
script Klaus (-j2, default collider setting, for 3009 this is without
gravity engine).
The speedup is only 25%. As said before, it can't be much better since
the collider takes only 14% of total time initially.
Still, all engines are a bit faster. :)

Bruno


bzr2999
Name   
Count TimeRel. time
---
ForceResetter 20050   
7068191us3.38% 
InsertionSortCollider  1855  
29429129us   14.06% 
InteractionLoop   20050  
92135400us   44.03% 
gravity 20050  
23556447us   11.26% 
newton  20050  
57063846us   27.27% 
TOTAL   
209253016us  100.00%

bzr3009
Name   
Count TimeRel. time
---
ForceResetter 20050   
7087997us4.68% 
InsertionSortCollider   634  
11046290us7.29% 
InteractionLoop   20050  
80287582us   52.98% 
newton  20050  
53130390us   35.06% 
TOTAL   
151552261us  100.00%

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre

 ===
 python: /usr/include/boost/smart_ptr/shared_ptr.hpp:418: T*
 boost::shared_ptr template-parameter-1-1 ::operator-() const
 [with T = Bound]: Assertion `px != 0' failed.
 ===

 Please, have a look.

Try 3009 please.

B

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Bruno Chareyre

 - One problem in your script it there are no spheres at startup, hence the
 collider can't determine a verletDist and then it runs at each iteration,
 which take a lot of time. I got a significant speedup by setting verletDist
 explicitely to something positive (e.g. 0.002). I added a message warning
 the user at runtime when the collider fails finding a valid verletDist.
 Ok

Actually, there may be no other option for you than using verlet=0
currently if you are creating spheres very intensively.
If, let's say, you create one sphere at each iteration and the collider
runs each 10 iterations, then the spheres created between each colliding
will not see each other, hence the jumping sphere problem (probably
also the !bound problem comes from this).
A smart solution would be to delay spheres creation so that they are
created all at once each 10 iterations, or to remember which ones were
created to avoid creating another one at the same place.
If the collider takes more than 50% of cpu time in your simulation it is
worth a try (usually the case when N20k), else you could continue using
verlet=0.
It would be usefull maybe to make sure that the collider is triggered
each time a body is added, since it is not the case apparently.
I wonder if your script are working with versionbzr3000 and verlet0.
Did you try that before?

Bruno


___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-30 Thread Klaus Thoeni
Hi Bruno,

thanks for having a look at my scripts!

I know that the clump is disappearing sometimes on the display but the 
simulation itself seems to be ok so I never had a closer look at it. But it 
was good you did ;-)

I just had a look at rev 3010 and now I got some speed up too which is great. 
I will get rid of the GravityEngine and just use NewtonIntegrator::gravity.

Thanks again,

Klaus


On Tue, 31 Jan 2012 08:02:30 AM Bruno Chareyre wrote:
(Don't use Newton::gravity though, it breaks something in your
  
  script and I'm still investigating).
  
  It is not related to the new Newton::gravity, it only revealed another
  bug in eigen's quaternions.
  In your script, Klaus, the clump sometimes disappear, did you notice? It
  is because the axisAngle conversion of clump members orientation is nan
  from time to time
 
 Actually, no... The nan quaternions break the display but they seem to
 be harmless. The problem was https://bugs.launchpad.net/yade/+bug/923929
 It is fixed in bzr3009. Below is what I get with your 02_net-wall_par.py
 script Klaus (-j2, default collider setting, for 3009 this is without
 gravity engine).
 The speedup is only 25%. As said before, it can't be much better since
 the collider takes only 14% of total time initially.
 Still, all engines are a bit faster. :)
 
 Bruno
 
 
 bzr2999
 Name
 Count TimeRel. time
 ---
  ForceResetter 
20050
 7068191us3.38%
 InsertionSortCollider  1855
 29429129us   14.06%
 InteractionLoop   20050
 92135400us   44.03%
 gravity 20050
 23556447us   11.26%
 newton  20050
 57063846us   27.27%
 TOTAL
 209253016us  100.00%
 
 bzr3009
 Name
 Count TimeRel. time
 ---
  ForceResetter 
20050
 7087997us4.68%
 InsertionSortCollider   634
 11046290us7.29%
 InteractionLoop   20050
 80287582us   52.98%
 newton  20050
 53130390us   35.06%
 TOTAL
 151552261us  100.00%

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-27 Thread Anton Gladky
Hi, Bruno,
I have prepared a small test-script from examples/packs.py. It is
similar to one, which is crashes in my case,I could not catch a
crash with this test-script, but it seems, BoxFactory creates new
spheres not in the right places:some of particles are jumping, it
can be caused by the initial overlapping.
Anton



On Fri, Jan 27, 2012 at 7:43 AM, Anton Gladky gladky.an...@gmail.com wrote:
 Ok, I have got a segmentation fault.

 Will try to prepare a simple test-script.

 Anton



 On Thu, Jan 26, 2012 at 12:22 PM, Bruno Chareyre
 bruno.chare...@hmg.inpg.fr wrote:
 Could you please try bzr3006?

 B
 I have tried one of my working scripts and the results are not good.
 The new version is dramatically slower. Not sure what is the reason,
 but it seems
 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.

 Bruno, is there an opportunity to use both algorithms: old and new one?

 It is very difficult to keep both logics Anton, it would combine
 disadvantages from each side. I should understand what the problem is in
 SpheresFactory and fix it. Since I didn't touch this code, I'm really
 curious about the problem. Are you doing operations in SpheresFactory at
 runtime?
 Could you send an example script?

 Bruno



 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp



 --
 ___
 Bruno Chareyre
 Associate Professor
 ENSE³ - Grenoble INP
 11, rue des Mathématiques
 BP 46
 38402 St Martin d'Hères, France
 Tél : +33 4 56 52 86 21
 Fax : +33 4 76 82 70 43
 


 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp
#!/usr/bin/python
# -*- coding: utf-8 -*-
from yade import pack,ymport,export,log,geom,bodiesHandling
import math

 This script demonstrates how to use 2 components of creating packings:

1. packing generators pack.regularHexa, pack.regularOrtho etc. generate vertices and filter them
using predicates. (Note that this will be enhanced to irregular packings in the future)

2. predicates are functors returning True/False for points that are given by the packing generator.
Their names are mostly self-explanatory, see their docstrings for meaning of their arguments.

Predicates can be combined using set arithmetics to get their Intersection (p1  p2), union (p1 | p2),
difference (p1 - p2) and symmetric difference (XOR, p1 ^ p2). This is demontrated on the head (which
has sphere taken off at the back and also a notch) and the body (with cylidrical hole inside).



rad,gap=.15,.02

#Add material
O.materials.append(FrictMat(young=10e9,poisson=.25,frictionAngle=0.5,density=1e3))

#Parameters, which will be passed into spheres and facets creators
kw={'material':0}
kwBoxes={'color':[1,0,0],'wire':False,'dynamic':False,'material':0}
kwMeshes={'color':[1,1,0],'wire':True,'dynamic':False,'material':0}



#Demonstration of HarmonicRotationEngine
#O.bodies.append(pack.regularHexa(pack.inSphere((-15,5,-5),1.5),radius=rad*2.0,gap=rad/3.0,color=(0.5,0.5,0.1),material=0))

oriBody = Quaternion(Vector3(0,0,1),(math.pi/4))
#O.bodies.append(geom.facetBox((0,0,0),(0.5,0.5,1.0),wallMask=15,**kwMeshes))
O.bodies.append(geom.facetBunker((0,0,-1.2),dBunker=1.5,dOutput=0.6,hBunker=1.2,hOutput=0.5,hPipe=0.1,orientation=oriBody,segmentsNumber=4,**kwMeshes))


try:
	from yade import qt
	qt.Controller()
	qt.View()
except ImportError: pass

#log.setLevel('SubdomainBalancer',log.TRACE)

O.engines=[
	#SubdomainBalancer(colorize=True,initRun=True,iterPeriod=100),
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()],label='collider'),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()],
	),
	GravityEngine(gravity=(0,0,-100)),
	NewtonIntegrator(damping=.3),
		BoxFactory(maxParticles=-1, extents=(0.5,0.5,1.0),center=(0.0,0.0,0.0),vMin=1.0,vMax=1.5,
		rMin=0.025, rMax=0.030,
		vAngle=math.pi/3.0,massFlowRate=150.0,normal=(0.0,0.0,-1.0),label='factory',stopIfFailed=False),
	DomainLimiter(lo=[-0.6,-0.6,-1.2], hi=[0.6,0.6,1.2], iterPeriod=1)
]


O.dt=1e-5
O.saveTmp()
O.timingEnabled=True
___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-26 Thread Bruno Chareyre

 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.
I think I see the problem. Since you are using bounding boxes for
finding places, you have problems with the default Verlet distance (0.7
* mean_radius).
Your algorithm is searching place for bodies larger than what they
actually are. Setting a small verlet distance should fix the problem,
but then you will get less speedup from the new algorithm.
This is actually a problem on the sphere factory side. Using the
collider for placement is not very consistent because the role of the
collider is to tell what is in the neighborhood of, not what body is
overlapping with (it was the same in the previous logic, but since
verletDist was smaller, the difference was less sensible). Checking real
overlaps between bodies is the role of Ig2 functors.
It is maybe possible to give a modified version of the probe function
that would account for the verletDist, let me think.


Bruno

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-26 Thread Bruno Chareyre
On 26/01/12 10:49, Bruno Chareyre wrote:
 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.
 I think I see the problem. Since you are using bounding boxes for
 finding places, you have problems with the default Verlet distance (0.7
 * mean_radius).
 Your algorithm is searching place for bodies larger than what they
 actually are. Setting a small verlet distance should fix the problem,
 but then you will get less speedup from the new algorithm.
 This is actually a problem on the sphere factory side. Using the
 collider for placement is not very consistent because the role of the
 collider is to tell what is in the neighborhood of, not what body is
 overlapping with (it was the same in the previous logic, but since
 verletDist was smaller, the difference was less sensible). Checking real
 overlaps between bodies is the role of Ig2 functors.
 It is maybe possible to give a modified version of the probe function
 that would account for the verletDist, let me think.



Here is a correct way to fix the problem on sphere factory's side, using
Ig2 functor to check overlaps (found in  ResetRandomPosition.cpp:101
from Sergei):

// Test overlap with other bodies
vectorBody::id_t probedBodies=bI-probeBoundingVolume(bv);
FOREACH(Body::id_t id, probedBodies){
if
(iGME-explicitAction(b,Body::byId(id),/*force*/false)-geom){
is_overlap=true;
break;
}
}
if (is_overlap) continue; // new attempt
break;


It seems to me it can also be partly fixed in the probe function, by
substracting sweepLength in the bounds comparison. I can try that if I
have an example script. But still, it will fail to place spheres when
corners of the bounding boxes are overlapping, even if the sphere are
not actually overlapping.

B

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-dev] [Yade-users] Optimized contact detection available

2012-01-26 Thread Anton Gladky
Ok, I have got a segmentation fault.

Will try to prepare a simple test-script.

Anton



On Thu, Jan 26, 2012 at 12:22 PM, Bruno Chareyre
bruno.chare...@hmg.inpg.fr wrote:
 Could you please try bzr3006?

 B
 I have tried one of my working scripts and the results are not good.
 The new version is dramatically slower. Not sure what is the reason,
 but it seems
 the bottleneck is SpheresFactory which is working with new version
 incorrectly and
 cannot find places for new bodies.

 Bruno, is there an opportunity to use both algorithms: old and new one?

 It is very difficult to keep both logics Anton, it would combine
 disadvantages from each side. I should understand what the problem is in
 SpheresFactory and fix it. Since I didn't touch this code, I'm really
 curious about the problem. Are you doing operations in SpheresFactory at
 runtime?
 Could you send an example script?

 Bruno



 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp



 --
 ___
 Bruno Chareyre
 Associate Professor
 ENSE³ - Grenoble INP
 11, rue des Mathématiques
 BP 46
 38402 St Martin d'Hères, France
 Tél : +33 4 56 52 86 21
 Fax : +33 4 76 82 70 43
 


 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to     : yade-us...@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp

___
Mailing list: https://launchpad.net/~yade-dev
Post to : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp