modelElastoGap

1D translational spring damper combination with gap

Extends from Modelica.Mechanics.Translational.Interfaces.PartialCompliantWithRelativeStates (Base model for the compliant connection of two translational 1-dim. shaft flanges where the relative position and relative velocities are used as states), Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT (Partial model to include a conditional HeatPort in order to dissipate losses, used for textual modeling, i.e., for elementary models).

Information

This component models a spring damper combination that can lift off. It can be connected between a sliding mass and the housing (model Fixed), to describe the contact of a sliding mass with the housing.

As long as s_rel > s_rel0, no force is exerted (s_rel = flange_b.s - flange_a.s). If s_rel ≤ s_rel0, the contact force is basically computed with a linear spring/damper characteristic. With parameter n≥1 (exponent of spring force), a nonlinear spring force can be modeled:

desiredContactForce = f_ref*|(s_rel - s_rel0)/s_ref|^n + d*der(s_rel)

Note, Hertzian contact is described by:

  • Contact between two metallic spheres: n=1.5
  • Contact between two metallic plates: n=1

The above force law leads to the following difficulties:

  1. If the damper force becomes larger as the spring force and with opposite sign, the contact force would be "pulling/sticking" which is unphysical, since during contact only pushing forces can occur.
  2. When contact occurs with a non-zero relative speed (which is the usual situation), the damping force has a non-zero value and therefore the contact force changes discontinuously at s_rel = s_rel0. Again, this is not physical because the force can only change continuously. (Note, this component is not an idealized model where a steep characteristic is approximated by a discontinuity, but it shall model the steep characteristic.)

In the literature there are several proposals to fix problem (2). Especially, often the following model is used (see, e.g., Lankarani, Nikravesh: Continuous Contact Force Models for Impact Analysis in Multibody Systems, Nonlinear Dynamics 5, pp. 193-207, 1994, pdf-download):

f = c*s_rel^n + (d*s_rel^n)*der(s_rel)

However, this and other models proposed in literature violate issue (1), i.e., unphysical pulling forces can occur (if d*der(s_rel) becomes large enough). Note, if the force law is of the form "f = f_c + f_d", then a necessary condition is that |f_d| ≤ |f_c|, otherwise (1) and (2) are violated. For this reason, the most simplest approach is used in the ElastoGap model to fix both problems by using this necessary condition in the force law directly. If s_rel0 = 0, the equations are:

if s_rel ≥ 0 then
   f = 0;    // contact force
else
   f_c  = -c*|s_rel|^n;          // contact spring force (Hertzian contact force)
   f_d2 = d*der(s_rel);         // linear contact damper force
   f_d  = if f_d2 <  f_c then  f_c else
          if f_d2 > -f_c then -f_c else f_d2;  // bounded damper force
   f    = f_c + f_d;            // contact force
end if;

Note, since |f_d| ≤ |f_c|, pulling forces cannot occur and the contact force is always continuous, especially around the start of the penetration at s_rel = s_rel0. On the contrary, this leads to the contact force f = 0 even if contact = true is still indicated around the end of the penetration. This is because contact indicates only the occurrence of geometry penetration.

In order to have consistent units for nonlinear springs, the term c*|s_rel|^n is replaced by f_ref*|s_rel/s_ref|^n, whereby s_ref is a reference length for the spring and f_ref is the spring force when s_rel = s_ref. The default values s_ref = 1 and f_ref = c*s_ref lead to the same results of the two above-mentioned terms. Setting the advanced parameters s_ref and f_ref for a nonlinear spring directly gives a cleaner and straightforward parametrization. For simplicity reasons, both s_ref and f_ref are considered being positive.

In the next figure, a typical simulation with the ElastoGap model is shown (Examples.ElastoGap) where the different effects are visualized:

  1. Curve 1 (elastoGap1.f) is the unmodified contact force, i.e., the linear spring/damper characteristic. A pulling/sticking force is present at the end of the contact.
  2. Curve 2 (elastoGap2.f) is the contact force, where the force is explicitly set to zero when pulling/sticking occurs. The contact force is discontinuous when contact starts.
  3. Curve 3 (elastoGap3.f) is the ElastoGap model of this library. No discontinuity and no pulling/sticking occurs.
Elasto gap

Parameters

TypeNameDefaultDescription
SI.TranslationalSpringConstantcSpring constant
SI.TranslationalDampingConstantdDamping constant
SI.Positions_rel00Unstretched spring length
Realn1Exponent of spring force ( f_c = -f_ref*|(s_rel-s_rel0)/s_ref|^n )
BooleanuseHeatPort (from PartialElementaryConditionalHeatPortWithoutT)false= true, if heatPort is enabled
Advanced
StateSelectstateSelect (from PartialCompliantWithRelativeStates)StateSelect.preferPriority to use s_rel and v_rel as states
SI.Distances_nominal (from PartialCompliantWithRelativeStates)1e-4Nominal value of s_rel (used for scaling)
SI.Forcef_refc*s_refReference spring force at s_ref
SI.Lengths_ref1Reference relative compression at which f_c = f_ref

Connectors

TypeNameDefaultDescription
Flange_aflange_a (from PartialTwoFlanges)(left) driving flange (flange axis directed into cut plane, e. g. from left to right)
Flange_bflange_b (from PartialTwoFlanges)(right) driven flange (flange axis directed out of cut plane)
HeatTransfer.Interfaces.HeatPort_aheatPort (from PartialElementaryConditionalHeatPortWithoutT)Optional port to which dissipated losses are transported in form of heat

Components

TypeNameDefaultDescription
SI.Positions_rel (from PartialCompliantWithRelativeStates)Relative distance (= flange_b.s - flange_a.s)
SI.Velocityv_rel (from PartialCompliantWithRelativeStates)Relative velocity (= der(s_rel))
SI.Forcef (from PartialCompliantWithRelativeStates)Forces between flanges (= flange_b.f)
SI.PowerlossPower (from PartialElementaryConditionalHeatPortWithoutT)Loss power leaving component via heatPort (> 0, if heat is flowing out of component)
Booleancontact= true, if contact, otherwise no contact