← Back to team overview

yade-users team mailing list archive

Re: [Question #290950]: Particles crossing the wall

 

Question #290950 on Yade changed:
https://answers.launchpad.net/yade/+question/290950

    Status: Answered => Open

VG is still having a problem:
Below is one minimal working example which shows such problem. I am trying to compress an assembly of particles between the two plates. The top plate is subjected to a constant force and a velocity in lateral direction to induce shear.  The top plate doesn't seem to be interacting with the system and it is just crossing all the particles and bottom plate. Can someone please suggest what am I doing wrong here or if there is a workaround ?
I am using Yade 1.07.0 on Ubuntu 14.04.



# Generate a periodic cell with few super-particles.
# Each superparticle consists of smaller sub-particles of 75 microns
# bonded with cohesive bonds.

from yade import pack,qt,plot,utils,export,ymport
from math import *
from pylab import rand
import datetime
import os,shutil

#############################################################################
# Set up run
#############################################################################
run_name="PeriodicCohesive"
data_root_dir="."
if not os.path.exists(data_root_dir):
  print "The data root directory you specified:"
  print data_root_dir
  print "does not exist. Exiting..."
  exit()
timestamp=datetime.datetime.now().strftime("%Y.%m.%d-%H%M%S")
run_dir_name=timestamp+'-'+run_name
data_dir_path=os.path.join(data_root_dir,run_dir_name)
if not os.path.exists(data_dir_path):
  os.makedirs(data_dir_path)
else:
  print("Something is really wrong if you get this message. Exiting...\n")
  exit()

run_name_base_path=os.path.join(data_dir_path,run_name+'-')
# opts.script is defined in yade, which inserts the script file (e.g.
# this file) into itself.
this_script=os.path.abspath(opts.script)
shutil.copy(this_script,data_dir_path)


#############################################################################
# Materials
#############################################################################
plate_material=CohFrictMat(
    young=200e9
   ,poisson=0.3
   ,density=8000
   ,frictionAngle=radians(30)
   ,normalCohesion=1e10
   ,shearCohesion=1e10
   ,momentRotationLaw=True
   ,label='plate_mat')
O.materials.append(plate_material)


sample_material=CohFrictMat(
    young=4e9
   ,poisson=0.25
   ,density=1400
   ,frictionAngle=radians(30)
   ,normalCohesion=1e8*1.2
   ,shearCohesion=.4e8*1.2
   ,momentRotationLaw=True
   ,label='sample_mat')
O.materials.append(sample_material)


#############################################################################
# Component dimensions and operating condition
#############################################################################
# Granular material dimension
sample_diameter=2e-4
sample_radius=sample_diameter/2.0
# Sub-particle dimension
particle_diameter=74.e-6
particle_radius=particle_diameter/2.

############################################################################# 
# grinding plate dimension
#############################################################################

rotvel=2./3.*pi*(1.5+0.5)*.254

#############################################################################
# Periodic Geometry
#############################################################################


# Set up periodic boundary conditions
O.periodic=True
xExt=4*sample_diameter
yExt=3.*sample_diameter*2 #to block the periodicity in y direction
zExt=xExt
xLim=xExt
yLim=yExt/4
zLim=zExt
O.cell.hSize=Matrix3(
  xExt, 0, 0,
  0, yExt, 0,
  0, 0, zExt)


length=xExt
height=yExt
width=zExt

# Top and bottom plate thickness
thickness=0.1*height


#########
# Bottom
#########
bottom=box(
    center=(length/2.0,yLim - thickness/2.0,width/2.0)
   ,extents=(4*length,thickness/2.0,width)
   ,wire=False
   ,material='plate_mat'
   )

O.bodies.append(bottom)

O.bodies[0].state.blockedDOFs='xyzXYZ'


#############################################################################
# Particle Packing
#############################################################################

min_corner= (0,yLim,0)
max_corner= (xLim, yExt-yLim, zLim)

sp=pack.SpherePack()
sp.makeCloud( min_corner,max_corner, rMean=sample_radius, periodic=False)

print "Generated ",len(sp)," aggregates"

###########################################
# Sample
###########################################
for s in sp:
  sphere=pack.inSphere((s[0][0],s[0][1],s[0][2]),s[1])
  sp1=pack.randomDensePack(
      sphere
     ,spheresInCell=2000
     ,radius=particle_radius
     ,memoizeDb='/tmp/triaxPackCache.sqlite'
     ,returnSpherePack=True
     )

  sp1.toSimulation(material='sample_mat',color=(0.9,0.8,0.6))
  print 'Generated ',len(sp1),' particles'

Gl1_Sphere(stripes=True)

#########
# Top
#########
top=box(
    center=(length/2.0,yExt - yLim + thickness/2.0,width/2.0)
   ,extents=(4*length,thickness/2.0,width)
   ,wire=False
   ,material='plate_mat'
   )

top_id=O.bodies.append(top)
O.bodies[top_id].state.blockedDOFs='xzXYZ'


plate_downforce=-0.0036

O.forces.addF(top_id,(0,plate_downforce,0),permanent=True)

O.bodies[top_id].state.vel[0]= rotvel


#############################################################################
# Run the simulation
#############################################################################


O.dt=0.5*PWaveTimeStep()

O.engines=[
  ForceResetter(),
  InsertionSortCollider([
    Bo1_Sphere_Aabb()
   ,Bo1_Box_Aabb()
   ], allowBiggerThanPeriod=True
   ),
  InteractionLoop(
    [Ig2_Sphere_Sphere_ScGeom6D()
    ,Ig2_Box_Sphere_ScGeom6D() 
    ],
    [
     Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,label="cohesiveIp")
    ],
    [
     Law2_ScGeom6D_CohFrictPhys_CohesionMoment()
    ]
  ), # End InteractionLoop 
  NewtonIntegrator(damping=0.8,gravity=(0.,0.,0.)),

]

O.saveTmp()

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