← Back to team overview

yade-users team mailing list archive

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.