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.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to