Skip to content
LIBRARY
Components.Tests.AllComponents.md

Components.Tests.AllComponents

Smoke test exercising all available translational components in a single model.

Replicates the structure of ModelicaTest.Translational.AllComponents.

Top chain: sliding_mass → rod(L=0) → spring(c=1) → damper(d=10) → sliding_mass1 A RelativeStates element spans from sliding_mass.flange_b to damper.flange_a, measuring the relative displacement and velocity across the rod and spring.

Branch from sliding_mass.flange_b: A Force source (driven by a sine signal) and a SpringDamper(c=1, d=1) connect to sliding_mass2. A Fixed ground provides the reaction reference for the two-flange Force component.

ElastoGap branch from sliding_mass2.flange_b: An ElastoGap(c=1, d=1) connects to sliding_mass3. A FixedTemperature closes the thermal energy balance.

Position branch: sine → position (Filtered) → sliding_mass4 Speed branch: sine1 → position1 (Speed, Filtered) → sliding_mass5 Accelerate branch: sine2 → position2 (Accelerate) → sliding_mass6

Initial conditions: all masses at rest at the origin, all relative displacements and velocities zero.

Usage

TranslationalComponents.Components.Tests.AllComponents()

Behavior

[connect(slidingmass+flange_b,rod+flangea)connect(rod+flangeb,spring+flangea)connect(spring+flangeb,damper+flangea)connect(damper+flangeb,slidingmass1+flange_a)connect(slidingmass+flange_b,relativestates+flange_a)connect(relativestates+flange_b,damper+flangea)connect(slidingmass+flange_b,springdamper+flange_a)connect(springdamper+flange_b,slidingmass2+flange_a)connect(force+flangeb,springdamper+flange_a)connect(force+flangea,ground+flange)connect(sine4+y,force+f)connect(slidingmass2+flange_b,elastogap+flange_a)connect(elastogap+flange_b,slidingmass3+flange_a)connect(elastogap+heat_port,fixedtemp+port)connect(sine+y,position+sref)connect(position+flange,slidingmass4+flange_a)connect(position+support,ground+flange)connect(sine1+y,position1+vref)connect(position1+flange,slidingmass5+flange_a)connect(position1+support,ground+flange)connect(sine2+y,position2+aref)connect(position2+flange,slidingmass6+flange_a)connect(position2+support,ground+flange)slidingmass.flange_a.s(t)=12slidingmass.L+slidingmass.s(t)slidingmass.flange_b.s(t)=slidingmass.L2+slidingmass.s(t)slidingmass.v(t)=dslidingmass.s(t)dtslidingmass.a(t)=dslidingmass.v(t)dt(slidingmass.a(t)+slidingmass.gsin(slidingmass.theta))slidingmass.m=slidingmass.flange_a.f(t)+slidingmass.flange_b.f(t)rod.flangea.s(t)=12rod.L+rod.s(t)rod.flangeb.s(t)=rod.L2+rod.s(t)0=rod.flangeb.f(t)+rod.flangea.f(t)spring.srel(t)=spring.flangeb.s(t)spring.flangea.s(t)spring.flangeb.f(t)=spring.f(t)spring.flangea.f(t)=spring.f(t)spring.f(t)=spring.c(spring.srel0+spring.srel(t))damper.srel(t)=damper.flangea.s(t)+damper.flangeb.s(t)damper.vrel(t)=ddamper.srel(t)dtdamper.flangeb.f(t)=damper.f(t)damper.flangea.f(t)=damper.f(t)damper.f(t)=damper.ddamper.vrel(t)damper.lossPower(t)=damper.vrel(t)damper.f(t)slidingmass1.flange_a.s(t)=12slidingmass1.L+slidingmass1.s(t)slidingmass1.flange_b.s(t)=slidingmass1.L2+slidingmass1.s(t)slidingmass1.v(t)=dslidingmass1.s(t)dtslidingmass1.a(t)=dslidingmass1.v(t)dt(slidingmass1.a(t)+slidingmass1.gsin(slidingmass1.theta))slidingmass1.m=slidingmass1.flange_b.f(t)+slidingmass1.flange_a.f(t)relativestates.s_rel(t)=relativestates.flange_a.s(t)+relativestates.flange_b.s(t)relativestates.v_rel(t)=drelativestates.s_rel(t)dtrelativestates.a_rel(t)=drelativestates.v_rel(t)dtrelativestates.flange_a.f(t)=0relativestates.flange_b.f(t)=0springdamper.s_rel(t)=springdamper.flange_a.s(t)+springdamper.flange_b.s(t)springdamper.v_rel(t)=dspringdamper.s_rel(t)dtspringdamper.flange_b.f(t)=springdamper.f(t)springdamper.flange_a.f(t)=springdamper.f(t)springdamper.f_c(t)=springdamper.c(springdamper.s_rel0+springdamper.s_rel(t))springdamper.f_d(t)=springdamper.dspringdamper.v_rel(t)springdamper.f(t)=springdamper.f_d(t)+springdamper.f_c(t)springdamper.lossPower(t)=springdamper.f_d(t)springdamper.v_rel(t)slidingmass2.flange_a.s(t)=12slidingmass2.L+slidingmass2.s(t)slidingmass2.flange_b.s(t)=slidingmass2.L2+slidingmass2.s(t)slidingmass2.v(t)=dslidingmass2.s(t)dtslidingmass2.a(t)=dslidingmass2.v(t)dt(slidingmass2.a(t)+slidingmass2.gsin(slidingmass2.theta))slidingmass2.m=slidingmass2.flange_a.f(t)+slidingmass2.flange_b.f(t)force.flangea.f(t)=force.f(t)force.flangeb.f(t)=force.f(t)sine4.y(t)=sine4.offset+sine4.amplitudeifelse(tsine4.starttime,sin(sine4.phase+6.283185307179586sine4.frequency(sine4.starttime+t)),sin(sine4.phase))ground.flange.s(t)=ground.s0elastogap.s_rel(t)=elastogap.flange_a.s(t)+elastogap.flange_b.s(t)elastogap.v_rel(t)=delastogap.s_rel(t)dtelastogap.flange_b.f(t)=elastogap.f(t)elastogap.flange_a.f(t)=elastogap.f(t)elastogap.ratio(t)=elastogap.s_rel0+elastogap.s_rel(t)elastogap.s_refelastogap.f_c(t)=ifelse(elastogap.s_rel(t)<elastogap.s_rel0,(|elastogap.ratio(t)|)elastogap.nelastogap.f_ref,0)elastogap.f_d2(t)=ifelse(elastogap.s_rel(t)<elastogap.s_rel0,elastogap.delastogap.v_rel(t),0)elastogap.f_d(t)=ifelse(elastogap.s_rel(t)<elastogap.s_rel0,min(max(elastogap.f_d2(t),elastogap.f_c(t)),elastogap.f_c(t)),0)elastogap.f(t)=elastogap.f_d(t)+elastogap.f_c(t)elastogap.lossPower(t)=elastogap.v_rel(t)elastogap.f_d(t)elastogap.heat_port.Q_flow(t)=elastogap.lossPower(t)slidingmass3.flange_a.s(t)=12slidingmass3.L+slidingmass3.s(t)slidingmass3.flange_b.s(t)=slidingmass3.L2+slidingmass3.s(t)slidingmass3.v(t)=dslidingmass3.s(t)dtslidingmass3.a(t)=dslidingmass3.v(t)dt(slidingmass3.a(t)+slidingmass3.gsin(slidingmass3.theta))slidingmass3.m=slidingmass3.flange_b.f(t)+slidingmass3.flange_a.f(t)fixedtemp.port.T(t)=fixedtemp.Tsine.y(t)=sine.offset+sine.amplitudeifelse(tsine.starttime,sin(sine.phase+6.283185307179586sine.frequency(sine.starttime+t)),sin(sine.phase))position.s(t)=position.flange.s(t)position.support.s(t)position.support.f(t)=position.flange.f(t)position.v(t)=dposition.s(t)dtposition.a(t)=dposition.v(t)dtposition.a(t)=314.1592653589793(position.afposition.v(t)+100.0π(position.s(t)+position.sref(t)))position.bfslidingmass4.flange_a.s(t)=12slidingmass4.L+slidingmass4.s(t)slidingmass4.flange_b.s(t)=slidingmass4.L2+slidingmass4.s(t)slidingmass4.v(t)=dslidingmass4.s(t)dtslidingmass4.a(t)=dslidingmass4.v(t)dt(slidingmass4.a(t)+slidingmass4.gsin(slidingmass4.theta))slidingmass4.m=slidingmass4.flange_b.f(t)+slidingmass4.flange_a.f(t)sine1.y(t)=sine1.offset+sine1.amplitudeifelse(tsine1.starttime,sin(sine1.phase+6.283185307179586sine1.frequency(sine1.starttime+t)),sin(sine1.phase))position1.s(t)=position1.support.s(t)+position1.flange.s(t)position1.support.f(t)=position1.flange.f(t)position1.v(t)=dposition1.s(t)dtposition1.a(t)=dposition1.v(t)dtposition1.a(t)=100.0π(position1.vref(t)position1.v(t))slidingmass5.flange_a.s(t)=12slidingmass5.L+slidingmass5.s(t)slidingmass5.flange_b.s(t)=slidingmass5.L2+slidingmass5.s(t)slidingmass5.v(t)=dslidingmass5.s(t)dtslidingmass5.a(t)=dslidingmass5.v(t)dt(slidingmass5.a(t)+slidingmass5.gsin(slidingmass5.theta))slidingmass5.m=slidingmass5.flange_b.f(t)+slidingmass5.flange_a.f(t)sine2.y(t)=sine2.offset+sine2.amplitudeifelse(tsine2.starttime,sin(sine2.phase+6.283185307179586sine2.frequency(sine2.starttime+t)),sin(sine2.phase))position2.s(t)=position2.flange.s(t)position2.support.s(t)position2.support.f(t)=position2.flange.f(t)position2.v(t)=dposition2.s(t)dtposition2.a(t)=dposition2.v(t)dtposition2.a(t)=position2.aref(t)slidingmass6.flange_a.s(t)=12slidingmass6.L+slidingmass6.s(t)slidingmass6.flange_b.s(t)=slidingmass6.L2+slidingmass6.s(t)slidingmass6.v(t)=dslidingmass6.s(t)dtslidingmass6.a(t)=dslidingmass6.v(t)dt(slidingmass6.a(t)+slidingmass6.gsin(slidingmass6.theta))slidingmass6.m=slidingmass6.flange_b.f(t)+slidingmass6.flange_a.f(t)]

Source

dyad
"""
Smoke test exercising all available translational components in a single model.

Replicates the structure of ModelicaTest.Translational.AllComponents.

**Top chain:** sliding_mass → rod(L=0) → spring(c=1) → damper(d=10) → sliding_mass1
A RelativeStates element spans from sliding_mass.flange_b to damper.flange_a,
measuring the relative displacement and velocity across the rod and spring.

**Branch from sliding_mass.flange_b:** A Force source (driven by a sine signal)
and a SpringDamper(c=1, d=1) connect to sliding_mass2. A Fixed ground provides
the reaction reference for the two-flange Force component.

**ElastoGap branch from sliding_mass2.flange_b:** An ElastoGap(c=1, d=1) connects
to sliding_mass3. A FixedTemperature closes the thermal energy balance.

**Position branch:** sine → position (Filtered) → sliding_mass4
**Speed branch:** sine1 → position1 (Speed, Filtered) → sliding_mass5
**Accelerate branch:** sine2 → position2 (Accelerate) → sliding_mass6

Initial conditions: all masses at rest at the origin, all relative
displacements and velocities zero.
"""
test component AllComponents
  "First sliding mass (MSL: slidingMass)"
  sliding_mass = TranslationalComponents.Components.Mass(m = 1, L = 0, s = initial 0, v = initial 0)
  "Rigid rod (zero length) connecting sliding_mass to spring"
  rod = TranslationalComponents.Components.Rod(L = 0)
  "Linear spring"
  spring = TranslationalComponents.Components.Spring(c = 1)
  "Linear damper"
  damper = TranslationalComponents.Components.Damper(d = 10, s_rel = initial 0)
  "Second sliding mass at the end of the top chain (MSL: slidingMass1)"
  sliding_mass1 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Relative state measurement from sliding_mass.flange_b to damper.flange_a"
  relative_states = TranslationalComponents.Components.RelativeStates(s_rel = initial 0, v_rel = initial 0)
  "Spring-damper on the branch from sliding_mass"
  spring_damper = TranslationalComponents.Components.SpringDamper(c = 1, d = 1, s_rel0 = 0, s_rel = initial 0, v_rel = initial 0)
  "Third sliding mass at the end of the spring-damper branch (MSL: slidingMass2)"
  sliding_mass2 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Force source acting between ground and the junction node"
  force = TranslationalComponents.Sources.Force()
  "Sine signal driving the force source (MSL: sine4)"
  sine4 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Fixed ground providing reaction reference for the force and source supports"
  ground = TranslationalComponents.Components.Fixed()
  "ElastoGap connecting from sliding_mass2 to sliding_mass3"
  elasto_gap = TranslationalComponents.Components.ElastoGap(c = 1, d = 1, s_rel = initial 0, v_rel = initial 0)
  "Fourth sliding mass connected via ElastoGap (MSL: slidingMass3)"
  sliding_mass3 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Thermal boundary for ElastoGap heat port"
  fixed_temp = ThermalComponents.Sources.FixedTemperature(T = 293.15)
  "Sine reference for Position source (MSL: sine)"
  sine = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Position source — Filtered (MSL: position)"
  position = TranslationalComponents.Sources.Position()
  "Fifth sliding mass driven by Position source (MSL: slidingMass4)"
  sliding_mass4 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Sine reference for Speed source (MSL: sine1)"
  sine1 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Speed source — Filtered (MSL: position1)"
  position1 = TranslationalComponents.Sources.Speed()
  "Sixth sliding mass driven by Speed source (MSL: slidingMass5)"
  sliding_mass5 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Sine reference for Accelerate source (MSL: sine2)"
  sine2 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Accelerate source (MSL: position2)"
  position2 = TranslationalComponents.Sources.Accelerate()
  "Seventh sliding mass driven by Accelerate source (MSL: slidingMass6)"
  sliding_mass6 = TranslationalComponents.Components.Mass(m = 1, L = 0)
relations
  # Top chain
  connect(sliding_mass.flange_b, rod.flange_a)
  connect(rod.flange_b, spring.flange_a)
  connect(spring.flange_b, damper.flange_a)
  connect(damper.flange_b, sliding_mass1.flange_a)
  # RelativeStates across rod + spring (same span as MSL)
  connect(sliding_mass.flange_b, relative_states.flange_a)
  connect(relative_states.flange_b, damper.flange_a)
  # Branch: force + spring_damper + sliding_mass2
  connect(sliding_mass.flange_b, spring_damper.flange_a)
  connect(spring_damper.flange_b, sliding_mass2.flange_a)
  connect(force.flange_b, spring_damper.flange_a)
  connect(force.flange_a, ground.flange)
  connect(sine4.y, force.f)
  # ElastoGap branch from sliding_mass2 (MSL: slidingMass2.flange_b → elastoGap)
  connect(sliding_mass2.flange_b, elasto_gap.flange_a)
  connect(elasto_gap.flange_b, sliding_mass3.flange_a)
  connect(elasto_gap.heat_port, fixed_temp.port)
  # Position branch: sine → position → sliding_mass4
  connect(sine.y, position.s_ref)
  connect(position.flange, sliding_mass4.flange_a)
  connect(position.support, ground.flange)
  initial position.v = 0
  # Speed branch: sine1 → position1 → sliding_mass5
  connect(sine1.y, position1.v_ref)
  connect(position1.flange, sliding_mass5.flange_a)
  connect(position1.support, ground.flange)
  # Accelerate branch: sine2 → position2 → sliding_mass6
  connect(sine2.y, position2.a_ref)
  connect(position2.flange, sliding_mass6.flange_a)
  connect(position2.support, ground.flange)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://TranslationalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 1.1,
        "atol": {
          "sliding_mass.s": 0.001,
          "sliding_mass.v": 0.001,
          "damper.s_rel": 0.001,
          "relative_states.s_rel": 0.001,
          "relative_states.v_rel": 0.001,
          "spring_damper.s_rel": 0.001,
          "spring_damper.v_rel": 0.001,
          "elasto_gap.s_rel": 0.001,
          "elasto_gap.v_rel": 0.001,
          "position.s": 0.001,
          "position.v": 0.01,
          "position1.s": 0.001,
          "position1.v": 0.01,
          "position2.s": 0.001,
          "position2.v": 0.001
        },
        "expect": {
          "final": {
            "sliding_mass.s": 0.07425,
            "sliding_mass.v": -0.0935,
            "damper.s_rel": -0.00582,
            "relative_states.s_rel": -0.04583,
            "relative_states.v_rel": 0.1563,
            "spring_damper.s_rel": -0.02107,
            "spring_damper.v_rel": 0.12458,
            "elasto_gap.s_rel": -0.04303,
            "elasto_gap.v_rel": 0.00352,
            "position.s": 0.56547,
            "position.v": 5.18124,
            "position1.s": 0.02858,
            "position1.v": 0.57138,
            "position2.s": 0.16018,
            "position2.v": 0.0304
          },
          "signals": [
            "sliding_mass.s",
            "sliding_mass.v",
            "damper.s_rel",
            "relative_states.s_rel",
            "relative_states.v_rel",
            "spring_damper.s_rel",
            "spring_damper.v_rel",
            "elasto_gap.s_rel",
            "elasto_gap.v_rel",
            "position.s",
            "position.v",
            "position1.s",
            "position1.v",
            "position2.s",
            "position2.v"
          ]
        }
      }
    }
  }
}
end
Flattened Source
dyad
"""
Smoke test exercising all available translational components in a single model.

Replicates the structure of ModelicaTest.Translational.AllComponents.

**Top chain:** sliding_mass → rod(L=0) → spring(c=1) → damper(d=10) → sliding_mass1
A RelativeStates element spans from sliding_mass.flange_b to damper.flange_a,
measuring the relative displacement and velocity across the rod and spring.

**Branch from sliding_mass.flange_b:** A Force source (driven by a sine signal)
and a SpringDamper(c=1, d=1) connect to sliding_mass2. A Fixed ground provides
the reaction reference for the two-flange Force component.

**ElastoGap branch from sliding_mass2.flange_b:** An ElastoGap(c=1, d=1) connects
to sliding_mass3. A FixedTemperature closes the thermal energy balance.

**Position branch:** sine → position (Filtered) → sliding_mass4
**Speed branch:** sine1 → position1 (Speed, Filtered) → sliding_mass5
**Accelerate branch:** sine2 → position2 (Accelerate) → sliding_mass6

Initial conditions: all masses at rest at the origin, all relative
displacements and velocities zero.
"""
test component AllComponents
  "First sliding mass (MSL: slidingMass)"
  sliding_mass = TranslationalComponents.Components.Mass(m = 1, L = 0, s = initial 0, v = initial 0)
  "Rigid rod (zero length) connecting sliding_mass to spring"
  rod = TranslationalComponents.Components.Rod(L = 0)
  "Linear spring"
  spring = TranslationalComponents.Components.Spring(c = 1)
  "Linear damper"
  damper = TranslationalComponents.Components.Damper(d = 10, s_rel = initial 0)
  "Second sliding mass at the end of the top chain (MSL: slidingMass1)"
  sliding_mass1 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Relative state measurement from sliding_mass.flange_b to damper.flange_a"
  relative_states = TranslationalComponents.Components.RelativeStates(s_rel = initial 0, v_rel = initial 0)
  "Spring-damper on the branch from sliding_mass"
  spring_damper = TranslationalComponents.Components.SpringDamper(c = 1, d = 1, s_rel0 = 0, s_rel = initial 0, v_rel = initial 0)
  "Third sliding mass at the end of the spring-damper branch (MSL: slidingMass2)"
  sliding_mass2 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Force source acting between ground and the junction node"
  force = TranslationalComponents.Sources.Force()
  "Sine signal driving the force source (MSL: sine4)"
  sine4 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Fixed ground providing reaction reference for the force and source supports"
  ground = TranslationalComponents.Components.Fixed()
  "ElastoGap connecting from sliding_mass2 to sliding_mass3"
  elasto_gap = TranslationalComponents.Components.ElastoGap(c = 1, d = 1, s_rel = initial 0, v_rel = initial 0)
  "Fourth sliding mass connected via ElastoGap (MSL: slidingMass3)"
  sliding_mass3 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Thermal boundary for ElastoGap heat port"
  fixed_temp = ThermalComponents.Sources.FixedTemperature(T = 293.15)
  "Sine reference for Position source (MSL: sine)"
  sine = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Position source — Filtered (MSL: position)"
  position = TranslationalComponents.Sources.Position()
  "Fifth sliding mass driven by Position source (MSL: slidingMass4)"
  sliding_mass4 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Sine reference for Speed source (MSL: sine1)"
  sine1 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Speed source — Filtered (MSL: position1)"
  position1 = TranslationalComponents.Sources.Speed()
  "Sixth sliding mass driven by Speed source (MSL: slidingMass5)"
  sliding_mass5 = TranslationalComponents.Components.Mass(m = 1, L = 0)
  "Sine reference for Accelerate source (MSL: sine2)"
  sine2 = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1)
  "Accelerate source (MSL: position2)"
  position2 = TranslationalComponents.Sources.Accelerate()
  "Seventh sliding mass driven by Accelerate source (MSL: slidingMass6)"
  sliding_mass6 = TranslationalComponents.Components.Mass(m = 1, L = 0)
relations
  # Top chain
  connect(sliding_mass.flange_b, rod.flange_a)
  connect(rod.flange_b, spring.flange_a)
  connect(spring.flange_b, damper.flange_a)
  connect(damper.flange_b, sliding_mass1.flange_a)
  # RelativeStates across rod + spring (same span as MSL)
  connect(sliding_mass.flange_b, relative_states.flange_a)
  connect(relative_states.flange_b, damper.flange_a)
  # Branch: force + spring_damper + sliding_mass2
  connect(sliding_mass.flange_b, spring_damper.flange_a)
  connect(spring_damper.flange_b, sliding_mass2.flange_a)
  connect(force.flange_b, spring_damper.flange_a)
  connect(force.flange_a, ground.flange)
  connect(sine4.y, force.f)
  # ElastoGap branch from sliding_mass2 (MSL: slidingMass2.flange_b → elastoGap)
  connect(sliding_mass2.flange_b, elasto_gap.flange_a)
  connect(elasto_gap.flange_b, sliding_mass3.flange_a)
  connect(elasto_gap.heat_port, fixed_temp.port)
  # Position branch: sine → position → sliding_mass4
  connect(sine.y, position.s_ref)
  connect(position.flange, sliding_mass4.flange_a)
  connect(position.support, ground.flange)
  initial position.v = 0
  # Speed branch: sine1 → position1 → sliding_mass5
  connect(sine1.y, position1.v_ref)
  connect(position1.flange, sliding_mass5.flange_a)
  connect(position1.support, ground.flange)
  # Accelerate branch: sine2 → position2 → sliding_mass6
  connect(sine2.y, position2.a_ref)
  connect(position2.flange, sliding_mass6.flange_a)
  connect(position2.support, ground.flange)
metadata {
  "Dyad": {
    "icons": {"default": "dyad://TranslationalComponents/Example.svg"},
    "tests": {
      "case1": {
        "stop": 1.1,
        "atol": {
          "sliding_mass.s": 0.001,
          "sliding_mass.v": 0.001,
          "damper.s_rel": 0.001,
          "relative_states.s_rel": 0.001,
          "relative_states.v_rel": 0.001,
          "spring_damper.s_rel": 0.001,
          "spring_damper.v_rel": 0.001,
          "elasto_gap.s_rel": 0.001,
          "elasto_gap.v_rel": 0.001,
          "position.s": 0.001,
          "position.v": 0.01,
          "position1.s": 0.001,
          "position1.v": 0.01,
          "position2.s": 0.001,
          "position2.v": 0.001
        },
        "expect": {
          "final": {
            "sliding_mass.s": 0.07425,
            "sliding_mass.v": -0.0935,
            "damper.s_rel": -0.00582,
            "relative_states.s_rel": -0.04583,
            "relative_states.v_rel": 0.1563,
            "spring_damper.s_rel": -0.02107,
            "spring_damper.v_rel": 0.12458,
            "elasto_gap.s_rel": -0.04303,
            "elasto_gap.v_rel": 0.00352,
            "position.s": 0.56547,
            "position.v": 5.18124,
            "position1.s": 0.02858,
            "position1.v": 0.57138,
            "position2.s": 0.16018,
            "position2.v": 0.0304
          },
          "signals": [
            "sliding_mass.s",
            "sliding_mass.v",
            "damper.s_rel",
            "relative_states.s_rel",
            "relative_states.v_rel",
            "spring_damper.s_rel",
            "spring_damper.v_rel",
            "elasto_gap.s_rel",
            "elasto_gap.v_rel",
            "position.s",
            "position.v",
            "position1.s",
            "position1.v",
            "position2.s",
            "position2.v"
          ]
        }
      }
    }
  }
}
end


Test Cases

Test Case case1

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt

julia
plt