How to involve adhesionForce in Hertz-Mindlin contact model

Asked by Leonard

Hi,

I am simulating a triaxial compression test using Hertz-Mindlin model, and I'd like to ask that if it is possible to include adhesion in Hertz-Mindline contact model so that I can simulate bonded material (or cement material).

I read from MindlinPhys[1], there seems to be an option to set adhesion (named adhesionForce in [1]).

#I use FrictMat:
MatSand = O.materials.append(FrictMat(young=young,poisson=0.3,frictionAngle=radians(30),density=2650,label='sand'))
#The engines I used are as follow:
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_MindlinPhys(betan=betan,betas=betas,label='ContactModel')],
  [Law2_ScGeom_MindlinPhys_Mindlin(includeMoment=False,includeAdhesion=True,label='Mindlin')]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 triax,
 TriaxialStateRecorder(iterPeriod=100,file='WallStresses'),
 newton,
 #PyRunner(iterPeriod=2000,command='history()',label='recorder'),
 #PyRunner(command='stopIfDamaged()',iterPeriod=500),
]

#I tried to use the following command to active adhesion:
ContactModel.isAdhesive=True
ContactModel.adhesionForce=adhesion

But I didn't make the adhesion come into effect. Thereby, I'd like to ask that:
(1) How to include adhesion in Hertz-Mindline contact model if it is possible.
(2) In [1], it explains adhesionForce as "Force of adhesion as predicted by DMT", what is DMT?
(3) Where I can find the source code of Hertz-Mindline contact model in Yade trunk?

Thanks!
Leonard

[1]https://yade-dev.gitlab.io/trunk/yade.wrapper.html?highlight=dmt#yade.wrapper.MindlinPhys

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Karol Brzezinski
Solved:
Last query:
Last reply:
Revision history for this message
Best Karol Brzezinski (kbrzezinski) said :
#1

Hi Leonard,

DMT stands (most likely) for the Derjaguin-Muller-Toporov model. I think that you mistook interaction physics class [1] for its functor [2]. You need to pass gamma (Surface energy parameter [J/m^2] ) to Ip2_FrictMat_FrictMat_MindlinPhys, and it will compute adhesion force for distinct interactions separately. Of course you neet to set includeAdhesion=True in the constitutive law too (as you did).
I believe that the code for Hertz-Mindlin contact model is here [3]

[1] https://yade-dev.gitlab.io/trunk/yade.wrapper.html?highlight=dmt#yade.wrapper.MindlinPhys
[2] https://yade-dev.gitlab.io/trunk/yade.wrapper.html?highlight=ip2_frictmat_frictmat_mindlinphys#yade.wrapper.Ip2_FrictMat_FrictMat_MindlinPhys
[3] https://gitlab.com/yade-dev/trunk/-/blob/master/pkg/dem/HertzMindlin.cpp

Revision history for this message
Leonard (z2521899293) said :
#2

Hi Karol,

Thanks for your reply which really helps me.

I added gamma in Ip2_FrictMat_FrictMat_MindlinPhys as you suggested:
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_MindlinPhys(betan=betan,betas=betas,gamma=gamma,label='ContactModel')],
  [Law2_ScGeom_MindlinPhys_Mindlin(includeMoment=False,includeAdhesion=True,label='Mindlin')]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 triax,
 TriaxialStateRecorder(iterPeriod=100,file='WallStresses'),
 newton,
]

If I understood correctly, the value of gamma controls the adhesion force between particles. And move one step forward, I'd like to ask that if it is possible to assign different gamma to particles with different material?
I remember MatchMaker may be able to do this, so that I tried:
ContactModel.isAdhesive=True
ContactModel.gamma=MatchMaker(matches=((Mat1,Mat1,0),(Mat1,Mat2,0),(Mat2,Mat2,gammaValue)))

But I got:
ArgumentError: Python argument types in
    None.None(Ip2_FrictMat_FrictMat_MindlinPhys, MatchMaker)
did not match C++ signature:
    None(Ip2_FrictMat_FrictMat_MindlinPhys {lvalue}, double)

I guess it is because that gamma is not a MatchMaker item, if so, I'd like to ask that how to assign different gamma to different material interactions.

Thanks.
Leonard

Revision history for this message
Karol Brzezinski (kbrzezinski) said :
#3

Hi Leonard,

Sorry, but I don't know how to do it. Maybe you should ask it in a separate topic, so the title matches the question. It will increase your chance that the right person will find your problem.

Cheers,
Karol

Revision history for this message
Leonard (z2521899293) said :
#4

Hi Karol,

Thanks for your feedback, I will start a new thread to ask this.

Best,
Leonard

Revision history for this message
Leonard (z2521899293) said :
#5

Thanks Karol Brzezinski, that solved my question.