JCFpm

Asked by Mahdeyeh on 2019-08-10

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([
   utils.sphere(center=(0,0,0),radius=rad,material=Mat),
   utils.sphere((0,1.5*rad,0),radius=rad,material=Mat)
])
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()

1- How I can add " JCFpmState " with its arguments to body?? (https://www.yade-dem.org/doc//yade.wrapper.html#yade.wrapper.JCFpmState)

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

3- How I can change arguments of JCFpmPhys ?? (https://www.yade-dem.org/doc//yade.wrapper.html#yade.wrapper.JCFpmPhys)

Question information

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

Hi,

Welcome to YADE.

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

[1] https://gitlab.com/yade-dev/trunk/tree/master/examples/jointedCohesiveFrictionalPM

Mahdeyeh (mahdiye.sky) said : #2

Thank you Luc for your response.

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

Best Jérôme Duriez (jduriez) said : #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 : #4

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