# Capillary force as a function of interparticle distance

Asked by Seungcheol Yeom on 2013-09-23

Hello all,

I am trying to see the capillary force changes as a function of the interparicle distance. Based on the papers I have found, the capillary force should be increased as the interparticle distance is decreased.
However, based on my script, the capillary force is steady and then drop to zero once the spheres are contacted.
It seem that it does not make sense to me.
Can anyone tell me what it is going on?
I always aprreciate your help.

from yade import plot,qt

#tag = O.tags['d.id']
#os.mkdir(tag)

r = 0.005 #particle radius , meter
h = 0.00067 #praticle distance, meter

#create two sphere paticles#
O.bodies.append([
utils.sphere(center=(0,0,-(r+h*0.5)),radius=r,fixed=False),
utils.sphere(center=(0,0,r+h*0.5),radius=r,fixed=False)
])

#define engines#
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=2)]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=2)],
[Ip2_FrictMat_FrictMat_MindlinCapillaryPhys()],
[Law2_ScGeom_MindlinPhys_Mindlin(neverErase=True)]
),
Law2_ScGeom_CapillaryPhys_Capillarity(capillaryPressure=40,createDistantMeniscii=True),
NewtonIntegrator(damping=0.2,gravity=(0,0,0)),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=1,timestepSafetyCoefficient=0.4),
PyRunner(iterPeriod=1,command='addPlotData()'),
PyRunner(iterPeriod=1,command='checkpos()')
]

#generate meniscii between the distant sphere#
#Cap.createDistantMeniscii=True #for drying path,it should be true for one step and then false. On the other hand, it should be always false for wetting path

#define the force on the sphere#
def addPlotData():
f0 = O.forces.f(0)
f1 = O.forces.f(1)
d0 = O.bodies[0].state.pos
d1 = O.bodies[1].state.pos
plot.addData(i=O.iter,f0forces=f0[2],f1forces=f1[2],b0displ=d0[2],b1displ=d1[2])
print f0[2],d0[2]

def checkpos():
f0 = O.forces.f(0)
#d0 = O.bodies[0].state.pos
if f0[2]<0.0001:
O.pause()

#display the force on the sphere#
#plot.plots={'i':('b0displ')}
plot.plots={'b0displ ':(('f0forces','bo'),),}
plot.plot()
plot.live=True
plot.autozoom=True
#O.dt=0.5*PWaveTimeStep()
qt.View()
#O.saveTmp()
O.run()

## Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Seungcheol Yeom
Solved:
2013-10-02
Last query:
2013-10-02
Last reply:
2013-10-02
 Christian Jakob (jakob-ifgt) said on 2013-10-01: #1

Hi,

Sorry for this late reply. Are you still facing this problem?

Christian.

 Seungcheol Yeom (scyeom79) said on 2013-10-01: #2

Hello Chirstian,

Yes, I am still having a difficulty for solving this problem. I was trying to change of particle size or distance but it did not work.
Can you please let me know what it is going on?
Thank you.

Sincerely,

Seungcheol

 Christian Jakob (jakob-ifgt) said on 2013-10-02: #3

Hi,

Fixed via:

- setting a label to capillary law:

Law2_ScGeom_CapillaryPhys_Capillarity(capillaryPressure=40,createDistantMeniscii=True,label='Cap')

- adding these lines at the end of the script (before O.run() command):

O.run(1,True)
Cap.createDistantMeniscii=False

 Seungcheol Yeom (scyeom79) said on 2013-10-02: #4

Hello Christian,

I have edited my script based on your comment and it seems that it is working.
However, could you please explain to me why the createDistantMeniscii should be set as False after the first run?
Thank you for your help.

Seungcheol

 Bruno Chareyre (bruno-chareyre) said on 2013-10-02: #5

>could you please explain to me why the createDistantMeniscii should be
set as False after the first run?

The reason is physical mostly. I believe a capillary bridge can only be
formed when two particles are touching or nearly touching (unless you
start from a high saturation degree and drain it progressively).
If you keep createDistantMeniscii=True, then new bridges will appear
here and there all the time, even between distant particles. Not very
realistic IMO.

Bruno

To post a message you must log in.