New question #693413 on Yade: https://answers.launchpad.net/yade/+question/693413
Dear all, I've been trying to model the cohesive frictional model under uniaxial force. The problems are: 1. when the normalCohesion is low (eg.1e7), the stress-strain relationship behaves wired, going up and down rapidly. At first, I thought it was due to the repulsive force at the beginning, so I make i.phys.unp = i.geom.penetrationDepth as #266828[1] and set dt=0 when create the interaction as # 630910[2]. but still cannot resolve this issue. 2. when I set both normalCohesion and shearCohesion to 1e9 and start counting the crack number, I find that the number of crack fluctuate a lot. this made me confused because I've set the setCohesionOnNewContacts=False, how would the number of cracks decrease if there was no new bond forming? By the way, the pattern of the crack is also a bit strange, what I am expecting is that near the peak strength, there supposed to be a surge in the crack number and remain steady after the peak. 3. also the model seems have no difference whether I set fragile as True or False, any suggestions is appreciated! Thanks, Libby [1].https://answers.launchpad.net/yade/+question/266828 [2].https://answers.launchpad.net/yade/+question/630910 #######code#### from yade import pack,qt,plot isoPrestress=0 sphereRadius=.015 normalCohesion=1e9 shearCohesion=1e9 RollingStiffness=1 idConcrete=O.materials.append(CohFrictMat(young=23.1e9,poisson=0.4,frictionAngle=atan(0.5),density=2036,normalCohesion=normalCohesion,shearCohesion=shearCohesion,fragile=False)) spp=randomDensePack(inAlignedBox((0,0,0),(.5,.5,2)),radius=sphereRadius,rRelFuzz=1/3,returnSpherePack=True,spheresInCell=2000,material=idConcrete) # memoizeDb='/tmp/bending2DPackCache.sqlite' spp.toSimulation() for b in O.bodies: b.shape.color=(0,1,0) ### define constant variables factor=1.5 damping=.4 strainRateTension=50 ## render the scale of the displacement renderer=qt.Renderer() renderer.dispScale=(10,10,10) ## set the render scale bb=uniaxialTestFeatures() ## extract the information for the uniaxial test negIds,posIds,axis,crossSectionArea=bb['negIds'],bb['posIds'],bb['axis'],bb['area'] #O.dt=0.5*PWaveTimeStep() ## set critical time step O.engines=[ ForceResetter(), InsertionSortCollider([ Bo1_Sphere_Aabb(aabbEnlargeFactor=factor,label='bo1s'),],verletDist=.05*sphereRadius), ## expand the collision detection to creat initial interactions ## InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=factor,label='ig2ss'), ## create collision geometry ], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False)], ## creat collision phys [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=False)], ), #GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.3), NewtonIntegrator(damping=damping,label='damper'), #UniaxialStrainer(strainRate=strainRateTension,axis=axis,asymmetry=0,posIds=posIds,negIds=negIds,crossSectionArea=crossSectionArea,blockDisplacements=False,blockRotations=False,setSpeeds=True,label='strainer'),## apply strain on the both end of the body along the axis and the strain speed is set at the beginning directly PyRunner(iterPeriod=1,command='addPlotData()'), PyRunner(realPeriod=4,command='stopIfDamaged()',label='damageChecker'), ## set the stop criteria for the simulation #qt.SnapshotEngine(fileBase='3d',iterPeriod=1000,label='snapshot'), #PyRunner(command='finish()',iterPeriod=20000 ] #sigma=strainer.avgStress+isoPrestress ## set equlibrum for overlapping spheres #for b in O.bodies: #b.dynamic=False O.dt=0 O.step() ## go one step to creat interactions bo1s.aabbEnlargeFactor=1 ## reset the interaction radius ig2ss.interactionDetectionFactor=1 O.dt=0.3*PWaveTimeStep() for i in O.interactions: i.phys.cohesionDisablesFriction=True i.phys.unp = i.geom.penetrationDepth O.engines=O.engines[:4]+[UniaxialStrainer(strainRate=strainRateTension,axis=axis,asymmetry=0,posIds=posIds,negIds=negIds,crossSectionArea=crossSectionArea,blockDisplacements=False,blockRotations=False,setSpeeds=True,label='strainer')]+O.engines[4:] #for b in O.bodies: #b.dynamic=True ### reinforcing the boundary dim=utils.aabbExtrema() if strainRateTension>0: layerSize=.05 height=dim[1][axis]-dim[0][axis] for b in O.bodies: if isinstance(b.shape,Sphere): if (b.state.pos[axis]<(dim[0][axis]+layerSize*height)) or (b.state.pos[axis]> (dim[1][axis]-layerSize*height)): b.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*=1000 i.phys.shearAdhesion*=1000 def stopIfDamaged(): if O.iter<2 or 'sigma' not in plot.data : return sigma=plot.data['sigma'] extremum=max(sigma) if abs(strainer.strain)>5e2 : ## stop the test if the sigma is too small or strain is too large ##abs(sigma[-1]/extremum)<0.5 or print("damaged") O.pause() #####count crack number def addPlotData(): crackCount=0 for i in O.interactions: if i.phys.cohesionBroken==True: crackCount+=1 print('crack number=',crackCount) plot.addData(i=O.iter,sigma=strainer.avgStress,crackNumber=crackCount,eps=strainer.strain) plot.plots={'eps':('sigma'),'eps ':('crackNumber')} 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 : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp