Triaxial test with a grid
Hello, everyone!
I am trying to simulate a triaxial test with geogrid placed in soil packing. I modified the script from the example :
trunk/examples/
The problem is in the combination of the triaxial script and the script for geogrid. After adding lines for grid modeling, unbalanced force is not calculated properly. The output of calculation of unbalanced force is "unbalanced force: nan".
Anyone can help me to solve this issue?
This is the script:
from yade import pack
from yade.gridpfacet import *
#######
### DEFINING VARIABLES AND MATERIALS ###
#######
# The following 5 lines will be used later for batch execution
nRead=readParam
num_spheres=4000,# 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=-0.02 # loading rate (strain rate)
damp=0.2 # damping coefficient
stabilityThresh
young=5e6 # contact stiffness
mn,mx=Vector3(
## create materials for spheres and plates
O.materials.
O.materials.
O.materials.
## create walls around the packing
walls=aabbWalls
wallIds=
### Parameters of a rectangular grid ###
L=0.30 #length [m]
#l=0.30 #width [m]
nbL=10#number of nodes for the length [#]
nbl=10#number of nodes for the width [#]
r=L/100 #radius
color=[
nodesIds=[]
#Create all nodes first :
for i in range(5,5+nbL):
for j in range(5,5+nbl):
nodesIds.append( O.bodies.
#Create connection between the nodes
for i in range(5,
for j in range(i+
dist=
if(dist<
O.bodies.append( gridConnection(
## use a SpherePack object to generate a random loose particles packing
sp=pack.
clumps=False #turn this true for the same example with clumps
if clumps:
## approximate mean rad of the futur dense packing for latter use
volume = (mx[0]-
mean_rad = pow(0.09*
## define a unique clump type (we could have many, see clumpCloud documentation)
c1=pack.
## generate positions and input them in the simulation
sp.makeClumpCl
sp.toSimulatio
O.bodies.
else:
sp.makeCloud(
O.bodies.
#or alternatively (higher level function doing exactly the same):
#sp.toSimulati
#######
### DEFINING ENGINES ###
#######
triax=TriaxialS
## TriaxialStressC
## this control of boundary conditions was used for instance in http://
maxMultiplier=
finalMaxMultip
thickness = 0,
## switch stress/strain control using a bitmask. What is a bitmask, huh?!
## Say x=1 if stess is controlled on x, else x=0. Same for for y and z, which are 1 or 0.
## Then an integer uniquely defining the combination of all these tests is: mask = x*1 + y*2 + z*4
## to put it differently, the mask is the integer whose binary representation is xyz, i.e.
## "100" (1) means "x", "110" (3) means "x and y", "111" (7) means "x and y and z", etc.
stressMask = 7,
internalCompac
)
newton=
O.engines=[
ForceResetter(),
InsertionSortC
InteractionLoop(
[Ig2_
[Ip2_
[Law2_
),
## We will use the global stiffness of each body to determine an optimal timestep (see https:/
GlobalStiffnes
triax,
TriaxialStateR
newton
]
#Display spheres with 2 colors for seeing rotations better
Gl1_Sphere.
if nRead==0: yade.qt.
## UNCOMMENT THE FOLLOWING SECTIONS ONE BY ONE
## DEPENDING ON YOUR EDITOR, IT COULD BE DONE
## BY SELECTING THE CODE BLOCKS BETWEEN THE SUBTITLES
## AND PRESSING CTRL+SHIFT+D
#######
### APPLYING CONFINING PRESSURE ###
#######
#the value of (isotropic) confining stress defines the target stress to be applied in all three directions
triax.goal1=
while 1:
O.run(1000, True)
#the global unbalanced force on dynamic bodies, thus excluding boundaries, which are not at equilibrium
unb=unbalance
print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
if unb<stabilityTh
break
O.save(
print "### Isotropic state saved ###"
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Marcus Moravia
- Solved:
- Last query:
- Last reply: