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.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to