Rock cutting process

Hello everyone,

I am trying to simulate bit-rock interactions, like cutting a rock sample with a blade. the bit rotates and hits the rock from the top part and cuts it. I have two main questions that would be very great if you can help me to resolve them:
1- I want to have viscous damping once the bit hits the rock, how can I add it?
2- When the bit hits the rock, some of the balls enter into the bit boundary. Normally that should not happen but I do not know why it is happening. I tried wall resolution and wall attribute cutoff-angle commands, but they were not helpful (see the attached photo).

Thank you so much for your help.

Hello Behzad,

  1. Depending on the contact model you are using, you can use viscous dashpot damping with the contact properties dp_nratio or dp_sratio. More information on the dashpot damping can be found in the contact model docs (i.e. for Linear Model see section Properties - Dashpot Group).

  2. This can be caused by a variety of things; contact stiffness or two small, velocity of the wall is too high, or the timestep is not sufficiently small enough. If only a few balls are penetrating through the walls I would not worry too much about it, and just delete them.

1 Like

Hello Derrick,

Thank you so much for your reply.

I have already applied the dashpot damping parameters, I was wondering if there are other types of adjustments or if I am on the right track.

For the second one, that is perfect, I will try adjusting these parameters to see their impacts.

Thanks indeed,

Hi Derrick,

I have one question regarding the problem that I am trying to simulate.

After the cutting process, I want to count the number of balls that they have lost their bonds.
I am using “ball.isbonded” command, but I am not sure if it is considering the whole balls or just the balls with active contact, how I can fix it, etc.

I really appreciate your valuable help.


The ball.isbonded FISH function will check all active contacts on the ball provided to the function. As described here in the documentation. If any of the active contacts are bonded the function will return true.

1 Like

Thanks for your quick reply, Derrick.

So, is there any way to be able to count all balls that are single with no bond? Is there a function for that? Can I use the ball.isbonded function for that?

Thanks indeed for your time and help.

There is not a built-in function to find the number of unbonded balls. You can define a FISH function, something similar to this:

> fish define CountUnbondedBalls
>   local count_ = 0
>   loop foreach local ball ball.list()
>     if (ball.isbonded(ball) == false)
>       count_ += 1
>     endif
>   endloop
>   CountUnbondedBalls = count_
> end
> [CountUnbondedBalls]

or a more efficient way could be accomplished with splitting and list filtering:

> [UnbondedBallList = list(ball.list)(ball.isbonded(::ball.list) # true)]
> [NumUnbondedBalls = list.size(UnbondedBallList)
1 Like

Thank you so much, Derrick, I really appreciate it.

Your help was really valuable.

Thanks again for your time,