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 : #1

Hi,

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

Christian.

Seungcheol Yeom (scyeom79) said : #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 : #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 : #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

>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