Trace a force under the capillary stress

Asked by Seungcheol Yeom on 2013-09-12

Hello all,

I am trying to trace a capillary force between two particles under the capillary stress.
However, I have got a zero force between two particles even though the particles are pulling each other.
So, I am wondering whether the force I am using in the script does not include the capillary force.
If not, is there other function I can use to trace a capillary force?
In addition, I would like to compare the capillary force from my hand calculation in order to ensure that the module is working.
Thank you for your time.

 from yade import plot,qt

r = 0.0003 #particle radius
h = 0.0001 #praticle distance

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

#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=10000,label='Cap'),
   NewtonIntegrator(damping=0.4,gravity=(0,0,0)),
   PyRunner(iterPeriod=100,command='addPlotData()')
]

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

#def addPlotData():
 #d0 = O.bodies[0].state.displ()
 #d1 = O.bodies[1].state.displ()
 #plot.addData(i=O.iter,b0displ=d0[2],b1displ=d1[2])

def addPlotData():
 f0 = O.forces.f(0)
 f1 = O.forces.f(1)
 plot.addData(i=O.iter,f0forces=f0[2],f1forces=f1[2])

#plot.plots={'i':('b0displ')}
plot.plots={'i':('f0forces')}
plot.plot()
plot.live=True
plot.autozoom=True
O.dt=0.5*PWaveTimeStep()
qt.View()
O.saveTmp()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Bruno Chareyre
Solved:
2013-09-12
Last query:
2013-09-12
Last reply:
2013-09-12

Hi,
Your script is ok, it is only the initial distance that is too large. Make h = 0.00001 and it works normaly.

When you use this large distance, for a reason I can't explain, the meniscus can be created at iteration 1 but then it is broken at iteration 2, although I don't think anything changes between the two steps...
We may not fix that as the capillary law is being completely re-written anyway.

Bruno

Seungcheol Yeom (scyeom79) said : #2

Hello Bruno,

Thank you for your responce.
Yes, that made it is working.

Seungcheol

Seungcheol Yeom (scyeom79) said : #3

Thanks Bruno Chareyre, that solved my question.

Christian Jakob (jakob-ifgt) said : #4

> When you use this large distance, for a reason I can't explain,
> the meniscus can be created at iteration 1 but then it is broken
> at iteration 2, although I don't think anything changes between
> the two steps...

Between iteration one and two is

Cap.createDistantMeniscii=False

afaik

Seungcheol Yeom (scyeom79) said : #5

Hello Bruno,

By reading the link below:

https://yade-dem.org/doc/yade.wrapper.html?highlight=createdistantmeniscii#yade.wrapper.Law2_ScGeom_CapillaryPhys_Capillarity.createDistantMeniscii

there are two senarios such as a drying path and wetting path. For the drying path, I should make meniscii as true for the first iteration and then make false for the rest. On the other hand, it always set to the false for the wetting path.

I am tyring to understand what the difference between the drying and wetting path by reading the paper (https://yade-dem.org/doc/publications.html#scholtes2009c).
Based on what I understand from the paper above, the drying senario is that the material get desaturated whereas the wetting senario is that the material get saturated due to the relative humidity of surronding air.

Thus, I choose the drying path which I think this senario is more appropriate to my project that I am going to do.

Please correct me if I am wrong or let me know if I miss something.

Thank you for your time!

Sincerely,

Seungcheol