Making a block of randomly arranged particles

Asked by Kahlil Fredrick Cui

Hello!

I am trying to create a block of randomly arranged particles of the same size that are all adhered to the floor.
I used RandomBoxPacker to create the block, NRotBondPrms to bond the particles and NRotBondedWallPrms to bond them to the floor while my particles are RotSpheres. Problem is the assembly still moves when I expect it not to, and some particles move up, and escape the block. So my questions are:

1. Do the particles need to be with contact to the floor to be bonded? What if I just assign them a tag and assign the particles with that tag to be adhered to the floor, are they expected to stay stationary with respect to the floor even if they dont make contact? I observed that this is true if the distance to floor is not too large.

2. What is the criteria or rule of thumb for maxDist in connectionFinder? Is it calculated with respect to particle centers or boundaries?

3. If I let a separate set of particles flow over this block of particles, what frictional rules will be implemented between the stationary and moving particles? Or rephrasing the question, if a bonded set is to make contact with an unbonded set at a certain region, how will they interact?

4. 4. Are wall and particle bonds dynamic? or are they set only once? In my understanding they should change per time step, like if a particle not initially tagged to be bonded to the floor can have its tag changed to a bonded one when it approaches the floor. But I'm not sure.

To further explain my point, I attach my code below:
#initializations
#instantiating simulation object
sim = LsmMpi(numWorkerProcesses = 2, mpiDimList = [2,1,1])
sim.initNeighborSearch(particleType = "RotSphere",
   gridSpacing = 0.81,
   verletDist = 0.06)

#setting temporal parameters
iterations = 10000000
timeStep = 1.0e-5
interval = 1000

sim.setNumTimeSteps(iterations)
sim.setTimeStepSize(timeStep)

#setting spatial parameters
domain = BoundingBox(Vec3(0.5,0,0), Vec3(10,10,9.5))
sim.setSpatialDomain(domain, circDimList = [True, False, False])

#====================================================================================================

#creating the non-erodible floor
bbox_y = 2
rough_floor = RandomBoxPacker(
 minRadius = 0.3,
 maxRadius = 0.3,
 cubicPackRadius = 0.66,
 maxInsertFails = 1000,
 bBox = BoundingBox(Vec3(0,0,0), Vec3(10, bbox_y, 10)),
 circDimList = [False, False, False],
 tolerance = 1.0e-5)

rough_floor.generate()
rough_floor_particles = rough_floor.getSimpleSphereCollection()

#bond them to the floor:
for fp in rough_floor_particles:
 fp_center = fp.getPosn()
 fp_rad = fp.getRadius()
 Y = fp_center[1]
 if (Y <= bbox_y):
  fp.setTag(2) #floor bond tag
 sim.createParticle(fp)

sim.setParticleDensity(
 tag = 2,
 mask = -1,
 Density = 2650)

#make connections between particles of the floor:
sim.createConnections(
 ConnectionFinder(
  maxDist = 0.003,
  bondTag = 1,
  pList = rough_floor_particles))

#bonded particle interactions:
bond_group = sim.createInteractionGroup(
 NRotBondPrms (name = "floor_particle_bonds",
  normalK = 3.0e+07,
  breakDistance = 10.0,
  tag = 1,
  scaling = True))

#BACK WALL
sim.createWall(name = "back_wall",
  posn = Vec3(0,0,0),
  normal = Vec3(0,0,1))

#FRONT WALL
sim.createWall(name = "front_wall",
  posn = Vec3(0,0,10),
  normal = Vec3(0,0,-1))

#TOP WALL
sim.createWall(name = "top_wall",
  posn = Vec3(0,10,0),
  normal = Vec3(0,-1,0))

#BOTTOM WALL (only bonded particles interact here)
sim.createWall(name = "bottom_wall",
  posn = Vec3(0,0,0),
  normal = Vec3(0,1,0))

#=======================================================================================

sim.createInteractionGroup(FrictionPrms(
    name = "particle-contact",
    A = 1.0,
    youngsModulus = 100000.0,
    poissonsRatio = 0.25,
    dynamicMu = 0.4,
    staticMu = 0.6,
    damp = 0.1,
    cutoff = 0.0,
    rigid = True,
    meanR_scaling = True))

sim.createInteractionGroup(NRotElasticWallPrms(
    name = "backWall",
    wallName = "back_wall",
    normalK = 3.0e+07))

sim.createInteractionGroup(NRotElasticWallPrms(
    name = "frontWall",
    wallName = "front_wall",
    normalK = 3.0e+07))

sim.createInteractionGroup(NRotElasticWallPrms(
    name = "topWall",
    wallName = "top_wall",
    normalK = 3.0e+07))

sim.createInteractionGroup(NRotBondedWallPrms(
    name = "bottomWall",
    wallName = "bottom_wall",
    normalK = 3.0e+07,
    particleTag = 2))

#the body forces
#Gravity
sim.createInteractionGroup(GravityPrms(name = "gravity",
    acceleration=(Vec3(3.67, -9.08, 0))))

#viscosity to simulate air resistance
sim.createInteractionGroup(LinDampingPrms(
    name = "linear_damping",
    viscosity = 0.1,
    maxIterations = 100))

I hope you can help me with this seemingly very simple task. It seems there is some serious lack in my understanding of the modules in esys particle.

Thank you and I very much hope to hear your suggestions!

Question information

Language:
English Edit question
Status:
Expired
For:
ESyS-Particle Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Kahlil Fredrick Cui (physicsman98) said :
#1

I believe there is more that I don't understand about bonding. A bond type is mad to hold particles within a certain distance from each other connected right? If I set the bonded interaction to NRotBondedPrms and given that my maxdist allows all particles to be connected, the block particles, in the absence of all other external forces, should not be moving right?

Revision history for this message
Launchpad Janitor (janitor) said :
#2

This question was expired because it remained in the 'Open' state without activity for the last 15 days.