# JCFpm

Hi guys

I want to model crack and micro joints in rock and I am completely amateur in YADE.
this is my code:

rad = 1e-1 # unit is meter
c=6.54e6 # unit is Pa
Q=55.12 # unit is degree should convert to radian
v=0.20
T=12.21e6 # unit is Pa
E=24.36e9 # unit is Pa
param = {'cohesion':c, 'frictionAngle':Q*2*math.pi/360, 'poisson':v, 'tensileStrength':T, 'young':E}
Mat=O.materials.append(JCFpmMat(density=2.89e3,jointNormalStiffness=2.5e6,jointShearStiffness=1e6,jointCohesion=1e6,jointDilationAngle=0.3,jointFrictionAngle=0.5,**param))

O.bodies.append([
])
O.bodies.append(utils.wall(position=(0,0,-1),axis=2,sense=+1,material=Mat))

O.forces.setPermF(0,Vector3(10,20,3))
O.forces.setPermF(1,Vector3(10,20,3))
O.dt = 1e-6

O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
[Ip2_JCFpmMat_JCFpmMat_JCFpmPhys()],
[Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM()]
),
NewtonIntegrator(damping=0.1,gravity=(0,0,-9.81))
]
O.saveTmp()

2- How I can add a joint with the following properties to first sphere?
dip=84 degree
dip direction=280 degree
persistence=0.8 m
aperture=1 mm

## Question information

Language:
English Edit question
Status:
Solved
For:
Assignee:
No assignee Edit question
Solved by:
Jérôme Duriez
Solved:
2019-08-21
Last query:
2019-08-21
2019-08-20
 Luc Scholtès (luc) said on 2019-08-13: #1

Hi,

I don't see the point for changing JCFpmState or the JCFpmPhys arguments...

What do you want to simulate exactly (process wise)?

There are an examples in the "examples/jointedCohesiveFrictionalPM/" folder [1] which should help.

Please have a look at the different files and let us know if anything is unclear.

Luc

 Mahdeyeh (mahdiye.sky) said on 2019-08-15: #2

Thank you Luc for your response.

My 3 question were just for more learning and not related to the model I said.

 Jérôme Duriez (jduriez) said on 2019-08-20: #3

Hi,

It seems the YADE variables you spoke about can be accessed by users in a read-write manner, then:

1-
b.state = JCFpmState() # will assign a JCFpmState instance with default attributes to any body b.

This being said, the expected workflow, from a user point of view, is more to assign JCFpmMat materials to your bodies, call the appropriate engines to apply JCF contact law, then just rely on those engines for JCFpmState to appear in your simulation, without any further action.

3-
i.phys.jointNormal = (1,0,0) # will modify the jointNormal attribute of an existing JCF interaction "i"

However, this is again not really expected in general. What attributes of JCFpmPhys (and why) would you like to change ?

As for 2-

Introducing a joint into one sphere does not make sense in YADE JCFpm logic. You need to have interactions (2 spheres at least) to speak about joint. You have (two ! gravityLoading.py is using an external description of the joint in stl format, gravityBis.py defines within YADE, with gts module, the joint) examples about defining joint geometries in folder [1] in Luc's answer #1.

 Mahdeyeh (mahdiye.sky) said on 2019-08-21: #4

Thanks Jérôme Duriez, that solved my question.