triaxial test on soft rock
I want to model a triaxial test on soft rock using Yade. I generate a sample using Hertz-Mindlin law, and the sample contains coarse and fine grains (specified PSD). Then in triaxial shearing stage, I change the material and contact law into JCF material and contact law. But failed. This way is impossible in Yade? Could you give me some advice? Thanks!
from __future__ import print_function
from yade import pack,plot,os,timing
from yade import export, ymport
import matplotlib;
import pylab
import numpy as np
O.load(
#O.reset()
for b in O.bodies:
if isinstance(b.shape, Sphere):
density=2600
frictionangle=0
poisson=0.15
young=30e9
damp=0.25
number=10000
walldensity=0
wallfrictionangle=0
wallpoisson=0.5
wallyoung=30000e9
mn=Vector3(
mx=Vector3(2,2,2)
conpress=-200000
rate=0.1
#mat=O.
wallmat=
idRockTest = grainmat=
O.bodies[
O.bodies[
O.bodies[
O.bodies[
O.bodies[
O.bodies[
#wallIds=
#Material constants
sp3 = ymport.
for s in range(0,len(sp3)):
for b in O.bodies:
if isinstance(
if r>0.03 and r<0.50:
if r>0.0 and r<0.03:
#for i in range(5,number+1):
#O.
#FrictionAngle = 35
Damp = 0.25
#Confining variables
ConfPress = -2.0e5
#Loading control
LoadRate = -0.01
#folders for post-processing
#try:
#os.
#except:
#pass
#try:
#os.
#except:
#pass
#try:
#os.
#except:
#pass
#restart
#######
#import necessary packages
from yade import pack,plot,os,timing
#def Output():
#e22=
#particle info
#f=
#f.write('Box position: \n')
#f.
#f.
#f.
#f.
#f.
#f.
#f.write('ID x y z radius disx disy disz rotx roty rotz \n')
#for b in O.bodies:
#if isinstance(b.shape, Sphere):
#f.close()
#contact info
#g = open('.
#print ('Contact information at Iter %d' % O.iter)
#g.write('ctype id1 id2 nfx nfy nfz tfx tfy tfz \n')
#for k in O.interactions:
#if isinstance(
#elif isinstance(
#g.write ('10:%.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f\n'
#elif isinstance(
#g.write ('00:%.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f\n'
#g.close()
#Output()
#######
#####Defining triaxil engines####
#######
triax=TriaxialS
#define wall ids
#wall_bottom_id = wallIds[2],
#wall_top_id = wallIds[3],
#wall_left_id = wallIds[0],
#wall_right_id = wallIds[1],
#wall_back_id = wallIds[4],
#wall_front_id = wallIds[5],
thickness = 0.001,
#maxMultiplier = 1.002,
internalCom
max_vel = 1.0,
stressMask = 5,
goal1 = ConfPress,
goal2 = LoadRate,
goal3 = ConfPress,
)
ini_e22a = -triax.strain[1]
ini_e22b = -triax.strain[1]
O.usesTimeStepp
#O.dt=2e-6
newton=
#setContactFric
O.trackEnergy=True
O.timingEnabled
###engine
O.engines=[
ForceResett
InsertionSo
Interaction
[Ig2_
[Ip2_
[Law2_
),
GlobalStiff
triax,
newton,
PyRunner(
PyRunner(
#VTKRecorde
#TriaxialSt
]
# Simulation stop conditions defination
def endCheck():
unb=
e22=
if abs(e22-
O.pause()
# collect history of data
def addPlotData():
global ini_e22a
global ini_e22b
e22=
unb = unbalancedForce()
mStress = -(triax.
volume = (O.bodies[
Porosity=
plot.
ev=
s11=
s22=
s33=
i=O.iter,
)
#if (e22 - ini_e22a) > 0.001 and e22 < 0.05:
# O.save(
# ini_e22a = e22
if (e22 - ini_e22b) > 0.00005:
print ('unbalanced force: %f, mean stress: %f, s11: %f, s22: %f, s33: %f, coordination number: %f, porosity: %f' %(unb,mStress,
#Output()
ini_e22b = e22
#plot.
#######
######Defining output for postprocessing#
#######
###display
#yade.qt.
### declare what is to plot. "None" is for separating y and y2 axis
#plot.plots=
#plot.plots=
### the traditional triaxial curves would be more like this:
plot.plots=
plot.plot()
#O.run()#; O.wait()
Question information
- Language:
- English Edit question
- Status:
- Answered
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Can you help with this problem?
Provide an answer of your own, or ask Horation for more information if necessary.