Reassigning rolling friction after compaction
Hello,
I am having some difficulties with reassigning the rolling friction using the PeriTriaxController after compaction.
In the example code below, I use an initial rolling friction 'eta_roll_init' of 0 (sliding fric also set to 0) to achieve a dense packing, then reassigning a new rolling friction 'eta_roll_final' at end of compaction. The issue seems to be that using different 'eta_roll_final' values yields identical specimen responses at the end of shearing.
I am not sure exactly what the issue is and am wondering if someone with experience with this model can comment if I've doing the material and existing contact re-assignment correctly?
For reference, I used these previous answers as a guide:
https:/
https:/
https:/
My understanding is that for existing contacts at end of compaction, I need to only update/re-calculate the maxRollPl value which is calculated as:
min(rolling_
Example Code:
#======
from __future__ import print_function
from yade import pack, qt, plot, export
# Define model parameters
density = 2650 # Density (kg/m3)
young = 1e8 # Contact modulus (Pa)
poisson = 0.25 # Shear to normal stiffness ratio, Ks/Kn
fric_final = 20.0 # Sliding friction (deg)
alpha_roll = 1.0 # Rolling resistance ratio, Kr/(R1*R2*Ks)
eta_roll_final = 1.0 # Rolling friction (rad)
# Define PSD and RVE parameters
d_min, d_max = 20*0.13/1e3, 20*0.3/1e3 # ..log-linear
Lx, Ly, Lz = 15*d_max, 15*d_max, 15*d_max
numbins = 25
# Define specimen preparation parameters
sigma_iso = -1e5
fric_init = 0.0
eta_roll_init = 0.0
packing = 0
max_strain_rate_iso = 0.20
max_unbalanced_iso = 1e-5
rel_stress_tol_iso = 1e-5
# Define controller parameters
strain_target = 0.20
max_strain_
max_strain_
max_unbalanced_
# Define materials
O.materials.
density=density, # Density [kg/m3]
young=young, # Particle modulus [Pa]
poisson=poisson, # Ks/Kn ratio
frictionAngle
isCohesive=False, # Turn off adhesion
momentRotatio
alphaKr=
alphaKtw=0, # Dimensionless twist stiffness
etaRoll=
etaTwist=0, # Turn off twisting
label="granr" # Material label
))
# Define periodic boundaries
O.periodic = True
# Prepare specimen packing
sp = pack.SpherePack()
# ..log-linear distribution
start, end = numpy.log10(d_min), numpy.log10(d_max)
psdSizes = numpy.logspace(
psdCumm = numpy.linspace(0, 1., len(psdSizes))
sp.makeCloud((0, 0, 0), (Lx, Ly, Lz), psdSizes=psdSizes, psdCumm=psdCumm, periodic=True, seed=7)
# Insert the packing
sp.toSimulation
# Define engines
# more info: https:/
O.engines = [
# Reset forces
ForceResetter(),
# Approximate collision detection, create interactions
InsertionSort
# Sphere axis-aligned bounding box
# Handle interactions
InteractionLoop(
# Geom functors to create interaction geometry
# Phys functors to create interaction from materials
# Law fcunctors to resolve interaction by computing forces per constituitive law
GlobalStiffne
# Use adaptive stiffness-based timestepper
# Set to True for domain decomp
),
# Update positions uising Newton's equations
NewtonIntegrator(
# Non-viscous newton damping
damping=.2,
# Set gravity
# Create label for integrator engine
),
PeriTriaxCont
# Create label/var name for triax engine
# Specify target values and whether they are strains or stresses
# Type of servo-control
# Wait until the unbalanced force goes below this value
# Call this function when goal is reached and the packing is stable
),
PyRunner(
]
# Add custom data to plot
def addPlotData():
plot.addData(
unbalanced=
i=O.iter,
sxx=
syy=
szz=
exx=
eyy=
ezz=
n0=
#n1=
n1=
# mechanical coordination number Zm
Zm=
# coordination number Cn
Cn=
# save all available energy data
Etot=
**O.energy
)
# Enable energy tracking in the code
O.trackEnergy = True
# Define what to plot
plot.plots = {
'i': ('unbalanced',),
'i ': ('sxx', 'syy', 'szz'),
' i': ('exx', 'eyy', 'ezz'),
# Energy plot
' i ': (O.energy.keys, None, 'Etot'),
' i': ('Zm', None, 'n0', 'n1'),
'ezz': ('sxx','syy','szz')
}
# Show the plot
plot.plot()
def compactionFinis
"""
Defines hook for setting up shearing stage after compaction is finished.
"""
# Reassign friction values for shearing stage
# ..for future contacts change material
O.materials[
O.materials[
# ..for existing contacts, set contact friction directly
for i in O.interactions:
i.phys.
i.phys.
# Set the current cell configuration to be the reference one
O.cell.trsf = Matrix3.Identity
# Change control type: keep constant confinement in x,y, 20% compression in z
triax.goal = (sigma_iso, sigma_iso, -strain_target)
triax.stressMask = 3
# Allow faster deformation along x,y to better maintain stresses
triax.
# Next time, call triaxFinished instead of compactionFinished
triax.doneHook = 'triaxFinished()'
# Do not wait for stabilization before calling triaxFinished
triax.
def triaxFinished():
print('Test Finished')
O.pause()
O.run()
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Kevin Kuei
- Solved:
- Last query:
- Last reply: