Hi there,


Attached are three .m scripts aimed at generating capillary files for use with
Law2_ScGeom_CapillaryPhys_Capillarity. Obviously, the idea, discussed
previously here and there on the mailing lists, is to make this part of YADE
more "open-source". Also, there is two major differences with previous (L.
Scholtes') work:

* these scripts may generate capillary files accommodating any contact angle

* they provide new output as an "orientation tensor" defined from the
fluid-fluid interface of capillary bridges. These data would constitute new
attributes of CapillaryPhys, see "nn11" and "nn33" in the attached version of
CapillaryPhys.hpp. (Note that these nn11 and nn33 can be used to get the bridge
fluid-fluid interface S as S = 2*nn11 + nn33). This is about post-processing
only.

The attached README.txt details the role of the .m files and how to use them:
interested users in the end just need to give a look to, and launch,
writesCapFile.m.

The core of the work, as usual, is solving the Laplace-Young equation for a
capillary bridge configuration. The corresponding, quite classical, equations
appear in solveLiqBridge file/function. There will be a dedicated journal paper
on this topic, currently under "Minor Revision" review.

These files are ready to be pushed to trunk, together with updated
CapillaryPhys (see attached), and Law2_ScGeom_CapillaryPhys_Capillarity, in
order to read the new data (nn11 and nn33) from generated capillary files.

This email is for possible discussion before I perform the commit.

Cheers,

Jerome

PS: Vaclav, I took the liberty cc-ing you since I had once the feeling you
would be interested in such scripts. (Woo does not include any capillary
interactions at the moment, though ?)

--------------------------------------------------

Jerome Duriez, Research Associate

University of Calgary, Dpt of Civil Engineering

+1 403 220 7367

/*************************************************************************
*  Copyright (C) 2006 by luc Scholtes                                    *
*  luc.schol...@hmg.inpg.fr                                              *
*                                                                        *
*  GNU General Public License v2 or later. See file LICENSE for details. *
*************************************************************************/
#pragma once
#include<pkg/dem/FrictPhys.hpp>
#include<pkg/common/ElastMat.hpp>
#include<pkg/common/Dispatching.hpp>

class CapillaryPhys : public FrictPhys
{
public :
int currentIndexes [4]; // used for faster interpolation (stores previous positions in tables)

virtual ~CapillaryPhys() {};

YADE_CLASS_BASE_DOC_ATTRS_INIT_CTOR_PY(CapillaryPhys,FrictPhys,"Physics (of interaction) for :yref:Law2_ScGeom_CapillaryPhys_Capillarity.",
((bool,meniscus,false,Attr::readonly,"True when a meniscus with a non-zero liquid volume (:yref:vMeniscus<CapillaryPhys.vMeniscus>) has been computed for this interaction"))
((bool,isBroken,false,,"Might be set to true by the user to make liquid bridge inactive (capillary force is zero)"))
((Real,capillaryPressure,0.,,"Value of the capillary pressure Uc. Defined as Ugas-Uliquid, obtained from :yref:corresponding Law2 parameter<Law2_ScGeom_CapillaryPhys_Capillarity.capillaryPressure>"))
((Real,vMeniscus,0.,,"Volume of the meniscus"))
((Real,Delta1,0.,,"Defines the surface area wetted by the meniscus on the smallest grains of radius R1 (R1<R2)"))
((Real,Delta2,0.,,"Defines the surface area wetted by the meniscus on the biggest grains of radius R2 (R1<R2)"))
((Vector3r,fCap,Vector3r::Zero(),,"Capillary force produced by the presence of the meniscus. This is the force acting on particle #2"))
((short int,fusionNumber,0.,,"Indicates the number of meniscii that overlap with this one"))
((Real,nn11,0.,,":math:\\iint_A n_1 n_1 \\, dS = \\iint_A n_2 n_2 \\, dS, $A$ being the liquid-gas surface of the meniscus, $\\vec n$ the associated normal, and $(1,2,3)$ a local basis with $3$ the meniscus orientation (:yref:ScGeom.normal). NB: $A$ = 2 :yref:nn11<CapillaryPhys.nn11> + :yref:nn33<CapillaryPhys.nn33>."))
((Real,nn33,0.,,":math:\\iint_A n_3 n_3 \\, dS, $A$ being the liquid-gas surface of the meniscus, $\\vec n$ the associated normal, and $(1,2,3)$ a local basis with $3$ the meniscus orientation (:yref:ScGeom.normal). NB: $A$ = 2 :yref:nn11<CapillaryPhys.nn11> + :yref:nn33<CapillaryPhys.nn33>."))
,,
createIndex();currentIndexes[0]=currentIndexes[1]=currentIndexes[2]=currentIndexes[3]=0;
,
);
REGISTER_CLASS_INDEX(CapillaryPhys,FrictPhys);
};
REGISTER_SERIALIZABLE(CapillaryPhys);

class Ip2_FrictMat_FrictMat_CapillaryPhys : public IPhysFunctor
{
public :
virtual void go(	const shared_ptr<Material>& b1,
const shared_ptr<Material>& b2,
const shared_ptr<Interaction>& interaction);

FUNCTOR2D(FrictMat,FrictMat);
YADE_CLASS_BASE_DOC_ATTRS_CTOR(Ip2_FrictMat_FrictMat_CapillaryPhys,IPhysFunctor, "RelationShips to use with :yref:Law2_ScGeom_CapillaryPhys_Capillarity.\n\n In these RelationShips all the interaction attributes are computed. \n\n.. warning::\n\tas in the others :yref:Ip2 functors<IPhysFunctor>, most of the attributes are computed only once, when the interaction is new.",,;);

};
REGISTER_SERIALIZABLE(Ip2_FrictMat_FrictMat_CapillaryPhys);



solveLaplace_uc.m
Description: solveLaplace_uc.m

solveLiqBridge.m
Description: solveLiqBridge.m

writesCapFile.m
Description: writesCapFile.m

Three .m files are herein provided in order to enable users to build their own
"capillary files" including capillary bridges data for use with
Law2_ScGeom_CapillaryPhys_Capillarity engine. Generated capillary files
consider positiv capillary pressure values and any contact angle or particle

A capillary files generation requires launching writesCapFile() (in
writesCapFile.m) only, after providing a couple of parameters therein (see
description of writesCapFile.m below). The two other files (solveLiqBridge.m
and solveLaplace_uc.m) define functions used by writesCapFile() and do not
require any user input. Specifically, the roles of the three .m files are as
follows:

- solveLiqBridge.m solves the Laplace-Young equation for one given bridge,
defined in terms of the input attributes of the solveLiqBridge function (see
therein). The solveLiqBridge function is usually called by other files (see
below) during capillary files generation, however it can also be executed on
its own in order to study (e.g. plot) capillary bridge profile.

* Duriez2016: J. Duriez and R. Wan, Contact angle mechanical influence for wet
granular soils, currently under Review in Acta Geotechnica
* Lian1993: G. Lian and C. Thornton and M. J. Adams, A Theoretical Study of
the Liquid Bridge Forces between Two Rigid Spherical Bodies, Journal of Colloid
and Interface Science, 161(1), 1993
* Scholtes2008 (french): L. Scholtes, Modelisation Micro-Mecanique des Milieux
Granulaires Partiellement Satures, PhD Thesis from Institut polytechnique de
Grenoble, 2008
* Soulie2005 (french): F. Soulie, Cohesion par capillarite et comportement
mecanique de milieux granulaires, PhD Thesis from Universite Montpellier II,
2005
* Soulie2006: F. Soulie and F. Cherblanc and M. S. El Youssoufi and C. Saix,
Influence of liquid bridges on the mechanical behaviour of polydisperse
granular materials, International Journal for Numerical and Analytical Methods
in Geomechanics, 30(3), 2006

- solveLaplace_uc.m recursively uses solveLiqBridge in order to compute all
possible bridges configurations for given contact angle, capillary pressure,
and particle radius ratio. It is usually called by writesCapFile (see below)
during capillary files generation, however it can also be executed on its own.
In particular, it may output text files including bridges data for one given
capillary pressure.

- writesCapFile.m, finally, is the conductor during the capillary files
generation, and is the only one that actually requires the user's attention.
Parameters are to be defined by the user directly in the .m file (from l. 10 to
27) before launching for data files generation.
Generating a complete set of capillary files typically requires a couple of
days in terms of computation time.

_______________________________________________