Contact law: issue if fragile=False and unpMax=0

Asked by Luc Sibille

Hi,

I am working with the contact law Law2_ScGeom6D_CohFrictPhys_CohesionMoment.
I would like to use non brittle contact with respect to the shear force thus attribute fragile=False.

However I understand that according to:
if (phys->unpMax && phys->unp<phys->unpMax)
    return false;
contact will be lost only if unpMax!=0. But if we want to have a non brittle contact in the shear direction and no normal plasticity then we would assign unpMax=0 and the contact will live foreover instead of breaking when (-Fn)> phys->normalAdhesion.

Consequently there are different possibilites:
1/ change nothing and just assign unpMax=0.000000000000000000000000000000001

2/ change:
if (phys->unpMax && phys->unp<phys->unpMax)
    return false;
into
if (phys->unp<phys->unpMax)
    return false;
and if one will want to normal plasticity for ever he will have to put unpMax=9999999999999999999999999999

3/ but better than 2 I would prefer to change:
if (phys->fragile && (-Fn)> phys->normalAdhesion) {
  // BREAK due to tension
  return false;
 } else {
  if ((-Fn)> phys->normalAdhesion) {//normal plasticity
   Fn=-phys->normalAdhesion;
   phys->unp = un+phys->normalAdhesion/phys->kn;
   if (phys->unpMax && phys->unp<phys->unpMax)
    return false;
  }

into
if ((phys->fragile || !phys->unpMax) && (-Fn)> phys->normalAdhesion) {
  // BREAK due to tension
  return false;
 } else {
  if ((-Fn)> phys->normalAdhesion) {//normal plasticity
   Fn=-phys->normalAdhesion;
   phys->unp = un+phys->normalAdhesion/phys->kn;
   if (phys->unp<phys->unpMax)
    return false;
  }

Any preferences, or advice?

Cheers,
Luc

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Luc Sibille
Solved:
Last query:
Last reply:
Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#1

As discussed:
replace in the first test:
if (phys->unpMax!=0 && ...) by
if (phys->unpMax>=0 && ...)

Don't forget to make the default negative (e.g. -1), if it is currently 0.

Revision history for this message
Luc Sibille (luc-sibille) said :
#2

Ok, I would just keep unpMax = 0 as the default value (unpMax = -1 plastic sliding for ever, unpMax >=0 plastic sliding along a length equal to unpMax), because I think that plastic sliding for ever is a very particular.