Adjusting the friction angle between dynamic components (spheres) and non-dynamic components (facets)
Hello dear YADE community,
I would like to load particles (spheres) in a simulation. These should have the following properties:
1. within the bulk of particles a certain friction value should be set in the form of an angle of repose (e.g. frictionAngle=0.65; i.e. approx. 37.5° for the material "Granodiorith").
2. furthermore, the friction coefficient μ ( approx. 0.75) between the particle material and the simulation surfaces made of facets should also be set.
I have already set the value for 1. via the "FrictMat" with "frictionAngle". For the 2nd value, I have made a conversion for the angle of repose according to [1] with the arctan and also set via the "FrictMat" with "frictionAngle". To check this friction value I wrote the script below. However, this shows me that I have not set the friction value required in 2.: μ = 0.087
In the script itself, a normal force is first applied to a particle by "Platte1" and "Platte2". Then "Platte3" moves towards the particle, which counteracts the frictional force between "Platte1", "Platte2" and the particle. The friction force is measured by the force reached by "plate3". The mean value of 10 of these frictional forces in relation to the normal force is then used to determine the friction value.
My main question is how to set the coefficient of friction for the facet material to 0.75. By just trying it out myself, I also come up with the following questions:
Have I reached this friction value requested by me and an error in this script?
Are there any other ways to set friction properties for the materials, or what does the command "setContactFric
Does the type of calculation algorithm [3] have something to do with the fact that I get a different result? What must be done so that I still achieve the required setting?
How can I set a friction value to non-dynamic bodies like in 2.
With kind regards, Paul
[1] It is an external link which says: μ = tan(frictionAngle), if necessary just ask for link.
[2] https:/
[3] https:/
#######
# YADE-Version: 2022.01a
#######
## Importieren zusaetzlicher Module
from yade import geom, pack, plot, qt
from math import pi, atan
from statistics import mean
## Definieren der verwendeten Parameter
dP = 10e-3 # Partikeldurchmesser
DIM = 2* dP
dPlt = 0.01*dP
Ueberlappung = 5e-2*dP # realisiert Anpresskraft
Platte3vel = 5e-3 # wirkt Reibkraft entgegen
Platte1vel = 5e-3
Platte2vel = -Platte1vel
Versuchszahl = 10
Normalkraft = 50
# Definieren der Materialparameter
EingabegroesseR
print("angestrebter Reibwert:", EingabegroesseR
idVersuchsgut = O.materials.
idStempelPlatte = O.materials.
## Generieren der Simulationskomp
Simulationskoerper = 0
PartikelIDs = O.bodies.
Partikelmenge0 = Simulationskoerper
Partikelmenge1 = len(O.bodies)
Partikelmenge = len(O.bodies)
Simulationskoerper += Partikelmenge
Platte1IDs = O.bodies.
Platte1groesse0 = Simulationskoerper
Platte1groesse1 = len(O.bodies)
Platte1groesse = len(O.bodies)
Simulationskoerper += Platte1groesse
Platte2IDs = O.bodies.
Platte2groesse0 = Simulationskoerper
Platte2groesse1 = len(O.bodies)
Platte2groesse = len(O.bodies)
Simulationskoerper += Platte2groesse
Platte3IDs = O.bodies.
Platte3groesse0 = Simulationskoerper
Platte3groesse1 = len(O.bodies)
Platte3groesse = len(O.bodies)
Simulationskoerper += Platte3groesse
## Definieren des Ausgangszustandes von Laufvariablen
Platte1kraft = 0
Platte2kraft = 0
Platte3kraft = 0
Partikelkraft = 0
maxPartikelvel = 0
Haftreibwert = []
Bewegung = False
Iteration = False
Phase0 = "Anfang"
Phase01 = "Normalkraft"
Phase1 = "Annaeherung"
Phase2 = "Entfernung"
Phase3 = "Ende"
Iterationsphase = Phase0
## Definieren der Engines
O.engines=[
ForceResett
InsertionSo
Interaction
NewtonInteg
PyRunner(
O.dt=0.
# Steuereung des Simulationsabla
def Statemaschine():
global Iterationsphase, Platte1kraft, Platte2kraft, Platte3kraft, Partikelkraft, maxPartikelvel, Bewegung, Iteration, Haftreibwert
aktPlatte1kraft = 0
for i in range(Platte1gr
deltaPlatte
Platte1kraft = aktPlatte1kraft
#print(
aktPlatte2kraft = 0
for i in range(Platte2gr
deltaPlatte
Platte2kraft = aktPlatte2kraft
#print(
aktPlatte3kraft = 0
for i in range(Platte3gr
deltaPlatte
Platte3kraft = aktPlatte3kraft
#print(
aktPartikel
for i in range(Partikelm
deltaPartik
Partikelkraft = aktPartikelkraft
#print(
maxPartikelvel = 0
for i in range(Partikelm
Partikelvel = O.bodies[
if Partikelvel > maxPartikelvel:
#print(
#print(
Krit0 = (abs(Platte3kra
Krit1 = (abs(Partikelkr
Krit2 = (abs(maxPartike
Krit3 = (len(Haftreibwe
Krit4 = ((abs(Platte1kr
#print(
#print(
#print(
#print(
#print(
if Iterationsphase == Phase0:
Iteration = True
O.engines += [TranslationEng
O.engines += [TranslationEng
elif Iterationsphase == Phase01:
if Krit4:
elif Iterationsphase == Phase1:
if Krit2:
Wert = 2*abs(Platte3kr
if Krit3:
else:
elif Iterationsphase == Phase2:
if not(Krit1 or Krit2 or Krit0):
elif Iterationsphase == Phase3:
O.engines += [TranslationEng
O.pause()
plot.
return Iterationsphase, Platte1kraft, Platte2kraft, Platte3kraft, Partikelkraft, maxPartikelvel, Bewegung, Iteration, Haftreibwert
## Data mining
plot.plots=
plot.plot(subPlots = False)
qt.Controller()
qt.View()
O.run()
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Jan Stránský
- Solved:
- Last query:
- Last reply: