← Back to team overview

yade-users team mailing list archive

Re: [Question #695154]: Polyhedra contact instability (potential Bug?)

 

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

Jan Stránský proposed the following answer:
Hello,

I can confirm this problem. The contact normal together with contact
force magnitude might be the source of the problem (I was not solving
the problem, just detecting it).

Apart from Bruno's option, have a try potential blocks [1]. It models
the same shape, but different contact logic. The results seems more
"natural" for these cases. Have look at the testing code below.

Disclainmer: I have ever used potential blocks for this testing script
only :-) it was some time ago for my colleague playing with polyhedrons,
running into the same problems you describe.

cheers
Jan

[1] http://yade-dem.org/doc/potentialparticles.html

###
O.engines=[
    ForceResetter(),
    InsertionSortCollider([PotentialBlock2AABB()]),
    InteractionLoop(
        [Ig2_PB_PB_ScGeom(unitWidth2D=1.0, calContactArea=True)],
        [Ip2_FrictMat_FrictMat_KnKsPBPhys(kn_i=1e8, ks_i=1e7, Knormal=1e8, Kshear=1e7, viscousDamping=0.2)],
        [Law2_SCG_KnKsPBPhys_KnKsPBLaw(label='law', neverErase=False, allowViscousAttraction=False)]
    ),
    NewtonIntegrator(damping=0.2, exactAsphericalRot=True),
    PotentialBlockVTKRecorder(fileName='/tmp/pb', iterPeriod=50, sampleX=60, sampleY=60, sampleZ=60, label='vtkRecorder')
]

def cube(pos,size):
    ret = Body()
    r = .5*size
    a = [1,-1,0,0,0,0]
    b = [0,0,1,-1,0,0]
    c = [0,0,0,0,1,-1]
    d = [.5*size-r for _ in range(6)]
    minmaxAabb = 1.05*Vector3( d[0], d[2], d[4] )
    ret.shape=PotentialBlock(r=r, R=0.0, a=a, b=b, c=c, d=d, id=len(O.bodies))
    utils._commonBodySetup(ret,ret.shape.volume,ret.shape.inertia,material=-1,pos=pos) 
    ret.state.ori = ret.shape.orientation
    return ret

b1 = cube((0,0,0),1)
b2 = cube((2,0,0),1)
O.bodies.append((b1,b2))
b1.state.vel = (1,0,0)
b1.state.angVel = (0,0,2)
O.dt = 1e-3
O.run(3000,True)
###

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