polyhedra particle is passing the wall

Asked by Mahdeyeh on 2020-02-04

Hi everyone
My code has 4 polyhedra particles, 2 of them are wall and fix, the other 2 particles should fall down and stay on walls but one of particles (green one) passes through the wall. The second particle does not pass the wall.
Why the green one passes the wall?What is its problem?
For testing,I has tried different properties of material, I mean increasing or decreasing density, young module, poisson ratio or frictionAngle, but none of them solve this problem.

ubuntu : 18.04
yade 2018.02b

here is my codes:

from yade import export,polyhedra_utils
import os
from yade import plot
import math
from yade import utils
import pylab
import matplotlib; matplotlib.rc('axes',grid=True)
from matplotlib import pyplot
import numpy as np
from numpy import *
from yade import export as expt

Dolomite = PolyhedraMat()
Dolomite.density = 2870 #kg/m^3
Dolomite.young = 24.36e9 #Pa
Dolomite.poisson = 0.2
Dolomite.frictionAngle = radians(55.12) #rad

Bound = PolyhedraMat()
Bound.density = 2870 #kg/m^3
Bound.young = 60e10 #Pa
Bound.poisson = 0.2
Bound.frictionAngle = radians(55.12) #rad

Shale = PolyhedraMat()
Shale.density = 2750 #kg/m^3
Shale.young = 6e9 #Pa
Shale.poisson = 0.23
Shale.frictionAngle = radians(42) #rad

v1=((3.80840249343969,4.0071,0.25),(4.10168443073866,4.00514568612972,0.25),(4.11564519594573,4.22873373182142,0.25),(3.83010741406799,4.13535598124846,0.25),(3.80840249343969,4.0071,0.25),(3.80840249343969,4.0071,-0.25),(4.10168443073866,4.00514568612972,-0.25),(4.11564519594573,4.22873373182142,-0.25),(3.83010741406799,4.13535598124846,-0.25),(3.80840249343969,4.0071,-0.25))
v2=((-2.49931484958066,-0.00101851609184,2),(-2.49931484958066,-1.05811862984014,2),(4.57134039401409,-1.05085707517961,2),(4.57126196395075,-0.00106929522008,2),(-2.49931484958066,-0.00101851609184,2),(-2.49931484958066,-0.00101851609184,-2),(-2.49931484958066,-1.05811862984014,-2),(4.57134039401409,-1.05085707517961,-2),(4.57126196395075,-0.00106929522008,-2),(-2.49931484958066,-0.00101851609184,-2))
v3=((6.74060748379946,3.00253856551901,2),(7.59942175653549,2.40210859046904,2),(5.30871392306244,-0.7578625393839,2),(4.57622461111727,0.00588266389075,2),(6.74060748379946,3.00253856551901,2),(6.74060748379946,3.00253856551901,-2),(7.59942175653549,2.40210859046904,-2),(5.30871392306244,-0.7578625393839,-2),(4.57622461111727,0.00588266389075,-2),(6.74060748379946,3.00253856551901,-2))
v4=((5.65881645402257,3.06264016950990,0.25),(5.87183172458837,3.21786437273975,0.25),(5.88119170365426,3.54514975549388,0.25),(5.83257618949696,3.6667153017607,0.25),(5.63774404261507,3.626888811484,0.25),(5.58705877827044,3.34599484278801,0.25),(5.65881645402257,3.0626401695099,0.25),(5.65881645402257,3.06264016950990,-0.25),(5.87183172458837,3.21786437273975,-0.25),(5.88119170365426,3.54514975549388,-0.25),(5.83257618949696,3.6667153017607,-0.25),(5.63774404261507,3.626888811484,-0.25),(5.58705877827044,3.34599484278801,-0.25),(5.65881645402257,3.0626401695099,-0.25))
O.bodies.append(polyhedra_utils.polyhedra(Dolomite,v=v1,fixed=False, color=(0.1,0.5,0.2), mask=3))
O.bodies.append(polyhedra_utils.polyhedra(Bound,v=v2,fixed=True, color=(1,0,1), mask=4))
O.bodies.append(polyhedra_utils.polyhedra(Bound,v=v3,fixed=True, color=(1,0,1), mask=4))
O.bodies.append(polyhedra_utils.polyhedra(Shale,v=v4,fixed=False, color=(0.9,0.81,0.45), mask=5))

for b in O.bodies:
    if b.mask is 3:
        b.state.blockedDOFs='zXY'
for b in O.bodies:
    if b.mask is 5:
        b.state.blockedDOFs='zXY'

def calm():
    for c in O.bodies:
        c.state.vel=Vector3(0,0,0)
        c.state.angVel=Vector3(0,0,0)

O.engines=[
   ForceResetter(),
   InsertionSortCollider([Bo1_Polyhedra_Aabb(),],verletDist=0.05),
   InteractionLoop(
      [Ig2_Polyhedra_Polyhedra_PolyhedraGeom(),],
      [Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys()],
      [Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()]
   ),
   NewtonIntegrator(gravity=(0,-9.81,0),damping=0.2),
]

utils.calm()
O.engines=O.engines+[PyRunner(iterPeriod=20,command='calm()',label="calmRunner")]
O.dt=50e-7
O.run(50000,True)
O.run()
calmRunner.dead=True

I would appreciate if you can help me

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jérôme Duriez
Solved:
2020-02-10
Last query:
2020-02-10
Last reply:
2020-02-05
Best Jérôme Duriez (jduriez) said : #1

Hi,

It's because Yade is mercyless when you use something without knowing all underlying features.. (and the doc [*] could indeed be more explicit here).

With mask = 3 (= 11 in binary), your green particle has not any mask-bit in common with the "walls" (mask = 4 = 100 in binary) and they can not interact [**] => one passes across another without any problem.

PS: why did you use mask here ?...

[*] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Body.groupMask reached from https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Body.mask
[**] https://gitlab.com/yade-dev/trunk/-/blob/7704b6945b361b46f0b8514524dbbebb6798b5f4/pkg/common/Collider.cpp#L28. This mayCollide should return true for interactions to be possible

Mahdeyeh (mahdiye.sky) said : #2

Thanks Jérôme Duriez, that solved my question.