← Back to team overview

yade-dev team mailing list archive

Ip2_FrictMat_FrictMat_FrictPhys doc

 

Hi,

After seeing Yet Another Doubts on "young" meaning / Ip2_FrictMat_FrictMat_FrictPhys contact model (a PhD student in my institute), I'm proposing to explicitly mention the underlying equations in the doc, once for all. The corresponding would-be diff appears at the end of the email, you may also compare the attached screenshot with https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Ip2_FrictMat_FrictMat_FrictPhys. From the diff, you will see I'm also proposing to remove the "harmonic average stiffness" comment, for instance because there actually is a "2" factor missing/extra between the comment and the actual code.


In the case of the above-mentioned PhD student, confusion also arose because of https://yade-dem.org/doc/formulation.html#stiffnesses and https://yade-dem.org/doc/formulation.html#normal-stiffness. As such, I would also propose to simply remove these two sections from the doc. From my point of view, they actually are too Ip2-specific to appear in the general doc.


If necessary, a reference to the (equivalent) 2.2.1 and 2.2.1.1. sections from Vaclav's thesis ([Smilauer2010b] reference) could be introduced e.g. in Ip2_CpmMat_CpmMat_CpmPhys and Ip2_FrictMat_FrictMat_FrictPhys docstrings, to keep track of these comments that could be made concerning the Ip2 equations.


This email probably is Yet Another non-critical one, but since it deals about (the doc of) central pieces of code, and lines probably written by Vaclav, I'm opening a possible discussion here before performing the changes.


Jérôme

PS: next step would be to move https://yade-dem.org/doc/formulation.html#strain-evaluation to Ig2 docstrings but I'm not planning on it...


****************** Diff herein proposed for commit **************

diff --git a/pkg/dem/FrictPhys.cpp b/pkg/dem/FrictPhys.cpp
index cb904da..4f8ffe8 100644
--- a/pkg/dem/FrictPhys.cpp
+++ b/pkg/dem/FrictPhys.cpp
@@ -26,9 +26,7 @@ void Ip2_FrictMat_FrictMat_FrictPhys::go( const shared_ptr<Material>& b1
        Real Va         = mat1->poisson;
        Real Vb         = mat2->poisson;

-       //harmonic average of the two stiffnesses when (2*Ri*Ei) is the stiffness of a contact point on sphere "i"
        Real Kn = 2*Ea*Ra*Eb*Rb/(Ea*Ra+Eb*Rb);
-       //same for shear stiffness
        Real Ks = 2*Ea*Ra*Va*Eb*Rb*Vb/(Ea*Ra*Va+Eb*Rb*Vb);

        Real frictionAngle = (!frictAngle) ? std::min(mat1->frictionAngle,mat2->frictionAngle) : (*frictAngle)(mat1->id,mat2->id,mat1->frictionAngle,mat2->frictionAngle);

diff --git a/pkg/dem/FrictPhys.hpp b/pkg/dem/FrictPhys.hpp
index eeb2ef4..12c85ee 100644
--- a/pkg/dem/FrictPhys.hpp
+++ b/pkg/dem/FrictPhys.hpp
@@ -44,7 +44,7 @@ class Ip2_FrictMat_FrictMat_FrictPhys: public IPhysFunctor{
                        const shared_ptr<Material>& b2,
                        const shared_ptr<Interaction>& interaction);
        FUNCTOR2D(FrictMat,FrictMat);
- YADE_CLASS_BASE_DOC_ATTRS(Ip2_FrictMat_FrictMat_FrictPhys,IPhysFunctor,"Create a :yref:`FrictPhys` from two :yref:`FrictMats<FrictMat>`. The compliance of one sphere under point load is defined here as $1/(E.D)$, with $E$ the stiffness of the sphere and $D$ its diameter. The compliance of the contact itself will be the sum of compliances from each sphere, i.e. $1/(E_1.D_1)+1/(E_2.D_2)$ in the general case, or $2/(E.D)$ in the special case of equal sizes and equal stiffness. Note that summing compliances corresponds to an harmonic average of stiffnesss (as in e.g. [Scholtes2009a]_), which is how kn is actually computed in the :yref:`Ip2_FrictMat_FrictMat_FrictPhys` functor:\n\n $k_n = \\frac{E_1D_1*E_2D_2}{E_1D_1+E_2D_2}=\\frac{k_1*k_2}{k_1+k_2}$, with $k_i=E_iD_i$.\n\n The shear stiffness ks of one sphere is defined via the material parameter :yref:`ElastMat::poisson`, as ks=poisson*kn, and the resulting shear stiffness of the interaction will be also an harmonic average. In the case of a contact between a :yref:`ViscElMat` and a :yref:`FrictMat`, be sure to set :yref:`FrictMat::young` and :yref:`FrictMat::poisson`, otherwise the default value will be used.", + YADE_CLASS_BASE_DOC_ATTRS(Ip2_FrictMat_FrictMat_FrictPhys,IPhysFunctor,"Create a :yref:`FrictPhys` from two :yref:`FrictMats<FrictMat>` as per the following expressions: \n\n$k_n = \\frac{E_1D_1*E_2D_2}{E_1D_1+E_2D_2}$ where $k_n=$ :yref:`FrictPhys.kn`, the $E_i$ are :yref:`FrictMat.young` for each contacting body $i=1;2$, and the $D_i$ are the bodies' (equivalent) diameters\n\n$k_s = \\frac{E_1D_1P_1*E_2D_2P_2}{E_1D_1P_1+E_2D_2P_2}$ where $k_s=$ :yref:`FrictPhys.ks` and the $P_i$ are the bodies' :yref:`FrictMat.poisson`\n\n$\\mu = \\tan(min(\\phi_1,\\phi_2))$ by default (see :yref:`frictAngle attribute<Ip2_FrictMat_FrictMat_FrictPhys.frictAngle>`), where $\\mu=$ :yref:`FrictPhys.tangensOfFrictionAngle` and the $\\phi_i$ are the bodies' :yref:`FrictMat.frictionAngle`.",

------
Chargé de Recherche / Research Associate
Irstea, RECOVER
3275 route de Cézanne – CS 40061 13182 Aix-en-Provence Cedex 5 FRANCE
+33 (0)4 42 66 99 21

A free DEM conference in April: https://2ndyadeworkshop.sciencesconf.org/

Attachment: Ip2_Doc.png
Description: PNG image


Follow ups