Skip to content
Spring.md

Spring

Linear 1D translational spring relating force to displacement via Hooke's Law.

This component represents a one-dimensional translational mechanical spring. It models the linear relationship between the force (f) exerted by the spring and its deformation (srel) relative to an unstretched length (srel0). The governing equation is Hooke's Law:

f=c(srelsrel0)

Here, c is the spring constant (stiffness), srel is the current relative displacement between the spring's two connection flanges (typically inherited from PartialCompliant), and srel0 is the relative displacement at which the spring exerts no force.

This component extends from PartialCompliant

Usage

Spring(c, s_rel0=0)

Parameters:

NameDescriptionUnitsDefault value
cSpring constant, representing the stiffness of the spring.N/m
s_rel0Unstretched relative displacement of the spring, where the spring force is zero.m0

Connectors

Variables

NameDescriptionUnits
s_relRelative distance between flange_b and flange_am
fInternal force exerted by the compliant connection on flange_b (and -f on flange_a).N

Behavior

s_rel(t)=flange_b.s(t)flange_a.s(t)flange_b.f(t)=f(t)flange_a.f(t)=f(t)f(t)=c(s_rel0+s_rel(t))

Source

dyad
# Linear 1D translational spring relating force to displacement via Hooke's Law.
#
# This component represents a one-dimensional translational mechanical spring.
# It models the linear relationship between the force ($f$) exerted by the
# spring and its deformation ($s_{rel}$) relative to an unstretched length ($s_{rel0}$).
# The governing equation is Hooke's Law:
# ```math
# f = c \cdot (s_{rel} - s_{rel0})
# ```
# Here, `c` is the spring constant (stiffness), $s_{rel}$ is the current
# relative displacement between the spring's two connection flanges (typically
# inherited from `PartialCompliant`), and $s_{rel0}$ is the relative displacement
# at which the spring exerts no force.
component Spring
  extends PartialCompliant
  # Spring constant, representing the stiffness of the spring.
  parameter c::TranslationalSpringConstant
  # Unstretched relative displacement of the spring, where the spring force is zero.
  parameter s_rel0::Distance = 0
relations
  f = c*(s_rel-s_rel0)
metadata {"Dyad": {"icons": {"default": "dyad://TranslationalComponents/Spring.svg"}}}
end
Flattened Source
dyad
# Linear 1D translational spring relating force to displacement via Hooke's Law.
#
# This component represents a one-dimensional translational mechanical spring.
# It models the linear relationship between the force ($f$) exerted by the
# spring and its deformation ($s_{rel}$) relative to an unstretched length ($s_{rel0}$).
# The governing equation is Hooke's Law:
# ```math
# f = c \cdot (s_{rel} - s_{rel0})
# ```
# Here, `c` is the spring constant (stiffness), $s_{rel}$ is the current
# relative displacement between the spring's two connection flanges (typically
# inherited from `PartialCompliant`), and $s_{rel0}$ is the relative displacement
# at which the spring exerts no force.
component Spring
  # Port representing the first translational 1D shaft flange.
  flange_a = Flange() [{"Dyad": {"placement": {"icon": {"x1": -50, "y1": 450, "x2": 50, "y2": 550}}}}]
  # Port representing the second translational 1D shaft flange.
  flange_b = Flange() [{"Dyad": {"placement": {"icon": {"x1": 950, "y1": 450, "x2": 1050, "y2": 550}}}}]
  # Relative distance between `flange_b` and `flange_a`
  variable s_rel::Distance
  # Internal force exerted by the compliant connection on flange_b (and -f on flange_a).
  variable f::Dyad.Force
  # Spring constant, representing the stiffness of the spring.
  parameter c::TranslationalSpringConstant
  # Unstretched relative displacement of the spring, where the spring force is zero.
  parameter s_rel0::Distance = 0
relations
  s_rel = flange_b.s-flange_a.s
  flange_b.f = f
  flange_a.f = -f
  f = c*(s_rel-s_rel0)
metadata {"Dyad": {"icons": {"default": "dyad://TranslationalComponents/Spring.svg"}}}
end


Test Cases

This is setup code, that must be run before each test case.

julia
using TranslationalComponents
using ModelingToolkit, OrdinaryDiffEqDefault
using Plots
using CSV, DataFrames

snapshotsdir = joinpath(dirname(dirname(pathof(TranslationalComponents))), "test", "snapshots")
"/home/actions-runner-10/.julia/packages/TranslationalComponents/khJb7/test/snapshots"