← Back to team overview

yade-users team mailing list archive

[Question #231814]: Unbalanced simulation

 

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

Hello again,

I am having some trouble achieving a  stable packing using small particle sizes (isotropic compression, strain controlled). Using the script below I can get stable packings when the particle sizes are big enough (e.g. set SC=1). But when I decrease the size of the particles (e.g. set SC=1e-6) the simulation starts off fine but then the particles begin flying around and the simulation never reaches a stable packing. Now I have tried playing around with several parameters to get it to work: time step, material density, particle elasticitiy, verletDist, damping, maxUnbalanced, globUpdate, maxStrainRate. Decreasing the timestep seems to have a small effect on stability, but it yeilds unbearable simulation times. Note that the number of particles in my simulation is relatively small (I will control it later) and I don't want to decrease it anymore. What do I need to do to make stable packings for small particle sizes?

As a side note, when I decrease the particle sizes I will get an error telling me that some particles are bigger than half the cell period, even though its perfectly clear from the OpenGL viewer that this is not the case (is this a bug?). For now I have set the allowBiggerThanPeriod flag to true.

I have also looked at this post:
https://answers.launchpad.net/yade/+question/228886
but I don't really understand how the kinetic energy problem was solved.

Thanks,
Nolan

CODE:

from yade import pack,plot,export

r=2.12e-1
p=0.70
R=2.63155
t=0.065

print 'r = ',r
print 'R = ',R

SC=1e-6
print 'SC = ',SC

O.dt=5e-7
print 'O.dt = ', O.dt

O.materials.append(FrictMat(young=1e9,poisson=.35,frictionAngle=radians(0),density=1e9,label='spheres'))
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(R*SC,R*SC,R*SC),rMean=r*SC,rRelFuzz=0,periodic=True)
sphVol=sp.relDensity()*(R*SC)**3
tStrain=-1
StrainR=0.1

sp.toSimulation()
O.engines=[
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb()],verletDist=0,allowBiggerThanPeriod=True),
   InteractionLoop([Ig2_Sphere_Sphere_ScGeom()],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
   NewtonIntegrator(damping=0.95),
   PeriTriaxController(goal=(tStrain,tStrain,tStrain),stressMask=0b000,maxUnbalanced=1e-10,globUpdate=5, doneHook='reachedTargetStrain()',label='triax',maxStrainRate=(StrainR,StrainR,StrainR),dynCell=True),
   PyRunner(command='checkPorosity(REVl,sphVol)',iterPeriod=50)
]
O.run()

def reachedTargetStrain():
   print 'Reached Target Strain'
   O.pause()
      
def checkPorosity(REVl,sphVol):
	REVl = O.cell.size[0]
	REVvol = REVl**3
	por = sphVol/REVvol
	#print 'porosity = ',por
	if(por > p):
		print 'Target porosity reached'
		print 'Finished Simulation'
		print 'porosity = ',por
		print 'REVl = ', REVl
		O.pause()

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