← Back to team overview

yade-users team mailing list archive

Re: [Question #176993]: launch several simulations within one script

 

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

Jan Stránský proposed the following answer:
Hi Ning,

in r3023 it is possible to create and switch between more than one
simulations. Use something like this

sNum = O.addScene()
O.switchToScene(sNum)

note that all attributes genrated with O (O.bodies, O.interactions,
O.time etc.) called after O.switchToScene will refer to current scene
only. Perhaps you will need some (I hope not so much :-) time for
testing and getting used to it.

good luck
Jan


Jan Stránský píše v Po 06. 02. 2012 v 10:43 +0100:
> Hi Ning,
> 
> I was looking on the Omega class, and it should be no problem to modify
> it to contain several scenes and the possibility to switch arbitrarily
> between them, I try and test it and inform you about the progress :-)
> 
> Jan
> 
> 
> ceguo píše v Po 06. 02. 2012 v 09:30 +0000:
> > Question #176993 on Yade changed:
> > https://answers.launchpad.net/yade/+question/176993
> > 
> >     Status: Answered => Open
> > 
> > ceguo is still having a problem:
> > Hi,
> > 
> > I still need an answer in this question. I've wrapped a class for
> > simulation as below:
> > 
> > 
> > import `everything`
> > 
> > class simDEM(object):
> >    def __init__(self,sd=1):
> >       self.__id='thread'+str(sd)
> >       self.__O=Omega()
> >       self.__O.materials.append(FrictMat(young=1.e8,poisson=.3,frictionAngle=.5,density=1000))
> >       self.__sp=pack.SpherePack()
> >       self.__sp.makeCloud(minCorner=(0,0,0),maxCorner=(3,3,0),rMean=.03,rRelFuzz=.25,periodic=True,seed=sd)
> >       self.__sp.toSimulation()
> >       self.__O.cell.hSize=Matrix3(3,0,0, 0,3,0, 0,0,1)
> >       for p in self.__O.bodies:
> >          p.state.blockedDOFs='zXY'
> >       self.__O.dt=.5*utils.PWaveTimeStep()
> >       
> >    def countParticle(self):
> >       return len(self.__O.bodies)
> >       
> >    def getThreadID(self):
> >       return self.__id
> >       
> >    def consolidate(self, stress=(-5.e4,-5.e4,0,0,0,0)):
> >       self.__O.engines=[
> >          ForceResetter(),
> >          InsertionSortCollider([Bo1_Sphere_Aabb()]),
> >          InteractionLoop(
> >             [Ig2_Sphere_Sphere_Dem3DofGeom()],
> >             [Ip2_FrictMat_FrictMat_FrictPhys()],
> >             [Law2_Dem3DofGeom_FrictPhys_CundallStrack()]
> >          ),
> >          Peri3dController(
> >             goal=stress,
> >             stressMask=3,
> >             nSteps=20000,
> >             maxStrain=.5,
> >             label='cons'
> >          ),
> >          NewtonIntegrator()
> >       ]
> >       self.__O.run()
> >       self.__O.wait()
> >    
> >    def shear(self, strain=(1.e-2,-1.e-2,0,0,0,0)):
> >       import __builtin__
> >       __builtin__.__dict__['saveAddData']=self.saveAddData
> >       self.__O.engines=[
> >          ForceResetter(),
> >          InsertionSortCollider([Bo1_Sphere_Aabb()]),
> >          InteractionLoop(
> >             [Ig2_Sphere_Sphere_Dem3DofGeom()],
> >             [Ip2_FrictMat_FrictMat_FrictPhys()],
> >             [Law2_Dem3DofGeom_FrictPhys_CundallStrack()]
> >          ),
> >          Peri3dController(
> >             goal=strain,
> >             stressMask=0,
> >             nSteps=10000,
> >             maxStrain=.5,
> >             label='biax'
> >          ),
> >          NewtonIntegrator(),
> >          PyRunner(command='saveAddData()',iterPeriod=100)
> >       ]     
> >       self.__O.run()
> >       self.__O.wait()
> > 
> >    def getStress(self):
> >       return biax.stress
> >         
> >    def finalization(self):
> >       self.__O.exitNoBacktrace()
> > 
> > I want to run 2 simulations (more than 2 in real case, maybe tens)
> > within one script like this:
> > 
> > a = simDEM(sd=1)
> > b = simDEM(sd=2)
> > a.anyfunc()
> > b.anyfunc()
> > 
> > I expected a and b are separate simulations while they are not due to
> > global defined Omega. How can I run several simulations simultaneously?
> > Vaclav suggested using switchscene(), while it works for 2 scenes as I
> > see it, but I need more than that. How to modify yade to expand its
> > capacity in containing more scenes? Or is there a way to import yade
> > locally to get a local Omega?
> > 
> 
>

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