Question #696302 on Yade changed: https://answers.launchpad.net/yade/+question/696302
Status: Needs information => Open Ricardo Lorenzoni gave more information on the question: Hi. Thanks for your answer. figure 1 - https://pasteboard.co/JV5qiMz.png In this first image, you can see the experimental results, where the curve shows that as more weight is added to the sample, the effect on the compacting of the grain mass will decrease. figure 2 - https://pasteboard.co/JV5mPSf.png In this second image, the results of the computer simulations are plotted, in which, we can see that the effect of increasing weight on the compaction of the particles is linear. I have already carried out a series of tests with several contact and physical models, in none of them I was able to replicate the curve behavior, as shown in Figure 1. Here is an example of the base code I am using for the simulations. the variable "altura" indicates the height of the grain mass on the sample analyzed and, is set to 10 m. sample code with cundallStrack contact model: import sys, math, csv, os from minieigen import * from yade import pack, plot, utils, ymport, export matWall=CohFrictMat(density=2700,young=7e10,poisson=0.334,label="parede") idparede=O.materials.append(matWall) r_mean=0.002963 altura=10 lx=0 hx=0.1 ly=0 hy=0.1 lz=0 hz=0.15 p1 = (lx, ly, lz) p2 = (lx, hy, lz) p3 = (hx, ly, lz) p4 = (hx, hy, lz) p5 = (lx, ly, hz) p6 = (lx, hy, hz) p7 = (hx, ly, hz) p8 = (hx, hy, hz) p9 = (lx, ly, hz+0.05) p10= (lx, hy, hz+0.05) p11= (hx, ly, hz+0.05) p12= (hx, hy, hz+0.05) # DEFINICAO DAS FACES #base base1=utils.facet([p1,p2,p3],mask=1,wire=True,material=idparede) base2=utils.facet([p2,p3,p4],mask=1,wire=True,material=idparede) O.bodies.append(base1) O.bodies.append(base2) #Wall1 parede11=utils.facet([p1,p2,p5],mask=1,wire=True,material=idparede) parede12=utils.facet([p2,p5,p6],mask=1,wire=True,material=idparede) O.bodies.append(parede11) O.bodies.append(parede12) #Wall2 parede21=utils.facet([p1,p3,p5],mask=1,wire=True,material=idparede) parede22=utils.facet([p3,p5,p7],mask=1,wire=True,material=idparede) O.bodies.append(parede21) O.bodies.append(parede22) #Wall3 parede31=utils.facet([p3,p4,p7],mask=1,wire=True,material=idparede) parede32=utils.facet([p4,p7,p8],mask=1,wire=True,material=idparede) O.bodies.append(parede31) O.bodies.append(parede32) #Wall4 parede41=utils.facet([p2,p4,p6],mask=1,wire=True,material=idparede) parede42=utils.facet([p4,p6,p8],mask=1,wire=True,material=idparede) O.bodies.append(parede41) O.bodies.append(parede42) #Wall5 parede51=utils.facet([p5,p6,p9],mask=1,wire=True,material=idparede) parede52=utils.facet([p6,p9,p10],mask=1,wire=True,material=idparede) O.bodies.append(parede51) O.bodies.append(parede52) #Wall6 parede61=utils.facet([p6,p8,p12],mask=1,wire=True,material=idparede) parede62=utils.facet([p12,p10,p6],mask=1,wire=True,material=idparede) O.bodies.append(parede61) O.bodies.append(parede62) #Wall7 parede71=utils.facet([p7,p8,p11],mask=1,wire=True,material=idparede) parede72=utils.facet([p8,p11,p12],mask=1,wire=True,material=idparede) O.bodies.append(parede71) O.bodies.append(parede72) #Wall8 parede81=utils.facet([p5,p7,p9],mask=1,wire=True,material=idparede) parede82=utils.facet([p7,p9,p11],mask=1,wire=True,material=idparede) O.bodies.append(parede81) O.bodies.append(parede82) particles=CohFrictMat(density=1163,young=2.6e6,poisson=0.25,alphaKr=0.05,frictionAngle=radians(22.6),label="particle") idparticle=O.materials.append(particles) O.bodies.append(sphere((0.01,0.01,0.01),radius=r_mean,material=idparticle)) # DEFINICAO DOS MOTORES O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()],verletDist=.05*.29e-3), InteractionLoop( # handle sphere+sphere and facet+sphere collisions [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] #modelo linear de contato ), NewtonIntegrator(gravity=(0,0,-9.81),damping=0.04), BoxFactory(maxParticles=-1, extents=(hx/2,hy/2,0.01), center=(hx/2,hy/2,hz+0.03), rMin=r_mean, rMax=r_mean, vMin=100, vMax=100, vAngle=0, massFlowRate=0.01*16.6, normal=(0,0,0), label='factory', materialId=idparticle), PyRunner(virtPeriod=0.02, command='verificaAltura()'), ] global pesomassa pesomassa=0 def calculaPeso(): global pesomassa for b in O.bodies: if isinstance(b.shape, Sphere): pesomassa+=b.state.mass pesometro=(altura*((100*pesomassa)/15)) adicionaPeso(pesometro) global executa executa=True def verificaAltura(): global executa if executa: count=0 for b in O.bodies: if isinstance(b.shape, Sphere): if (b.state.vel[2]<0.05 and b.state.pos[2]>0.15 and b.state.pos[2]<0.16): count+=1 if (count>16.6*4): executa=False O.engines[4].dead=True ajusta() def ajusta(): bodiesToBeDeleted=[] for b in O.bodies: if b.state.pos[2]>hz or b.state.pos[1]<ly or b.state.pos[1]>hy or b.state.pos[0]>hx or b.state.pos[0]<lx: # artificial condition for particles deletion, bodiesToBeDeleted.append(b) for b in bodiesToBeDeleted: O.bodies.erase(b.id) calculaPeso() def calculaporosidade(): # array=[] if os.path.exists('analise_porosidade_variando_young_por_altura_'+str(altura)+'.csv'): conf='a+' else: conf='w' with open('analise_porosidade_variando_young_por_altura_'+str(altura)+'.csv', conf,newline='') as csvfile: writer=csv.writer(csvfile) if conf=='w': writer.writerow(["Porosidade","Tempo","eixo x/y","altura"]) writer.writerow([str(voxelPorosity(800,((hx/5)*2,(hy/5)*2,0.01),((hx/5)*4,(hy/5)*4,0.04))),str(O.time),str(hx),str(altura)]) else: writer.writerow([str(voxelPorosity(800,((hx/5)*2,(hy/5)*2,0.01),((hx/5)*4,(hy/5)*4,0.04))),str(O.time),str(hx),str(altura)]) global amax amax=0 def calc_altura(): global amax for b in O.bodies: if isinstance(b.shape, Sphere): if b.state.pos[2]>amax: amax=b.state.pos[2] def adicionaPeso(peso): calc_altura() peso1=[lx+0.0001,ly+0.0001,amax+0.003] peso2=[lx+0.0001,hy-0.0001,amax+0.003] peso3=[hx-0.0001,ly+0.0001,amax+0.003] peso4=[hx-0.0001,hy-0.0001,amax+0.003] facepeso1=yade.utils.facet([peso1,peso2,peso3],dynamic=True,fixed=False ) facepeso2=yade.utils.facet([peso2,peso3,peso4],dynamic=True,fixed=False) facepeso1.state.mass = peso/2 # (!) facepeso1.state.inertia = (0,0,0) # (!) facepeso2.state.mass = peso/2 # (!) facepeso2.state.inertia = (0,0,0) # (!) O.bodies.appendClumped([facepeso1,facepeso2]) O.bodies[len(O.bodies)-1].state.blockedDOFs="xyXYZ" O.bodies[len(O.bodies)-2].state.blockedDOFs="xyXYZ" O.bodies[len(O.bodies)-3].state.blockedDOFs="xyXYZ" momento=O.time+0.01 O.engines=O.engines+[PyRunner(command='O.pause()',virtPeriod=momento)] O.engines=O.engines+[PyRunner(virtPeriod=momento, command='calculaporosidade()')] O.dt=0.9*utils.PWaveTimeStep() O.saveTmp() O.run() O.wait() for each physical and contact model, I changed the properties and materials of the particles and walls (when I thought it was necessary) and also, the contact and physical models, as described below. elPerfPl Model: wall -> FrictMat(density=2700,young=7e10,poisson=0.334,label="parede") particles -> FrictMat(density=1163,young=2.6e6,poisson=0.25,frictionAngle=radians(22.6),label="particle") InteractionLoop( [Ig2_Sphere_Sphere_L3Geom(),Ig2_Facet_Sphere_L3Geom(),Ig2_Wall_Sphere_L3Geom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_L3Geom_FrictPhys_ElPerfPl()] ) HertzMindlin Model: wall -> ViscElMat(density=2700,young=7e10,poisson=0.334,label="parede") particles -> ViscElMat(density=1163,young=2.6e6,poisson=0.25,frictionAngle=radians(22.6),label="particle") InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_MindlinPhys()], [Law2_ScGeom_MindlinPhys_Mindlin()] #modelo linear de contato ) ViscElPhys_Basic Model: wall -> ViscElMat(density=2700,young=7e10,poisson=0.334,label="parede") particles -> ViscElMat(density=1163,young=1.0e7,poisson=0.25,frictionAngle=radians(22.6),label="particle") InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()], [Ip2_ViscElMat_ViscElMat_ViscElPhys()], [Law2_ScGeom_ViscElPhys_Basic()] #modelo linear de contato ) About using non-spherical particles like clumps, this option is in my plans but, for preliminarly tests, spherical particles have less computational costs to simulate, and, we hope that spherical particles could be used for the study with a good similarity to the real particles behavior. Thanks for your help. :) -- 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 : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp