How to simulate small-strain triaxial compression test
Hi,
I'd like to ask that how to simulate a drained triaxial compression test within a small-strain level.
The goal of this simulation is to get the small strain stiffness G0.
A typical way is (1) generating a sand packing and isotropically load it to target confining pressure, e.g., 100 kPa. (2) a small axial strain increment deps1 is applied on the top wall, while the lateral stresses sigma2 and sigma3 keep constant. (3) the simulation finishes when the shear strain, gamma = deps1-deps2, reaches 10e-6. (4) then G0 can be calculated by G0 = dsigma1/(2*gamma)
What I have done is using the example code provided by Bruno[1]. I set the loading rate to a very small value (1e-20), and the simulations finished in one second. I thought this process is too quick to generate accurate results, actually the lateral confining pressure changes (i.e., not constant). I know this script works well for a classic triaxial compression test because usually we look at a large strain level (like 20% of axial strain), thereby a small amout of fluctuation on lateral stress is acceptable. But when we look at such a small range and in such a short time, this will lead to inaccurate results. So my question is how can we make the simulation of triaxial compression test within a small-strain level.
Thanks,
Leonard
[1]https:/
The MWE is as follow if the question is not clearly described.
from yade import pack
nRead=readParam
num_spheres=1000,# number of spheres
compFricDegree = 30, # contact friction during the confining phase
key='_
unknownOk=True
)
from yade.params import table
num_spheres=
key=table.key
targetPorosity = 0.43 #the porosity we want for the packing
compFricDegree = table.compFricD
finalFricDegree = 30 # contact friction during the deviatoric loading
rate=-1e-20 # loading rate (strain rate)
damp=0.2 # damping coefficient
stabilityThresh
young=5e6 # contact stiffness
mn,mx=Vector3(
O.materials.
O.materials.
walls=aabbWalls
wallIds=
sp=pack.
sp.makeCloud(
O.bodies.
triax=TriaxialS
maxMultiplier=
finalMaxMultip
thickness = 0,
stressMask = 7,
internalCompac
)
newton=
O.engines=[
ForceResetter(),
InsertionSortC
InteractionLoop(
[Ig2_
[Ip2_
[Law2_
),
GlobalStiffnes
triax,
TriaxialStateR
newton,
]
Gl1_Sphere.
if nRead==0: yade.qt.
triax.goal1=
while 1:
O.run(1000, True)
unb=unbalance
print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
if unb<stabilityTh
break
print "### Isotropic state saved ###"
import sys #this is only for the flush() below
while triax.porosity>
# we decrease friction value and apply it to all the bodies and contacts
compFricDegree = 0.95*compFricDegree
setContactFric
print "\r Friction: ",compFricDegree," porosity:
sys.stdout.flush()
O.run(500,1)
O.save(
print "### Compacted state saved ###"
triax.internalC
setContactFrict
triax.stressMask = 5
triax.goal2=rate
triax.goal1=-100000
triax.goal3=-100000
newton.damping=0.1
print "gamma before deviatoric loading is", abs(triax.
print "click run to start small-strain deviatoric loading"
from yade import plot
def history():
plot.addData(
ev=-
s11=
s22=
s33=
i=O.iter)
def stop():
if abs(triax.
O.pause()
print "gamma after deviatoric loading is", abs(triax.
O.engines=
O.engines=
### declare what is to plot. "None" is for separating y and y2 axis
# plot.plots=
## the traditional triaxial curves would be more like this:
#plot.plots=
# display on the screen (doesn't work on VMware image it seems)
# plot.plot()
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Jérôme Duriez
- Solved:
- Last query:
- Last reply: