Adding friction on an inclined plane
Hi to all,
I'm trying to simulate a granular collapse over an inclined plane. I used gmsh to create the inclined plane.
I'm wondering if it is possible to add frictional interaction on its surface when particles slide on it.
Thanks for any help.
Question information
- Language:
- English Edit question
- Status:
- Solved
- Assignee:
- No assignee Edit question
- Solved by:
- SteffenAbe
- Solved:
- Last query:
- Last reply:
Revision history for this message
|
#1 |
Hi dennis,
Try to glue particles on the mesh to mimic frictional surface. This is the only method in ESyS currently.
cheers,
Ning
Revision history for this message
|
#2 |
Hi Ning,
Thanks for the reply. I guess I will use the NRotElasticTriM
Sincerely,
Dennis
Revision history for this message
|
#3 |
Hi Dennis,
to glue particles to the mesh you'd need NRotBondedTriMe
Steffen
Revision history for this message
|
#4 |
Hi Steffen,
Thanks for the reply and the correction. The parameters of NRotBondedTriMe
name (string)
meshName (string)
normalK (float)
breakDistance (float)
buildPrms (MeshTagBuildPrms or MeshGapBuildPrms)
What is the correct value of the breakDistance? Or is there a default value? Is the code fragment below correct in
implementing the module?
sim.
name = "wall",
meshName = "floor",
normalK = 1.0000e+04
)
)
sim.createInte
tag=1
mask=-1
)
)
Sincerely,
Dennis
Revision history for this message
|
#5 |
Hi Dennis,
assuming that you don't want to break the particles away from the mesh a relatively large value of breakDistance would be advisable, i.e. something in the range of the particle diameter.
W.r.t. the MeshTagBuildPrms you'd need to make sure that the particles which you want to glue to the mesh are actually tagged "1" in your example. Otherwise the code looks fine.
I should have some examples sitting around - I'll dig them out and get back to you.
Steffen
Revision history for this message
|
#6 |
Hi Steffen,
Seeing some examples would help a lot. Thanks for your help.
Sincerely,
Dennis
Revision history for this message
|
#7 |
Hi Dennis,
see blow for a gengeo script generating a box with some tagged particles along the bottom edge and a suitable mesh file.
The commands to build the bonded mesh interaction would be:
sim.readMesh(
sim.readMesh(
bip1=NRotBonded
bip2=NRotBonded
sim.createInter
sim.createInter
# -------
from gengeo import *
import sys
# generate box filled with loose particles
xdim=20
ydim=10
zdim=10
rmin=0.2
rmax = 1.0
# corners
minPoint = Vector3(
maxPoint = Vector3(
# Define the volume to be filled with spheres:
box = BoxWithPlanes3D (
minPoint = minPoint,
maxPoint = maxPoint
)
# boundary planes
top_plane=
bottom_
box.addPlane(
box.addPlane(
box.addPlane(
box.addPlane(
box.addPlane(
box.addPlane(
# neighbour table
mntable = MNTable3D (
minPoint = minPoint,
maxPoint = maxPoint,
gridSize = 2.5*rmax,
numGroups = 1
)
# Fill the volume with particles:
packer = InsertGenerator3D (
minRadius = rmin,
maxRadius = rmax,
insertFails = 1000,
maxIterations = 1000,
tolerance = 1.0e-6,
seed=42
)
packer.
volume = box,
ntable = mntable,
groupID = 0,
tag=0
)
# tagging bottom
xmin=0.0
ymin=0.0
zmin=0.0
xmax=xdim
ymax=ydim
zmax=zdim
bottom_
bottom_
bottom_
bottom_
bottom_
bottom_
mntable.
mntable.
# write a geometry file
mntable.write(
fileName = "sbx3d.geo",
outputStyle = 1
)
mntable.write(
fileName = "sbx3d.vtu",
outputStyle = 2
)
#------
# sbx.msh below
#------
3D-Nodes 18
0 0 0 0 15.0 0
1 1 0 0 0 0
2 2 0 10.0 0 0
3 3 0 20.0 -0.0 0
4 4 0 20.0 15.0 0
5 5 0 20.0 0 0
6 6 0 10.0 15.0 0
7 7 0 20.0 15.0 0
8 8 0 10.0 0 0
9 9 0 0 15.0 10.0
10 10 0 0 0 10.0
11 11 0 10.0 0 10.0
12 12 0 20.0 -0.0 10.0
13 13 0 20.0 15.0 10.0
14 14 0 20.0 0 10.0
15 15 0 10.0 15.0 10.0
16 16 0 20.0 15.0 10.0
17 17 0 10.0 0 10.0
Tri3 20
0 0 0 1 9
1 0 1 10 9
2 0 1 2 11
3 0 1 11 10
4 0 2 3 12
5 0 2 12 11
6 0 0 2 1
7 0 0 4 2
8 0 2 4 3
9 0 9 10 11
10 0 9 11 13
11 0 11 12 13
12 1 8 6 5
13 1 6 7 5
14 1 17 14 15
15 1 15 14 16
16 1 8 5 14
17 1 8 14 17
18 1 5 16 14
19 1 5 7 16
Revision history for this message
|
#8 |
Hi Steffen,
Thanks for the example script. It really helps a lot.
dennis
Revision history for this message
|
#9 |
Thanks SteffenAbe, that solved my question.
Revision history for this message
|
#10 |
HI!
This is a rather old thread, but I hope I can still add a question to this one which is somewhat related I think.
Is it possible to generate an inclined plane with particles already adhering to its surface at the start of the simulation? I want to simulate a landslide on an rough erodible incline which is why I need to them to hold on the plane under gravity while preserving the possibility of being eroded when it interacts with the landslide.
I have thought about this for a while now and I hope maybe you guys have an idea around this.
Thank you very much!
Revision history for this message
|
#11 |
Hi Kahlil,
Using GenGeo you should be able to generate an initial particle geometry including a layer of particles tagged for bonding to a wall or trimesh. These particles should be bonded together with BrittleBeamPrms or similar as well. I'd set the cohesion of the bonded interactions relatively low so they will easily break during landslides.
I would probably use ConvexPolyhedron or MeshVolume in GenGeo to specify the dimensions of the erodible layer of particles.
Cheers,
Dion
Revision history for this message
|
#12 |
Hello Dion,
I will try this out. I admit I haven't explored gengeo that much, only those in the tutorials.
Thank you very much!
Revision history for this message
|
#13 |
Hello again!
I'd like to add a follow up question.
I already generated a inclined granular assembly using gengeo MeshVolume and also an un-bonded particle assembly using randomBoxPacker. However as the particles fall down towards the granular slope, they simply pass through. If I understand correctly, this is because there is no relationship set between the unbonded particles and the incline assembly. if so, how can I do this?
To explain my problem better, I have attached my code below:
#intializing
sim = LsmMpi(
sim.initNeighbo
gridSpacing = 1.29,
verletDist = 0.04)
#setting temporal parameters
iterations = 100000
timeStep = 1e-04
interval = 1000
sim.setNumTimeS
sim.setTimeStep
#setting spatial paramters
domain = BoundingBox(
sim.setSpatialD
#creating the mobile particle assembly
minradius = 0.2
maxradius = 0.5
moving = RandomBoxPacker(
minRadius = minradius,
maxRadius = maxradius,
cubicPackRadius = 1.1,
maxInsertFails = 1000,
bBox = BoundingBox(
circDimList = [False, False, False],
tolerance = 1.0e-5)
moving.generate()
moving_particles = moving.
for pp in moving_particles:
pp.setTag = 0
sim.createPart
sim.setParticle
mask = -1,
Density = 2650)
#unbonded inter-particle interactions
sim.createInter
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))
#======
# generate box filled with loose particles using gengeo
#set the extent of the domain
minPoint = Vector3(0,0,0)
maxPoint = Vector3(32,30,10)
triMesh = TriPatchSet()
# read mesh file for list of points
with open('points.
p_data = p.readlines()
points = []
for p_line in p_data:
tri_point = p_line.split()
tri_point = map(float, tri_point)
#print (tri_point[3], tri_point[4], tri_point[5])
vec_point = Vector3(
points.
# read mesh file for list of triangles
with open('triangles
data = i.readlines()
for line in data:
cell = line.split()
cell = map(int,cell)
p1 = points[cell[2]]
#print p1
p2 = points[cell[3]]
p3 = points[cell[4]]
triMesh.
#creating the volume mesh
TriMeshVolume = MeshVolume(Mesh = triMesh)
#create the neighbor table
mntable = MNTable3D(minPoint, maxPoint, 2.5*maxradius, 1)
#packing the particles
packer = InsertGenerator
maxRadius = minradius,
insertFails = 1000,
maxIterations = 1000,
tolerance = 1.0e-6)
packer.
ntable = mntable,
groupID = 0,
tag = 12)
#specifying the bonds between the particles in the mesh
mntable.
tolerance = 1.0e-5,
bondID = 1234)
incline_bonds = BrittleBeamPrms
youngsModulus = 100000,
poissonsRatio = 0.25,
cohesion = 1,
tanAngle = 1.0,
tag = 1234)
#assigning density to the particles in the volume
sim.setParticle
mask = -1,
Density = 2650)
#output for the gengeo volume
mntable.
#======
#Body Forces
#Gravity
sim.createInter
name = "gravity",
acceleration = Vec3(0, -9.81, 0)))
#Linear viscosity
sim.createInter
name = "lin-damp",
viscosity = 0.1,
maxIterations = 100))
#create exclusion between bonded and unbonded interactions
sim.createExclu
interacti
#create the boundaries and corresponding interaction groups
#(Z-direction)***
#BACK WALL
sim.createWall(name = "back_wall",
posn = Vec3(0,0,0),
normal = Vec3(0,0,1))
sim.createInter
name = "backWall",
wallName = "back_wall",
normalK = 3.0e+07))
#FRONT WALL
sim.createWall(name = "front_wall",
posn = Vec3(0,0,10),
normal = Vec3(0,0,-1))
sim.createInter
name = "frontWall",
wallName = "front_wall",
normalK = 3.0e+07))
#(X-direction)***
#RIGHT WALL
sim.createWall(name = "right_wall",
posn = Vec3(0,0,0),
normal = Vec3(1,0,0))
sim.createInter
name = "rightWall",
wallName = "right_wall",
normalK = 3.0e+07))
#LEFT WALL
sim.createWall(name = "left_wall",
posn = Vec3(40,0,0),
normal = Vec3(-1,0,0))
sim.createInter
name = "leftWall",
wallName = "left_wall",
normalK = 3.0e+07))
#(Y-direction)***
#TOP WALL
sim.createWall(name = "top_wall",
posn = Vec3(0,40,0),
normal = Vec3(0,-1,0))
sim.createInter
name = "topWall",
wallName = "top_wall",
normalK = 3.0e+07))
#BOTTOM WALL
sim.createWall(name = "bottom_wall",
posn = Vec3(0,0,0),
normal = Vec3(0,1,0))
sim.createInter
name = "bottomWall",
wallName = "bottom_wall",
normalK = 3.0e+07))
Hoping for your advice.
Kahlil Cui
Revision history for this message
|
#14 |
Hi Kahlil,
There are a few issues with your current setup:
1) In order to import a geometry created using gengeo, you first need to save the geometry file using
mntable.
[you can put this just after your current mntable.write(..) command]
Once the geometry file is saved, you need to read the geometry into the ESyS-Particle simulation container using:
sim.readGeometr
2) It is not a good idea to use the in-simulation geometry creation tools (RandomBoxPacker) in conjunction with gengeo. You are best to construct the entire model geometry in gengeo. You can use a BoxWithPlanes3D(..) Volume in gengeo to pack a box with particles, tag and bond them. After having constructed the geometry, save it and import the geometry per point 1) above.
3) It is important that you specify all other InteractionGroups (IGs) before specifying any Damping IGs. Move your LinDampingPrms IG specification to the end of the section defining your all your IGs
If you wish to send me your scripts and input files, please email me directly. My email address is available via my personal Launchpad page.
Cheers,
Dion
Revision history for this message
|
#15 |
Hello Dion,
Thanks for your advice! Especially on the damping interactions which I have been doing wrong up until now it seems.
I would like to try this out by myself first. If it still proves too hard for me, I hope I can still ask for your help through e-mail.
Once again, thank you very much!
Kahlil Cui