# contact law between bodies with different materials

Asked by Leonard on 2019-09-06

Hi,
I am confused about the contact between two bodies with different materials. for example, My assembly consists of two kinds of material: 1. sand which is FrictMat; 2. cement which is CohFrichMat:
####
cement = CohFrictMat(young=30e9,poisson=0.3,frictionAngle=radians(30),density=2650.0,isCohesive=True,normalCohesion=1e8, shearCohesion=1e8,label='cement')
O.materials.append(sand)
O.materials.append(cement)
####
In the simulation, there will be sand-sand contact, sand -cement contact and sand-cement contact.
what I am confused is how to define the engines, I guess it should be:
#####
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Sphere_Sphere_ScGeom6D()],
[Ip2_FrictMat_FrictMat_FrictPhys(),
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow = True,setCohesionOnNewContacts = True)],
[Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment()]
),
NewtonIntegrator(damping=0.4),
]
#####
I wonder if it covers all the interactions? that is, I guess
(1)for sand-sand contact, "Ip2_FrictMat_FrictMat_FrictPhys()" and "Law2_ScGeom_FrictPhys_CundallStrack()" cover it;
(2) for cement-cement contact, " Ip2_CohFrictMat_CohFrictMat_CohFrictPhys" and "Law2_ScGeom6D_CohFrictPhys_CohesionMoment()" cover it;
(3) then what is for sand-cement contact? It seems that there is not something like "Ip2_FrictMat_CohFrictMat_somePhys()" .
So if the engines have already covered all the interactions, what kind of contact law yade uses for dealing with sand-cement interaction?
Many thanks,
Leonard

## Question information

Language:
English Edit question
Status:
Solved
For:
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2019-09-06
Last query:
2019-09-06
2019-09-06
 Jan Stránský (honzik) said on 2019-09-06: #1

Hi,

> what kind of contact law yade uses for dealing with sand-cement interaction?

Ip2_FrictMat_FrictMat_FrictPhys
Because CohFrictMat is derived from FrictMat and if CohFrictMat-FrictMat Ip2 is not found, Yade tries it with base classes (FrictMat-FrictMat in this case).

You can try on a simple 3 sphere example:
###
sand = FrictMat(label='sand')
cement = CohFrictMat(label='cement')
O.materials.append(sand)
O.materials.append(cement)
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[
Ig2_Sphere_Sphere_ScGeom(),
Ig2_Sphere_Sphere_ScGeom6D()
],
[
Ip2_FrictMat_FrictMat_FrictPhys(),
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow = True,setCohesionOnNewContacts = True)
],
[
Law2_ScGeom_FrictPhys_CundallStrack(),
Law2_ScGeom6D_CohFrictPhys_CohesionMoment()
],
),
NewtonIntegrator(damping=0.4),
]
s1 = sphere((0.0,0,0),1,material=sand)
s2 = sphere((0.1,0,0),1,material=sand)
c1 = sphere((0.2,0,0),1,material=cement)
c2 = sphere((0.3,0,0),1,material=cement)
O.bodies.append((s1,s2,c1,c2))
O.step()
for intr in O.interactions:
i1,i2 = intr.id1,intr.id2
b1,b2 = [O.bodies[i] for i in (i1,i2)]
m1,m2 = [b.mat.label for b in (b1,b2)]
print(m1,m2,intr.phys)
###

cheers
Jan

 Leonard (z2521899293) said on 2019-09-06: #2

Hi Jan,
Many thanks for your example.
Now it is clear for me about sand-cement contact, and I still have a question:
In your case, only cement-cement interaction is CohFrictPhys, sand-sand and sand-cement are both FrictPhys.
What I want to achieve for the simulation is that cement-cement and cement-sand are CohFrictPhys (because I suppose cement has adhesion with cement as well as sand), and sand-sand is FrictPhys.
Do you know how to define the contact (or engines) for this case?
Thanks!
Leonard

 Jan Stránský (honzik) said on 2019-09-06: #3

I don't think there is an automatic way..

maybe using just CohFrictMat/CohFrictPhys and using MatchMaker for sand-sand contacts to behave like FrictPhys?

Jan

 Leonard (z2521899293) said on 2019-09-06: #4

Thanks Jan, I will look at how to use MatchMaker to achieve this.

cheers
Leonard

 Leonard (z2521899293) said on 2019-09-06: #5

Thanks Jan Stránský, that solved my question.

To post a message you must log in.