Skip to content
LIBRARY
Sources.Tests.Speed.md

Sources.Tests.Speed

Test of the Speed source component with all ReferenceType enum variants.

Three Speed instances are driven by a common Sine reference (amplitude=1 m/s, frequency=1 Hz) and each drives a Mass (m=1 kg) with support grounded to Fixed:

  • speed_filtered: default Filtered mode (f_crit=50 Hz)

  • speed_exact: Exact mode — flange velocity equals input directly

  • speed_filtered_low: Filtered mode with low critical frequency (f_crit=5 Hz) to show visible filtering

Usage

TranslationalComponents.Sources.Tests.Speed()

Behavior

[connect(sine+y,speedfiltered+v_ref)connect(speedfiltered+flange,massfiltered+flange_a)connect(speedfiltered+support,ground+flange)connect(sine+y,speedexact+v_ref)connect(speedexact+flange,massexact+flange_a)connect(speedexact+support,ground+flange)connect(sine+y,speedfiltered_low+v_ref)connect(speedfiltered_low+flange,massfiltered_low+flange_a)connect(speedfiltered_low+support,ground+flange)sine.y(t)=sine.offset+sine.amplitudeifelse(tsine.starttime,sin(sine.phase+6.283185307179586sine.frequency(sine.starttime+t)),sin(sine.phase))speedfiltered.s(t)=speedfiltered.flange.s(t)speedfiltered.support.s(t)speedfiltered.support.f(t)=speedfiltered.flange.f(t)speedfiltered.v(t)=dspeedfiltered.s(t)dtspeedfiltered.a(t)=dspeedfiltered.v(t)dtspeedfiltered.a(t)=100.0(speedfiltered.v_ref(t)speedfiltered.v(t))πmassfiltered.flange_a.s(t)=12massfiltered.L+massfiltered.s(t)massfiltered.flange_b.s(t)=massfiltered.L2+massfiltered.s(t)massfiltered.v(t)=dmassfiltered.s(t)dtmassfiltered.a(t)=dmassfiltered.v(t)dt(massfiltered.a(t)+massfiltered.gsin(massfiltered.theta))massfiltered.m=massfiltered.flange_a.f(t)+massfiltered.flange_b.f(t)speedexact.s(t)=speedexact.support.s(t)+speedexact.flange.s(t)speedexact.support.f(t)=speedexact.flange.f(t)speedexact.v(t)=dspeedexact.s(t)dtspeedexact.v(t)=speedexact.v_ref(t)speedexact.a(t)=0massexact.flange_a.s(t)=12massexact.L+massexact.s(t)massexact.flange_b.s(t)=massexact.L2+massexact.s(t)massexact.v(t)=dmassexact.s(t)dtmassexact.a(t)=dmassexact.v(t)dt(massexact.a(t)+massexact.gsin(massexact.theta))massexact.m=massexact.flange_b.f(t)+massexact.flange_a.f(t)speedfiltered_low.s(t)=speedfiltered_low.flange.s(t)speedfiltered_low.support.s(t)speedfiltered_low.support.f(t)=speedfiltered_low.flange.f(t)speedfiltered_low.v(t)=dspeedfiltered_low.s(t)dtspeedfiltered_low.a(t)=dspeedfiltered_low.v(t)dtspeedfiltered_low.a(t)=10.0(speedfiltered_low.v(t)+speedfiltered_low.v_ref(t))πmassfiltered_low.flange_a.s(t)=12massfiltered_low.L+massfiltered_low.s(t)massfiltered_low.flange_b.s(t)=massfiltered_low.L2+massfiltered_low.s(t)massfiltered_low.v(t)=dmassfiltered_low.s(t)dtmassfiltered_low.a(t)=dmassfiltered_low.v(t)dt(massfiltered_low.a(t)+massfiltered_low.gsin(massfiltered_low.theta))massfiltered_low.m=massfiltered_low.flange_a.f(t)+massfiltered_low.flange_b.f(t)ground.flange.s(t)=ground.s0]

Source

dyad
"""
Test of the Speed source component with all ReferenceType enum variants.

Three Speed instances are driven by a common Sine reference (amplitude=1 m/s, frequency=1 Hz)
and each drives a Mass (m=1 kg) with support grounded to Fixed:

- speed_filtered: default Filtered mode (f_crit=50 Hz)
- speed_exact: Exact mode — flange velocity equals input directly
- speed_filtered_low: Filtered mode with low critical frequency (f_crit=5 Hz) to show visible filtering
"""
test component Speed
  "Sine reference speed signal (amplitude=1 m/s, frequency=1 Hz)"
  sine = BlockComponents.Sources.Sine(amplitude = 1.0, frequency = 1.0)
  "Speed source — Filtered with default filter (f_crit=50 Hz)"
  speed_filtered = TranslationalComponents.Sources.Speed()
  "Mass driven by filtered speed source"
  mass_filtered = TranslationalComponents.Components.Mass(m = 1.0)
  "Speed source — Exact (flange tracks input directly)"
  speed_exact = TranslationalComponents.Sources.Speed(ref_type = TranslationalComponents.Sources.ReferenceType.Exact())
  "Mass driven by exact speed source"
  mass_exact = TranslationalComponents.Components.Mass(m = 1.0)
  "Speed source — Filtered with low critical frequency (f_crit=5 Hz)"
  speed_filtered_low = TranslationalComponents.Sources.Speed(ref_type = TranslationalComponents.Sources.ReferenceType.Filtered(f_crit = 5.0))
  "Mass driven by low-f_crit filtered speed source"
  mass_filtered_low = TranslationalComponents.Components.Mass(m = 1.0)
  "Fixed ground for all supports"
  ground = TranslationalComponents.Components.Fixed()
relations
  # --- Filtered (default) ---
  connect(sine.y, speed_filtered.v_ref)
  connect(speed_filtered.flange, mass_filtered.flange_a)
  connect(speed_filtered.support, ground.flange)
  # --- Exact ---
  connect(sine.y, speed_exact.v_ref)
  connect(speed_exact.flange, mass_exact.flange_a)
  connect(speed_exact.support, ground.flange)
  # --- Filtered low f_crit ---
  connect(sine.y, speed_filtered_low.v_ref)
  connect(speed_filtered_low.flange, mass_filtered_low.flange_a)
  connect(speed_filtered_low.support, ground.flange)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://TranslationalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 1.1,
        "atol": {
          "mass_exact.v": 0.001,
          "mass_exact.s": 0.001,
          "mass_filtered.v": 0.001,
          "mass_filtered.s": 0.001,
          "mass_filtered_low.v": 0.01,
          "mass_filtered_low.s": 0.01
        },
        "expect": {
          "final": {
            "mass_exact.v": 0.5877852522924736,
            "mass_exact.s": 0.030395889391774417,
            "mass_filtered.v": 0.5713763618836489,
            "mass_filtered.s": 0.02857703022540215
          },
          "signals": [
            "mass_exact.v",
            "mass_exact.s",
            "mass_filtered.v",
            "mass_filtered.s",
            "mass_filtered_low.v",
            "mass_filtered_low.s"
          ]
        }
      }
    }
  }
}
end
Flattened Source
dyad
"""
Test of the Speed source component with all ReferenceType enum variants.

Three Speed instances are driven by a common Sine reference (amplitude=1 m/s, frequency=1 Hz)
and each drives a Mass (m=1 kg) with support grounded to Fixed:

- speed_filtered: default Filtered mode (f_crit=50 Hz)
- speed_exact: Exact mode — flange velocity equals input directly
- speed_filtered_low: Filtered mode with low critical frequency (f_crit=5 Hz) to show visible filtering
"""
test component Speed
  "Sine reference speed signal (amplitude=1 m/s, frequency=1 Hz)"
  sine = BlockComponents.Sources.Sine(amplitude = 1.0, frequency = 1.0)
  "Speed source — Filtered with default filter (f_crit=50 Hz)"
  speed_filtered = TranslationalComponents.Sources.Speed()
  "Mass driven by filtered speed source"
  mass_filtered = TranslationalComponents.Components.Mass(m = 1.0)
  "Speed source — Exact (flange tracks input directly)"
  speed_exact = TranslationalComponents.Sources.Speed(ref_type = TranslationalComponents.Sources.ReferenceType.Exact())
  "Mass driven by exact speed source"
  mass_exact = TranslationalComponents.Components.Mass(m = 1.0)
  "Speed source — Filtered with low critical frequency (f_crit=5 Hz)"
  speed_filtered_low = TranslationalComponents.Sources.Speed(ref_type = TranslationalComponents.Sources.ReferenceType.Filtered(f_crit = 5.0))
  "Mass driven by low-f_crit filtered speed source"
  mass_filtered_low = TranslationalComponents.Components.Mass(m = 1.0)
  "Fixed ground for all supports"
  ground = TranslationalComponents.Components.Fixed()
relations
  # --- Filtered (default) ---
  connect(sine.y, speed_filtered.v_ref)
  connect(speed_filtered.flange, mass_filtered.flange_a)
  connect(speed_filtered.support, ground.flange)
  # --- Exact ---
  connect(sine.y, speed_exact.v_ref)
  connect(speed_exact.flange, mass_exact.flange_a)
  connect(speed_exact.support, ground.flange)
  # --- Filtered low f_crit ---
  connect(sine.y, speed_filtered_low.v_ref)
  connect(speed_filtered_low.flange, mass_filtered_low.flange_a)
  connect(speed_filtered_low.support, ground.flange)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://TranslationalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 1.1,
        "atol": {
          "mass_exact.v": 0.001,
          "mass_exact.s": 0.001,
          "mass_filtered.v": 0.001,
          "mass_filtered.s": 0.001,
          "mass_filtered_low.v": 0.01,
          "mass_filtered_low.s": 0.01
        },
        "expect": {
          "final": {
            "mass_exact.v": 0.5877852522924736,
            "mass_exact.s": 0.030395889391774417,
            "mass_filtered.v": 0.5713763618836489,
            "mass_filtered.s": 0.02857703022540215
          },
          "signals": [
            "mass_exact.v",
            "mass_exact.s",
            "mass_filtered.v",
            "mass_filtered.s",
            "mass_filtered_low.v",
            "mass_filtered_low.s"
          ]
        }
      }
    }
  }
}
end


Test Cases

Test Case case1

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt