← Back to team overview

yade-users team mailing list archive

Re: [Question #694253]: JCFpmMat parameters define

 

Question #694253 on Yade changed:
https://answers.launchpad.net/yade/+question/694253

Luc Scholtès proposed the following answer:
Hi Aaron,

In JCFpmMat (https://yade-
dem.org/doc/yade.wrapper.html#yade.wrapper.JCFpmMat), it defines a lot
of stiffness, strength parameters which are really confusing.

-> Well, YADE is a collaborative project so if you find things
confusing, feel free to propose improvements. This being said (...),
JCFPM was designed to deal with jointed materials, i.e., cohesive
materials with pre-existing structures, like, for instance, fractured
rocks (rocks with pre-existing structural discontinuities/fractures).
Hence, all parameters are "doubled" so that the two constitutive
component of a fractured rock (i.e., matrix and fractures) can have
different mechanical properties. If the contact/bond between 2
interacting particles belong to a fracture plane, its properties are
defined through the "jointDedicatedProperty". If the contact/bond
between 2 interacting particles belong to the matrix, its properties are
defined through the "dedicatedProperty".  If your material does not
contain any pre-existing structures, you can just forget about all the
jointDedicatedProperties". Why did we bother with
jointDedicatedProperties in JCFPM? Because we wanted to be able to
reorientate the contact/bond plane accordingly to the
discontinuity/fracture plane.

I strongly suggest you read [1].

1. What are the differences between cohesion and jointCohesion?

-> As mentioned above, "cohesion" is for interactions within the rock
matrix. "jointCohesion" is for interactions along pre-existing
discontinuities/fractures. The same logic applies to
tensileStrength/jointTensileStrength, frictionAngle/jointFrictionAngle,
YoungModulus/jointNormalStiffness, Poisson/jointShearStiffness. Then,
you have extra parameters like jointDilation which enables to define the
dilation of jointed contacts following the physics of rock joints.

2. What is the meaning of joint surface, does it describe the
strength/stiffness of debonding? if so, why do we have to define the
stiffness of debonding? why not just define the stiffness of the bonding
material itself?

-> are you referring to the crossSection variable? I don't see any
jointSurface variable? Or are you referring to the "jointNormal"
variable? If that's the case, jointNormal is a vector that defines the
orientation of the pre-exisitng discontinuity/fracture (if there is one)

3. What is the young in my case, it depends on IP2 functor, but I did
not find related information. Does it mean the Young modulus of
particles?

-> The name "Young" is confusing, I agree with you. It was defined at
the very first stage of the code development and it kept going on
afterward so we just have to deal with it... Actually, it directly
relates to the macroscopic Young modulus. ANW, it defines the normal
stiffness of contacts (https://yade-
dem.org/doc/formulation.html?highlight=young#normal-stiffness). In JCFPM
material, it defines the normal stiffness of contacts within the rock
matrix (notOnJoint).

In your simulation, I'd suggest to use only one material type with 2
sets of properties insteaf of using both JCFpmMat and CohFrictMat.

Please find below a script that simulates a uniaxial compression tests
on an intact matrial using JCFPM.

Cheers,

Luc

[1]
https://www.sciencedirect.com/science/article/abs/pii/S1365160912000391:
Luc Scholtès, Frédéric-Victor Donzé, Modelling progressive failure in
fractured rock masses using a 3D discrete element method, International
Journal of Rock Mechanics and Mining Sciences, Volume 52, 2012, Pages
18-30

----------

from yade import pack, plot

################# SIMULATIONS DEFINED HERE

#### Name of output files
OUT='compressionTest'

#### Simulation Control
rate=-0.05 #deformation rate
iterMax=200000 # maximum number of iterations                       
saveVTK=int(iterMax/5.) # saving output files for paraview                   

#### Microproperties (interparticle parameters)
intR=1.4 # allows near neighbour interaction (can be adjusted for every packing / the bigger -> the more brittle / careful when intR is too large -> bonds can be created "over" particles) -> intR can be calibrated to reach a certain coordination number K (see calculation on line 115)
DENS=3000 # this one can be adjusted for different reasons (porosity of packing vs porosity of material / increase time step (no gravity -> no real effect on the result)
YOUNG=10e9 # this one controls the Young's modulus of the material
ALPHA=0.15 # this one controls the material Poisson's ratio of the material
TENS=3e6 # this one controls the tensile strength UTS of the material
COH=30e6 # this one controls the compressive strength UCS of the material, more precisely, the ratio UCS/UTS (from my experience: COH should be >= to TENS, >= 10*TENS for competent materials like concrete)
FRICT=30 # this one controls the slope of the failure envelope (effect mainly visible on triaxial compression tests)

#### material definition
def sphereMat(): return JCFpmMat(type=1,density=DENS,young=YOUNG,poisson=ALPHA,tensileStrength=TENS,cohesion=COH,frictionAngle=radians(FRICT))

#### create the specimen
L=0.10
D=0.05
pred=pack.inCylinder((0,0,0),(0,0,L),D/2.)
O.bodies.append(pack.regularHexa(pred,radius=D/20.,gap=0.,material=sphereMat)) # regular packings should be avoided as failure is controlled by particle arrangement

#### help define boundary conditions (see utils.uniaxialTestFeatures)
bb=utils.uniaxialTestFeatures()
negIds,posIds,longerAxis,crossSectionArea=bb['negIds'],bb['posIds'],bb['axis'],bb['area']

################# DEM loop + ENGINES DEFINED HERE

O.engines=[
 ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intR,label='Saabb')]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intR,label='SSgeom')],
  [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')],
  [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,Key=OUT,label='interactionLaw')]
 ),
 UniaxialStrainer(strainRate=rate,axis=longerAxis,asymmetry=0,posIds=posIds,negIds=negIds,crossSectionArea=crossSectionArea,blockDisplacements=1,blockRotations=1,setSpeeds=0,stopStrain=0.1,dead=1,label='strainer'),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=10,timestepSafetyCoefficient=0.8,defaultDt=utils.PWaveTimeStep()),
 NewtonIntegrator(damping=0.4,label='newton'),
 PyRunner(iterPeriod=int(100),initRun=True,command='recorder()',label='data'),
 VTKRecorder(iterPeriod=1,initRun=True,fileName=OUT+'-',recorders='spheres','jcfpm','cracks','bstresses'],Key=OUT,dead=1,label='vtk') 
]

################# RECORDER DEFINED HERE

def recorder():
    yade.plot.addData({'i':O.iter,
         'eps':strainer.strain,
         'sigma':strainer.avgStress,
        'tc':interactionLaw.nbTensCracks,
        'sc':interactionLaw.nbShearCracks,
         'unbF':utils.unbalancedForce()})
    plot.saveDataTxt(OUT)

################# PREPROCESSING

#### manage interaction detection factor during the first timestep and then set default interaction range
O.step();

### initializes the interaction detection factor
SSgeom.interactionDetectionFactor=-1.
Saabb.aabbEnlargeFactor=-1.

vtk.dead=0
O.step()

################# SIMULATION REALLY STARTS HERE
strainer.dead=0
vtk.iterPeriod=saveVTK
O.run(iterMax)

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