Simbody  3.7
SimTK::ContactMaterial Class Reference

Define the physical properties of the material from which a contact surface is made, including properties needed by a variety of contact response techniques that might be applied during contact. More...

Public Member Functions

 ContactMaterial ()
 Default constructor creates an invalid contact material; you must specify at least stiffness before using this material. More...
 
 ContactMaterial (Real stiffness, Real dissipation, Real staticFriction, Real dynamicFriction, Real viscousFriction=0)
 Create a contact material with a complete set of compliant contact material properties. More...
 
bool isValid () const
 Return false if material properties have not yet been supplied for this contact material. More...
 
Real getStiffness () const
 Return the material stiffness k=(force/area)/%strain. More...
 
Real getStiffness23 () const
 Return precalculated 2/3 power of material stiffness k (k^(2/3)). More...
 
Real getDissipation () const
 Return the material dissipation coefficient c, in units of 1/velocity. More...
 
Real getStaticFriction () const
 Return the coefficient of static friction mu_s (unitless). More...
 
Real getDynamicFriction () const
 Return the coefficient of dynamic friction mu_d (unitless). More...
 
Real getViscousFriction () const
 Return the coefficient of viscous friction mu_v (1/velocity). More...
 
ContactMaterialsetStiffness (Real stiffness)
 Supply material stiffness k=(force/area)/%strain. More...
 
ContactMaterialsetDissipation (Real dissipation)
 Supply material dissipation coefficient c, which is the slope of the coefficient of restitution (e) vs. More...
 
ContactMaterialsetFriction (Real staticFriction, Real dynamicFriction, Real viscousFriction=0)
 Set the friction coefficients for this material. More...
 
void clear ()
 Restore this contact material to an invalid state containing no stiffness specification and default values for dissipation (none) and friction (none). More...
 

Static Public Member Functions

static Real calcPlaneStrainStiffness (Real youngsModulus, Real poissonsRatio)
 Calculate the contact material stiffness k from its linear elastic material properties Young's modulus E and Poisson's ratio v, assuming that the material is free to move under pressure. More...
 
static Real calcConfinedCompressionStiffness (Real youngsModulus, Real poissonsRatio)
 Calculate the contact material stiffness k from its linear elastic material properties Young's modulus E and Poisson's ratio v, assuming that the material is confined such that its volume must be reduced under pressure. More...
 
static Real calcDissipationFromObservedRestitution (Real restitution, Real speed)
 Given an observation of the coefficient of restitution e at a given small impact velocity v, calculate the apparent value of the dissipation coefficient c, which is a material property. More...
 

Detailed Description

Define the physical properties of the material from which a contact surface is made, including properties needed by a variety of contact response techniques that might be applied during contact.

Two basic techniques are supported:

  • compliant contact
  • rigid contact

Each of these techniques can respond to both impacts and continuous contact, and provides for both compressive and frictional effects.

For compliant contact this material can be applied in different ways:

  • the material represents an elastic solid, large in comparison to the region of contact deformation
  • the material represents a uniform thin elastic layer over an otherwise-rigid body (elastic foundation model).

The elastic foundation layer thickness h is not a property of this material; instead it is specified at the time this material is used to construct a ContactSurface; the material properties supplied here are independent of how the material is used.

Compliant vs. rigid contact models

Compliant contact models respond via forces that are generated by finite deformations of the contact surface, using theory of elasticity. Rigid contact models instead enforce zero deformation at the contact surface via the reaction forces of non-penetration constraints, and respond to impacts by generating impulsive changes to velocities rather than forces.

Energy dissipation upon impact is dealt with differently in the two schemes. In compliant contact, energy dissipation occurs via a continuous function of deformation and deformation rate, based on a material property c we call the "dissipation coefficient" (Hunt & Crossley call this "alpha"). In rigid contact, energy dissipation occurs via a "coefficient of restitution" e that defines what fraction of (a) impact velocity (Newton's hypothesis) or (b) collision impulse (Poisson's hypothesis) is lost on rebound. It is common practice, but blatantly incorrect, to use a constant value for the coefficient of restitution. Empirically, coefficient of restitution e is known to be a linear function of impact velocity for small velocities: e=1-c*v where c is the dissipation coefficient mentioned above. At large velocities plasticity and other effects cause the coefficient of restitution to drop dramatically; we do not attempt to support plasticity models here.

Constructor & Destructor Documentation

◆ ContactMaterial() [1/2]

SimTK::ContactMaterial::ContactMaterial ( )
inline

Default constructor creates an invalid contact material; you must specify at least stiffness before using this material.

Defaults are provided for dissipation (none) and friction (none).

◆ ContactMaterial() [2/2]

SimTK::ContactMaterial::ContactMaterial ( Real  stiffness,
Real  dissipation,
Real  staticFriction,
Real  dynamicFriction,
Real  viscousFriction = 0 
)
inline

Create a contact material with a complete set of compliant contact material properties.

This does not set the coefficient of restitution. There are a variety of static methods provided to aid in calculating the stiffness and dissipation from available data.

