Why do particles in the concrete cube compression test disperse directly?
Dear all,
In the Yade official examples, I found the concrete Brazilian splitting test [1], which is a simple process where two walls approach the specimen at a constant speed, resulting in tensile failure of the specimen. Below is the code:
-------
# -*- encoding=utf-8 -*-
from __future__ import print_function
from yade import plot,pack
"""
A simple script of a Brazilian splitting test.
A cylinder with x axis form 0 to specimenLength.
Load in z direction by z-perpendicular walls.
Code strongly inspired by uniax.py
"""
# default parameters or from table
readParamsFromT
young = 24e9,
poisson = .2,
sigmaT = 3.5e6,
frictionAngle = atan(0.8),
epsCrackOnset = 1e-4,
relDuctility = 30,
intRadius = 1.5,
dtSafety = .8,
strainRate = 1,
specimenLength = .15,
specimenRadius = .05,
sphereRadius = 3.5e-3,
)
from yade.params.table import *
# material
concreteId = O.materials.
young = young,
poisson = poisson,
frictionAngle = frictionAngle,
epsCrackOnset = epsCrackOnset,
relDuctility = relDuctility,
sigmaT = sigmaT,
))
# spheres
sp=pack.
pack.inCylinde
radius = sphereRadius,
spheresInCell = 500,
memoizeDb = '/tmp/packing-
returnSpherePack = True
)
sp.toSimulation()
# walls
zMin,zMax=[pt[2] for pt in aabbExtrema()]
wallIDs = O.bodies.
walls = wallMin,wallMax = [O.bodies[i] for i in wallIDs]
v = strainRate * 2*specimenRadius
wallMin.state.vel = (0,0,+v)
wallMax.state.vel = (0,0,-v)
# engines
O.engines=[
ForceResetter(),
InsertionSortC
InteractionLoop(
[Ig2_
[Ip2_
[Law2_
),
NewtonIntegrat
CpmStateUpdate
PyRunner(
PyRunner(
]
# stop condition
def stopIfDamaged():
if O.iter < 1000: # do nothing at the beginning
return
fMax = max(plot.data["f"])
f = plot.data["f"][-1]
if f/fMax < .6:
print("Damaged, stopping.")
print("ft = ",max(plot.
O.pause()
# plot stuff
def addPlotData():
# forces of walls. f1 is "down", f2 is "up" (f1 needs to be negated for evlauation)
f1,f2 = [O.forces.f(i)[2] for i in wallIDs]
f1 *= -1
# average force
f = .5*(f1+f2)
# displacement (2 times each wall)
wall = O.bodies[
dspl = 2*wall.
# stress (according to standard brazilian test evaluation formula)
stress = f/(pi*specimenR
# store values
yade.plot.addData(
t = O.time,
i = O.iter,
dspl = dspl,
f1 = f1,
f2 = f2,
f = f,
stress = stress,
)
# plot dspl on x axis, stress on y1 axis and f,f1,f2 in y2 axis
plot.plots=
O.dt = 0.
O.step(); # to create initial contacts
# now reset the interaction radius and go ahead
ss2sc.interacti
is2aabb.
# time step
O.dt = dtSafety*
# run simulation
plot.plot()
#O.run()
-------
Regarding this process, I have two questions, and I would appreciate any assistance or insights from the community.
1. According to the model's micro-scale parameters, this should simulate a concrete specimen, but the stress-displacement curve indicates that the displacement is too large, roughly an order of magnitude greater than real-world conditions. Why is there such a significant difference between micro-scale parameters and macroscopic behavior, and how should I adjust it? (I believe that as an example, the micro-scale parameters in this code are reasonably set, at least in the same order of magnitude.)
2. I would like to simulate a uniaxial compression test, so I changed the original specimen shape to a cube. However, the process becomes very strange, with a sudden increase in stress, and the specimen composed of particles eventually explodes. What is causing this? Did I miss setting some parameters?
I have replaced the #spheres section of the original code with the following code:
# spheres
sp=pack.
pack.inAligned
radius = sphereRadius,
spheresInCell = 500,
memoizeDb = '/tmp/packing-
returnSpherePack = True
)
sp.toSimulation()
Thanks
Antonia
[1] https:/
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Karol Brzezinski
- Solved:
- Last query:
- Last reply: