$(instance)TrainStopper Icon

TrainStopper

Usage

TrainStopper(v0=10)

Parameters:

NameDescriptionUnitsDefault value
v0m/s10

Behavior

\[ \begin{equation} \left[ \begin{array}{c} \mathrm{connect}\left( train_{+}flange, stopper_{+}flange_{a} \right) \\ \mathrm{connect}\left( stopper_{+}flange_{b}, reference_{+}flange \right) \\ \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{train.car1.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{train.car1.L} + \mathtt{train.car1.s}\left( t \right) \\ \mathtt{train.car1.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{train.car1.L} + \mathtt{train.car1.s}\left( t \right) \\ \mathtt{train.car1.v}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car1.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.car1.a}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car1.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{train.car1.a}\left( t \right) + \mathtt{train.car1.g} \sin\left( \mathtt{train.car1.theta} \right) \right) \mathtt{train.car1.m} = \mathtt{train.car1.flange\_a.f}\left( t \right) + \mathtt{train.car1.flange\_b.f}\left( t \right) \\ \mathtt{train.coupler1.s\_rel}\left( t \right) = - \mathtt{train.coupler1.flange\_a.s}\left( t \right) + \mathtt{train.coupler1.flange\_b.s}\left( t \right) \\ \mathtt{train.coupler1.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{train.coupler1.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.coupler1.flange\_b.f}\left( t \right) = \mathtt{train.coupler1.f}\left( t \right) \\ \mathtt{train.coupler1.flange\_a.f}\left( t \right) = - \mathtt{train.coupler1.f}\left( t \right) \\ \mathtt{train.coupler1.f\_c}\left( t \right) = \mathtt{train.coupler1.c} \left( \mathtt{train.coupler1.s\_rel}\left( t \right) - \mathtt{train.coupler1.initial\_stretch}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{train.coupler1.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{train.coupler1.f\_d}\left( t \right) = \mathtt{train.coupler1.d} \mathtt{train.coupler1.v\_rel}\left( t \right) \\ \mathtt{train.coupler1.f}\left( t \right) = \mathtt{train.coupler1.f\_c}\left( t \right) + \mathtt{train.coupler1.f\_d}\left( t \right) \\ \mathtt{train.coupler1.lossPower}\left( t \right) = \mathtt{train.coupler1.v\_rel}\left( t \right) \mathtt{train.coupler1.f\_d}\left( t \right) \\ \mathtt{train.car2.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{train.car2.L} + \mathtt{train.car2.s}\left( t \right) \\ \mathtt{train.car2.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{train.car2.L} + \mathtt{train.car2.s}\left( t \right) \\ \mathtt{train.car2.v}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car2.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.car2.a}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car2.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{train.car2.a}\left( t \right) + \mathtt{train.car2.g} \sin\left( \mathtt{train.car2.theta} \right) \right) \mathtt{train.car2.m} = \mathtt{train.car2.flange\_a.f}\left( t \right) + \mathtt{train.car2.flange\_b.f}\left( t \right) \\ \mathtt{train.coupler2.s\_rel}\left( t \right) = \mathtt{train.coupler2.flange\_b.s}\left( t \right) - \mathtt{train.coupler2.flange\_a.s}\left( t \right) \\ \mathtt{train.coupler2.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{train.coupler2.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.coupler2.flange\_b.f}\left( t \right) = \mathtt{train.coupler2.f}\left( t \right) \\ \mathtt{train.coupler2.flange\_a.f}\left( t \right) = - \mathtt{train.coupler2.f}\left( t \right) \\ \mathtt{train.coupler2.f\_c}\left( t \right) = \mathtt{train.coupler2.c} \left( - \mathtt{train.coupler2.initial\_stretch}\left( t \right) + \mathtt{train.coupler2.s\_rel}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{train.coupler2.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{train.coupler2.f\_d}\left( t \right) = \mathtt{train.coupler2.d} \mathtt{train.coupler2.v\_rel}\left( t \right) \\ \mathtt{train.coupler2.f}\left( t \right) = \mathtt{train.coupler2.f\_c}\left( t \right) + \mathtt{train.coupler2.f\_d}\left( t \right) \\ \mathtt{train.coupler2.lossPower}\left( t \right) = \mathtt{train.coupler2.v\_rel}\left( t \right) \mathtt{train.coupler2.f\_d}\left( t \right) \\ \mathtt{train.car3.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{train.car3.L} + \mathtt{train.car3.s}\left( t \right) \\ \mathtt{train.car3.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{train.car3.L} + \mathtt{train.car3.s}\left( t \right) \\ \mathtt{train.car3.v}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car3.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.car3.a}\left( t \right) = \frac{\mathrm{d} \mathtt{train.car3.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{train.car3.a}\left( t \right) + \mathtt{train.car3.g} \sin\left( \mathtt{train.car3.theta} \right) \right) \mathtt{train.car3.m} = \mathtt{train.car3.flange\_b.f}\left( t \right) + \mathtt{train.car3.flange\_a.f}\left( t \right) \\ \mathtt{train.coupler3.s\_rel}\left( t \right) = - \mathtt{train.coupler3.flange\_a.s}\left( t \right) + \mathtt{train.coupler3.flange\_b.s}\left( t \right) \\ \mathtt{train.coupler3.v\_rel}\left( t \right) = \frac{\mathrm{d} \mathtt{train.coupler3.s\_rel}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.coupler3.flange\_b.f}\left( t \right) = \mathtt{train.coupler3.f}\left( t \right) \\ \mathtt{train.coupler3.flange\_a.f}\left( t \right) = - \mathtt{train.coupler3.f}\left( t \right) \\ \mathtt{train.coupler3.f\_c}\left( t \right) = \mathtt{train.coupler3.c} \left( - \mathtt{train.coupler3.initial\_stretch}\left( t \right) + \mathtt{train.coupler3.s\_rel}\left( t \right) \right) \\ \frac{\mathrm{d} \mathtt{train.coupler3.initial\_stretch}\left( t \right)}{\mathrm{d}t} = 0 \\ \mathtt{train.coupler3.f\_d}\left( t \right) = \mathtt{train.coupler3.d} \mathtt{train.coupler3.v\_rel}\left( t \right) \\ \mathtt{train.coupler3.f}\left( t \right) = \mathtt{train.coupler3.f\_d}\left( t \right) + \mathtt{train.coupler3.f\_c}\left( t \right) \\ \mathtt{train.coupler3.lossPower}\left( t \right) = \mathtt{train.coupler3.v\_rel}\left( t \right) \mathtt{train.coupler3.f\_d}\left( t \right) \\ \mathtt{train.engine.flange\_a.s}\left( t \right) = - \frac{1}{2} \mathtt{train.engine.L} + \mathtt{train.engine.s}\left( t \right) \\ \mathtt{train.engine.flange\_b.s}\left( t \right) = \frac{1}{2} \mathtt{train.engine.L} + \mathtt{train.engine.s}\left( t \right) \\ \mathtt{train.engine.v}\left( t \right) = \frac{\mathrm{d} \mathtt{train.engine.s}\left( t \right)}{\mathrm{d}t} \\ \mathtt{train.engine.a}\left( t \right) = \frac{\mathrm{d} \mathtt{train.engine.v}\left( t \right)}{\mathrm{d}t} \\ \left( \mathtt{train.engine.a}\left( t \right) + \mathtt{train.engine.g} \sin\left( \mathtt{train.engine.theta} \right) \right) \mathtt{train.engine.m} = \mathtt{train.engine.flange\_b.f}\left( t \right) + \mathtt{train.engine.flange\_a.f}\left( t \right) \\ \mathtt{stopper.flange\_a.s}\left( t \right) = \mathtt{stopper.s\_a}\left( t \right) \\ \mathtt{stopper.flange\_b.s}\left( t \right) = \mathtt{stopper.s\_b}\left( t \right) \\ \mathtt{stopper.flange\_a.f}\left( t \right) = \mathtt{stopper.f}\left( t \right) \\ \mathtt{stopper.flange\_b.f}\left( t \right) = - \mathtt{stopper.f}\left( t \right) \\ \frac{\mathrm{d} \mathtt{stopper.s\_a}\left( t \right)}{\mathrm{d}t} = \mathtt{stopper.v\_a}\left( t \right) \\ \frac{\mathrm{d} \mathtt{stopper.s\_b}\left( t \right)}{\mathrm{d}t} = \mathtt{stopper.v\_b}\left( t \right) \\ \mathtt{stopper.f}\left( t \right) = ifelse\left( \mathtt{stopper.s\_a}\left( t \right) \geq \mathtt{stopper.s\_b}\left( t \right), \mathtt{stopper.c} \left( \mathtt{stopper.s\_a}\left( t \right) - \mathtt{stopper.s\_b}\left( t \right) \right) + \mathtt{stopper.d} \left( \mathtt{stopper.v\_a}\left( t \right) - \mathtt{stopper.v\_b}\left( t \right) \right), 0 \right) \\ \mathtt{reference.flange.s}\left( t \right) = \mathtt{reference.s0} \\ \end{array} \right] \end{equation} \]

Source

component TrainStopper
  train = Train(v0=v0) [{
    "JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 100, "x2": 300, "y2": 300}}}
  }]
  stopper = Stopper(c=1e1, d=1e4) [{
    "JuliaSim": {"placement": {"icon": {"x1": 400, "y1": 100, "x2": 600, "y2": 300}}}
  }]
  reference = TranslationalComponents.Fixed() [{
    "JuliaSim": {"placement": {"icon": {"x1": 700, "y1": 100, "x2": 900, "y2": 300}}}
  }]
  parameter v0::Velocity = 10
relations
  connect(train.flange, stopper.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(stopper.flange_b, reference.flange) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
metadata {
  "JuliaSim": {
    "tests": {
      "": {
        "stop": 5,
        "atol": {"train.engine.v": 0.01},
        "expect": {"final": {"train.engine.v": -0.011}}
      }
    }
  }
}
end
Flattened Source
component TrainStopper
  train = Train(v0=v0) [{
    "JuliaSim": {"placement": {"icon": {"x1": 100, "y1": 100, "x2": 300, "y2": 300}}}
  }]
  stopper = Stopper(c=1e1, d=1e4) [{
    "JuliaSim": {"placement": {"icon": {"x1": 400, "y1": 100, "x2": 600, "y2": 300}}}
  }]
  reference = TranslationalComponents.Fixed() [{
    "JuliaSim": {"placement": {"icon": {"x1": 700, "y1": 100, "x2": 900, "y2": 300}}}
  }]
  parameter v0::Velocity = 10
relations
  connect(train.flange, stopper.flange_a) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
  connect(stopper.flange_b, reference.flange) [{"JuliaSim": {"edges": [{"S": 1, "E": 2}]}}]
metadata {
  "JuliaSim": {
    "tests": {
      "": {
        "stop": 5,
        "atol": {"train.engine.v": 0.01},
        "expect": {"final": {"train.engine.v": -0.011}}
      }
    }
  }
}
end

Test Cases

Test Case ``

  • Examples
  • Experiments
  • Analyses