← Back to team overview

yade-users team mailing list archive

Re: [Question #176961]: KeyError while accessing data from a script

 

Question #176961 on Yade changed:
https://answers.launchpad.net/yade/+question/176961

    Status: Open => Answered

Jan Stránský proposed the following answer:
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 <question176961@xxxxxxxxxxxxxxxxxxxxx>

> 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     : yade-users@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~yade-users
> More help   : https://help.launchpad.net/ListHelp
>

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.