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

Hi all,

I am simulating the step-by-step fine particle deletion process of a 
consolidated gap-graded specimen in 2D case. The confining pressure is 
maintained constant during the deletion process. The initial fine content by 
mass is FC = 25%, and the 1% of fine particles are randomly deleted at each 
loop. After 25 loops, all fine particles should be deleted as expected. 

At the first several loop of my case, fine particles can be deleted correctly. 
However, the simulation suspend after fine loss = 8% though there still many 
fines in the specimen. It seems that the confining pressure cannot be 
re-achieved after several particle deletions?  Attached please see a simple 
case to reproduce the ERROR. Could you please help to see where is the problem. 
 

Many thanks and best regards,
Zheng

#### Code below ####

from yade import pack,plot,export
import matplotlib.pyplot as plt
import numpy as np
import random

O.materials.append(FrictMat(young=6.e8,poisson=.8,frictionAngle=.0))

sigmaIso=-1e5
sp = pack.SpherePack()
size = 0.24
# 25% fines in 2d case.
sp.makeCloud(minCorner=(0,0,.05),maxCorner=(size,size,.05),psdSizes=[0.001,0.0012,0.005,0.006],
 
psdCumm=[0,0.0625,0.0625,1.0],periodic=True,seed=1,distributeMass=True,num=1500)
 

maxFine = 0.0012 # maximum diameter of fine particles
sp.toSimulation()
O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,.1) # used for periodic 
boundaries.
massAll = 0
massEroded = 0

for p in O.bodies:
   p.state.blockedDOFs = 'zXY' 
   p.state.mass = 2650 * 0.1 * pi * p.shape.radius**2 # 0.1 = thickness
   inertia = 0.5 * p.state.mass * p.shape.radius**2
   p.state.inertia = (.5*inertia,.5*inertia,inertia)
   massAll += p.state.mass # mass of all particles

O.dt = utils.PWaveTimeStep()

O.engines = [
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb()]),
   InteractionLoop(
      [Ig2_Sphere_Sphere_ScGeom()],
      [Ip2_FrictMat_FrictMat_FrictPhys()],
      [Law2_ScGeom_FrictPhys_CundallStrack()]
   ),
   PeriTriaxController(
      dynCell=True,
      goal=(-1e5,-1e5,0),
      stressMask=3,
      relStressTol=.001,
      maxUnbalanced=.1,
      maxStrainRate=(.5,.5,.0),
      doneHook='delFine()',
      label='biax'
   ),
   NewtonIntegrator(damping=.1),
]


delperc = range(1,25,1)
delperc = [x/100 for x in delperc]
n = 0
def delFine():
   global delperc,n,massEroded
   #global n
   #global massEroded     
   if  n < len(delperc):
      print('Current stress before deletion, ',getStress())
      setContactFriction(0.5)
      bodyRadius=[]
      for b in O.bodies:
        if b.shape.radius<=maxFine/2: 
         bodyRadius.append([b.id,b.shape.radius,b.state.mass])
      bodyRadius.sort(key=lambda x:x[1]) 
      i = 0      
      for b in bodyRadius:
        if massEroded <= delperc[n]*massAll: 
           global massEroded
           massEroded += b[2]
           O.bodies.erase(b[0]) 
           i+=1
        else: 
           break 
      print('The amount of fines loss by number, ',i)
      print('Current stress after deletion = ',getStress())
      # when the simulation finish?
      if i == 0:
        print(delperc[n]*100,'% fines loss!')
        O.save(str(int(delperc[n]*100))+'.yade.gz')
        n += 1
   if n == len(delperc):
      biax.doneHook='Finished()'  

def Finished():
   print('Test Finished')
   O.pause()

O.run()
O.wait()

-- 
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

Reply via email to