← Back to team overview

yade-users team mailing list archive

[Question #236206]: Capillary force as a function of interparticle distance

 

New question #236206 on Yade:
https://answers.launchpad.net/yade/+question/236206

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()



-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.