← Back to team overview

yade-dev team mailing list archive

Re: Question about parameters in SpheresContactGeometry

 


Hi, it is probably question directed at me. Torsion, bending, but also
shear code is implemented as incremental computation from angular
velocities etc.
Only shear motion is defined in an incremental form. Torsion/bending is relative to the initial positions.

 I don't use torsion and bending, but for the shear part,
I never got the incremental algo to match with what small-strain FEM
code computes for strains (production code, therefore assumed to be
correct).
It is not the first time I read this but I must admit I never understodd what it means. What did you compare exactly?

Besides that, implementing geometry algorithms inside constitutive laws
is conceptually flawed, for 2 reasons.

1. Constitutive law should operate just on interaction geometry and
interaction physics. If it accesses rootBody->bodies, it is a design
problem.
Agreed : we have a design problem. But I see no obvious solution for now (see below).

2. Strains are the same accross multiple constituive laws, since it
really is a geometrical property. It makes no sense to cut&paste code
all the time; the code for shear strain is repeated at least 5x
throughout different classes, even with the same comments, and maybe
same bugs. (Otherwise if I needed torsion in different constitutive law,
I would have to copy&paste code from CohesiveFrictionalContactLaw??)

Well... my main point was to save your brain-time providing Janek-brained equations. On the c++ part, one solution would be to inherit from CohesiveFrictionalContactLaw in some way, or develop the law itself to make it do what you need. This law is the most general in Yade currently, you can go from the simplest normal-elastic interaction to a complex force-moment creep law by playing with the parameters. I'm sure it is no big deal to add you own constitutive behaviour in this class. Of course, it would be no big deal probably to do the opposite : move the CohesiveFrictional stuff to your framework...

(well, let me add 3. Constitutive law should just map strains to
stresses. It is not constitutive law's business to compute strains. You
can have a look at ef2_Spheres_NormalShear_ElasticFrictionalLaw, this is
what I think constitutive law should look like: get strains, compute
stresses, apply forces. Finito.)
It makes sense, but it means each constitutive law will need its own specific geometry engine+dataClass class to compute/store the relevant "strain", doesn't it? Janek, needs an initial relative orientation, Wenji needed maxUn, JF needs the volume of the cell from triangulation (stored at bodies level) before he can even define the stiffness, the first Yade developers thought everybody would need a contact point defined while most of us never used it, etc. And I'm sure the next person developping a constitutive law will need another geometrical information that nobody is expecting for now. Is it compatible with the design you plan?

Also, when you say "constitutive law should look like: get strains, compute stresses, apply forces"(*), I'd say it is perhaps a bit more complex. Take this equation : Fn = Kn (Un-Un_plastic), obviously an elasto-plastic framework. What is Un_plastic? Is it an internal parameter of the law or an external geometrical information? It is in fact something in between, since (1) it is obviously a kinematic-like variable, but (2) at the same time it can't be defined from the current geometry. Un_plastic describes an history of the motion _with respect to_ one constitutive law. Even with the full record of all previous movements, you can't define Un_plastic if you don't know the constitutive law itself.
Should Un_plastic be in contactPhysics or contactGeometry?
Do we really need a rule?

An exemple of this : in creep equations (creep, like plasticity, is changing the "neutral" position when it occures), the initial orientations (from wich total bending/twisting are defined) are updated to reflect creep. The way it is updated is valid only for the specific creep law considered here, another constitutive law would update the initial configuration differently.

The conclusion is you can't avoid the manipulation/storage of geometrical data in some constitutive laws/physicalParameters.

(*) Quick note : I feel strange each time you speak about strain and stress in constitutive law, since the specificity of DEM is to consider disp./forces instead of strain/stress, usually...

What makes you think that contact of 2 spheres is describable just by
penetrationDepth and radii?
Answer 1 : Cundall (1988) ;-)
Answer 2 : because I need nothing else.
 That would be _normal_ contact. For shear,
bending and torsion, it gets more complicated, and that's what all the
cp1rel, cp2rel (and unrollSpherePtToPlane, for that matter, which
computes the shear from the data) are for.
The incremental definition of the shear force allows to skip the definition and storage of cp1rel/cp2rel/unroll. It works very well and it has been used by hundreds of researchers since 1988 (so again, I'd like to know how you compared with E.F.).

The "abusive storage" members were not added by me, except
facetContactFace (abusive, because only used for sphere-facet contact).
What I agree with is that hasNormalViscosity, NormalViscosity and
NormalRelativeViscosity are clearly physical quantitites that should be
in interaction physics.

So will you move them away at one point?
About my future plans: define abstract classes Dem3DofContactGeometry
(better name?; for classes normal and shear) and Dem6DofContactGeometry
(for classes with normal, shear, bending and torsion strains)
So, first of all, I would define "DemXDofContactGeometry" with normal, Un, and incremental dUt (this code duplicated in different constitutive laws), nothing more. This is "normal" DEM, no reason to overload with more parameters. That is what I am a bit annoyed with the ammount of extra stuff that is in SpheresContactGeometry right now.
 with
virtual methods to get e.g. epsN(), epsT(), regardless of whether it is
Sphere-Facet of Sphere-Sphere contact. Mapping sphere-facet to
SpheresContactGeometry has not much physical meaning and will not work
for more complex things like transferring plastic strain when going over
facet boundary to its neighbor.
I think I get the idea. I admit I have no clear vision on all this for now, I'm just raising a few points.

The possible problem is that people could need to modify the abstract classes all the time because they need a geometrical information you disregarded One simple exemple comes to mind : center of mass of bodies. For spheres and simple elastic-frictional contacts, you can compute the moment generated by fs as M += radius.n x fs, but for non-sperical bodies (snow) you cannot do this. You need to compute M+=(ContPoint - CenterMass) x fs. In that case, with your approach, IntGeom would need to store not only rad1,rad2 but also the centers of mass of both particles.

So, fundamentally, with you first statement in mind : "Constitutive law should operate just on interaction geometry and interaction physics. If it accesses rootBody->bodies, it is a design problem", all information from bodies must be duplicated in interactionGeometry, which is a serious design problem too...

Then SpheresContactGeometry inherits from Dem3DofContactGeometry, I will
create (maybe) also SphereFacetContactGeometry etc, but the constitutive
law will operate on Dem3DofContactGeometry and will not care, whether
the underlying contact is sphere-sphere, sphere-facet (or sphere-box,
whatever).

Agreed. The fact that SpheresContactGeometry can be used for others (body1,body2) is just a temporary trick.

Bruno

--

_______________
Chareyre Bruno
Maitre de conference

Grenoble INP
Laboratoire 3SR - bureau E145
BP 53 - 38041, Grenoble cedex 9 - France
Tél : 33 4 56 52 86 21
Fax : 33 4 76 82 70 43
________________




Follow ups

References