← Back to team overview

yade-users team mailing list archive

[Question #642046]: Problem about the HarmonicMotionEngine's ids

 

New question #642046 on Yade:
https://answers.launchpad.net/yade/+question/642046

Dear all,
       Thanks for your kind attention. I am making a densest sample for triaxial tests by using the vibration compaction method. So I plan to use the  HarmonicMotionEngine to let the bottom wall of the aabbWalls vibrate and to use the TriaxialSterssController to keep the stress of the top wall 14KPa. But that is not useful, because when the HarmonicMotionEngine runs, all walls of the aabbWalls vibrate. What should I do to solve this problem? 
        Here is my python script below:
from yade import pack, qt
import math #import mathematical formulae
Gl1_Sphere.stripes=1
qt.Controller(), qt.View() #open the controlling and visualization interfaces

#################################################
#####   DEFINING VARIABLES AND MATERIALS   ######
#################################################

nRead=utils.readParamsFromTable(
	num_spheres=5000,# number of spheres
	key='_D10', #put you simulation's name here
	unknownOk=True
)
from yade.params import table#the above five lines will be used later for batch execution

num_spheres = table.num_spheres #number of spheres
finalFricDegree = atan(0.25) #contact friction during the deviatoric loading
damp = 0.008 #the non-viscous damping coefficient
key = table.key # put you simulation's name here
young1 = 1e10 #the spheres' Young's moduolus
young2 = 1e12 #the walls' Young's moduolus
mn,mx = Vector3(0.0,0.0,0.0),Vector3(0.110,0.06,0.110) #corners of the initial packing
thick = 0 #the thickness of the walls
#the following lines represent the grain size distribution
dia = [0.003, 0.0031, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
phi = [0.0, 0.231, 0.301, 0.460, 0.600, 0.737, 0.870, 1.0]
#create materials for spheres and walls
O.materials.append(FrictMat(young=young1,poisson=0.7,frictionAngle=finalFricDegree,density=7930,label='spheres'))
O.materials.append(FrictMat(young=young2,poisson=0.7,frictionAngle=0,density=0,label='walls'))

##############################
####  GENERATING BODIES  #####
##############################

#create walls around the packing
walls=utils.aabbWalls([mn,mx],thickness=thick,oversizeFactor=1.5,material='walls')
wallIds=O.bodies.append(walls)

#use a SpherePack object to generate a random loose particles packing
sp=pack.SpherePack()
sp.makeCloud(minCorner=mn,maxCorner=mx,num=num_spheres,periodic=False,psdSizes=dia,psdCumm=phi,distributeMass=True,seed=1) #"seed" make the "random" generation always the same
O.bodies.append([sphere(center,rad,material='spheres',color=(0,0,1)) for center,rad in sp])

##############################
####   DEFINING ENGINES   ####
##############################

#set triaxial engine
triax=TriaxialStressController(
	thickness = thick, #thickness of boxes
	stressMask = 2, #the vertical direction of wall is controlled by rate of strain
	#fix the walls except the top one
	wall_left_activated=False,
	wall_right_activated=False,
	wall_bottom_activated=False,
	wall_back_activated=False,
	wall_front_activated=False,
	internalCompaction = False, #compacting through moving the walls
	stressDamping = 0, #wallDamping=0 
	max_vel = 0.1 #the maximum walls velocity
)

newton=NewtonIntegrator(damping=damp) #set non-viscous damping

swing = HarmonicMotionEngine(
	A = (0,0.002,0),
	f = (0,50,0),
	fi = (0,-0.5*math.pi,0),
	ids = wallIds
	)

O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()]
	),
	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
	triax,
	swing,
	newton
]

triax.goal2 = -14000
triax.goal1 = triax.goal3 =0

Sincerely
hjz

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.