New question #691009 on Yade: https://answers.launchpad.net/yade/+question/691009
I had an issue with ViscElMat, started to write a question, ended up solving it myself. So now my question is really: is this a bug or a feature? If you have a material like this ViscElMat(young=200e9,poisson=0.7,frictionAngle=0, en = 0.5 , density=rho , label='ve') and use InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_ViscElMat_ViscElMat_ViscElPhys()],[Law2_ScGeom_ViscElPhys_Basic()] ), in O.engines the resulting behavior is completely elastic in the normal direction. The coefficient of restitution is completely ignored. Same behavior regardless of the value of en. (A full working example is below). Now if you do: ViscElMat(young=200e9,poisson=0.7,frictionAngle=0, en = 0.5 , et=1.0, density=rho , label='ve') Then you get the expected viscoelastic behavior, with differing response as en is changed. But you also get the exact same behavior with this ViscElMat(young=200e9,poisson=0.7,frictionAngle=0, en = 0.5 , et=0.0, density=rho , label='ve') or even this ViscElMat(young=200e9,poisson=0.7,frictionAngle=0, en = 0.5 , et=1000.0, density=rho , label='ve') The value of et is completely ignored, as long as its specified. So if the value is ignored, why force the user to specify it? Why not just ignore it all the time? Is this a bug, or was this done intentionally for some reason? FWIW, The fact that et is ignored is mentioned in the documentation for Law2_ScGeom_ViscElPhys_Basic, but the fact that you get elastic behavior if et is omitted is not. Using yade version 20200511-3819~5bf8512~buster1 ################################################ import matplotlib.pyplot as pyplot from yade import qt, plot qt.View() #open the controlling and visualization interfaces box_x = 0.05 box_y = 0.05 box_z = 0.05 particle_dia = 0.005 young2 = 200e9 rho = 8230 mn = Vector3(0, box_y, 0) mx = Vector3(box_x,2*box_y, box_z) #corners of the initial packing thick = 2*particle_dia # the thickness of the walls global ballIds #first create a very tall loose pack # sp=pack.SpherePack() bigmx = (mx[0], 3 * mx[1], mx[2]) restitution = 0.8 #this always gives elastic behavior. ball rebounds more or less exactly to starting height O.materials.append(ViscElMat(young=young2,poisson=0.7,frictionAngle=0, en = restitution , density=rho , label='ve')) #this give viscoelastic behavior. ball rebounds to 64% of initial height as expected. et is ignored, as long as it is specificed. #O.materials.append(ViscElMat(young=young2,poisson=0.7,frictionAngle=0, en = restitution , et=1000, density=rho , label='ve')) ball = sphere( (mx[0]/2, 2*mx[1] , mx[2]/2 ) , particle_dia/2, material='ve' ) ballIds = O.bodies.append(ball) walls=utils.aabbWalls([mn,bigmx],thickness=thick,oversizeFactor=1.5,material='ve') wallIds=O.bodies.append(walls) #turn on gravity and let it settle O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()] ), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_ViscElMat_ViscElMat_ViscElPhys()], [Law2_ScGeom_ViscElPhys_Basic()] ), NewtonIntegrator(gravity=(0,-9.81,0),damping=0.0), PyRunner(command='addPlotData()', iterPeriod=100), ] O.dt=.05*PWaveTimeStep() def addPlotData(): plot.addData(time=O.time , pos = (O.bodies[ballIds].state.pos[1]-box_y)/0.15 ) plot.plots={'time':('pos')} plot.plot() #O.run(-1, True) -- 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