yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #19581
Re: [Question #680307]: How can I applied PeriTriaxController on a box of polyhedras?
Question #680307 on Yade changed:
https://answers.launchpad.net/yade/+question/680307
Status: Answered => Open
Gavin He is still having a problem:
Hello Jérôme,
I have tried the method you told me, but it still fails. The walls
cannot move even a little bit.
I tried using sphere in the simulation, still using walls as the
boundaries. The walls cannot move too. However, changing the boundaries
back to aabbwalls made the simulation run with spheres.
I guess it is not enough to set walls as boundaries of
TriaxialStressController by giving the IDs of walls to the engine and
set the thickness to 0.
_______________________________________________CODE_____________________________________________________________________
from yade import pack
sp=pack.SpherePack()
## corners of the initial packing
mn,mx=Vector3(0,0,0),Vector3(10,10,10)
## box between mn and mx, avg radius ± ½(20%), 2k spheres
sp.makeCloud(minCorner=mn,maxCorner=mx,rRelFuzz=.2,num=2000)
## create material #0, which will be used as default
O.materials.append(FrictMat(young=15e6,poisson=.4,frictionAngle=radians(30),density=2600,label='spheres'))
O.materials.append(FrictMat(young=15e6,poisson=.4,frictionAngle=0,density=0,label='frictionless'))
## copy spheres from the packing into the scene
## use default material, don't care about that for now
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])
## create walls around the packing
rearwall=O.bodies.append(utils.wall(0,axis=1,sense=1, material = 'frictionless'))
leftwall=O.bodies.append(utils.wall(0,axis=0,sense=1, material = 'frictionless'))
bottomwall=O.bodies.append(utils.wall(0,axis=2,sense=1, material = 'frictionless'))
frontwall=O.bodies.append(utils.wall(10,axis=1,sense=-1, material = 'frictionless'))
rightwall=O.bodies.append(utils.wall(10,axis=0,sense=-1, material = 'frictionless'))
topwall=O.bodies.append(utils.wall(10,axis=2,sense=-1, material = 'frictionless'))
triax=TriaxialStressController(
thickness=0,
wall_bottom_id=bottomwall,
wall_top_id=topwall,
wall_left_id=leftwall,
wall_right_id=rightwall,
wall_back_id=rearwall,
wall_front_id=frontwall,
internalCompaction=False,
stressMask=7,
## define the rest of triax params here
## see in pkg/dem/PreProcessor/TriaxialTest.cpp:524 etc
## which are assigned in the c++ preprocessor actually
goal1=-50e3,goal2=-50e3,goal3=-50e3,
max_vel=10,
label="triax"
)
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb(),Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
triax,
# you can add TriaxialStateRecorder and such here…
NewtonIntegrator(damping=.4)
]
from yade import plot
O.engines=O.engines[0:5]+[PyRunner(iterPeriod=20,command='history()',label='recorder')]+O.engines[5:7]
def history():
plot.addData(e11=-triax.strain[0], e22=-triax.strain[1], e33=-triax.strain[2],
s11=-triax.stress(0)[0],
s22=-triax.stress(2)[1],
s33=-triax.stress(4)[2],
i=O.iter)
plot.plots={'i':('e11','e22','e33',None,'s11','s22','s33')}
O.saveTmp()
plot.plot()
--
You received this question notification because your team yade-users is
an answer contact for Yade.