How to use TSSR method in order to promote failure in YADE??

Asked by shiv

I have read this question related to my problems

https://answers.launchpad.net/yade/+question/428040

But I do not understand how will I plot a graph in which on left Y axis there is strength reduction(TSSR) and on the right Y-axis there are tensile crack events with iteration similar to attached in the given link:
https://drive.google.com/file/d/1WU-lgHpfLFSaoNAqjKRioQlVmXnSYZbK/view?usp=sharing

And the script is:
from yade import plot, pack,utils,ymport

#### controling parameters
packing='iit_10_plane'
smoothContact=True
jointFrict=radians(20)
jointDil=radians(0)
output='jointDip30_jointFrict20'
maxIter=10000

#### Import of the sphere assembly
def sphereMat(): return JCFpmMat(type=1,young=1e8,frictionAngle=radians(30),density=3000,poisson=0.3,tensileStrength=1e6,cohesion=1e6,jointNormalStiffness=1e7,jointShearStiffness=1e7,jointCohesion=1e6,jointFrictionAngle=jointFrict,jointDilationAngle=jointDil) ## Rq: density needs to be adapted as porosity of real rock is different to granular assembly due to difference in porosity (utils.sumForces(baseBodies,(0,1,0))/(Z*X) should be equal to Gamma*g*h with h=Y, g=9.82 and Gamma=2700 kg/m3
O.bodies.append(ymport.text(packing+'.spheres',scale=1.,shift=Vector3(5,-32.4,-4),material=sphereMat))

## preprocessing to get dimensions of the packing
dim=utils.aabbExtrema()
dim=utils.aabbExtrema()
xinf=dim[0][0]
xsup=dim[1][0]
X=xsup-xinf
yinf=dim[0][1]
ysup=dim[1][1]
Y=ysup-yinf
zinf=dim[0][2]
zsup=dim[1][2]
Z=zsup-zinf

## preprocessing to get spheres dimensions
R=0
Rmax=0
numSpheres=0.
for o in O.bodies:
 if isinstance(o.shape,Sphere):
   numSpheres+=1
   R+=o.shape.radius
   if o.shape.radius>Rmax:
     Rmax=o.shape.radius
Rmean=R/numSpheres

#### Identification of the spheres on joint (some DIY here!) -> work to do on import function textExt to directly load material properties from the ascii file
inFile=open(packing+'_jointedPM.spheres','r')
for line in inFile:
    if '#' in line : continue
    id = int(line.split()[0])
    onJ = int(line.split()[1])
    nj = int(line.split()[2])
    j11 = float(line.split()[3])
    j12 = float(line.split()[4])
    j13 = float(line.split()[5])
    j21 = float(line.split()[6])
    j22 = float(line.split()[7])
    j23 = float(line.split()[8])
    j31 = float(line.split()[9])
    j32 = float(line.split()[10])
    j33 = float(line.split()[11])
    O.bodies[id].state.onJoint=onJ
    O.bodies[id].state.joint=nj
    O.bodies[id].state.jointNormal1=(j11,j12,j13)
    O.bodies[id].state.jointNormal2=(j21,j22,j23)
    O.bodies[id].state.jointNormal3=(j31,j32,j33)
inFile.close

#### Boundary conditions
e=2*Rmean
Xmax=0
Ymax=0
baseBodies=[]

for o in O.bodies:
   if isinstance(o.shape,Sphere):
      o.shape.color=(0.9,0.8,0.6)
      ## to fix boundary particles on ground
      if o.state.pos[1]<(yinf+2*e) :
  o.state.blockedDOFs+='xyz'
  baseBodies.append(o.id)
  o.shape.color=(1,1,1)

      ## to identify indicator on top
      if o.state.pos[1]>(yinf-e) and o.state.pos[0]>(18) and o.state.pos[2]>(zinf+(Z-e)/2) and o.state.pos[2]<(zsup-(Z-e)/2) :
 refPoint=o.id
 p0=o.state.pos[1]

baseBodies=tuple(baseBodies)
O.bodies[refPoint].shape.color=(1,0,0)

#### Engines definition
interactionRadius=1. # to set initial contacts to larger neighbours
O.engines=[

 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=interactionRadius,label='is2aabb'),]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=interactionRadius,label='ss2d3dg')],
  [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')],
  [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=smoothContact,label='interactionLaw')]
 ),
 GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.8),
 PyRunner(iterPeriod=1000,initRun=False,command='jointStrengthDegradation()'),
 VTKRecorder(iterPeriod=5000,initRun=True,fileName=(output+'-'),recorders=['spheres','velocity','intr']),
 PyRunner(iterPeriod=10,initRun=True,command='dataCollector()'),
 NewtonIntegrator(damping=0.7,gravity=(0.,-9.82,0.)),

]

#### dataCollector
plot.plots={'iterations':('p',)}
def dataCollector():
 R=O.bodies[refPoint]
 plot.addData(v=R.state.vel[1],p=R.state.pos[1]-p0,iterations=O.iter,t=O.realtime)
 plot.saveDataTxt(output)

