yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #03409
Re: Elastic energy
-
To:
yade-users@xxxxxxxxxxxxxxxxxxx
-
From:
Janek Kozicki <janek_listy@xxxxx>
-
Date:
Mon, 5 Jul 2010 19:43:54 +0200
-
Face:
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAALVBMVEUBAQEtLS1KSkpRUVFXV1dYWFhjY2Nzc3N3d3eHh4eKioqdnZ24uLjLy8vc3NxVIagyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2AIVEzgS1fgQtQAAAjRJREFUOMtt1DFv00AUAOAzFQNbjigSyoQaRaBMhKgLUyKXpVNNeUpk9vyDqFJhQ1kiBuaqAwJCqvPtSLY7RlTn5+5IdnYkkt/AOyfxXVLe5vf53Z1875kd34tOEax8djmj6GyjhB5bxz50GdsVZr9fqRjZwAtKOJw5Wqs2MMZ16ALHsaDncF7xAHix1oEFHAB8f+pRjcO4gfZDykcYzbiucRolOLUJ6kjA0xtVt+A6TySlM0RajIpK6DzwKZ/nOYbF/gclHMo1ZOHYY/+Ha+AWuM+3oMS4eeqYzZ8FiCltgUqI8cd2wwAVpJk+8LWYjBtnJdQpHQqJMd4Oxt4bU9ESiFGc5hkqaH74asAX4iabP5I5gZ+qjgGlJCqZa3h3lxhoeVcSE1qLQC4sqKOK9MGW9E3izFqqHokoztLFEgXg31sbZEKnWi2T74A4NxfVQqlkjKtcAWD+zcArFEES01dR0E/nnV0IgugmDd/2L84sOAouRBBHEc7gtc8teDkRlE0iNQPo2w3Xhh/D4TCIQ4LRLoTvgwjj6RRgavdurxYGMaIuGOyAW/PpNlCcU9/93AHenAWYjPoAwa+G3e3to/MgFNTAEKvKDjzuCzHTnY3qqdXtx24VijzQfZ0yewZ5cwRFQaa+mIYr1uI0I76+3W4xhlvoVRwOA0Fdl64HlJnxP6T8YpX/Lga4Wv4A3ErrU5oTfN7Mu/llXMl8RXEPji/lQkN3H7qXqgC2By47EXeU/7PJ/wPxRKMnuZwIeAAAAABJRU5ErkJggg==
-
In-reply-to:
<4C320186.6080504@hmg.inpg.fr>
Bruno Chareyre said: (by the date of Mon, 05 Jul 2010 18:00:06 +0200)
> >
> >> (If an interaction is broken, then it is a different issue, i.e. that
> >> dissipated energy of broken interactions should be saved somehow, since
> >> otherwise we lose the number).
> >>
> >
> > the calculation of plasticDissipation is incremental. If the contact
> > breaks, then nothing is lost, you only stop incrementing it.
> >
> Good point. Something is missed each time a contact is lost, since this
> contact dissipated something on [t,t+dt] even if it is lost at time t+dt.
> This can be negligible in dense packing (triaxial) but significant in
> bouncing spheres.
> It doesn't explain the excessive growth of plasticE though...
>
> I'm wondering if the problem is not just the time integration scheme :
> if a bouncing is described in 2-3 steps, the approximation of
> derivatives is horrible, and it might well create energy artificialy.
> Perhaps Cundall introduced global damping for a reason...
is it enough if we decrease timestep 1000 times?
I made a comparison with jobs=1 and with the same scene (so the
curves should be all identical). They are not.
See attached plot. And also the script (Chiara: it is without
my shearDisp modification, it is using the correct formula).
on unrelated note:
A more technical question, since I am learning to use plot module.
Can I set a plot title? - a big text above the plot box.
--
Janek Kozicki http://janek.kozicki.pl/ |
Attachment:
energy_BasicLaw_comparison.png
Description: PNG image
#!/usr/local/bin/yade-trunk -j 1
# -*- coding: utf-8 -*-
# -*- encoding=utf-8 -*-
# Script to monitor the energy of a system
from yade import utils
#-----------------------------------------------------
# material
#-----------------------------------------------------
young=600.0e6
poisson=0.6
density=2.60e3
frictionAngle=radians(0)
O.materials.append(FrictMat(young=young,poisson=poisson,density=density,frictionAngle=frictionAngle,label='mat'))
#-----------------------------------------------------
# geometry
#-----------------------------------------------------
# create a random packing in a box space
from yade import pack
sp=pack.SpherePack()
mn=Vector3(0,0,0)
mx=Vector3(1.0,1.0,1.0)
ntot=10
R=0.1
std=0.0
sp.makeCloud(minCorner=mn,maxCorner=mx,rMean=R,rRelFuzz=std,num=ntot,periodic=False,porosity=0.85)
for s in sp:
O.bodies.append(utils.sphere(s[0],s[1]))
# create some boundaries
wires=True
O.bodies.append(utils.box(center=[-0.1,0.5,0.5],extents=[.0025,1.0,1.0],dynamic=False,wire=wires,material='mat'))
O.bodies.append(utils.box(center=[1.1,0.5,0.5],extents=[.0025,1.0,1.0],dynamic=False,wire=wires,material='mat'))
O.bodies.append(utils.box(center=[1.1/2,-0.1,0.5],extents=[1.0,0.0025,1.0],dynamic=False,wire=wires,material='mat'))
O.bodies.append(utils.box(center=[1.1/2,1.1,0.5],extents=[1.0,0.0025,1.0],dynamic=False,wire=wires,material='mat'))
O.bodies.append(utils.box(center=[0.5,0.5,-0.1],extents=[1.0,1.0,0.0025],dynamic=False,wire=wires,material='mat'))
O.bodies.append(utils.box(center=[0.5,0.5,1.1],extents=[1.0,1.0,0.0025],dynamic=False,wire=wires,material='mat'))
#-----------------------------------------------------
# initial condition (velocities)
#-----------------------------------------------------
v=7.0
for b in O.bodies:
if b.id%2 == 0:
b.state.vel=Vector3(-v,v,-v) # assign an initial velocity
else:
b.state.vel=Vector3(v,-v,v) # assign an initial velocity
#-----------------------------------------------------
# list of engines
#-----------------------------------------------------
O.engines=[
ForceResetter(),
BoundDispatcher([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
InsertionSortCollider(),
InteractionDispatchers(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_Basic(label='dry')]
),
NewtonIntegrator(damping=0.0), # *** NO DAMPING ***
PeriodicPythonRunner(iterPeriod=10,command='monitoring()')
]
#-----------------------------------------------------
# time step
#-----------------------------------------------------
O.dt=.1*utils.PWaveTimeStep()
O.saveTmp('init')
from yade import qt
qt.View()
qt.Controller()
#-----------------------------------------------------
# plot some results
#-----------------------------------------------------
from math import *
from yade import plot
plot.plots={'t':('Ek','Eel','Slip','Etot'),'t_':('Slip')}
def monitoring():
plot.addData(Ek=utils.kineticEnergy(),Eel=dry.elasticEnergy(),Slip=dry.plasticDissipation(),t=O.time,t_=O.time,
Etot=utils.kineticEnergy()+dry.elasticEnergy()+dry.plasticDissipation())
O.saveTmp()
O.loadTmp()
O.materials[0].frictionAngle=radians(0)
O.run(10000,True)
O.materials[0].frictionAngle=radians(25)
O.run(30000,True)
plot.plot()
plot.splitData()
O.loadTmp()
O.materials[0].frictionAngle=radians(0)
dry.traceEnergy=True
O.run(10000,True);
O.materials[0].frictionAngle=radians(25)
O.run(30000,True)
plot.plot()
plot.splitData()
O.loadTmp()
O.materials[0].frictionAngle=radians(0)
dry.traceEnergy=True
dry.neverErase=True
O.run(10000,True);
O.materials[0].frictionAngle=radians(25)
O.run(30000,True)
plot.plot()
plot.splitData()
O.loadTmp()
O.materials[0].frictionAngle=radians(0)
dry.traceEnergy=True
dry.neverErase=True
O.dt=.001*utils.PWaveTimeStep()
O.run(1000000,True)
O.materials[0].frictionAngle=radians(25)
O.run(3000000,True)
plot.plot()
plot.splitData()
Follow ups
References
-
Elastic energy
From: chiara modenese, 2010-07-02
-
Re: Elastic energy
From: chiara modenese, 2010-07-02
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-04
-
Re: Elastic energy
From: chiara modenese, 2010-07-04
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-04
-
Re: Elastic energy
From: chiara modenese, 2010-07-04
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-04
-
Re: Elastic energy
From: chiara modenese, 2010-07-04
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-04
-
Re: Elastic energy
From: chiara modenese, 2010-07-04
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-04
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-05
-
Re: Elastic energy
From: chiara modenese, 2010-07-05
-
Re: Elastic energy
From: Bruno Chareyre, 2010-07-05
-
Re: Elastic energy
From: Bruno Chareyre, 2010-07-05
-
Re: Elastic energy
From: Janek Kozicki, 2010-07-05
-
Re: Elastic energy
From: Bruno Chareyre, 2010-07-05