← Back to team overview

yade-users team mailing list archive

Re: [Question #698058]: confused by UniaxialStrainer's parameters and uniaxial compression test

 

Question #698058 on Yade changed:
https://answers.launchpad.net/yade/+question/698058

    Status: Answered => Open

Ziyu Wang is still having a problem:
Thanks for your reply!
Your reply has helped me solve the above problems.With the solution you provided, I solved problems 1 and 2, and also figured out the problem of sign.Thank you again!
However, when I ran the modified code, I found that the stress-strain curve of uniaxial test remained linear, and there was no sign of failure.I guess it's due to the material parameters.I hope someone can help me.
Thanks!

Below is my script.

#######code#######
from yade import pack,qt,plot
isoPrestress=0
sphere_radius=2e-3
normalCohesion=1e9
shearCohesion=1e9
RollingStiffness=1

material_1=O.materials.append(CohFrictMat(young=1e9,poisson=0.4,frictionAngle=atan(0.5),density=2036,normalCohesion=normalCohesion,shearCohesion=shearCohesion,fragile=False))
sp=pack.randomDensePack(pack.inCylinder((0,0,-0.05),(0,0,0.05),0.025),radius=sphere_radius,rRelFuzz=0.02,returnSpherePack=True,spheresInCell=2000)
sp.toSimulation(material=material_1)

for b in O.bodies:
	b.shape.color=(0,1,0)

factor=1.5
damping=0.4
strainRate_Tension=-0.05

#renderer=qt.Renderer()
#renderer.dispScale=(10,10,10)

bb=uniaxialTestFeatures()
negIds,posIds,axis,crossSectionArea=bb['negIds'],bb['posIds'],bb['axis'],bb['area']

O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=factor,label='bo1s'),],verletDist=0.05*sphere_radius),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=factor,label='ig2ss')],
		[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False)],
		[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=False)],
		),
	NewtonIntegrator(damping=damping,label='damper'),
	PyRunner(iterPeriod=1,command='addPlotData()'),
	PyRunner(iterPeriod=4,command='stopIfDamaged()',label='damageChecker'),
]

O.dt=0
O.step()

for i in O.interactions:
	i.phys.unp=i.geom.penetrationDepth
	

bo1s.aabbEnlargeFactor=1
ig2ss.interactionDetectionFactor=1
O.dt=0.5*PWaveTimeStep()

for i in O.interactions:
	i.phys.cohesionDisablesFriction=True

O.engines=O.engines[:4]+[UniaxialStrainer(strainRate=strainRate_Tension,axis=axis,asymmetry=0,posIds=posIds,negIds=negIds,crossSectionArea=crossSectionArea,blockDisplacements=False,blockRotations=False,setSpeeds=True,label='strainer',stressUpdateInterval=1)]+O.engines[4:]

dim=utils.aabbExtrema()

for i in posIds + negIds:
    O.bodies[i].shape.color = (1,1,1)
				
for i in O.interactions:
	if isinstance(O.bodies[i.id1].shape,Sphere) and isinstance(O.bodies[i.id2].shape,Sphere):
		if O.bodies[i.id1].shape.color==(1,1,1) or O.bodies[i.id2].shape.color==(1,1,1):
			i.phys.normalAdhesion*=600
			i.phys.shearAdhesion*=600

def addPlotData():
	plot.addData(i=O.iter,sigma=-strainer.avgStress,eps=-strainer.strain)
def stopIfDamaged():
	if O.iter<2 or 'sigma' not in plot.data : return 
	sigma=plot.data['sigma']	
	extremum=max(sigma)
	if extremum==0 : return 
	if abs(sigma[-1]/extremum)<0.3 or abs(strainer.strain)>5e2:
		print('Max stress:',extremum)
		print('damaged')
		O.pause()

plot.setLiveForceAlwaysUpdate=True
plot.plots={'eps':('sigma'),'i':('eps')}
plot.plot()
O.saveTmp()

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