$(instance)Train Icon

Train

Usage

Train(c=1e5, d=1e5, v0=10, a0=0)

Parameters:

NameDescriptionUnitsDefault value
cN/m100000
ds-1100000
v0Initial Velocitym/s10
a0m/s20

Connectors

Behavior

\[ \begin{equation} \left[ \begin{array}{c} \mathrm{connect}\left( car1_{+}flange_{b}, coupler1_{+}flange_{a} \right) \\ \mathrm{connect}\left( car2_{+}flange_{a}, coupler1_{+}flange_{b} \right) \\ \mathrm{connect}\left( car2_{+}flange_{b}, coupler2_{+}flange_{a} \right) \\ \mathrm{connect}\left( car3_{+}flange_{a}, coupler2_{+}flange_{b} \right) \\ \mathrm{connect}\left( car3_{+}flange_{b}, coupler3_{+}flange_{a} \right) \\ \mathrm{connect}\left( engine_{+}flange_{a}, coupler3_{+}flange_{b} \right) \\ \mathrm{connect}\left( engine_{+}flange_{b}, flange \right) \\ \mathtt{car1.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{car1.L} + \mathtt{car1.s}\left( t \right) \\ \mathtt{car1.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{car1.L} + \mathtt{car1.s}\left( t \right) \\ \mathtt{car1.v}\left( t \right) = \frac{\mathrm{d} \mathtt{car1.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{car1.a}\left( t \right) = \frac{\mathrm{d} \mathtt{car1.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{car1.a}\left( t \right) + \mathtt{car1.g} \sin\left( \mathtt{car1.theta} \right) \right) \mathtt{car1.m} = \mathtt{car1.flange\_b.f}\left( t \right) + \mathtt{car1.flange\_a.f}\left( t \right) \\ \mathtt{coupler1.s\_rel}\left( t \right) = \mathtt{coupler1.flange\_b.s}\left( t \right) - \mathtt{coupler1.flange\_a.s}\left( t \right) \\ \mathtt{coupler1.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{coupler1.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{coupler1.flange\_b.f}\left( t \right) = \mathtt{coupler1.f}\left( t \right) \\ \mathtt{coupler1.flange\_a.f}\left( t \right) = - \mathtt{coupler1.f}\left( t \right) \\ \mathtt{coupler1.f\_c}\left( t \right) = \mathtt{coupler1.c} \left( - \mathtt{coupler1.initial\_stretch}\left( t \right) + \mathtt{coupler1.s\_rel}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{coupler1.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{coupler1.f\_d}\left( t \right) = \mathtt{coupler1.d} \mathtt{coupler1.v\_rel}\left( t \right) \\ \mathtt{coupler1.f}\left( t \right) = \mathtt{coupler1.f\_c}\left( t \right) + \mathtt{coupler1.f\_d}\left( t \right) \\ \mathtt{coupler1.lossPower}\left( t \right) = \mathtt{coupler1.v\_rel}\left( t \right) \mathtt{coupler1.f\_d}\left( t \right) \\ \mathtt{car2.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{car2.L} + \mathtt{car2.s}\left( t \right) \\ \mathtt{car2.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{car2.L} + \mathtt{car2.s}\left( t \right) \\ \mathtt{car2.v}\left( t \right) = \frac{\mathrm{d} \mathtt{car2.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{car2.a}\left( t \right) = \frac{\mathrm{d} \mathtt{car2.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{car2.a}\left( t \right) + \mathtt{car2.g} \sin\left( \mathtt{car2.theta} \right) \right) \mathtt{car2.m} = \mathtt{car2.flange\_a.f}\left( t \right) + \mathtt{car2.flange\_b.f}\left( t \right) \\ \mathtt{coupler2.s\_rel}\left( t \right) = - \mathtt{coupler2.flange\_a.s}\left( t \right) + \mathtt{coupler2.flange\_b.s}\left( t \right) \\ \mathtt{coupler2.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{coupler2.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{coupler2.flange\_b.f}\left( t \right) = \mathtt{coupler2.f}\left( t \right) \\ \mathtt{coupler2.flange\_a.f}\left( t \right) = - \mathtt{coupler2.f}\left( t \right) \\ \mathtt{coupler2.f\_c}\left( t \right) = \mathtt{coupler2.c} \left( \mathtt{coupler2.s\_rel}\left( t \right) - \mathtt{coupler2.initial\_stretch}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{coupler2.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{coupler2.f\_d}\left( t \right) = \mathtt{coupler2.d} \mathtt{coupler2.v\_rel}\left( t \right) \\ \mathtt{coupler2.f}\left( t \right) = \mathtt{coupler2.f\_d}\left( t \right) + \mathtt{coupler2.f\_c}\left( t \right) \\ \mathtt{coupler2.lossPower}\left( t \right) = \mathtt{coupler2.v\_rel}\left( t \right) \mathtt{coupler2.f\_d}\left( t \right) \\ \mathtt{car3.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{car3.L} + \mathtt{car3.s}\left( t \right) \\ \mathtt{car3.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{car3.L} + \mathtt{car3.s}\left( t \right) \\ \mathtt{car3.v}\left( t \right) = \frac{\mathrm{d} \mathtt{car3.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{car3.a}\left( t \right) = \frac{\mathrm{d} \mathtt{car3.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{car3.a}\left( t \right) + \mathtt{car3.g} \sin\left( \mathtt{car3.theta} \right) \right) \mathtt{car3.m} = \mathtt{car3.flange\_a.f}\left( t \right) + \mathtt{car3.flange\_b.f}\left( t \right) \\ \mathtt{coupler3.s\_rel}\left( t \right) = - \mathtt{coupler3.flange\_a.s}\left( t \right) + \mathtt{coupler3.flange\_b.s}\left( t \right) \\ \mathtt{coupler3.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{coupler3.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{coupler3.flange\_b.f}\left( t \right) = \mathtt{coupler3.f}\left( t \right) \\ \mathtt{coupler3.flange\_a.f}\left( t \right) = - \mathtt{coupler3.f}\left( t \right) \\ \mathtt{coupler3.f\_c}\left( t \right) = \mathtt{coupler3.c} \left( - \mathtt{coupler3.initial\_stretch}\left( t \right) + \mathtt{coupler3.s\_rel}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{coupler3.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{coupler3.f\_d}\left( t \right) = \mathtt{coupler3.d} \mathtt{coupler3.v\_rel}\left( t \right) \\ \mathtt{coupler3.f}\left( t \right) = \mathtt{coupler3.f\_d}\left( t \right) + \mathtt{coupler3.f\_c}\left( t \right) \\ \mathtt{coupler3.lossPower}\left( t \right) = \mathtt{coupler3.f\_d}\left( t \right) \mathtt{coupler3.v\_rel}\left( t \right) \\ \mathtt{engine.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{engine.L} + \mathtt{engine.s}\left( t \right) \\ \mathtt{engine.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{engine.L} + \mathtt{engine.s}\left( t \right) \\ \mathtt{engine.v}\left( t \right) = \frac{\mathrm{d} \mathtt{engine.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{engine.a}\left( t \right) = \frac{\mathrm{d} \mathtt{engine.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{engine.a}\left( t \right) + \mathtt{engine.g} \sin\left( \mathtt{engine.theta} \right) \right) \mathtt{engine.m} = \mathtt{engine.flange\_a.f}\left( t \right) + \mathtt{engine.flange\_b.f}\left( t \right) \\ \end{array} \right] \end{equation} \]

Source

component Train
  car1 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 50, "y1": 100, "x2": 150, "y2": 200}}}
  }]
  coupler1 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 225, "y1": 100, "x2": 325, "y2": 200}}}
  }]
  car2 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 400, "y1": 100, "x2": 500, "y2": 200}}}
  }]
  coupler2 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 575, "y1": 100, "x2": 675, "y2": 200}}}
  }]
  car3 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 750, "y1": 100, "x2": 850, "y2": 200}}}
  }]
  coupler3 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 925, "y1": 100, "x2": 1025, "y2": 200}}}
  }]
  engine = TrainCar(m=2000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 1100, "y1": 100, "x2": 1200, "y2": 200}}}
  }]
  flange = Flange() [{
    "JuliaSim": {"placement": {"icon": {"x1": 975, "y1": 475, "x2": 1025, "y2": 525}}}
  }]
  parameter c::TranslationalSpringConstant = 1e5
  parameter d::DampingCoefficient = 1e5
  # Initial Velocity
  parameter v0::Velocity = 10
  parameter a0::Acceleration = 0
relations
  initial car1.s = 0.45
  initial car1.v = v0
  initial car2.s = 1.55
  initial car2.v = v0
  initial car3.s = 2.55
  initial car3.v = v0
  initial engine.s = 3.55
  initial engine.v = v0
  initial engine.a = a0
  initial coupler1.initial_stretch = 0
  initial coupler2.initial_stretch = 0
  connect(car1.flange_b, coupler1.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car2.flange_a, coupler1.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car2.flange_b, coupler2.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car3.flange_a, coupler2.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car3.flange_b, coupler3.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(engine.flange_a, coupler3.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(engine.flange_b, flange)
end
Flattened Source
component Train
  car1 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 50, "y1": 100, "x2": 150, "y2": 200}}}
  }]
  coupler1 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 225, "y1": 100, "x2": 325, "y2": 200}}}
  }]
  car2 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 400, "y1": 100, "x2": 500, "y2": 200}}}
  }]
  coupler2 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 575, "y1": 100, "x2": 675, "y2": 200}}}
  }]
  car3 = TrainCar(m=1000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 750, "y1": 100, "x2": 850, "y2": 200}}}
  }]
  coupler3 = TrainCarCoupler(c=c, d=d) [{
    "JuliaSim": {"placement": {"icon": {"x1": 925, "y1": 100, "x2": 1025, "y2": 200}}}
  }]
  engine = TrainCar(m=2000, L=0.9) [{
    "JuliaSim": {"placement": {"icon": {"x1": 1100, "y1": 100, "x2": 1200, "y2": 200}}}
  }]
  flange = Flange() [{
    "JuliaSim": {"placement": {"icon": {"x1": 975, "y1": 475, "x2": 1025, "y2": 525}}}
  }]
  parameter c::TranslationalSpringConstant = 1e5
  parameter d::DampingCoefficient = 1e5
  # Initial Velocity
  parameter v0::Velocity = 10
  parameter a0::Acceleration = 0
relations
  initial car1.s = 0.45
  initial car1.v = v0
  initial car2.s = 1.55
  initial car2.v = v0
  initial car3.s = 2.55
  initial car3.v = v0
  initial engine.s = 3.55
  initial engine.v = v0
  initial engine.a = a0
  initial coupler1.initial_stretch = 0
  initial coupler2.initial_stretch = 0
  connect(car1.flange_b, coupler1.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car2.flange_a, coupler1.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car2.flange_b, coupler2.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car3.flange_a, coupler2.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(car3.flange_b, coupler3.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(engine.flange_a, coupler3.flange_b) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(engine.flange_b, flange)
metadata {}
end

Test Cases

  • Examples
  • Experiments
  • Analyses