yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #29836
[Question #707253]: Biaxial test with rolling friction
New question #707253 on Yade:
https://answers.launchpad.net/yade/+question/707253
Hello everyone,
I want to conduct a biaxial test for sands with rolling resistance (by CohFrictMat). For a dense packing, I need to set the rolling resistance and friction angle to 0 in the compaction period, and then activate them to the real value in shearing period.
The modification of friction angle can be achieved by "setContactFriction". But for rolling resistance, I'm not sure the following is the right approach: set the value of "alaways_use_moment_law" as "false" in compaction period and modify it as "true" in shearing period. This approach draws on the example named "triax-cohesive" [1]. And this method is not quite the same as the previous approaches in the Q&A (for example, [2]). Is there any difference between these two approaches?
####Here is my code####
from __future__ import print_function
from yade import pack,qt,plot
import matplotlib; matplotlib.rc('axes',grid=True)
import pylab
O.materials.append(CohFrictMat(young=1.e9,poisson=.8,alphaKr=1.0,frictionAngle=.0,momentRotationLaw=True,etaRoll=0.3,label='balls'))
sp = pack.SpherePack()
dmax=0.030
size=5*dmax
thickness=size/3.0
psdSizes=[0.0020,0.0048,0.0076,0.0104,0.0132,0.0160,0.0188,0.0216,0.0244,0.0272,0.0300]
psdCumm =[0.0000,0.3228,0.4924,0.6081,0.6961,0.7671,0.8266,0.8778,0.9228,0.9629,1.0000]
sp.makeCloud(minCorner=(0,0,thickness/2),maxCorner=(size,size,thickness/2),psdSizes=psdSizes,psdCumm=psdCumm,num=1400,periodic=True,seed=1,distributeMass=True)
sp.toSimulation()
O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,thickness) # RVE scale up
print(len(O.bodies))
for p in O.bodies:
p.state.blockedDOFs = 'zXY'
p.state.mass = 2650 * thickness * pi * p.shape.radius**2 # 0.1 = thickness of cylindrical particle # RVE scale up
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, useIncrementalForm=True)]
),
PeriTriaxController(
dynCell=True,
goal=(-4.e4,-4.e4,0),
stressMask=3,
relStressTol=.001,
maxUnbalanced=.001,
maxStrainRate=(.5,.5,.0),
doneHook='compactionFinished()',
label='biax'
),
NewtonIntegrator(damping=.1),
PyRunner(command='addPlotData()',iterPeriod=100),
]
def addPlotData():
plot.addData(
sx=biax.stress[0],
sy=biax.stress[1],
sz=biax.stress[2],
ex=biax.strain[0],
ey=biax.strain[1],
ez=biax.strain[2],
ev=biax.strain[0]+biax.strain[1]+biax.strain[2],
eyp=-biax.strain[1],
sxp=-biax.stress[0],
syp=-biax.stress[1],
i=O.iter,
unbalanced=utils.unbalancedForce(),
totalEnergy=O.energy.total(),
**O.energy # plot all energies
)
# enable energy tracking in the code
O.trackEnergy=True
plot.plots = {
'i': (('unbalanced', 'go'), None, 'kinetic'),
' i': ('ex', 'ey', 'ez', None, 'sx', 'sy', 'sz'),
'eyp ': ('ev'),
' eyp ': ('sxp', 'syp', None, 'ev'),###'a', ' a', 'a ', ' a ' means the different position of each plot
}
plot.plot()
def compactionFinished():
print(biax.stress)
print(O.cell.hSize)
vr = yade._utils.voidratio2D(zlen=thickness)
print(vr)
O.engines[2].lawDispatcher.functors[0].always_use_moment_law=True
setContactFriction(radians(33))
# set the current cell configuration to be the reference one
O.cell.trsf=Matrix3.Identity
# change control type: keep constant confinement in x,y, 20% compression in z
biax.goal=(-4.e4,-0.1,0)
biax.stressMask=1
# allow faster deformation along x,y to better maintain stresses # RVE scale up, y value should be scale down a lot
biax.maxStrainRate=(1.0,0.05,0.0)
# next time, call triaxFinished instead of compactionFinished
biax.doneHook='biaxFinished()'
# do not wait for stabilization before calling triaxFinished
biax.maxUnbalanced=10
def biaxFinished():
print(O.cell.hSize)
vr = yade._utils.voidratio2D(zlen=thickness) # RVE scale up
print(vr)
print('Finished')
O.pause()
[1]https://gitlab.com/yade-dev/trunk/-/blob/master/examples/test/triax-cohesive.py
[2]https://answers.launchpad.net/yade/+question/697139
--
You received this question notification because your team yade-users is
an answer contact for Yade.