← Back to team overview

yade-users team mailing list archive

[Question #691009]: et for ViscElMat with Law2_ScGeom_ViscElPhys_Basic, bug or feature?

 

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.