yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #17068
Re: [Question #667289]: Generation of sphere packing using CohFrictMat model
Question #667289 on Yade changed:
https://answers.launchpad.net/yade/+question/667289
Description changed to:
Hello all,
I want to make a simulation of slope using FEMxDEM code. Dr. Guo Ning
proposed a good example for the generation of 2D friction packing. I
also see Ning also using the FEMxDEM method for cohesive materials. I
want to change the prepare.py and set cohesion and rolling friction
using CohFrictMat model. The problem is divided into two sstep, firstly
a sphere packing without friction and cohesion is compressed to the
hydrostatic stress. Then I want to add rolling friction and cohesion to
the model. But it does not work, I really appriciate if anyone can give
me some advice. Tho code is as following:
from yade import pack
#O.materials.append(FrictMat(young=6.e8,poisson=.8,frictionAngle=.0))
materialId=O.materials.append(CohFrictMat(young=15e6,poisson=0.4,frictionAngle=0,normalCohesion=1e6,shearCohesion=1e6,momentRotationLaw=True,etaRoll=0.1,label='spheres'))
sp = pack.SpherePack()
size = .24
sp.makeCloud(minCorner=(0,0,.05),maxCorner=(size,size,.05),rMean=.005,rRelFuzz=.4,num=400,periodic=True,seed=1)
sp.toSimulation(material='spheres')
O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,.1)
print len(O.bodies)
for p in O.bodies:
p.state.blockedDOFs = 'zXY'
p.state.mass = 2650 * 0.1 * pi * p.shape.radius**2 # 0.1 = thickness of cylindrical particle
inertia = 0.5 * p.state.mass * p.shape.radius**2
p.state.inertia = (.5*inertia,.5*inertia,inertia)
O.dt = utils.PWaveTimeStep()
print O.dt
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom6D()],
[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()],
[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(always_use_moment_law=False)]
),
PeriTriaxController(
dynCell=True,
goal=(-1.e5,-1.e5,0),
stressMask=3,
relStressTol=.001,
maxUnbalanced=.001,
maxStrainRate=(.5,.5,.0),
doneHook='term()',
label='biax'
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.5),
NewtonIntegrator(damping=.2)
]
def term():
O.engines = O.engines[:3]+O.engines[4:]
print getStress()
print O.cell.hSize
setContactFriction(radians(30))
O.cell.trsf=Matrix3.Identity
O.cell.velGrad=Matrix3.Zero
for p in O.bodies:
p.state.vel = Vector3.Zero
p.state.angVel = Vector3.Zero
p.state.refPos = p.state.pos
p.state.refOri = p.state.ori
O.save('0.yade.gz')
O.pause()
# servo the stress to the hydrostress state
O.run();O.wait()
#This will reload the autosaved compacted sample
O.reload()
# I want to change the model with rolling friction and Cohesion
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom6D()],
[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()],
[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(always_use_moment_law=False)]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.5),
NewtonIntegrator(damping=.2)
]
# Add rolling friction and Cohesion to the model
O.engines[2].lawDispatcher.functors[1].always_use_moment_law = True
O.engines[2].physDispatcher.functors[1].setCohesionNow = True
O.step();O.wait();O.save('1.yade.gz')
Thanks in advance!!!
The error information is as follows:
Traceback (most recent call last):
File "/usr/bin/yadedaily", line 182, in runScript
execfile(script,globals())
File "prepareRVECoh.py", line 75, in <module>
O.engines[2].lawDispatcher.functors[1].always_use_moment_law = True
IndexError: list index out of range
[[ ^L clears screen, ^U kills line. F12 controller, F11 3d view (use h-key for showing help), F10 both, F9 generator, F8 plot. ]]
--
You received this question notification because your team yade-users is
an answer contact for Yade.