Parameters
[in]stiffnessThis is in units of pressure per unit strain, where pressure is force per unit area, and strain is a unitless measure of deformation. There are a variety of ways to compute this from Young's modulus and Poisson's ratio; see for example calcPlaneStrainStiffness() and calcConfinedCompressionStiffness(). Note that different compliant contact models determine strain differently for a given deformation x. For example, Hertz uses the relationship between x and local curvatures to determine the fractional strain, while Elastic Foundation must be given a "thickness" h with strain then defined as x/h. We require stiffness >= 0.
[in]dissipationThis is the Hunt and Crossley dissipation coefficient for this material in units of 1/velocity. This is the fraction of stiffness force generated as a dissipation force per unit deformation rate, via f_dissipation = f_stiffness * (dissipation * v_deformation). You can measure this as the slope of the coefficient of restitution (e) vs. impact velocity (v) curve at low velocities, where e=1-c*v. We require dissipation >= 0.
[in]staticFrictionThis is the Coulomb "stiction" coefficient mu_s that is used at very low sliding velocities, with tangential force limited to f=mu_s*N where N is the contact normal force due to stiffness and dissipation effects. We require staticFriction >= dynamicFriction >= 0.
[in]dynamicFrictionThis is the Coulomb friction coefficient mu_d that is to be used at significant sliding velocities, with velocity-independent tangential force magnitude f=mu_d*N produced opposing the sliding direction, where N is the contact normal force due to stiffness and dissipation effects. We require 0 <= dynamicFriction <= staticFriction.
[in]viscousFrictionThis is the "wet" friction coefficient mu_v >= 0 for this material generating a sliding velocity-dependent tangential force of magnitude f=mu_v*v*N where v is the sliding velocity and N is the contact normal force due to stiffness and dissipation effects. This is not commonly used and defaults to zero.

Member Function Documentation

◆ isValid()

bool SimTK::ContactMaterial::isValid ( ) const
inline

Return false if material properties have not yet been supplied for this contact material.

◆ getStiffness()

Real SimTK::ContactMaterial::getStiffness ( ) const
inline

Return the material stiffness k=(force/area)/%strain.

◆ getStiffness23()

Real SimTK::ContactMaterial::getStiffness23 ( ) const
inline

Return precalculated 2/3 power of material stiffness k (k^(2/3)).

◆ getDissipation()

Real SimTK::ContactMaterial::getDissipation ( ) const
inline

Return the material dissipation coefficient c, in units of 1/velocity.

◆ getStaticFriction()

Real SimTK::ContactMaterial::getStaticFriction ( ) const
inline

Return the coefficient of static friction mu_s (unitless).

◆ getDynamicFriction()

Real SimTK::ContactMaterial::getDynamicFriction ( ) const
inline

Return the coefficient of dynamic friction mu_d (unitless).

◆ getViscousFriction()

Real SimTK::ContactMaterial::getViscousFriction ( ) const
inline

Return the coefficient of viscous friction mu_v (1/velocity).

◆ setStiffness()

ContactMaterial& SimTK::ContactMaterial::setStiffness ( Real  stiffness)
inline

Supply material stiffness k=(force/area)/%strain.

A compliant contact model will then calculate the contact area A and strain fraction s to calculate the resulting force f=k*A*s.

◆ setDissipation()

ContactMaterial& SimTK::ContactMaterial::setDissipation ( Real  dissipation)
inline

Supply material dissipation coefficient c, which is the slope of the coefficient of restitution (e) vs.

impact speed (v) curve, with e=1-cv at low (non-yielding) impact speeds v.

◆ setFriction()

ContactMaterial& SimTK::ContactMaterial::setFriction ( Real  staticFriction,
Real  dynamicFriction,
Real  viscousFriction = 0 
)
inline

Set the friction coefficients for this material.

◆ calcPlaneStrainStiffness()

static Real SimTK::ContactMaterial::calcPlaneStrainStiffness ( Real  youngsModulus,
Real  poissonsRatio 
)
inlinestatic

Calculate the contact material stiffness k from its linear elastic material properties Young's modulus E and Poisson's ratio v, assuming that the material is free to move under pressure.

In this circumstance the effective stiffness is given by the plane strain modulus k=E/(1-v^2), and the stiffness never exceeds (4/3)E when the material becomes incompressible as v->0.5 as is typical of rubber. If this material is to be used in a circumstance in which its volume must be reduced under contact pressure (because there is no room to move), consider using the confined compression modulus instead.

See also
calcConfinedCompressionStiffness()

◆ calcConfinedCompressionStiffness()

static Real SimTK::ContactMaterial::calcConfinedCompressionStiffness ( Real  youngsModulus,
Real  poissonsRatio 
)
inlinestatic

Calculate the contact material stiffness k from its linear elastic material properties Young's modulus E and Poisson's ratio v, assuming that the material is confined such that its volume must be reduced under pressure.

In this case the effective stiffness is given by the confined compression modulus k=E(1-v)/((1+v)(1-2v)). Note that the stiffness becomes infinite when the material becomes incompressible as v->0.5. That means rubber will have a near infinite stiffness if you calculate it this way; make sure that's what you want!

See also
calcPlaneStrainStiffness()

◆ calcDissipationFromObservedRestitution()

static Real SimTK::ContactMaterial::calcDissipationFromObservedRestitution ( Real  restitution,
Real  speed 
)
inlinestatic

Given an observation of the coefficient of restitution e at a given small impact velocity v, calculate the apparent value of the dissipation coefficient c, which is a material property.

You should get the same value for c from any observation, provided that v is non-zero but small. The coefficient of restitution as v->0 is 1 for all materials.

Coefficient of restitution at low impact speed is linearly related to impact velocity by the dissipation coefficient c (1/velocity) by e=(1-cv) so we can calculate c if we have observed e at some low speed v as c=(1-e)/v. If the coefficient of restitution is 1 we'll return c=0 and ignore v, otherwise v must be greater than zero.

◆ clear()

void SimTK::ContactMaterial::clear ( )
inline

Restore this contact material to an invalid state containing no stiffness specification and default values for dissipation (none) and friction (none).


The documentation for this class was generated from the following file: