uncertainty in the shear behavior of material

Asked by Alireza Sadeghi on 2019-08-26

Hello All,

I was encountered to a problem in my dem modeling. I want to simulate the bulk behavior of material. Due to reach this goal, I have to choose a number of particles which could represent the bulk behavior as similar as experiment. I did two type of simulation.
in the first one, I put the particles in the box and the the box faces compress the paricles, after in the x and y direction, stress remain constant and in the z direction, we increase stress and plot the strain-stress in z direction. Due to initial conditions (randomness of initial position of particles) we will reach to different results in each realization. The code is as below:

from yade import utils, plot
from yade import pack, qt
from datetime import datetime
from yade import export

O.periodic=True
O.cell.refSize=(2e-1,2e-1,2e-1)

O.materials.append(CohFrictMat(normalCohesion= 1e20, shearCohesion= 1e20, isCohesive= True, young=6.81e8, density=1377.5, poisson=0.3, frictionAngle= 0.31, fragile=False, label='Coke'))

nums=['t']

mats=['Coke']

coke=(5e-3,3000)

nums=pack.SpherePack()

nums.makeCloud((0,0,0),(2e-1,2e-1,2e-1),rMean=coke[0],rRelFuzz=0,num=coke[1])

O.bodies.append([utils.sphere(c,r,material=mats[0],color=(0,0,1)) for c,r in nums])

sigmaIso=-1e5

O.engines=[
     ForceResetter(),

     InsertionSortCollider([Bo1_Sphere_Aabb()]),
     InteractionLoop(
        [Ig2_Sphere_Sphere_ScGeom()],
        [Ip2_FrictMat_FrictMat_FrictPhys()],
        [Law2_ScGeom_FrictPhys_CundallStrack()]
     ),

     PeriTriaxController(label='triax',
  goal=(sigmaIso,sigmaIso,sigmaIso),stressMask=7,
  dynCell=True,maxStrainRate=(1,1,1),
  maxUnbalanced=.01,relStressTol=1e-3,
  doneHook='compactionFinished()'
     ),
     NewtonIntegrator(damping=0.4),
     PyRunner(command='history()',iterPeriod=1000,label='recorder'),
]

O.dt=1e-6

O.saveTmp()

def compactionFinished():

 O.cell.trsf=Matrix3.Identity
 triax.goal=(sigmaIso,sigmaIso,-0.5)
 triax.stressMask=3
 triax.maxStrainRate=(0.1,0.1,0.1)
 triax.doneHook='triaxFinished()'
 triax.maxUnbalanced=1
        dataOld = plot.data
        plot.saveDataTxt('RVE3000-iso_part-e5-5.txt')
        plot.data = {}
        plot.plot()

def history():
 plot.addData(unbalanced=unbalancedForce(),
  sxx=-triax.stress[0],syy=-triax.stress[1],szz=-triax.stress[2],
  exx=-triax.strain[0],eyy=-triax.strain[1],ezz=-triax.strain[2],
                sxz=-0.5*(triax.stress[2]+triax.stress[0]), ev=(triax.strain[2]+triax.strain[1]+triax.strain[0]),
                q=-(triax.stress[2]-triax.stress[1]), p=-(triax.stress[2]+triax.stress[1]+triax.stress[0])/3 ,
                D=(triax.stress[2]-triax.stress[1])/sigmaIso,
                R=3*(triax.stress[2]-triax.stress[1])/(triax.stress[2]+triax.stress[1]+triax.stress[0]+1e-2),
                por=porosity(),i=O.iter,)

        print 'porosity:', porosity()
        print 'iteration', O.iter

O.run(8000000,True)

plot.saveDataTxt('RVE3000-dev_part-e5-5.txt')
plot.plots={'ezz':('szz')}
plot.plot()

def triaxFinished():
 print 'Compaction finished'
 O.pause()

In the second one, I made the sample first with the code below:

from yade import utils, plot
from yade import pack, qt
from datetime import datetime
from yade import export

O.periodic=True
O.cell.refSize=(2e-1,2e-1,2e-1)

O.materials.append(CohFrictMat(normalCohesion= 1e20, shearCohesion= 1e20, isCohesive= True, young=6.81e8, density=1377.5, poisson=0.3, frictionAngle= 0.31, fragile=False, label='Coke'))

nums=['t']

mats=['Coke']

coke=(5e-3,3000)

nums=pack.SpherePack()

nums.makeCloud((0,0,0),(2e-1,2e-1,2e-1),rMean=coke[0],rRelFuzz=0,num=coke[1])

O.bodies.append([utils.sphere(c,r,material=mats[0],color=(0,0,1)) for c,r in nums])

sigmaIso=-1e5

O.engines=[
     ForceResetter(),

     InsertionSortCollider([Bo1_Sphere_Aabb()]),
     InteractionLoop(
        [Ig2_Sphere_Sphere_ScGeom()],
        [Ip2_FrictMat_FrictMat_FrictPhys()],
        [Law2_ScGeom_FrictPhys_CundallStrack()]
     ),

     PeriTriaxController(label='triax',
  goal=(sigmaIso,sigmaIso,sigmaIso),stressMask=7,
  dynCell=True,maxStrainRate=(1,1,1),
  maxUnbalanced=.01,relStressTol=1e-3,
  doneHook='compactionFinished()'
     ),
     NewtonIntegrator(damping=0.4),
     PyRunner(command='history()',iterPeriod=1000,label='recorder'),
]

O.dt=1e-6

O.saveTmp()

def compactionFinished():
 print 'Finished'
 O.pause()
        plot.saveDataTxt('Uncertainty-Pre-compact3000.txt')
        plot.data = {}
        O.save('Pre-compact3000.yade')

O.run(1500000,True)

and after that, I compress the sample of "Pre-compact3000.yade" in the z direction and plot the stress-strain in the z direction with code below:

from yade import utils, plot
from yade import pack, qt
from datetime import datetime
from yade import export

O.load('Pre-compact300.yade')

sigmaIso=-1e5

def compactionFinished():

 O.cell.trsf=Matrix3.Identity
 triax.goal=(sigmaIso,sigmaIso,-0.5)
 triax.stressMask=3
 triax.maxStrainRate=(0.1,0.1,0.1)
 triax.doneHook='triaxFinished()'
 triax.maxUnbalanced=1
        dataOld = plot.data
# plot.saveDataTxt('iso_part-e4.txt')
        plot.data = {}
        plot.plot()

def history():
 plot.addData(unbalanced=unbalancedForce(),
  sxx=-triax.stress[0],syy=-triax.stress[1],szz=-triax.stress[2],
  exx=-triax.strain[0],eyy=-triax.strain[1],ezz=-triax.strain[2],
                sxz=-0.5*(triax.stress[2]+triax.stress[0]), ev=(triax.strain[2]+triax.strain[1]+triax.strain[0]),
                q=-(triax.stress[2]-triax.stress[1]), p=-(triax.stress[2]+triax.stress[1]+triax.stress[0])/3 ,
                D=(triax.stress[2]-triax.stress[1])/sigmaIso,
                R=3*(triax.stress[2]-triax.stress[1])/(triax.stress[2]+triax.stress[1]+triax.stress[0]+1e-2),
                por=porosity(),i=O.iter,)

        print 'porosity:', porosity()
        print 'iteration', O.iter

O.run(5000000,True)

plot.saveDataTxt('Uncertainty-compect300-6.txt')
plot.plots={'ezz':('szz')}
plot.plot()

def triaxFinished():
 print 'Compaction finished'
 O.pause()

However, when I run the code again, I reach to a different results. But we know that the initial sample is the same.
Where does this uncertainty come from?Why the stress-strain curves are different for the same initial sample?

Thank you very much for your patient and help in advance.

Best Reagrds

Alireza

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
2019-08-27
Last query:
2019-08-27
Last reply:
2019-08-27
Best Robert Caulk (rcaulk) said : #1

>I reach to a different results.

Quantification would be quite helpful. Probably [1].

[1]http://yade-dem.org/doc/formulation.html#result-indeterminism

Alireza Sadeghi (asadeghime) said : #2

Thanks Robert Caulk, that solved my question.