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. _______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : [email protected] Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp

