← Back to team overview

yade-users team mailing list archive

[Question #677263]: Axial stress does decrease at the beginning of the deviatoric stress loading in triaxial test

 

New question #677263 on Yade:
https://answers.launchpad.net/yade/+question/677263

Hi,

I am conducting a simulation of particle breakage in a triaxial test, but at present I'm facing a strange problem: Normally, after the consolidation is completed, the deviatoric loading is entered, but deviatoric pressure is negative at the initial stage,  which means that the axial pressure at this stage is less than the confining pressure. In fact, for example, the set confining pressure is 100 kPa, and after the consolidation is completed, the pressures in all three directions are both 100 kpa, then entering deviatoric loading, the axial stress should be increased from 100 kpa. But in my test, after consolidation,  confining pressure is 100 kpa in three directions, but in deviatoric loading , axial stress is changed to 80 kpa , as the axial strain increases, the axial stress will gradually increase. When the axial strain is about 5%, the deviatoric stress will be greater than 0.

Do you have any idea about why deciatoric stress  is negative in the initial phase of the deviatoric loading?

I urgently need your help . Thanks advance!

Regards!
Cloud

this is my MWE(MWE1.py and MWE2.py are two python file, run MWE1.py first ):
# MWE1.py
from yade import pack,export,ymport,bodiesHandling
import random
mn=(0,0,0)
mx = (40e-3,40e-3,80e-3)
sp=pack.SpherePack()
sp.makeCloud(mn,mx,-1,0.15,500,False,0.95,seed=1) # 500 particles
sp.toSimulation()
export.text('/tmp/123.txt')

import random
random.seed(1)
sp = ymport.text('/tmp/123.txt')
colors = [randomColor() for s in sp]

def Children(b):
    p = b.state.refPos
    r = b.shape.radius
    s1 = sphere(p,0.5*r,color=colors[si])
    s2 = sphere(p+(.75*r,0,0),.25*r,color=colors[si])
    s3 = sphere(p+(-.75*r,0,0),.25*r,color=colors[si])
    s4 = sphere(p+(0,.75*r,0),.25*r,color=colors[si])
    s5 = sphere(p+(0,-.75*r,0),.25*r,color=colors[si])
    return s1,s2,s3,s4,

for si,i in enumerate(sp):
	oriBody = Quaternion(Vector3(1,0,0),random.random()*(pi/2))
	oriBody *= Quaternion(Vector3(0,1,0),random.random()*(pi/2))
	oriBody *= Quaternion(Vector3(0,0,1),random.random()*(pi/2))
	b=O.bodies[si]
	children = Children(b)
	O.bodies.erase(si)
	a=bodiesHandling.spheresModify(children,orientation=oriBody,copy=True)
	ids=O.bodies.append(a)
	for j in ids:
		O.bodies[j].agglomerate=si

export.textExt('/tmp/456.txt','x_y_z_r_attrs',attrs=['b.agglomerate'])





#MWE2.py
from yade import ymport
key='haxi_'
mn = (0,0,0)
mx = (40e-3,40e-3,80e-3)
young = 300e6
compFricDegree = 30
damp = 0.6
stabilityThreshold = 0.01
rate = -0.02
finalFricDegree = 20
targetPorosity = 0.45
poisson = 0.22
confiningS = 100e3

O.materials.append(FrictMat(
    young=young,
    poisson=poisson,
    frictionAngle=0,
    density=0,
    label='walls')
    )

walls = aabbWalls([mn,mx],thickness=0,material='walls',wire=True)
wallIds = O.bodies.append(walls)

O.materials.append(CohFrictMat(
    young=young,
    poisson=poisson,
    isCohesive=True,
    frictionAngle=radians(compFricDegree),
    density=2650,
    momentRotationLaw=True,
    normalCohesion=1e20, # Cn
    shearCohesion=1e20, # Cs
    alphaKr=0.2, # rolling stiffness
    label='spheres')
    )

attrs = []
sp = ymport.textExt('/tmp/456.txt',format='x_y_z_r_attrs',attrs=attrs)
n = max(int(a[0]) for a in attrs)+1
colors = [randomColor() for _ in xrange(n)]
for s,a in zip(sp,attrs):
	aa = int(a[0])
	s.agglomerate = aa
	s.shape.color = colors[aa]
O.bodies.append(sp) # the last defined material is usedself.


triax=TriaxialStressController(
	maxMultiplier=1.+2e4/young, # spheres growing factor (fast growth)
	finalMaxMultiplier=1.+2e3/young, # spheres growing factor (slow growth)
	thickness = 0,
	stressMask = 7,
	internalCompaction=False,
)


factor=1.05
O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=factor,label='bo1aabbs'),Bo1_Box_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=factor,label='ig2sss'),Ig2_Box_Sphere_ScGeom()],
        [Ip2_FrictMat_FrictMat_FrictPhys() ,Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True)],
        [Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment(
            useIncrementalForm=True,
            label='conhesiveLaw')]
	),
    GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=1000,timestepSafetyCoefficient=0.5),
    triax,
    TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+key,truncate=1),
    NewtonIntegrator(damping=damp),
]

O.run(1,True)

ig2sss.interactionDetectionFactor = bo1aabbs.aabbEnlargeFactor = 1
for i in O.interactions:
    if not isinstance(i.phys,CohFrictPhys):
        continue
    b1,b2 = [O.bodies[ii] for ii in (i.id1,i.id2)]
    if b1.agglomerate != b2.agglomerate:
        O.interactions.erase(i.id1,i.id2)
    else:
        i.phys.normalAdhesion = 2.9  # normalAdhesion
        i.phys.shearAdhesion = 6.5  # shearAdhesion
        i.phys.unp = i.geom.penetrationDepth

O.run(1,True)

yade.qt.Controller(), yade.qt.View()

#######################################
###   APPLYING CONFINING PRESSURE   ###
#######################################
triax.goal1=triax.goal2=triax.goal3=-confiningS

while 1:
 O.run(1000, True)
 unb=unbalancedForce()
 print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
 if unb<stabilityThreshold and abs(-confiningS-triax.meanStress)/confiningS<0.001:
    break

O.save('confinedState'+key+'.yade.gz')
print "###      Isotropic state saved      ###"

triax.width0=triax.width
triax.depth0=triax.depth
triax.height0=triax.height
#############################
##   DEVIATORIC LOADING   ###
###############################
setContactFriction(radians(finalFricDegree))
triax.stressMask = 3
triax.goal3= rate
triax.goal1=-confiningS
triax.goal2=-confiningS


O.saveTmp()


from yade import plot

## a function saving variables
def history():
 	plot.addData(
            e11=-triax.strain[0],
            e22=-triax.strain[1],
            e33=-triax.strain[2],
 		    ev=triax.volumetricStrain,
		    s11=-triax.stress(triax.wall_right_id)[0],
		    s22=-triax.stress(triax.wall_top_id)[1],
		    s33=-triax.stress(triax.wall_front_id)[2],
            devi = -triax.stress(triax.wall_front_id)[2] + triax.stress(triax.wall_top_id)[1],
		    i=O.iter)

def stoploading():
    axial_strain = abs(triax.strain[2])
    if axial_strain > 0.2:
        print 'axial strain reach Limitation, stop loading!'
        O.pause()

if 1:
    O.engines=O.engines+[PyRunner(iterPeriod=500,command='history()',label='recorder')]
    O.engines=O.engines+[PyRunner(command='stoploading()',iterPeriod=1000)]

##O.run(100,True)

plot.plots={'e33':('ev',),' e33 ':('devi')}

# display on the screen (doesn't work on VMware image it seems)
plot.plot()

# In that case we can still save the data to a text file at the the end of the simulation, with:
plot.saveDataTxt('results'+key)
#or even generate a script for gnuplot. Open another terminal and type  "gnuplot plotScriptKEY.gnuplot:
plot.saveGnuplot('plotScript'+key)


-- 
You received this question notification because your team yade-users is
an answer contact for Yade.