yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #23688
[Question #692122]: how to add cohesion between box and spheres
New question #692122 on Yade:
https://answers.launchpad.net/yade/+question/692122
Dear YADE users,
I am simulating the spheres falling down to a box plate under gravity. When the spheres touching the box plate, I want to add strong cohesive force between the spheres and box plate, so that spheres will not bounce but stay on the box plate. The sphere and box are FrictMat. I tried to add a positive normal force between spheres and box once they are in touch:
#---------------------------------------------------------------------------
for i in O.interactions:
if isinstance(O.bodies[i.id1].shape,Box) and isinstance(O.bodies[i.id2].shape,Sphere):
i.phys.normalforce=1e9 #(some positive value)
#---------------------------------------------------------------------------
The full code is shown as follows:
######################
from yade import pack, plot, qt, export, os
O.periodic=True
O.trackEnergy=True
lx=0.05
ly=0.1
lz=0.1
radium=0.0005
# creat horizontal 4 periodic boundries by cell
O.cell.hSize=Matrix3(lx, 0, 0,
0, ly, 0,
0, 0, lz)
# Define materials
idBox=O.materials.append(FrictMat(young=1e5, density=2650, poisson=0.5, frictionAngle=radians(26.6), label='Box'))
idSand=O.materials.append(FrictMat(young=1e5,poisson=1,frictionAngle=radians(26.6),density=2650,label="Sand"))
# creat plate
lowBox=box(center=(0.5*lx,0.5*ly,0.25*lz), extents=(lx*2,ly*5,0.0001),wire=False, fixed=True, material="Box")#
lowBoxid=O.bodies.append(lowBox)
# creat sphere particles
sp=pack.SpherePack() # create an empty cloud; SpherePack() contains only geometrical information
sp.makeCloud((0.0,0.0,0.3*lz+4*radium), (lx,ly,0.7*lz-4*radium), rMean=1.5*radium, rRelFuzz=0.0, num=100, periodic=True)
for s in sp:
O.bodies.append(utils.sphere(center=s[0],radius=s[1],material="Sand",color=(0.0,1.0,0.0)))
# engines
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()],allowBiggerThanPeriod=True),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
GlobalStiffnessTimeStepper(),
NewtonIntegrator(gravity=(0,0,-9.81),damping=0.4),
PyRunner(command='servo()',iterPeriod=1),
]
# define functions
def servo(): # add cohesive forces
for i in O.interactions:
if isinstance(O.bodies[i.id1].shape,Box) and isinstance(O.bodies[i.id2].shape,Sphere):
i.phys.nornalforce=1e9
The sphere will stay on the box plate instead of bouncing. But I am not sure if it is suitable to adjust the interaction forces directly. In the following stage, an external force F_e will be applied on the box.
1) Is this way correct to add cohesive force between spheres and box plate?
2) Will the added interaction force affect the behavior under F_e? I mean can we treat the interaction force as a external force or not?
Thank you so much!
Yuxuan
--
You received this question notification because your team yade-users is
an answer contact for Yade.