acoustic emission(JCFmat)recordCrack=true

Asked by Li Zeng on 2020-07-29

Hi everyone,
I am a beginner in YADE. I don't know if my next question is stupid. But I really don't know what I should do next.
I tried to use recordCracks=True to record the cracks generated in the model. However, it seems that something went wrong. Because my result produced .vtu file, but there was no .txt file. I guess it is because my model does not produce cracks? Below is my script,
from __future__ import print_function
from yade import plot,pack
"""
A simple script of a Brazilian splitting test.
A sphere
Load in z direction by z-perpendicular walls.

Code strongly inspired by uniax.py and brazilian.py
"""

# default parameters or from table
readParamsFromTable(noTableOk=True, # unknownOk=True,
 young = 1e9,
 cohesion = 0,
    poisson = .25,
    density = 1000,
    iterper=100,
 frictionAngle = 0.5,

    xSectionScale=1,
    xSectionShape=0.,
    weibullCutOffMin=0,
    weibullCutOffMax=10,

 intRadius =1.5,
 dtSafety = .8,
 strainRate =1,

 specimenRadius = .05,
 sphereRadius = 5e-3
)
from yade.params.table import *

# material
concreteId = O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
               density=density, frictionAngle = frictionAngle,
               tensileStrength= 0, poisson=poisson, label='JCFpmMat',
               jointNormalStiffness=0,jointShearStiffness=0,jointCohesion=0))
# spheres
sp=pack.randomDensePack(
 pack.inSphere((0,0,0),specimenRadius),
 radius = sphereRadius,
 returnSpherePack = True
)
sp.toSimulation()

# walls
idConcrete=O.materials.append(FrictMat(young=30e9,poisson=.2,frictionAngle=.6,label='FrictMat'))
zMin,zMax=[pt[2] for pt in aabbExtrema()]
wallIDs = O.bodies.append([wall((0,0,z),2) for z in (zMin,zMax)])
walls = wallMin,wallMax = [O.bodies[i] for i in wallIDs]
v = strainRate * 2*specimenRadius
wallMin.state.vel = (0,0,+v)
wallMax.state.vel = (0,0,-v)

# engines
O.engines=[
                       ForceResetter(),
                       InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Wall_Aabb()]),
                       InteractionLoop(
                            [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2sc'),Ig2_Wall_Sphere_ScGeom()],
                             [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1, label='jcf')],
                             [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(cracksFileExist = True,smoothJoint=True,label='interactionLaw', neverErase=True,recordCracks=True,recordMoments=True ),
                             Law2_ScGeom_FrictPhys_CundallStrack()],
    ),

           GlobalStiffnessTimeStepper(),
           VTKRecorder(iterPeriod=iterper,initRun=True,recorders=['jcfpm','cracks','facets','moments'],label='vtk'),
                       NewtonIntegrator(damping=0.4),
                       PyRunner(iterPeriod=100,command='addPlotData()',initRun=True),
                       PyRunner(iterPeriod=100,command='stopIfDamaged()'),
]
# stop condition
def stopIfDamaged():
 if O.iter < 10000: # do nothing at the beginning
  return
 fMax = max(plot.data["f"])
 f = plot.data["f"][-1]
 if f/fMax < .1:
  print("Damaged, stopping.")
  print("ft = ",max(plot.data["stress"]))
  O.pause()

# plot stuff
def addPlotData():
 # forces of walls. f1 is "down", f2 is "up" (f1 needs to be negated for evlauation)
 f1,f2 = [O.forces.f(i)[2] for i in wallIDs]
 f1 *= -1
 # average force
 f = .5*(f1+f2)
 # displacement (2 times each wall)
 wall = O.bodies[wallIDs[0]]
 dspl = 2*wall.state.displ()[2]
 # stress (according to standard brazilian test evaluation formula)
 stress = f/(pi*specimenRadius*specimenRadius)
 # store values
 yade.plot.addData(
  t = O.time,
  i = O.iter,
  dspl = dspl,
  f1 = f1,
  f2 = f2,
  f = f,
  stress = stress,
 )
# plot dspl on x axis, stress on y1 axis and f,f1,f2 in y2 axis
plot.plots={'dspl':('stress',None,'f1','f2','f')}

O.dt = 0.
O.step(); # to create initial contacts
# now reset the interaction radius and go ahead
ss2sc.interactionDetectionFactor=1.
is2aabb.aabbEnlargeFactor=1.

# time step
O.dt = dtSafety*PWaveTimeStep()

# run simulation
plot.plot()
#O.run()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Li Zeng
Solved:
2020-07-29
Last query:
2020-07-29
Last reply:
2020-07-29

This question was reopened

Robert Caulk (rcaulk) said : #1

Hello,

Why are you using cracksFileExist=True if you don't have a cracks file that exists already? [1]

Go ahead and leave that as its default value, False.

Cheers,

Robert

[1]https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM.cracksFileExist

Li Zeng (lilly0303) said : #2

Hi Robert,

Thanks for your answer. According to [1], it seems that this command is not needed. But after I deleted it, the result did not change anything.

regards,
Li

Robert Caulk (rcaulk) said : #3

Have you checked to make sure cracks are occurring?

Li Zeng (lilly0303) said : #4

Actually I am not sure. How can I check whether a crack has occurred? Judging from the simulation , it seems to have occurred.

Robert Caulk (rcaulk) said : #5

>Judging from the simulation , it seems to have occurred.

Please elaborate. We cannot read your mind.

>How can I check whether a crack has occurred?

You have access to the interaction physics:

num_cohesive=0
for i in O.interactions:
  if i.phys.isCohesive:
  num_cohesive += 1

Tracking the number of cohesive interactions would let you see if some are breaking or not.

Robert Caulk (rcaulk) said : #6

line edit:

if i.phys.isCohesive: num_cohesive += 1

Li Zeng (lilly0303) said : #7

Hi Robert,
thank you for your help. I havr solved this problem. There was a problem with the material parameters in the previous script and no cracks were generated. After I changed the parameters inside, the data I wanted was generated. Thanks again!
regards
Li

Robert Caulk (rcaulk) said : #8

Great. If you want to give back to the community you could provide the
details on how you solved your issue. Otherwise this entire thread is
essentially useless.

Le mer. 29 juil. 2020 à 18:35, Li Zeng <email address hidden>
a écrit :

> Question #692131 on Yade changed:
> https://answers.launchpad.net/yade/+question/692131
>
> Status: Needs information => Solved
>
> Li Zeng confirmed that the question is solved:
> Hi Robert,
> thank you for your help. I havr solved this problem. There was a problem
> with the material parameters in the previous script and no cracks were
> generated. After I changed the parameters inside, the data I wanted was
> generated. Thanks again!
> regards
> Li
>
> --
> 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 address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>