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

Hello,
My question is similar to that mentioned in [1], but we use different materials 
([1] is CPM material but mine is JCFPM material).

What I am doing is simulating the triaxial compression test of rock, and using 
the interaction enlarge factor of 1.5 to consider simulating brittle rock.In my 
understanding, brittle rocks should change from brittleness to ductility under 
high confining pressure (i.e. strain softening stage after peak).

I try to set the confining pressure from 20MPa to 100MPa, however, the 
stress-strain curve is similar to that described in [1], i.e have a linear 
elastic state and then followed by a sharp drop (the tangent of the stress 
decrease is almost 90 degree)..

I didn't get the desired strain softening stage. Is it due to material problems?

Thanks for help

----------------------code----------------------
from yade import pack, ymport, plot, utils, export, timing
import numpy as np
import sys

Wy=-20e6
rate=-0.5
damp=0.4
stabilityThreshold=0.001
key='_triax_base_'
young=3000e9
name='JCFPM_triax'
#targetPorosity=0.43
compFricDegree=30
poisson=0.4
OUT=str(Wy)+'_JCFPM_triax'

mn,mx=Vector3(0,0,0),Vector3(0.05,0.05,0.05)
O.materials.append(JCFpmMat(type=1,density=2640,young=young,poisson=poisson,tensileStrength=160e6,cohesion=1600e6,frictionAngle=radians(10),label='sphere'))
O.materials.append(JCFpmMat(type=1,frictionAngle=0,density=0,label='wall'))

walls=aabbWalls([mn,mx],thickness=0,material='wall')
wallIds=O.bodies.append(walls)

O.bodies.append(ymport.text('packing-JCFPM.spheres',scale=1,shift=Vector3(0,0,0),material='sphere',color=(0.6,0.5,0.15)))

triax=TriaxialStressController(
        maxMultiplier=1.+4e8/young, 
        finalMaxMultiplier=1.+4e7/young, 
        thickness = 0,
        stressMask = 7,
        internalCompaction=True, 
)
newton=NewtonIntegrator(damping=damp)

def recorder():
        yade.plot.addData(
        i=O.iter,
        e11=-triax.strain[0],e22=-triax.strain[1],e33=-triax.strain[2],
        s11=-triax.stress(triax.wall_right_id)[0],#0+边界id为right
        s22=-triax.stress(triax.wall_top_id)[1],#1+边界id为top
        s33=-triax.stress(triax.wall_front_id)[2],#2+边界id为front
        numberTc=interactionLaw.nbTensCracks,
        numberSc=interactionLaw.nbShearCracks,
        unb=unbalancedForce()
)
        plot.saveDataTxt(OUT)

def stop_condition():
        extremum=max(abs(s) for s in plot.data['s33'])
        s=abs(plot.data['s33'][-1])
        e=abs(plot.data['e33'][-1])
        #if abs(s) > .5*abs(extremum) or e < 0.005:
        if e < 0.001 :
                return
        if abs(s)/abs(extremum) < 0.9:
                print('Max stress and strain:',extremum,e)
                presentcohesive_count = 0
                for i in O.interactions:
                        if hasattr(i.phys, 'isCohesive'):
                                if i.phys.isCohesive == True:
                                        presentcohesive_count+=1
                print('the number of cohesive bond now 
is:',presentcohesive_count)
                O.wait()
        
O.engines=[
        ForceResetter(),
        
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.5,label='is2aabb'),Bo1_Box_Aabb()]),
        InteractionLoop(
                
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.5,label='ss2sc'),Ig2_Box_Sphere_ScGeom()],
                [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys()],
                
[Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,Key=OUT+'_Crack',label='interactionLaw')]
        ),
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=10,timestepSafetyCoefficient=0.8),
        triax,
        TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+key),
        
PyRunner(iterPeriod=int(1000),initRun=True,command='recorder()',label='data',dead=0),
        PyRunner(iterPeriod=1000,command='stop_condition()',dead=0),
        
VTKRecorder(iterPeriod=500,initRun=True,fileName='triax/JFFPM-',recorders=['spheres','jcfpm','cracks'],Key=OUT+'_Crack',label='vtk',dead=1),
        newton,
]

O.step()
ss2sc.interactionDetectionFactor=-1
is2aabb.aabbEnlargeFactor=-1
cohesiveCount = 0
for i in O.interactions:
        if hasattr(i.phys, 'isCohesive'):
                if i.phys.isCohesive == True:
                        cohesiveCount+=1
print('the origin total number of cohesive bond is:',cohesiveCount)

triax.goal1=triax.goal2=triax.goal3=Wy
while 1:
        #global Wy
        O.run(500,1)
        unb=unbalancedForce()
        print('unbalanced force:',unb,'mean stres:',triax.meanStress)
        if unb<stabilityThreshold and abs(Wy-triax.meanStress)/abs(Wy)<0.001:
                break

cohesiveCount = 0
for i in O.interactions:
        if hasattr(i.phys, 'isCohesive'):
                if i.phys.isCohesive == True:
                        cohesiveCount+=1
print('the first total number of cohesive bond is:',cohesiveCount)

triax.internalCompaction=False
triax.stressMask=3
triax.goal1=Wy
triax.goal2=Wy
triax.goal3=rate

plot.plots={'e33':('s33',None,'unb'),'i':('numberTc','numberSc',None,'s33')}
plot.plot()
O.run()
--------------------------------------------------------
[1]https://answers.launchpad.net/yade/+question/695734

-- 
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     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to