Saturating spring (Springsat)

Saturating spring from [1] (chap 7) with state \(q\in [-q_{sat}, q_{sat}]\) and parameters described below. The energy is

\begin{equation*} H(q) = K_0 \, \left( \frac{q^2}{2} + K_{sat} H_{sat}(q)\right), \end{equation*}

with

\begin{equation*} H_{sat}(q) = - \frac{8 q_{sat}}{\pi \left(4-\pi\right)} \, \left(\frac{\pi^{2} q^{2}}{8q_{sat}^{2}} + \log{\left (\cos{\left (\frac{\pi q}{2 q_{sat}} \right)} \right)}\right). \end{equation*}

The resulting force is:

\begin{equation*} f(q)= \frac{d\,H(q)}{d q} = K_{0} \left(q + K_{sat} \frac{d\,H_{sat}(q)}{d q}\right), \end{equation*}

with

\begin{equation*} \frac{d\,H_{sat}(q)}{d q}= \frac{4}{4- \pi} \left(\tan{\left (\frac{\pi q}{2 q_{sat}} \right )} - \frac{\pi q}{2q_{sat}} \right). \end{equation*}

Saturating spring (Springsat)

Saturating spring from [1] (chap 7) with state \(q\in [-q_{sat}, q_{sat}]\) and parameters described below. The energy is

\begin{equation*} H(q) = K_0 \, \left( \frac{q^2}{2} + K_{sat} H_{sat}(q)\right), \end{equation*}

with

\begin{equation*} H_{sat}(q) = - \frac{8 q_{sat}}{\pi \left(4-\pi\right)} \, \left(\frac{\pi^{2} q^{2}}{8q_{sat}^{2}} + \log{\left (\cos{\left (\frac{\pi q}{2 q_{sat}} \right)} \right)}\right). \end{equation*}

The resulting force is:

\begin{equation*} f(q)= \frac{d\,H(q)}{d q} = K_{0} \left(q + K_{sat} \frac{d\,H_{sat}(q)}{d q}\right), \end{equation*}

with

\begin{equation*} \frac{d\,H_{sat}(q)}{d q}= \frac{4}{4- \pi} \left(\tan{\left (\frac{\pi q}{2 q_{sat}} \right )} - \frac{\pi q}{2q_{sat}} \right). \end{equation*}

Power variables

flux: Force \(f\) (N)

effort: Velocity \(v\) (m/s)

Arguments

label : str
Springsat label.
nodes : ('P1', 'P2')
Mechanical points associated with component endpoints (positive flux P1->P2).
parameters : keyword arguments
Component parameters
Key Description Unit Default
K0 Stiffness around zero H 1000.0
Ksat Nonlinearity parameter d.u. 1000.0
xsat Saturating position m 0.01

Usage

spring = Springsat('spring', ('P1', 'P2'), K0=1000.0, Ksat=1000.0, xsat=0.01)

Netlist line

mechanics.springsat spring ('P1', 'P2'): K0=1000.0; Ksat=1000.0; xsat=0.01;

Example

>>> # Import dictionary
>>> from pyphs.dictionary import mechanics
>>> # Define component label
>>> label = 'spring'
>>> # Define component nodes
>>> nodes = ('P1', 'P2')
>>> # Define component parameters
>>> parameters = {'K0': 1000.0,    # Stiffness around zero (H)
...               'Ksat': 1000.0,  # Nonlinearity parameter (d.u.)
...               'xsat': 0.01,    # Saturating position (m)
...              }
>>> # Instanciate component
>>> component = mechanics.Springsat(label, nodes, **parameters)
>>> # Graph dimensions
>>> len(component.nodes)
2
>>> len(component.edges)
1

Reference

[1] (1, 2) Antoine Falaize. Modelisation, simulation, generation de code et correction de systemes multi-physiques audios: Approche par reseau de composants et formulation hamiltonienne a ports. PhD thesis, ecole Doctorale d'Informatique, Telecommunication et electronique de Paris, Universite Pierre et Marie Curie, Paris 6, EDITE UPMC ED130, july 2016.