Question #688439 on Yade changed: https://answers.launchpad.net/yade/+question/688439
Luc Sibille proposed the following answer: Did you check if there is actually a rolling moment not nil at the contacts between spheres? Luc Le 09/02/2020 à 10:23, Elham Hosseinkhani a écrit : > Question #688439 on Yade changed: > https://answers.launchpad.net/yade/+question/688439 > > Elham Hosseinkhani posted a new comment: > Hello, > Unfortunately,I couldn't get the results that I expected based on the papers. > I changed my script and modify the script in YADE examples. I added > CohesionMomentLaw and necessary parameters like alphaKr and etaRoll. I get > PrincipalStressRatio about 2.4 with this parameters in this script. But I > expect more PrincipalStressRatio after using CohesionMomentLaw. > > Could you please run this script and check PrincipalStressRatio? > Is there any problem that i couldn't get changes in PrincipalStressRatio and > peak friction angle? > > # -*- coding: utf-8 -*- > from yade import pack > > > nRead=readParamsFromTable( > num_spheres=10000, > young = 500e6, > poisson = 0.4, > compFricDegree = 30, > alphaKr = 1.25, > etaRoll = 0.55, > finalFricDegree = 30, > targetPorosity = 0.4, > confining =-300000, > unknownOk=True > ) > from yade.params import table > num_spheres=table.num_spheres > young = table.young > poisson = table.poisson > compFricDegree = table.compFricDegree > alphaKr = table.alphaKr > etaRoll = table.etaRoll > finalFricDegree = table.finalFricDegree > targetPorosity = table.targetPorosity > confining = table.confining > rate=-0.02 > damp=0.2 > > key='_P='+str(confining) > stabilityThreshold=0.01 > mn,mx=Vector3(0,0,0),Vector3(1,2,1) > > O.materials.append(CohFrictMat(young=young,poisson=poisson,density=2600,frictionAngle=radians(compFricDegree),normalCohesion=1e6,shearCohesion=1e6,alphaKr=alphaKr,alphaKtw=1e-10,momentRotationLaw=True,etaRoll=etaRoll,label='spheres')) > O.materials.append(FrictMat(young=young,poisson=poisson,frictionAngle=0,density=0,label='walls')) > > walls=aabbWalls([mn,mx],thickness=0,material='walls') > wallIds=O.bodies.append(walls) > > sp=pack.SpherePack() > > clumps=False > if clumps: > > volume = (mx[0]-mn[0])*(mx[1]-mn[1])*(mx[2]-mn[2]) > mean_rad = pow(0.09*volume/num_spheres,0.3333) > > c1=pack.SpherePack([((-0.2*mean_rad,0,0),0.5*mean_rad),((0.2*mean_rad,0,0),0.5*mean_rad)]) > sp.makeClumpCloud(mn,mx,[c1],periodic=False) > sp.toSimulation(material='spheres') > O.bodies.updateClumpProperties() > else: > sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1) #"seed" make > the "random" generation always the same > O.bodies.append([sphere(center,rad,material='spheres') for center,rad in > sp]) > > triax=TriaxialStressController( > maxMultiplier=1.+2e5/young, > finalMaxMultiplier=1.+2e4/young, > thickness = 0, > stressMask = 7, > internalCompaction=True, > ) > > newton=NewtonIntegrator(damping=damp) > > O.engines=[ > ForceResetter(), > InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), > InteractionLoop( > [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], > > [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label="cohesiveIp")], > > [Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment( > useIncrementalForm=True, > always_use_moment_law=False, > label='cohesiveLaw')] > ), > > GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8), > triax, > TriaxialStateRecorder(iterPeriod=100,file='WallStresses'), > newton > ] > > Gl1_Sphere.stripes=0 > if nRead==0: yade.qt.Controller(), yade.qt.View() > > triax.goal1=triax.goal2=triax.goal3=confining > > while 1: > O.run(1000, True) > unb=unbalancedForce() > print ('unbalanced force:',unb,' mean stress: ',triax.meanStress) > if unb<stabilityThreshold and > abs(confining-triax.meanStress)/abs(confining)<0.01: > break > > import sys > while triax.porosity>targetPorosity: > compFricDegree = 0.95*compFricDegree > setContactFriction(radians(compFricDegree)) > print ("\r Friction: ",compFricDegree," porosity:",triax.porosity) > sys.stdout.flush() > O.run(500,1) > > ############################# > ## DEVIATORIC LOADING ### > ############################# > > triax.internalCompaction=False > setContactFriction(radians(finalFricDegree)) > triax.stressMask = 5 > triax.goal2=rate > triax.goal1=confining > triax.goal3=confining > O.engines[2].lawDispatcher.functors[1].always_use_moment_law = True > #cohesiveLaw.always_use_moment_law=True > triax.wall_bottom_activated=False > newton.damping=0.1 > O.saveTmp() > > from yade import plot > > def history(): > plot.addData(e11=-triax.strain[0], e22=-triax.strain[1], > e33=-triax.strain[2], > ev=-triax.strain[0]-triax.strain[1]-triax.strain[2], > s11=-triax.stress(triax.wall_right_id)[0], > s22=-triax.stress(triax.wall_top_id)[1], > s33=-triax.stress(triax.wall_front_id)[2], > > PrincipalStressRatio=abs((-triax.stress(3)[1])/((-triax.stress(triax.wall_right_id)[0]-triax.stress(triax.wall_front_id)[2])/2)), > > q=-triax.stress(triax.wall_top_id)[1]-(-triax.stress(triax.wall_right_id)[0]-triax.stress(triax.wall_front_id)[2])/2.0, > i=O.iter) > > if 1: > > O.engines=O.engines[0:5]+[PyRunner(iterPeriod=20,command='history()',label='recorder')]+O.engines[5:7] > else: > O.engines[4]=PyRunner(iterPeriod=20,command='history()',label='recorder') > > O.run(1000,True) > plot.plots={'e22':('PrincipalStressRatio',None,'ev')} > plot.plot() > -- Luc Sibille Université Grenoble Alpes / IUT1 de Grenoble Laboratoire 3SR: Sols, Solides, Structures, Risques Tel lab.: +33 (0)4 76 82 63 48 Tel IUT: +33 (0)4 76 82 53 36 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

