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