yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #21909
[Question #688439]: effect of rolling stiffness on peak friction angle of sample
New question #688439 on Yade:
https://answers.launchpad.net/yade/+question/688439
Hello,
I want to model a sample that is in bellow paper:
Simulation of triaxial response of granular materials by modified DEM
WANG XiaoLiang & LI JiaChun
doi: 10.1007/s11433-014-5605-z
December 2014 Vol. 57 No. 12: 2297–2308
I'm trying to model effects of rolling stiffness on macroscopic mechanical parameters like peak friction angle. I used Ip2_CohFrictMat_CohFrictMat_CohFrictPhys and Law2_ScGeom6D_CohFrictPhys_CohesionMoment and i wrote bellow code.The basic parameters like final friction degree, confining pressure,poisson, psd, young modulus,strain rate and porosity are the same as parameters in that paper. I didn't see any effect and changes on shear strength and peak friction angle after setting rolling stiffness(alphaKr). Actullay i couldn't simulate graphs that are in the paper with different alfaKr (for example for alphaKr =0.01, 1).
1) Is there any problem in my code that i can't simulate graphs in that paper?
2) Should i expect that different alphaKr make a difference in peak friction angle of sample?
Thanks in advance for your help.
## encoding: utf-8
import matplotlib; matplotlib.rc('axes',grid=True)
import matplotlib.pyplot as plt
import pylab
from yade import pack, qt
import numpy as np
from numpy import *
import math
import sys
from yade import export
from yade import timing
from yade import plot
import time
from math import *
## Define Parameters
num_spheres=10000
compFricDegree=20
finalFricDegree=30
confiningS=-100000 # [Pa]
RhoW=1000
graindensity=2600
poissonRatio=0.4
youngModulus=270e6 # [Pa]
AxialstrainMatrix1=[]
DeviatoricStressMatrix1=[]
VolumetricStrainMatrix1=[]
PrincipalStressRatioMatrix1=[]
qPMatrix1=[]
AxialstrainMatrix2=[]
DeviatoricStressMatrix2=[]
VolumetricStrainMatrix2=[]
PrincipalStressRatioMatrix2=[]
qPMatrix2=[]
alphaKrMatrix=[0.01,1]
for i in range(0,len(alphaKrMatrix),1):
psdSizes=[0.107,0.12,0.132,0.145,0.158,0.171,0.183,0.196,0.209,0.221,0.234] #(mm)
psdCumm=[0.001,0.029,0.069,0.121,0.187,0.268,0.367,0.49,0.63,0.8,1.0] #cumulative
psdSizesArray=np.array(psdSizes)
psdSizesMeter=psdSizesArray*0.001 #Convert the size of particles to meter
sp=pack.SpherePack()
mn,mx=Vector3(0,0,0),Vector3(0.0045,0.0075,0.0045) #initial box size
sp.makeCloud(minCorner=mn,maxCorner=mx,num=num_spheres,psdSizes=psdSizesMeter,psdCumm=psdCumm,distributeMass=True,seed=True)
sp.psd(bins=200,mass=True)
O.materials.append(CohFrictMat(isCohesive=False,alphaKr=alphaKrMatrix[i],alphaKtw=0,momentRotationLaw=True,young=youngModulus,poisson=poissonRatio,frictionAngle=radians(compFricDegree),density=graindensity,label='spheres'))
O.materials.append(FrictMat(young=youngModulus,poisson=poissonRatio,frictionAngle=0,density=0,label='frictionless'))
walls=aabbWalls((mn,mx),thickness=0,material='frictionless')
wallIds=O.bodies.append(walls)
O.bodies.append([utils.sphere(center,rad,material='spheres') for center,rad in sp])
triax=TriaxialStressController(
internalCompaction=False,
goal1=confiningS,
goal2=confiningS,
goal3=confiningS,
label="triax"
)
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys(), Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label="cohesiveIp")],
[Law2_ScGeom_FrictPhys_CundallStrack(traceEnergy=True),Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=False,label='cohesiveLaw')]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
triax,
NewtonIntegrator(damping=0.3,label="newton"),
]
O.dt=utils.PWaveTimeStep()
O.dynDt=False
while 1:
O.run(1000,True)
unb=unbalancedForce()
e=(triax.porosity)/(1-triax.porosity)
print ('unb:',np.round(unb,2),'e: ',np.round(e,3),'meanstress:', np.round(-triax.meanStress,3),' SigmaY: ',np.round(-triax.stress(3)[1],3),' SigmaX: ',np.round(-triax.stress(1)[0],3),' SigmaZ: ',np.round(-triax.stress(5)[2],3))
if unb<0.1 and abs(confiningS-triax.meanStress)/abs(confiningS)<0.01 and e<0.634:
break
##########################
## Start test ###
##########################
# triaxial conditions
triax.internalCompaction=False
setContactFriction(radians(finalFricDegree))
triax.stressMask=5
triax.goal1=triax.goal3=confiningS
triax.wall_bottom_activated=False
cohesiveLaw.always_use_moment_law=True
triax.goal2=-5
if i==0:
while 1:
O.run(1000,True)
AxialstrainMatrix1.append((-triax.strain[1])*100)
qPMatrix1.append((-triax.stress(triax.wall_top_id)[1]-(-triax.stress(triax.wall_right_id)[0]-triax.stress(triax.wall_front_id)[2])/2.0)/(-triax.meanStress))
print ('eyy=',triax.strain[1],'Sxx=', triax.stress(0)[0],'Syy=',triax.stress(3)[1], 'Szz=',triax.stress(4)[2],'e=', (triax.porosity)/(1-triax.porosity))
if triax.strain[1] <-0.3:
break
if i==1:
while 1:
O.run(1000,True)
AxialstrainMatrix2.append((-triax.strain[1])*100)
qPMatrix2.append((-triax.stress(triax.wall_top_id)[1]-(-triax.stress(triax.wall_right_id)[0]-triax.stress(triax.wall_front_id)[2])/2.0)/(-triax.meanStress))
print ('eyy=',triax.strain[1],'Sxx=', triax.stress(0)[0],'Syy=',triax.stress(3)[1], 'Szz=',triax.stress(4)[2],'e=', (triax.porosity)/(1-triax.porosity))
if triax.strain[1] <-0.3:
break
O.reset()
plt.figure()
plt.subplot(224)
plt.xlabel('Axial Strain (%)')
plt.ylabel('q/P')
plt.grid(True)
plt.plot(AxialstrainMatrix1,qPMatrix1,linestyle='-',color='b',linewidth=1)
plt.plot(AxialstrainMatrix2,qPMatrix2,linestyle='-',color='r',linewidth=1)
plt.legend(('alfa=0.01','alfa=1'),loc='lower right', shadow=True)
plt.show()
--
You received this question notification because your team yade-users is
an answer contact for Yade.