← Back to team overview

yade-users team mailing list archive

[Question #676248]: Radius Expansion Method

 

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

Hi,

I use the Radius Expansion Method (REM) to generate a granular bed with a specified particle distribution. I use a discrete form of the cumulative curve of particle distributions. However, after simulation the distribution of particles in the bed differs from the theoretical distribution (see: http://pracownicy.uwm.edu.pl/wojsob/pliki/tmp/yade-distribution.jpg). The effect is independent on the number of bins used to define the discrete distribution function and on the friction angle. I checked also that the initial cloud has correct distribution. Am I doing something wrong (see the code below)? Or maybe such effect it is a feature of the REM?

Best Regards from Poland,

Wojciech Sobieski

--------------------------------------------------------------------------------------------------------------------

from yade.pack import *
from yade import utils
from yade import export
from yade import plot
import sys
import os
import subprocess

file = 'p06_w1_10'
n_s = 10000	
e_target = 0.413
mi = 0.5
seed = 5

n_band = sum(1 for line in open(file+'.txt'))
input = open(file+'.txt','r')
psdSizes = []
psdCumm = []
try:
  for line in input:
    psdSizes.append(float(line[0:16]))    
    psdCumm.append(float(line[18:]))
finally:
  input.close()
psdCumm[0] = 0.0
psdCumm[n_band-1] = 1.0

subprocess.call('./calc_l.out '+str(file)+' '+str(n_s)+' '+str(e_target),shell=True)
input = open(str(file)+'.l_c','r')
try:
  for line in input:
    l = float(line[0:])
finally:
  input.close()

mn = Vector3(0,0,0)
mx = Vector3(l,2*l,l)

O.materials.append(FrictMat(young=5e6,poisson=0.5,frictionAngle=0,density=0,label='walls'))
O.bodies.append(aabbWalls([mn,mx],thickness=0,material='walls'))
O.materials.append(FrictMat(young=5e6,poisson=0.5,frictionAngle=radians(mi),density=2600,label='spheres'))
sp = yade._packSpheres.SpherePack()
sp.makeCloud(mn,mx,psdSizes=psdSizes,psdCumm=psdCumm,num=n_s,distributeMass=1,seed=seed)
O.bodies.append([sphere(s[0],s[1],material='spheres') for s in sp])

#-------------------------------------------------------------------------------------
# here the particle distribution is correct:
vtkExporter = export.VTKExporter(str(file)+'-init.vtk')
vtkExporter.exportSpheres(what=[('dist','b.state.pos.norm()')])

os.mkdir(str(file))

triax = TriaxialStressController( 
	  finalMaxMultiplier = 1.0001,				
	  maxMultiplier = 1.0001,				
	  stressMask = 7,					
	  internalCompaction = True,				
	  goal1 = 10000,goal2 = 10000,goal3 = 10000)		

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,
	NewtonIntegrator(damping = 0.2,gravity=[0,0,0]),
	VTKRecorder(fileName=str(file)+'/cloud-',recorders=['all'],iterPeriod=10)
	]

while triax.porosity > e_target:
  mi = 0.999*mi
  setContactFriction(radians(mi))
  print "\r Friction:",mi
  print "\r Porosity:",triax.porosity 
  sys.stdout.flush()
  O.run(500,1)

#-------------------------------------------------------------------------------------
# here the particle distribution in not correct:
vtkExporter = export.VTKExporter(str(file)+'-final.vtk')
vtkExporter.exportSpheres(what=[('dist','b.state.pos.norm()')])

input = open('set_A1.porosity','a')
input.write('\r'+str(file)+' '+str(triax.porosity))
input.close()

export.text(str(file)+'.yade')
subprocess.call('./convert.out '+str(file)+' '+str(n_s), shell=True)
subprocess.call('clear', shell=True)
print "\r --------"
print "\r Final friction:",mi
print "\r Final porosity:",triax.porosity


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