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.

_______________________________________________
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