KeyError while accessing data from a script

Asked by janaka kumara

Hi all,

I run peri3dController_triaxialCompression.py and want to get output data. Therefore, I added iters = plot.data['iter']
stressXX = plot.data['sx'] as given in the scrip (this is just to check whether it works though I need all the data) but when I run this, it gives KeyError. Any helps to overcome this is appreciated.

Also, I am wondering what is /tmp/packDb.sqlite and how to access that.

kumara@kumara-Latitude-E5510:~$ yade peri3dController_triaxialCompression.py
Welcome to Yade 0.60
TCP python prompt on localhost:9000, auth cookie `dsausy'
XMLRPC info provider on http://localhost:21000
Running script peri3dController_triaxialCompression.py
Considering packing (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1), created Mon Oct 31 07:00:08 2011
ACCEPTED
Found suitable packing in /tmp/packDb.sqlite (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1), created Mon Oct 31 07:00:08 2011
Traceback (most recent call last):
  File "/usr/bin/yade", line 152, in runScript
    execfile(script,globals())
  File "peri3dController_triaxialCompression.py", line 34, in <module>
    iters = plot.data['iter']
KeyError: 'iter'
[[ ^L clears screen, ^U kills line. F12 controller, F11 3d view, F10 both, F9 generator, F8 plot. ]]

Regards,
Janaka
..................................................................................................................................................................................................................
# peri3dController_triaxialCompression.py
# script, that explains funcionality and input parameters of Peri3dController on the example of
# triaxial compression.
# Firstly, a hydrostatic preassure is applied, then a strain along z axis is increasing
# while x- and y- stress is constant
# The simulation is run on rotated cell to enable localization and strain softening
# (you can also try simulation with command sp.toSimulation() with no rotation,
# in this case there is almost no difference, but in script peri3dController_shear,
# the cell rotation has significant effect)

from yade import pack,plot,qt

# define material
O.materials.append(FrictMat())

# create periodic assembly of particles
initSize=1.2
sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
angle=0
rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
sp.toSimulation(rot=rot)

# plotting
plot.live=False
plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ez':('sz',)}
def plotAddData():
 plot.addData(
  iter=O.iter,iter_=O.iter,
  sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
  syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
  ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
  eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
 )
iters = plot.data['iter']
stressXX = plot.data['sx']

O.dt=utils.PWaveTimeStep()/2

# define the first part of simulation, hydrostatic compression
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_Dem3DofGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
 NewtonIntegrator(),
 Peri3dController( goal=(-1e7,-1e7,-1e7, 0,0,0), # Vector6 of prescribed final values
       stressMask=0b000111,
       nSteps=500,
       doneHook='print "Hydrostatic load reached."; O.pause()',
       youngEstimation=.5e9, # needed, when only nonzero prescribed values are stress
       maxStrain=.5,
       label='p3d'
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run(); O.wait()

# second part, z-axis straining and constant transversal stress
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_Dem3DofGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
 NewtonIntegrator(),
 Peri3dController( goal=(-1e7,-1e7,-4e-1, 0,0,0), # Vector6 of prescribed final values
       stressMask=0b000011,
       nSteps=1000,
       xxPath=[(0,1),(1,1)], # the first (time) zero defines the initial value of stress considered nonzero
       yyPath=[(0,1),(1,1)],
       doneHook='print "Simulation with Peri3dController finished."; O.pause()',
       maxStrain=.5,
       label='p3d',
       strain=p3d.strain, # continue from value reached in previous part
       stressIdeal=Vector6(-1e7,-1e7,0, 0,0,0), # continue from value reached in previous part
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run();O.wait()
plot.plot()

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Klaus Thoeni (klaus.thoeni) said :
#1

Try:

iters,stressXX = polt.data['iter'],plot.data['sx']

Maybe this solves the problem.

Klaus

On Mon, 31 Oct 2011 08:55:45 PM janaka kumara wrote:
> New question #176961 on Yade:
> https://answers.launchpad.net/yade/+question/176961
>
> Hi all,
>
> I run peri3dController_triaxialCompression.py and want to get output data.
> Therefore, I added iters = plot.data['iter'] stressXX = plot.data['sx'] as
> given in the scrip (this is just to check whether it works though I need
> all the data) but when I run this, it gives KeyError. Any helps to
> overcome this is appreciated.
>
> Also, I am wondering what is /tmp/packDb.sqlite and how to access that.
>
> kumara@kumara-Latitude-E5510:~$ yade
> peri3dController_triaxialCompression.py Welcome to Yade 0.60
> TCP python prompt on localhost:9000, auth cookie `dsausy'
> XMLRPC info provider on http://localhost:21000
> Running script peri3dController_triaxialCompression.py
> Considering packing
> (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1),
> created Mon Oct 31 07:00:08 2011 ACCEPTED
> Found suitable packing in /tmp/packDb.sqlite
> (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1),
> created Mon Oct 31 07:00:08 2011 Traceback (most recent call last):
> File "/usr/bin/yade", line 152, in runScript
> execfile(script,globals())
> File "peri3dController_triaxialCompression.py", line 34, in <module>
> iters = plot.data['iter']
> KeyError: 'iter'
> [[ ^L clears screen, ^U kills line. F12 controller, F11 3d view, F10 both,
> F9 generator, F8 plot. ]]
>
> Regards,
> Janaka
> ...........................................................................
> ...........................................................................
> ............................................................ #
> peri3dController_triaxialCompression.py
> # script, that explains funcionality and input parameters of
> Peri3dController on the example of # triaxial compression.
> # Firstly, a hydrostatic preassure is applied, then a strain along z axis
> is increasing # while x- and y- stress is constant
> # The simulation is run on rotated cell to enable localization and strain
> softening # (you can also try simulation with command sp.toSimulation()
> with no rotation, # in this case there is almost no difference, but in
> script peri3dController_shear, # the cell rotation has significant effect)
>
> from yade import pack,plot,qt
>
> # define material
> O.materials.append(FrictMat())
>
> # create periodic assembly of particles
> initSize=1.2
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSi
> ze),memoizeDb='/tmp/packDb.sqlite') angle=0
> rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
> sp.toSimulation(rot=rot)
>
> # plotting
> plot.live=False
> plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','
> ez','eyz','ezx','exy',),'ez':('sz',)} def plotAddData():
> plot.addData(
> iter=O.iter,iter_=O.iter,
> sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
> syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
> ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
> eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
> )
> iters = plot.data['iter']
> stressXX = plot.data['sx']
>
> O.dt=utils.PWaveTimeStep()/2
>
> # define the first part of simulation, hydrostatic compression
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_Dem3DofGeom()],
> [Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_Dem3DofGeom_FrictPhys_CundallSt
> rack()]), NewtonIntegrator(),
> Peri3dController( goal=(-1e7,-1e7,-1e7, 0,0,0), # Vector6 of prescribed
> final values stressMask=0b000111,
> nSteps=500,
> doneHook='print "Hydrostatic load reached."; O.pause()',
> youngEstimation=.5e9, # needed, when only nonzero
prescribed values
> are stress maxStrain=.5,
> label='p3d'
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
> ]
> O.run(); O.wait()
>
> # second part, z-axis straining and constant transversal stress
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_Dem3DofGeom()],
> [Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_Dem3DofGeom_FrictPhys_CundallSt
> rack()]), NewtonIntegrator(),
> Peri3dController( goal=(-1e7,-1e7,-4e-1, 0,0,0), # Vector6 of prescribed
> final values stressMask=0b000011,
> nSteps=1000,
> xxPath=[(0,1),(1,1)], # the first (time) zero defines the
initial
> value of stress considered nonzero yyPath=[(0,1),(1,1)],
> doneHook='print "Simulation with Peri3dController
finished.";
> O.pause()', maxStrain=.5,
> label='p3d',
> strain=p3d.strain, # continue from value reached in
previous part
> stressIdeal=Vector6(-1e7,-1e7,0, 0,0,0), # continue from
value
> reached in previous part ),
> PyRunner(command='plotAddData()',iterPeriod=1),
> ]
> O.run();O.wait()
> plot.plot()

