yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #23350
Re: [Question #691285]: Extract Normals and Shears/tangentials forces on a ballMill
Question #691285 on Yade changed:
https://answers.launchpad.net/yade/+question/691285
NGANDU KALALA Gauthier posted a new comment:
Hi Jan,
Thank you for the response. This is a MWE i propose for a better understanding of my problem.
As it is not possible to provide the mill mesh file in gmsh format, The mill is simulated here as a cylinder of the same size, rotating around z-axis. The balls are added to the mill using sphere pack, (p=pack.SpherePack());
However the behavior is not quite what I expected, especially since the mill is not equipped with a lifter to make the balls circulate in the mill as it is physically done. However there are interactions with the mill that normally have to produce normal and tangential forces, That i can't save actually.
I also noticed that the increased rigidity, some balls pass through the walls of the mill, instead of remaining inside.*
Moreover, I expected that at the beginning of the simulation, packages of balls could fall along the y-axis, to disintegrate afterwards. But i notice that it already disintegrates before falling, and go in the whole direction of mill, despite the acceleration of gravity is defined according to the y-axis.*
*
Finaly find the same recording problem mentioned above.
This is the MWE.
# Material
rho = 7640.0 # [kg/m^3] density (of the balls)
Eyoung = 900.0e9 # [N/m] equivalent normal stiffness
vp = 0.6 # [N/m] equivalent tangential stiffness
en = 0.3 # [-] normal coefficient of restitution (sphere/sphere)
mu = 2 # [-] friction coefficient
rMean = 0.8/2.0
length = 0.4
rBall = 0.0075 # [m] ball radius
sphRadFuzz = 0.8
# Simulation
pcv = 70.0 # [%] percentage of critical velocity
tEnd = 10.0 # [s] total simulation time
O.dt = 1.0e-5 # [s] fixed time step
tRec = 1.0e-2 # [s] recording interval
#material of cylinder
cylMat = O.materials.append(FrictMat(poisson=vp,young=Eyoung,density=rho,frictionAngle=radians(mu)))
#material of spheres
ballMat = O.materials.append(FrictMat(poisson=vp,young=Eyoung,density=rho,frictionAngle=radians(mu)))
ids=O.bodies.append(geom.facetCylinder((0,0,0),0.8,0.4,segmentsNumber=64, wallMask=7, angleRange=None,
radiusTopInner=-1, radiusBottomInner=-1,material=cylMat))
#walls = O.bodies.append([
# utils.wall((0,0,length/2),2,material=Mat1,color=(1,1,1),sense=+1),
# utils.wall((0,0,-length/2),2,material=Mat1,color=(1,1,1),sense=+1)
# ])
# define domains for initial cloud of red and blue spheres
packHt=.8*rMean # size of the area
bboxes=[(Vector3(-.5*length,-.5*packHt,-.5*packHt),Vector3(.5*length,0,.5*packHt)),(Vector3(-.5*length,-.5,-.5*packHt),Vector3(.5*length,.5*packHt,.5*packHt))]
colors=(1,0,0),(0,0,1)
for i in (0,1): # red and blue spheres
sp=pack.SpherePack();
bb=bboxes[i];
vol=(bb[1][0]-bb[0][0])*(bb[1][1]-bb[0][1])*(bb[1][2]-bb[0][2])
sp.makeCloud(bb[0],bb[1],rBall,sphRadFuzz,int(.25*vol/((4./3)*pi*rBall**3)),False)
O.bodies.append([utils.sphere(s[0],s[1],material=ballMat,color=colors[i]) for s in sp])
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),
Ig2_Facet_Sphere_ScGeom(),
Ig2_Wall_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_MindlinPhys()],
[Law2_ScGeom_MindlinPhys_Mindlin()]
),
#GravityEngine(gravity=(0,-3e4,0)), # gravity artificially high, to make it faster going ;-)
RotationEngine(ids=ids,angularVelocity=1000,rotateAroundZero=True,rotationAxis=(0,0,1)),
NewtonIntegrator(damping=0,gravity=[0,0,-9.81]),
PyRunner(command='exportForces()',iterPeriod=1)
]
def exportForces():
# Mechanical power
data = [ ] # List of data for each interaction
for i in O.interactions:
# Force by sphere on facet
if isinstance(O.bodies[i.id1].shape,Sphere) \
and isinstance(O.bodies[i.id2].shape,Facet):
fn = i.phys.normalForce
fs = i.phys.shearForce
cp = i.geom.contactPoint
pd = i.geom.penetrationDepth
d = dict(normalForce=fn,shearForce=fs,contactPoint=cp,penetrationDepth=pd, id1=i.id1,id2=i.id2)
data.append(d)
print(data)
# Save data
dataSim = "data{:06d}.json".format(O.iter)
with open(DataSim,"w") as f:
json.dump(data,f,indent=2)
O.dt = 1e-6
###
O.run(int(math.ceil(tEnd/O.dt))+1)
Thank's
Gauthier
--
You received this question notification because your team yade-users is
an answer contact for Yade.