[Yade-users] [Question #654914]: convergence issue! using unbalancedForce()
New question #654914 on Yade: https://answers.launchpad.net/yade/+question/654914 Dear Friends, I am not sure why my below script, does not converge, even by increasing the micro parameters such as friction angle, the simulation does not reach to target and gives me flat surface of grains instead of a heap - it is a time consuming process . can you please advise me where is my mistake? #!/usr/bin/python from yade import pack,utils, qt, plot pred = pack.inAlignedBox((0,0,0),(0.067,0.067,0.067)) #create material. #soil1 = CohFrictMat(young=30e7,poisson=0.3,frictionAngle=radians(30),density=2600.0,normalCohesion=10e9, shearCohesion=80e9,alphaKr=0.15,label='soil') soil1 = CohFrictMat(alphaKr=0.15,young=30e9,poisson=0.4,density=2600,frictionAngle=radians(36.5),momentRotationLaw=True,etaRoll=0.3,label='spheres') #color=(1,0,0) red color #soil1 = FrictMat(alphaKr=1.7,young=30e6,poisson=0.3,frictionAngle=radians(30),density=2600.0,etaRoll=.4,label='soil') O.materials.append(soil1) O.bodies.append(utils.wall(0,axis=1,sense=1)) O.materials.append(CohFrictMat(young=30e6,poisson=0.3, frictionAngle = radians(30) , label='wallmat')) #O.materials.append(FrictMat(young=30e9,poisson=0.3, frictionAngle = radians(30) , label='wallmat')) wallmat = O.materials[-1] spheres=SpherePack() spheres=pack.randomDensePack(pred,radius=.0025,rRelFuzz=0,material='soil',spheresInCell=1000,color=(1,0,0),returnSpherePack=True) spheres.toSimulation() #O.bodies.append(spheres) # # O.engines=[ ForceResetter(),#reset forces InsertionSortCollider([Bo1_Wall_Aabb(),Bo1_Sphere_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Wall_Sphere_ScGeom()], # collision geometry [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(), Ip2_FrictMat_FrictMat_FrictPhys ()],# collision "physics" [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),Law2_ScGeom_FrictPhys_CundallStrack()] # contact law -- apply forces ), # apply gravity force to particles # damping: numerical dissipation of energy NewtonIntegrator(damping=0.4,gravity=(0,-9.81,0)), #qt.SnapshotEngine(fileBase='3d-',iterPeriod=200,label='snapshot'), # this engine will be called after 2 steps, only once PyRunner(command='checkUnbalanced()',realPeriod=50,label='checker'), PyRunner(command='addPlotData()',iterPeriod=100) ] print 'Number of elements: ', len(O.bodies) print 'Box Volume: ' print '8000,unbalancedForce()<1e-1,0.0005, alphaKr=0.15,young=30e9,poisson=0.4,density=2600,frictionAngle=radians(36.5),momentRotationLaw=True,etaRoll=0.3,' O.trackEnergy=True # set timestep to a fraction of the critical timestep # the fraction is very small, so that the simulation is not too fast # and the motion can be observed O.dt=2.1*utils.PWaveTimeStep() #makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=1) # save the simulation, so that it can be reloaded later, for experimentation #O.saveTmp()0 #checker.command='stopUnloading()' def checkUnbalanced(): if unbalancedForce()<1e-2: print('Reached target , stopping') O.pause() plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping= 0.5.txt.bz2') plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping= 0.5.txt') #plot.saveDataTxt('modi.data.bz2') # plot.saveGnuplot('bbb') is also possible # collect history of data which will be plotted def addPlotData(): # each item is given a names, by which it can be the unsed in plot.plots # the **O.energy converts dictionary-like O.energy to plot.addData arguments plot.addData(i=O.iter,unbalanced=unbalancedForce(),**O.energy) #O.save('Modifiedd.txt.bz2') #while 1: #O.run(100,True) #if unbalancedForce()<1e-5: #break plot.plots={'i':('unbalanced',None,O.energy.keys)} plot.plot() O.saveTmp() #plot.saveDataTxt('2') from yade import qt qt.View() #O.run() #from yade import qt #qt.View() #O.run() # this function is called when the simulation is finished #def finish(): # snapshot is label of qt.SnapshotEngine # the 'snapshots' attribute contains list of all saved files #makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=1) #O.pause() yade.qt.Controller(); # set parameters of the renderer, to show network chains rather than particles # these settings are accessible from the Controller window, on the second tab ("Display") as well #rr=yade.qt.Renderer() #rr.shape=False #rr.intrPhys=True plot.saveDataTxt('reposefric,.2,17,17,.004mm,young=30e6,poisson=0.3,frictionAngle=radians(30),density=2600.0') Thanks, Seti -- You received this question notification because your team yade-users is an answer contact for Yade. ___ Mailing list: https://launchpad.n
Re: [Yade-users] [Question #654914]: convergence issue! using unbalancedForce()
Question #654914 on Yade changed: https://answers.launchpad.net/yade/+question/654914 Status: Open => Answered Chareyre proposed the following answer: Hi, I'm guessing you expect a heap because of the rolling moments (?). Did you check if moments were indeed computed and non-zero? Bruno Le 2 août. 2017 15:53, "Seti" a écrit : New question #654914 on Yade: https://answers.launchpad.net/yade/+question/654914 Dear Friends, I am not sure why my below script, does not converge, even by increasing the micro parameters such as friction angle, the simulation does not reach to target and gives me flat surface of grains instead of a heap - it is a time consuming process . can you please advise me where is my mistake? #!/usr/bin/python from yade import pack,utils, qt, plot pred = pack.inAlignedBox((0,0,0),(0.067,0.067,0.067)) #create material. #soil1 = CohFrictMat(young=30e7,poisson=0.3,frictionAngle= radians(30),density=2600.0,normalCohesion=10e9, shearCohesion=80e9,alphaKr=0.15,label='soil') soil1 = CohFrictMat(alphaKr=0.15,young=30e9,poisson=0.4, density=2600,frictionAngle=radians(36.5),momentRotationLaw=True, etaRoll=0.3,label='spheres') #color=(1,0,0) red color #soil1 = FrictMat(alphaKr=1.7,young=30e6,poisson=0.3, frictionAngle=radians(30),density=2600.0,etaRoll=.4,label='soil') O.materials.append(soil1) O.bodies.append(utils.wall(0,axis=1,sense=1)) O.materials.append(CohFrictMat(young=30e6,poisson=0.3, frictionAngle = radians(30) , label='wallmat')) #O.materials.append(FrictMat(young=30e9,poisson=0.3, frictionAngle = radians(30) , label='wallmat')) wallmat = O.materials[-1] spheres=SpherePack() spheres=pack.randomDensePack(pred,radius=.0025,rRelFuzz=0, material='soil',spheresInCell=1000,color=(1,0,0),returnSpherePack=True) spheres.toSimulation() #O.bodies.append(spheres) # # O.engines=[ ForceResetter(),#reset forces InsertionSortCollider([Bo1_Wall_Aabb(),Bo1_Sphere_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Wall_Sphere_ScGeom()], # collision geometry [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(), Ip2_FrictMat_FrictMat_FrictPhys ()],# collision "physics" [Law2_ScGeom6D_CohFrictPhys_ CohesionMoment(),Law2_ScGeom_FrictPhys_CundallStrack()] # contact law -- apply forces ), # apply gravity force to particles # damping: numerical dissipation of energy NewtonIntegrator(damping=0.4,gravity=(0,-9.81,0)), #qt.SnapshotEngine(fileBase=' 3d-',iterPeriod=200,label='snapshot'), # this engine will be called after 2 steps, only once PyRunner(command='checkUnbalanced()',realPeriod= 50,label='checker'), PyRunner(command='addPlotData()',iterPeriod=100) ] print 'Number of elements: ', len(O.bodies) print 'Box Volume: ' print '8000,unbalancedForce()<1e-1,0.0005, alphaKr=0.15,young=30e9, poisson=0.4,density=2600,frictionAngle=radians(36.5),momentRotationLaw=True, etaRoll=0.3,' O.trackEnergy=True # set timestep to a fraction of the critical timestep # the fraction is very small, so that the simulation is not too fast # and the motion can be observed O.dt=2.1*utils.PWaveTimeStep() #makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=1) # save the simulation, so that it can be reloaded later, for experimentation #O.saveTmp()0 #checker.command='stopUnloading()' def checkUnbalanced(): if unbalancedForce()<1e-2: print('Reached target , stopping') O.pause() plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping= 0.5.txt.bz2') plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping= 0.5.txt') #plot.saveDataTxt('modi.data.bz2') # plot.saveGnuplot('bbb') is also possible # collect history of data which will be plotted def addPlotData(): # each item is given a names, by which it can be the unsed in plot.plots # the **O.energy converts dictionary-like O.energy to plot.addData arguments plot.addData(i=O.iter,unbalanced=unbalancedForce(),**O.energy) #O.save('Modifiedd.txt.bz2') #while 1: #O.run(100,True) #if unbalancedForce()<1e-5: #break plot.plots={'i':('unbalanced',None,O.energy.keys)} plot.plot() O.saveTmp() #plot.saveDataTxt('2') from yade import qt qt.View() #O.run() #from yade import qt #qt.View() #O.run() # this function is called when the simulation is finished #def finish(): # snapshot is label of qt.SnapshotEngine # the 'snapshots' attribute contains list of all saved files #makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=1) #O.pause() yade.qt.Controller(); # set parameters of the renderer, to show network chains rather than particles # these settings are accessible from the Controller window, on the second tab ("Display") as well #rr=yade.qt.Renderer() #rr.shape=False #rr.intrPhys=True plot.saveDataTxt('reposefric,.2,17,17,.
Re: [Yade-users] [Question #654914]: convergence issue! using unbalancedForce()
Question #654914 on Yade changed: https://answers.launchpad.net/yade/+question/654914 Status: Answered => Open Seti is still having a problem: Hi Bruno, Thanks for your response.how I can record moments? also I changed material property to cohesive one as per below: soil1 = CohFrictMat(young=30e6,poisson=0.4,frictionAngle=radians(36.5),density=2600.0,normalCohesion=1e5, shearCohesion=.3e5,alphaKr=0.15,etaRoll=0.3,label='soil') now the sample explodes. can you please advise me how I can fix it? thanks, Seti -- 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
Re: [Yade-users] [Question #654914]: convergence issue! using unbalancedForce()
Question #654914 on Yade changed: https://answers.launchpad.net/yade/+question/654914 Status: Open => Answered Robert Caulk proposed the following answer: Hello, I imagine your simulation is not stable because you are using a timestep > maxAllowable: O.dt=2.1*utils.PWaveTimeStep() You need to use a fraction of the PWave informed time step to maintain stability [1]. Otherwise you are integrating blindly :-) [1]https://yade-dem.org/doc/formulation.html#stability-considerations -- 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