About simulating constant volume condition in a triaxial test
Hi,
I would like to simulate a constant volume condition in a triaxial test (i.e., undrained triaxial test).
In general, we can simulate the constant volume by setting triax controller like:
triax.stressMask = 0 ## all strain control
triax.goal2=rate
triax.goal1=
triax.goal3=
For a constant volume condition, volumetric strain should be zero theoretically, while there could be some fluctuation in volumetric strain since it is a numerical simulation. It is OK if I only have a small amount of volumetric strain during the simulation (e.g. below 1e-5). However, I always get accumulation in volumetric strain to a relative large value (e.g. up to 1e-3), which doesn't satisfy the constant volume condition.
Do you have any ideas about simulating a constant volume condition more precisely? For example, what parameters we can adjust to help us simulate constant volume more accurately?
A MWE below modified from Bruno's triaxial script shows the accumulation in volumetric strain during undrained loading.
#######
from yade import pack
nRead = readParamsFromT
)
from yade.params import table
num_spheres = table.num_spheres
key = table.key
targetPorosity = 0.43
compFricDegree = table.compFricD
finalFricDegree = 30
rate = -0.01
damp = 0.2
stabilityThreshold = 0.01
young = 5e6
mn, mx = Vector3(0, 0, 0), Vector3(1, 1, 1)
O.materials.
O.materials.
walls = aabbWalls([mn, mx], thickness=0, material='walls')
wallIds = O.bodies.
sp = pack.SpherePack()
sp.makeCloud(mn, mx, -1, 0.3333, num_spheres, False, 0.95, seed=1)
O.bodies.
triax = TriaxialStressC
)
newton = NewtonIntegrato
O.engines = [
## We will use the global stiffness of each body to determine an optimal timestep (see https:/
triax,
newton
]
Gl1_Sphere.stripes = 0
if nRead == 0:
yade.qt.
triax.goal1 = triax.goal2 = triax.goal3 = -10000
while 1:
O.run(1000, True)
print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
if unb<stabilityTh
print "### Isotropic state saved ###"
import sys
while triax.porosity>
print "\r Friction: ",compFricDegree," porosity:
triax.internalC
setContactFrict
triax.stressMask = 0
triax.goal2=rate
triax.goal1=
triax.goal3=
newton.damping=0.6
from yade import plot
def history():
O.engines=
O.run(100,True)
plot.plots=
plot.plot()
##############
Thanks
Leonard
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: