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 : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help : https://help.launchpad.net/ListHelp