#### joint strength degradation
stableIter=2000
stableVel=0.001
degrade=True
def jointStrengthDegradation():
    global degrade
    if degrade and O.iter>=stableIter and abs(O.bodies[refPoint].state.vel[1])<stableVel :
 print '!joint cohesion total degradation!', ' | iteration=', O.iter
 degrade=False
 for i in O.interactions:
     if i.phys.isOnJoint :
  if i.phys.isCohesive:
    i.phys.isCohesive=False
    i.phys.FnMax=0.
    i.phys.FsMax=0.

#### YADE windows
from yade import qt
v=qt.Controller()
v=qt.View()

O.dt=0.1*utils.PWaveTimeStep()

#### set cohesive links with interaction radius>=1
O.step();
#### initializes now the interaction detection factor to strictly 1
ss2d3dg.interactionDetectionFactor=-1.
is2aabb.aabbEnlargeFactor=-1.
#### if you want to avoid contact detection (Lattice like)
#O.engines=O.engines[:1]+O.engines[3:]

#### RUN!!!
O.dt=-0.1*utils.PWaveTimeStep()

O.run(maxIter)
plot.plot()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
Last query:
Last reply:

This question was reopened

  • by shiv
Revision history for this message
Robert Caulk (rcaulk) said :
#1

def history():
   plot.addData(
                   TSSR = srFactor,
                   iters = O.iter,
                   cracks = jcfpmlaw.nbTensileCracks
)

O.engines=O.engines+[PyRunner(iterPeriod=200,command='history()',label='recorder')]

from yade import plot
plot.plots={'iters':('srFactor',None,'cracks')}
plot.plot()

Revision history for this message
Robert Caulk (rcaulk) said :
#2

plot.plots={'iters':('TSSR',None,'cracks')} **

Revision history for this message
shiv (shivpreet.ce15) said :
#3

I have added this portion in my script but it was showing me an error :

NameError Traceback (most recent call last)
/usr/bin/yadedaily in <module>()

/usr/bin/yadedaily in history()
    132 def history():
    133 plot.addData(
--> 134 TSSR = srfactor,
    135 iters = O.iter,
    136 cracks = jcfpmlaw.nbTensileCracks

NameError: global name 'srfactor' is not defined

so where I have define 'srfactor' and 'jcfpmlaw.nbTensileCracks' in my script

Revision history for this message
Best Robert Caulk (rcaulk) said :
#4

I noticed you added your script to the original post. Thank you, I assume you will want to add something like:

srFactor = 1.

def reduceStrength():
    srFactor *= 0.9
    for cont in O.interactions:
      cont.phys.FnMax *= 0.9
      cont.phys.FsMax *= 0.9

O.engines=O.engines+[PyRunner(iterPeriod=1000,command='reduceStrength()',label='strength reduction')]

and instead of jcfpmlaw.nbTensileCracks, change it to interactionLaw.nbTensileCracks

Revision history for this message
shiv (shivpreet.ce15) said :
#5

It is showing this error

AttributeError Traceback (most recent call last)
/usr/bin/yadedaily in <module>()

/usr/bin/yadedaily in history()
    145 TSSR = srFactor,
    146 iters = O.iter,
--> 147 cracks =interactionLaw.nbTensileCracks
    148 )
    149

AttributeError: 'Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM' object has no attribute 'nbTensileCracks'

Revision history for this message
Robert Caulk (rcaulk) said :
#6
Revision history for this message
shiv (shivpreet.ce15) said :
#7

  It is showing this error:

Running script gravity.py
  File "<string>", line 1
    __builtins__.strength reduction=Omega().labeledEngine('strength reduction')
                                  ^
SyntaxError: invalid syntax
  File "<string>", line 1
    __builtins__.strength reduction=Omega().labeledEngine('strength reduction')
                                  ^
SyntaxError: invalid syntax
/usr/lib/python2.7/dist-packages/matplotlib/artist.py:221: MatplotlibDeprecationWarning: This has been deprecated in mpl 1.5, please use the
axes property. A removal date has not been set.
  warnings.warn(_get_axes_msg, mplDeprecation, stacklevel=1)

UnboundLocalError Traceback (most recent call last)
/usr/bin/yadedaily in <module>()

/usr/bin/yadedaily in reduceStrength()
    134
    135
--> 136 srFactor *= 0.9
    137 for cont in O.interactions:
    138 cont.phys.FnMax *= 0.9

UnboundLocalError: local variable 'srFactor' referenced before assignment

Revision history for this message
shiv (shivpreet.ce15) said :
#8

Thanks Robert Caulk, that solved my question.

Revision history for this message
shiv (shivpreet.ce15) said :
#9

But I am facing another issue while plotting of the graph that my tensile crack are coming constantly in Plot. They are n't changing at all.So can someone help me with this problem

Revision history for this message
shiv (shivpreet.ce15) said :
#10

Thanks for help Robert.

Revision history for this message
shiv (shivpreet.ce15) said :
#11

Thanks Robert Caulk, that solved my question.