Revision history for this message
janaka kumara (janaka-eng) said :
#2

Thanks Thoeni,

But still it ends up with the same error as given below.

Janaka
..........................................................................................................................................................

kumara@kumara-Latitude-E5510:~$ yade peri3dController_triaxialCompression.py
Welcome to Yade 0.60
TCP python prompt on localhost:9000, auth cookie `cyusek'
XMLRPC info provider on http://localhost:21000
Running script peri3dController_triaxialCompression.py
Considering packing (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1), created Mon Oct 31 07:00:08 2011
ACCEPTED
Found suitable packing in /tmp/packDb.sqlite (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1), created Mon Oct 31 07:00:08 2011
Traceback (most recent call last):
  File "/usr/bin/yade", line 152, in runScript
    execfile(script,globals())
  File "peri3dController_triaxialCompression.py", line 34, in <module>
    iters,stressXX = plot.data['iter'],plot.data['sx']
KeyError: 'iter'
[[ ^L clears screen, ^U kills line. F12 controller, F11 3d view, F10 both, F9 generator, F8 plot. ]]

Revision history for this message
Jan Stránský (honzik) said :
#3

Hi Janaka,

/tmp/packDb.sqlite is a temporary file, where the initital spheres packing
is saved. If you run the script for the second time, the time of creation
is saved and the packing is loaded form this file.

I ran the original script without problem, in your change I see one
possible problem, that you call plot.data['iter'] before it is created. Try
to place this line to the end of the file (after O.run() command), it could
solve your problem..

Best wishes

Jan

2011/10/31 janaka kumara <email address hidden>

> New question #176961 on Yade:
> https://answers.launchpad.net/yade/+question/176961
>
> Hi all,
>
> I run peri3dController_triaxialCompression.py and want to get output data.
> Therefore, I added iters = plot.data['iter']
> stressXX = plot.data['sx'] as given in the scrip (this is just to check
> whether it works though I need all the data) but when I run this, it gives
> KeyError. Any helps to overcome this is appreciated.
>
> Also, I am wondering what is /tmp/packDb.sqlite and how to access that.
>
> kumara@kumara-Latitude-E5510:~$ yade
> peri3dController_triaxialCompression.py
> Welcome to Yade 0.60
> TCP python prompt on localhost:9000, auth cookie `dsausy'
> XMLRPC info provider on http://localhost:21000
> Running script peri3dController_triaxialCompression.py
> Considering packing
> (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1),
> created Mon Oct 31 07:00:08 2011
> ACCEPTED
> Found suitable packing in /tmp/packDb.sqlite
> (radius=0.05±0,N=967,dim=0.937777×0.937777×0.937777,periodic,scale=1),
> created Mon Oct 31 07:00:08 2011
> Traceback (most recent call last):
> File "/usr/bin/yade", line 152, in runScript
> execfile(script,globals())
> File "peri3dController_triaxialCompression.py", line 34, in <module>
> iters = plot.data['iter']
> KeyError: 'iter'
> [[ ^L clears screen, ^U kills line. F12 controller, F11 3d view, F10 both,
> F9 generator, F8 plot. ]]
>
> Regards,
> Janaka
>
> ..................................................................................................................................................................................................................
> # peri3dController_triaxialCompression.py
> # script, that explains funcionality and input parameters of
> Peri3dController on the example of
> # triaxial compression.
> # Firstly, a hydrostatic preassure is applied, then a strain along z
> axis is increasing
> # while x- and y- stress is constant
> # The simulation is run on rotated cell to enable localization and
> strain softening
> # (you can also try simulation with command sp.toSimulation() with no
> rotation,
> # in this case there is almost no difference, but in script
> peri3dController_shear,
> # the cell rotation has significant effect)
>
> from yade import pack,plot,qt
>
> # define material
> O.materials.append(FrictMat())
>
> # create periodic assembly of particles
> initSize=1.2
>
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
> angle=0
> rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
> sp.toSimulation(rot=rot)
>
> # plotting
> plot.live=False
>
> plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ez':('sz',)}
> def plotAddData():
> plot.addData(
> iter=O.iter,iter_=O.iter,
> sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
> syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
> ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
> eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
> )
> iters = plot.data['iter']
> stressXX = plot.data['sx']
>
> O.dt=utils.PWaveTimeStep()/2
>
> # define the first part of simulation, hydrostatic compression
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_Dem3DofGeom()],
>
> [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
> NewtonIntegrator(),
> Peri3dController( goal=(-1e7,-1e7,-1e7, 0,0,0), # Vector6 of
> prescribed final values
> stressMask=0b000111,
> nSteps=500,
> doneHook='print
> "Hydrostatic load reached."; O.pause()',
>
> youngEstimation=.5e9, # needed, when only nonzero prescribed values are
> stress
> maxStrain=.5,
> label='p3d'
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
> ]
> O.run(); O.wait()
>
> # second part, z-axis straining and constant transversal stress
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_Dem3DofGeom()],
>
> [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
> NewtonIntegrator(),
> Peri3dController( goal=(-1e7,-1e7,-4e-1, 0,0,0), # Vector6 of
> prescribed final values
> stressMask=0b000011,
> nSteps=1000,
>
> xxPath=[(0,1),(1,1)], # the first (time) zero defines the initial value of
> stress considered nonzero
>
> yyPath=[(0,1),(1,1)],
> doneHook='print
> "Simulation with Peri3dController finished."; O.pause()',
> maxStrain=.5,
> label='p3d',
> strain=p3d.strain,
> # continue from value reached in previous part
>
> stressIdeal=Vector6(-1e7,-1e7,0, 0,0,0), # continue from value reached in
> previous part
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
> ]
> O.run();O.wait()
> plot.plot()
>
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Can you help with this problem?

Provide an answer of your own, or ask janaka kumara for more information if necessary.

To post a message you must log in.