Is there a way to generate joints in irregular polyhedra?

Asked by weijie on 2020-04-22

Dear all,

I am studying in the example of Potential Blocks function WedgeYADE.py, and I found that the generation of joints is done by cutting the hexahedron. If it is an irregular polyhedron, Is there a way to generate joints in irregular polyhedra?

Thanks in advance.

WEI Jie

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Vasileios Angelidakis
Solved:
2020-05-04
Last query:
2020-05-04
Last reply:
2020-04-24

Hi Jie,

Currently, the code only supports a hexahedron as an initial geometry but it shouldn't be too difficult to modify the source code to start from an irregular polyhedron.

Alternatively, if you don't want to modify the source code, there is a workaround: you can "sculpt" an irregular polyhedron out of a hexahedron. BlockGen performs sequential subdivision, and so you can firstly create joints that enclose the irregular polyhedron you have in mind and then create the inner joints of the polyhedron. Then, you can delete in Python the bodies that are created outside the boundaries of the irregular polyhedron.

Hope this helps,
Vasileios

weijie (amandajoe) said : #2

Hi Vasileios, and thank you again.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If I want to modify the source code, which file should I modify? And if I want to fix some of the joints, what should I do?

Best regards,
Jie

Hi again,

> If I want to modify the source code, which file should I modify?

In [1] you can see that we assume the initial block is a cuboid.
You can go in [2] and declare 4 new vector<Real> attributes a,b,c,d containing the geometry of the initial block.
Then in [1], assign these values instead of using xmin,xmax,ymin,ymax,zmin,zmax.
Also, please be careful that the planes you will define are consistent with the origin of the coordinate system, which at the moment is set as firstBlockCentre=[0,0,0].

Last, the tricky part of these changes is that you still have to define boundarySizeXmin/Xmax/Ymin/Ymax/Zmin/Zmax, denoting outer boundaries of the initial block.

> And if I want to fix some of the joints, what should I do?

What do you mean when you say "fix" some of the joints?

Keep me posted if you need any help,
Vasileios

[1] https://gitlab.com/yade-dev/trunk/-/blob/master/pkg/dem/BlockGen.cpp#L77-94
[2] https://gitlab.com/yade-dev/trunk/-/blob/master/pkg/dem/BlockGen.hpp#L178

weijie (amandajoe) said : #4

Hi Vasileios, and thank you again.

>What do you mean when you say "fix" some of the joints?

Actually I am completing an example in[1],which is simualtion C.In this simulation,the model consists of four rigid blocks. Three blocks are fixed with only one wedge being allowed to move under gravity. The following discontinuities (rock joints) are present:

A: dip = 40° dip direction = 130°.

B: dip = 60° dip direction = 220°.

So, I want to know how to fix certain blocks in the process of generating joints. In addition to this, An elastic perfectly-plastic model with the Mohr–Coulomb yielding surface was assumed for the joint behavior. How should the Mohr–Coulomb yielding surface be realized?

Best regards,
Jie

[1]Boon CW, Houlsby GT, Utili S (2012) A new algorithm for contact detection between convex polygonal and polyhedral particles in the discrete element method. Computers and Geotechnics, 44: 73-82

Hi Jie,

First of all, for this application, you start from a cuboidal initial block, so you do not need an irregular polyhedron.

> So, I want to know how to fix certain blocks in the process of generating joints
In the application you are interested in, you slice both the fixed and the non-fixed bodies, so you do the slicing first, without setting if a body is fixed or not. Fixing bodies comes after you have generated your rock mass.

So, having the initial cuboid and the joint set, you run the BlockGen and create the rockmass. After that, you identify which bodies you want to fix (use the GUI to find the id of each of these bodies) and for each of them, define: O.bodies[id].state.blockedDOFs='xyzXYZ' (this is what "fixed" translates to). Starting from a high friction angle ("frictionDeg" attribute of the BlockGen), reduce it gradually until the non-fixed body slides, i.e. until the critical friction angle is reached.

> How should the Mohr–Coulomb yielding surface be realized

The M-C yielding surface is realised by defining the friction angle (frictionDeg) of the blocks in contact, for non-cohesive contacts, like in this example. Inside the contact law, this angle is used to decide when a contact should slip, which happens when the shear force exceeds the static frictional limit: tan(frictionAngle)*normalForce.

Hope you find this useful,
Vasileios

weijie (amandajoe) said : #6

Thanks Vasileios Angelidakis, that solved my question.