New question #671283 on Yade:
https://answers.launchpad.net/yade/+question/671283

Hello everyone,

I did my triaxial compression tests under different confining pressures.  
Sigma3 in the horizontal directions is constant all through the test and the 
cubic sample is compressed in the vertical direction with a constant strain 
rate.  Sigma3 is equal to 100kPa or 400kPa in my tests. Both samples contract 
first and dilate later as the compression goes on.

As well all know, larger volume contraction and lower volume dilation 
afterwards will occur through the test under higher sigma3. But my results are 
just reverse to this. In the case when sigma3 is 100kPa, the volume contraction 
is larger and the volume dilation is maller afterwards. I really don't know why 
this happens. 

My sample is trimmed from a big gravity deposited sample. My friend obtained 
his sample by expanding spheres inside a cubic box and found the same weird 
deformation.  We use the same contact law.  We have adjusted the elastic 
modulus and the poisson ratio, but it doesn't work.

I did triaxial tests with PFC under different confining pressures and 
everything is fine.

Does anyone else meet this kind of problem? 

Below is my code:

from yade import ymport
from yade import utils

############################################
###   DEFINING VARIABLES AND MATERIALS   ###
############################################

compFricDegree = 26.565 # initial contact friction during the confining phase 
finalFricDegree = 26.565 # contact friction during the deviatoric loading
rate=-0.01 # loading rate (strain rate)
damp=0.7 # damping coefficient
stabilityThreshold=0.01 # we test unbalancedForce against this value in 
different loops (see below)
young=5e8 # contact stiffness
mn,mx=Vector3(0,0,0),Vector3(1,1,1) # corners of the initial packing


## create materials for spheres and plates
O.materials.append(FrictViscoMat(betan=0.2, 
young=young,poisson=0.3,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictViscoMat(betan=0.2, 
young=young,poisson=0.3,frictionAngle=0,density=0,label='walls'))

## create walls around the packing
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)

print "Load clumps"
deposited_bodies = 
ymport.textClumps('cubic_sample_clump_miu0.5_dep_damp0.1_35608_hor_layer_plane.txt',
 shift=Vector3(0,0,0), material='spheres')
O.bodies.updateClumpProperties()#get more accurate clump masses/volumes/inertia


############################
###   DEFINING ENGINES   ###
############################

triax=TriaxialStressController(
        ## TriaxialStressController will be used to control stress and strain. 
It controls particles size and plates positions.
        ## this control of boundary conditions was used for instance in 
http://dx.doi.org/10.1016/j.ijengsci.2008.07.002
        maxMultiplier=1.+2e4/young, # spheres growing factor (fast growth)
        finalMaxMultiplier=1.+2e3/young, # spheres growing factor (slow growth)
        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,
        internalCompaction=False, # If true the confining pressure is generated 
by growing particles
)

contact = Law2_ScGeom_FrictViscoPhys_CundallStrackVisco(traceEnergy=True)
newton=NewtonIntegrator(damping=damp)

O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
                [Ip2_FrictViscoMat_FrictViscoMat_FrictViscoPhys()],
                [contact]
        ),
        ## We will use the global stiffness of each body to determine an 
optimal timestep (see 
https://yade-dem.org/w/images/1/1b/Chareyre&Villard2005_licensed.pdf)
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
        triax,
        newton,
        # save data for Paraview
        VTKRecorder(fileName='post/3d-vtk-',recorders=['all'],iterPeriod = 
500000)
]

O.dt=.5*utils.PWaveTimeStep()

# for the samples of this size (diametre is around 1.8cm), the O.dt is 8.8e-5 
s, which is about a hundred times of 
# the small sample, and this leads to much faster calculation speed.

#######################################
###   APPLYING CONFINING PRESSURE   ###
#######################################

## we define the lateral stresses during the test, here the same 100kPa as for 
the initial confinement.
p_const = 100000

#the value of (isotropic) confining stress defines the target stress to be 
applied in all three directions
triax.goal1=triax.goal2=triax.goal3=-p_const

while 1:
  O.run(1000, True)
  ##the global unbalanced force on dynamic bodies, thus excluding boundaries, 
which are not at equilibrium
  unb=unbalancedForce()
  print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
  if unb<stabilityThreshold and abs(-p_const-triax.meanStress)/p_const<0.001:
    break

O.save('confinedState'+key+'.yade.gz')
print "###      Isotropic state saved      ###"

triax.depth0 = triax.depth
triax.height0 = triax.height
triax.width0 = triax.width

print "depth0 = ",triax.depth0
print "height0 = ",triax.height0
print "width0 = ",triax.width0

print "porosity = ", triax.porosity
print "p_eff = ", triax.meanStress
print "total_num = ", len(O.bodies)


##############################
###   DEVIATORIC LOADING   ###
##############################

## Change contact friction (remember that decreasing it would generate 
instantaneous instabilities)
setContactFriction(radians(finalFricDegree))

##set stress control on x and y, we will impose strain rate on z
triax.stressMask = 3
##now goal2 is the target strain rate
triax.goal3=rate


O.run(4000000,True)

O.save('final.yade.gz')






-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to