# No. 465 (Brown 1868): "Balance pumps. Pair worked reciprocally by a person pressing alternately on opposite ends of lever or beam."
# Model (cm, gravity on, the pumps cut away in half section, seen from in front). A beam turns on a post between two barrels; a rod
# from each plunger is pinned to it 8 cm either side of the fulcrum, and the person presses its ends down in turn (the beam swung
# +-0.2 rad, the only drive), so one plunger rises as the other falls. Each barrel stands on a head with two flaps hung by their top
# edges: the inner one lets water in from a pocket fed by the suction pipe from the well, the outer one lets it out to a riser whose
# spout pours into a trough on the ground, the trough's waste running back to the well. The water is lumped vessels
# (src/fluid/vessels.c): each head and barrel under its plunger is a closed chamber the plunger sweeps (19.635 cm^2); the pocket and
# suction pipe, and each riser's foot, are full chambers; each riser is a pipe with inertia delivering against its height. Every flap is
# moved only by its weight and the pressures on its faces and passes water as it swings open (fully at 0.5 rad).
# Generator: opencode-runs/water/gen465.py.
number: 465
slug: balance-pumps
name: Balance pumps
brown: "Balance pumps. Pair worked reciprocally by a person pressing alternately on opposite ends of lever or beam."
units: cm
sim:
  timestep: 0.0001
  integrator: implicitfast
  iterations: 60
  duration_s: 14
  floor: false
bodies:
  - id: beam
    shape: part
    pos: [0, 0, 28]
    mass: 0.5
    color: "#7a5a3a"
    pieces:
      - {kind: rod, from: [-19, 0, 28], to: [19, 0, 28], radius: 0.7, capsule: true, collide: 0}
      - {kind: rod, from: [0, -0.9, 28], to: [0, 0.9, 28], radius: 1, collide: 0}
      - {kind: rod, from: [-19, -2.5, 28], to: [-19, 2.5, 28], radius: 0.6, capsule: true, collide: 0}
      - {kind: rod, from: [19, -2.5, 28], to: [19, 2.5, 28], radius: 0.6, capsule: true, collide: 0}
      - {kind: rod, from: [-8, -1, 28], to: [-8, 1, 28], radius: 0.5, collide: 0}
      - {kind: rod, from: [8, -1, 28], to: [8, 1, 28], radius: 0.5, collide: 0}
  - id: plungerL
    shape: part
    pos: [-8, 0, 9]
    mass: 0.12
    color: "#8a8478"
    pieces:
      - {kind: loft, a: [[-5.55, 0, 13], [-5.7365, 0.9376, 13], [-6.2676, 1.7324, 13], [-7.0624, 2.2635, 13], [-8, 2.45, 13], [-8.9376, 2.2635, 13], [-9.7324, 1.7324, 13], [-10.2635, 0.9376, 13], [-10.45, 0, 13], [-10.2635, -0.9376, 13], [-9.7324, -1.7324, 13], [-8.9376, -2.2635, 13], [-8, -2.45, 13], [-7.0624, -2.2635, 13], [-6.2676, -1.7324, 13], [-5.7365, -0.9376, 13]], b: [[-5.55, 0, 9], [-5.7365, 0.9376, 9], [-6.2676, 1.7324, 9], [-7.0624, 2.2635, 9], [-8, 2.45, 9], [-8.9376, 2.2635, 9], [-9.7324, 1.7324, 9], [-10.2635, 0.9376, 9], [-10.45, 0, 9], [-10.2635, -0.9376, 9], [-9.7324, -1.7324, 9], [-8.9376, -2.2635, 9], [-8, -2.45, 9], [-7.0624, -2.2635, 9], [-6.2676, -1.7324, 9], [-5.7365, -0.9376, 9]], collide: 0, color: "#8a8478"}
      - {kind: loft, a: [[-5.52, 0, 10.6], [-5.7088, 0.9491, 10.6], [-6.2464, 1.7536, 10.6], [-7.0509, 2.2912, 10.6], [-8, 2.48, 10.6], [-8.9491, 2.2912, 10.6], [-9.7536, 1.7536, 10.6], [-10.2912, 0.9491, 10.6], [-10.48, 0, 10.6], [-10.2912, -0.9491, 10.6], [-9.7536, -1.7536, 10.6], [-8.9491, -2.2912, 10.6], [-8, -2.48, 10.6], [-7.0509, -2.2912, 10.6], [-6.2464, -1.7536, 10.6], [-5.7088, -0.9491, 10.6]], b: [[-5.52, 0, 9.7], [-5.7088, 0.9491, 9.7], [-6.2464, 1.7536, 9.7], [-7.0509, 2.2912, 9.7], [-8, 2.48, 9.7], [-8.9491, 2.2912, 9.7], [-9.7536, 1.7536, 9.7], [-10.2912, 0.9491, 9.7], [-10.48, 0, 9.7], [-10.2912, -0.9491, 9.7], [-9.7536, -1.7536, 9.7], [-8.9491, -2.2912, 9.7], [-8, -2.48, 9.7], [-7.0509, -2.2912, 9.7], [-6.2464, -1.7536, 9.7], [-5.7088, -0.9491, 9.7]], collide: 0, color: "#3d2e20"}
      - {kind: rod, from: [-8, -0.7, 13.4], to: [-8, 0.7, 13.4], radius: 0.45, collide: 0}
  - id: rodL
    shape: part
    mount: plungerL
    pos: [-8, 0, 13.4]
    mass: 0.03
    color: "#6d675c"
    pieces:
      - {kind: rod, from: [-8, 0, 13.4], to: [-8, 0, 28], radius: 0.35, collide: 0}
      - {kind: rod, from: [-8, -0.6, 28], to: [-8, 0.6, 28], radius: 0.45, collide: 0}
  - id: iL
    shape: part
    pos: [-4.9, 0, 2.8]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[-5.1, 0.2, 2.8], [-4.7, 0.2, 2.8], [-4.7, 3.8, 2.8], [-5.1, 3.8, 2.8]], b: [[-5.1, 0.2, 0.2], [-4.7, 0.2, 0.2], [-4.7, 3.8, 0.2], [-5.1, 3.8, 0.2]], collide: 0, color: "#c8781e"}
      - {kind: rod, from: [-4.9, 0, 2.8], to: [-4.9, 4, 2.8], radius: 0.18, collide: 0}
  - id: oL
    shape: part
    pos: [-11.9, 0, 2.8]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[-12.1, 0.2, 2.8], [-11.7, 0.2, 2.8], [-11.7, 3.8, 2.8], [-12.1, 3.8, 2.8]], b: [[-12.1, 0.2, 0.2], [-11.7, 0.2, 0.2], [-11.7, 3.8, 0.2], [-12.1, 3.8, 0.2]], collide: 0, color: "#c8781e"}
      - {kind: rod, from: [-11.9, 0, 2.8], to: [-11.9, 4, 2.8], radius: 0.18, collide: 0}
  - id: plungerR
    shape: part
    pos: [8, 0, 9]
    mass: 0.12
    color: "#8a8478"
    pieces:
      - {kind: loft, a: [[10.45, 0, 13], [10.2635, 0.9376, 13], [9.7324, 1.7324, 13], [8.9376, 2.2635, 13], [8, 2.45, 13], [7.0624, 2.2635, 13], [6.2676, 1.7324, 13], [5.7365, 0.9376, 13], [5.55, 0, 13], [5.7365, -0.9376, 13], [6.2676, -1.7324, 13], [7.0624, -2.2635, 13], [8, -2.45, 13], [8.9376, -2.2635, 13], [9.7324, -1.7324, 13], [10.2635, -0.9376, 13]], b: [[10.45, 0, 9], [10.2635, 0.9376, 9], [9.7324, 1.7324, 9], [8.9376, 2.2635, 9], [8, 2.45, 9], [7.0624, 2.2635, 9], [6.2676, 1.7324, 9], [5.7365, 0.9376, 9], [5.55, 0, 9], [5.7365, -0.9376, 9], [6.2676, -1.7324, 9], [7.0624, -2.2635, 9], [8, -2.45, 9], [8.9376, -2.2635, 9], [9.7324, -1.7324, 9], [10.2635, -0.9376, 9]], collide: 0, color: "#8a8478"}
      - {kind: loft, a: [[10.48, 0, 10.6], [10.2912, 0.9491, 10.6], [9.7536, 1.7536, 10.6], [8.9491, 2.2912, 10.6], [8, 2.48, 10.6], [7.0509, 2.2912, 10.6], [6.2464, 1.7536, 10.6], [5.7088, 0.9491, 10.6], [5.52, 0, 10.6], [5.7088, -0.9491, 10.6], [6.2464, -1.7536, 10.6], [7.0509, -2.2912, 10.6], [8, -2.48, 10.6], [8.9491, -2.2912, 10.6], [9.7536, -1.7536, 10.6], [10.2912, -0.9491, 10.6]], b: [[10.48, 0, 9.7], [10.2912, 0.9491, 9.7], [9.7536, 1.7536, 9.7], [8.9491, 2.2912, 9.7], [8, 2.48, 9.7], [7.0509, 2.2912, 9.7], [6.2464, 1.7536, 9.7], [5.7088, 0.9491, 9.7], [5.52, 0, 9.7], [5.7088, -0.9491, 9.7], [6.2464, -1.7536, 9.7], [7.0509, -2.2912, 9.7], [8, -2.48, 9.7], [8.9491, -2.2912, 9.7], [9.7536, -1.7536, 9.7], [10.2912, -0.9491, 9.7]], collide: 0, color: "#3d2e20"}
      - {kind: rod, from: [8, -0.7, 13.4], to: [8, 0.7, 13.4], radius: 0.45, collide: 0}
  - id: rodR
    shape: part
    mount: plungerR
    pos: [8, 0, 13.4]
    mass: 0.03
    color: "#6d675c"
    pieces:
      - {kind: rod, from: [8, 0, 13.4], to: [8, 0, 28], radius: 0.35, collide: 0}
      - {kind: rod, from: [8, -0.6, 28], to: [8, 0.6, 28], radius: 0.45, collide: 0}
  - id: iR
    shape: part
    pos: [4.9, 0, 2.8]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[4.7, 0.2, 2.8], [5.1, 0.2, 2.8], [5.1, 3.8, 2.8], [4.7, 3.8, 2.8]], b: [[4.7, 0.2, 0.2], [5.1, 0.2, 0.2], [5.1, 3.8, 0.2], [4.7, 3.8, 0.2]], collide: 0, color: "#c8781e"}
      - {kind: rod, from: [4.9, 0, 2.8], to: [4.9, 4, 2.8], radius: 0.18, collide: 0}
  - id: oR
    shape: part
    pos: [11.9, 0, 2.8]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[11.7, 0.2, 2.8], [12.1, 0.2, 2.8], [12.1, 3.8, 2.8], [11.7, 3.8, 2.8]], b: [[11.7, 0.2, 0.2], [12.1, 0.2, 0.2], [12.1, 3.8, 0.2], [11.7, 3.8, 0.2]], collide: 0, color: "#c8781e"}
      - {kind: rod, from: [11.9, 0, 2.8], to: [11.9, 4, 2.8], radius: 0.18, collide: 0}
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    color: "#d6cdb8"
    pieces:
      - {kind: loft, a: [[-15.3, 0, 0], [15.3, 0, 0], [15.3, 4.4, 0], [-15.3, 4.4, 0]], b: [[-15.3, 0, -0.8], [15.3, 0, -0.8], [15.3, 4.4, -0.8], [-15.3, 4.4, -0.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-15.3, 4, 3], [15.3, 4, 3], [15.3, 4.4, 3], [-15.3, 4.4, 3]], b: [[-15.3, 4, 0], [15.3, 4, 0], [15.3, 4.4, 0], [-15.3, 4.4, 0]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-4.5, 0, 3.6], [4.5, 0, 3.6], [4.5, 4.4, 3.6], [-4.5, 4.4, 3.6]], b: [[-4.5, 0, 3], [4.5, 0, 3], [4.5, 4.4, 3], [-4.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-5.5, 0, 17], [-5.6903, 0.9567, 17], [-5.0436, 1.2246, 17], [-4.8, 0, 17]], b: [[-5.5, 0, 3], [-5.6903, 0.9567, 3], [-5.0436, 1.2246, 3], [-4.8, 0, 3]], collide: 0}
      - {kind: loft, a: [[-5.6903, 0.9567, 17], [-6.2322, 1.7678, 17], [-5.7373, 2.2627, 17], [-5.0436, 1.2246, 17]], b: [[-5.6903, 0.9567, 3], [-6.2322, 1.7678, 3], [-5.7373, 2.2627, 3], [-5.0436, 1.2246, 3]], collide: 0}
      - {kind: loft, a: [[-6.2322, 1.7678, 17], [-7.0433, 2.3097, 17], [-6.7754, 2.9564, 17], [-5.7373, 2.2627, 17]], b: [[-6.2322, 1.7678, 3], [-7.0433, 2.3097, 3], [-6.7754, 2.9564, 3], [-5.7373, 2.2627, 3]], collide: 0}
      - {kind: loft, a: [[-7.0433, 2.3097, 17], [-8, 2.5, 17], [-8, 3.2, 17], [-6.7754, 2.9564, 17]], b: [[-7.0433, 2.3097, 3], [-8, 2.5, 3], [-8, 3.2, 3], [-6.7754, 2.9564, 3]], collide: 0}
      - {kind: loft, a: [[-8, 2.5, 17], [-8.9567, 2.3097, 17], [-9.2246, 2.9564, 17], [-8, 3.2, 17]], b: [[-8, 2.5, 3], [-8.9567, 2.3097, 3], [-9.2246, 2.9564, 3], [-8, 3.2, 3]], collide: 0}
      - {kind: loft, a: [[-8.9567, 2.3097, 17], [-9.7678, 1.7678, 17], [-10.2627, 2.2627, 17], [-9.2246, 2.9564, 17]], b: [[-8.9567, 2.3097, 3], [-9.7678, 1.7678, 3], [-10.2627, 2.2627, 3], [-9.2246, 2.9564, 3]], collide: 0}
      - {kind: loft, a: [[-9.7678, 1.7678, 17], [-10.3097, 0.9567, 17], [-10.9564, 1.2246, 17], [-10.2627, 2.2627, 17]], b: [[-9.7678, 1.7678, 3], [-10.3097, 0.9567, 3], [-10.9564, 1.2246, 3], [-10.2627, 2.2627, 3]], collide: 0}
      - {kind: loft, a: [[-10.3097, 0.9567, 17], [-10.5, 0, 17], [-11.2, 0, 17], [-10.9564, 1.2246, 17]], b: [[-10.3097, 0.9567, 3], [-10.5, 0, 3], [-11.2, 0, 3], [-10.9564, 1.2246, 3]], collide: 0}
      - {kind: loft, a: [[-4.8, 0, 17], [-5.0436, 1.2246, 17], [-4.674, 1.3777, 17], [-4.4, 0, 17]], b: [[-4.8, 0, 16.5], [-5.0436, 1.2246, 16.5], [-4.674, 1.3777, 16.5], [-4.4, 0, 16.5]], collide: 0}
      - {kind: loft, a: [[-5.0436, 1.2246, 17], [-5.7373, 2.2627, 17], [-5.4544, 2.5456, 17], [-4.674, 1.3777, 17]], b: [[-5.0436, 1.2246, 16.5], [-5.7373, 2.2627, 16.5], [-5.4544, 2.5456, 16.5], [-4.674, 1.3777, 16.5]], collide: 0}
      - {kind: loft, a: [[-5.7373, 2.2627, 17], [-6.7754, 2.9564, 17], [-6.6223, 3.326, 17], [-5.4544, 2.5456, 17]], b: [[-5.7373, 2.2627, 16.5], [-6.7754, 2.9564, 16.5], [-6.6223, 3.326, 16.5], [-5.4544, 2.5456, 16.5]], collide: 0}
      - {kind: loft, a: [[-6.7754, 2.9564, 17], [-8, 3.2, 17], [-8, 3.6, 17], [-6.6223, 3.326, 17]], b: [[-6.7754, 2.9564, 16.5], [-8, 3.2, 16.5], [-8, 3.6, 16.5], [-6.6223, 3.326, 16.5]], collide: 0}
      - {kind: loft, a: [[-8, 3.2, 17], [-9.2246, 2.9564, 17], [-9.3777, 3.326, 17], [-8, 3.6, 17]], b: [[-8, 3.2, 16.5], [-9.2246, 2.9564, 16.5], [-9.3777, 3.326, 16.5], [-8, 3.6, 16.5]], collide: 0}
      - {kind: loft, a: [[-9.2246, 2.9564, 17], [-10.2627, 2.2627, 17], [-10.5456, 2.5456, 17], [-9.3777, 3.326, 17]], b: [[-9.2246, 2.9564, 16.5], [-10.2627, 2.2627, 16.5], [-10.5456, 2.5456, 16.5], [-9.3777, 3.326, 16.5]], collide: 0}
      - {kind: loft, a: [[-10.2627, 2.2627, 17], [-10.9564, 1.2246, 17], [-11.326, 1.3777, 17], [-10.5456, 2.5456, 17]], b: [[-10.2627, 2.2627, 16.5], [-10.9564, 1.2246, 16.5], [-11.326, 1.3777, 16.5], [-10.5456, 2.5456, 16.5]], collide: 0}
      - {kind: loft, a: [[-10.9564, 1.2246, 17], [-11.2, 0, 17], [-11.6, 0, 17], [-11.326, 1.3777, 17]], b: [[-10.9564, 1.2246, 16.5], [-11.2, 0, 16.5], [-11.6, 0, 16.5], [-11.326, 1.3777, 16.5]], collide: 0}
      - {kind: loft, a: [[-5.5, 0, 3.6], [-4.5, 0, 3.6], [-4.5, 4.4, 3.6], [-5.5, 4.4, 3.6]], b: [[-5.5, 0, 3], [-4.5, 0, 3], [-4.5, 4.4, 3], [-5.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-11.5, 0, 3.6], [-10.5, 0, 3.6], [-10.5, 4.4, 3.6], [-11.5, 4.4, 3.6]], b: [[-11.5, 0, 3], [-10.5, 0, 3], [-10.5, 4.4, 3], [-11.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-4.7, 0, 3.6], [-4.3, 0, 3.6], [-4.3, 4.4, 3.6], [-4.7, 4.4, 3.6]], b: [[-4.7, 0, 2.8], [-4.3, 0, 2.8], [-4.3, 4.4, 2.8], [-4.7, 4.4, 2.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-11.7, 0, 3.6], [-11.3, 0, 3.6], [-11.3, 4.4, 3.6], [-11.7, 4.4, 3.6]], b: [[-11.7, 0, 2.8], [-11.3, 0, 2.8], [-11.3, 4.4, 2.8], [-11.7, 4.4, 2.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-12.5, 0, 3.6], [-11.5, 0, 3.6], [-11.5, 4.4, 3.6], [-12.5, 4.4, 3.6]], b: [[-12.5, 0, 3], [-11.5, 0, 3], [-11.5, 4.4, 3], [-12.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-12.5, 0, 22], [-12.1, 0, 22], [-12.1, 4.4, 22], [-12.5, 4.4, 22]], b: [[-12.5, 0, 3.6], [-12.1, 0, 3.6], [-12.1, 4.4, 3.6], [-12.5, 4.4, 3.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-14.9, 0, 24.4], [-14.5, 0, 24.4], [-14.5, 4.4, 24.4], [-14.9, 4.4, 24.4]], b: [[-14.9, 0, -0.8], [-14.5, 0, -0.8], [-14.5, 4.4, -0.8], [-14.9, 4.4, -0.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-14.5, 0, 24.4], [-12.1, 0, 24.4], [-12.1, 4.4, 24.4], [-14.5, 4.4, 24.4]], b: [[-14.5, 0, 24], [-12.1, 0, 24], [-12.1, 4.4, 24], [-14.5, 4.4, 24]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-18.5, 0, 22], [-14.5, 0, 22], [-14.5, 4.4, 22], [-18.5, 4.4, 22]], b: [[-18.5, 0, 21.6], [-14.5, 0, 21.6], [-14.5, 4.4, 21.6], [-18.5, 4.4, 21.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-18.5, 0, 24], [-14.9, 0, 24], [-14.9, 4.4, 24], [-18.5, 4.4, 24]], b: [[-18.5, 0, 23.6], [-14.9, 0, 23.6], [-14.9, 4.4, 23.6], [-18.5, 4.4, 23.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-14.5, 4, 24], [-12.5, 4, 24], [-12.5, 4.4, 24], [-14.5, 4.4, 24]], b: [[-14.5, 4, 3], [-12.5, 4, 3], [-12.5, 4.4, 3], [-14.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-24.4, 0, -3.4], [-16.6, 0, -3.4], [-16.6, 6.4, -3.4], [-24.4, 6.4, -3.4]], b: [[-24.4, 0, -4], [-16.6, 0, -4], [-16.6, 6.4, -4], [-24.4, 6.4, -4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[-24.4, 0, 0.5], [-24, 0, 0.5], [-24, 6.4, 0.5], [-24.4, 6.4, 0.5]], b: [[-24.4, 0, -3.4], [-24, 0, -3.4], [-24, 6.4, -3.4], [-24.4, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[-17, 0, 0.5], [-16.6, 0, 0.5], [-16.6, 6.4, 0.5], [-17, 6.4, 0.5]], b: [[-17, 0, -3.4], [-16.6, 0, -3.4], [-16.6, 6.4, -3.4], [-17, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[-24, 6, 0.5], [-17, 6, 0.5], [-17, 6.4, 0.5], [-24, 6.4, 0.5]], b: [[-24, 6, -3.4], [-17, 6, -3.4], [-17, 6.4, -3.4], [-24, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[-30, 0, -4], [-12, 0, -4], [-12, 8, -4], [-30, 8, -4]], b: [[-30, 0, -5.2], [-12, 0, -5.2], [-12, 8, -5.2], [-30, 8, -5.2]], collide: 0, color: "#8b7d66"}
      - {kind: loft, a: [[10.5, 0, 17], [10.3097, 0.9567, 17], [10.9564, 1.2246, 17], [11.2, 0, 17]], b: [[10.5, 0, 3], [10.3097, 0.9567, 3], [10.9564, 1.2246, 3], [11.2, 0, 3]], collide: 0}
      - {kind: loft, a: [[10.3097, 0.9567, 17], [9.7678, 1.7678, 17], [10.2627, 2.2627, 17], [10.9564, 1.2246, 17]], b: [[10.3097, 0.9567, 3], [9.7678, 1.7678, 3], [10.2627, 2.2627, 3], [10.9564, 1.2246, 3]], collide: 0}
      - {kind: loft, a: [[9.7678, 1.7678, 17], [8.9567, 2.3097, 17], [9.2246, 2.9564, 17], [10.2627, 2.2627, 17]], b: [[9.7678, 1.7678, 3], [8.9567, 2.3097, 3], [9.2246, 2.9564, 3], [10.2627, 2.2627, 3]], collide: 0}
      - {kind: loft, a: [[8.9567, 2.3097, 17], [8, 2.5, 17], [8, 3.2, 17], [9.2246, 2.9564, 17]], b: [[8.9567, 2.3097, 3], [8, 2.5, 3], [8, 3.2, 3], [9.2246, 2.9564, 3]], collide: 0}
      - {kind: loft, a: [[8, 2.5, 17], [7.0433, 2.3097, 17], [6.7754, 2.9564, 17], [8, 3.2, 17]], b: [[8, 2.5, 3], [7.0433, 2.3097, 3], [6.7754, 2.9564, 3], [8, 3.2, 3]], collide: 0}
      - {kind: loft, a: [[7.0433, 2.3097, 17], [6.2322, 1.7678, 17], [5.7373, 2.2627, 17], [6.7754, 2.9564, 17]], b: [[7.0433, 2.3097, 3], [6.2322, 1.7678, 3], [5.7373, 2.2627, 3], [6.7754, 2.9564, 3]], collide: 0}
      - {kind: loft, a: [[6.2322, 1.7678, 17], [5.6903, 0.9567, 17], [5.0436, 1.2246, 17], [5.7373, 2.2627, 17]], b: [[6.2322, 1.7678, 3], [5.6903, 0.9567, 3], [5.0436, 1.2246, 3], [5.7373, 2.2627, 3]], collide: 0}
      - {kind: loft, a: [[5.6903, 0.9567, 17], [5.5, 0, 17], [4.8, 0, 17], [5.0436, 1.2246, 17]], b: [[5.6903, 0.9567, 3], [5.5, 0, 3], [4.8, 0, 3], [5.0436, 1.2246, 3]], collide: 0}
      - {kind: loft, a: [[11.2, 0, 17], [10.9564, 1.2246, 17], [11.326, 1.3777, 17], [11.6, 0, 17]], b: [[11.2, 0, 16.5], [10.9564, 1.2246, 16.5], [11.326, 1.3777, 16.5], [11.6, 0, 16.5]], collide: 0}
      - {kind: loft, a: [[10.9564, 1.2246, 17], [10.2627, 2.2627, 17], [10.5456, 2.5456, 17], [11.326, 1.3777, 17]], b: [[10.9564, 1.2246, 16.5], [10.2627, 2.2627, 16.5], [10.5456, 2.5456, 16.5], [11.326, 1.3777, 16.5]], collide: 0}
      - {kind: loft, a: [[10.2627, 2.2627, 17], [9.2246, 2.9564, 17], [9.3777, 3.326, 17], [10.5456, 2.5456, 17]], b: [[10.2627, 2.2627, 16.5], [9.2246, 2.9564, 16.5], [9.3777, 3.326, 16.5], [10.5456, 2.5456, 16.5]], collide: 0}
      - {kind: loft, a: [[9.2246, 2.9564, 17], [8, 3.2, 17], [8, 3.6, 17], [9.3777, 3.326, 17]], b: [[9.2246, 2.9564, 16.5], [8, 3.2, 16.5], [8, 3.6, 16.5], [9.3777, 3.326, 16.5]], collide: 0}
      - {kind: loft, a: [[8, 3.2, 17], [6.7754, 2.9564, 17], [6.6223, 3.326, 17], [8, 3.6, 17]], b: [[8, 3.2, 16.5], [6.7754, 2.9564, 16.5], [6.6223, 3.326, 16.5], [8, 3.6, 16.5]], collide: 0}
      - {kind: loft, a: [[6.7754, 2.9564, 17], [5.7373, 2.2627, 17], [5.4544, 2.5456, 17], [6.6223, 3.326, 17]], b: [[6.7754, 2.9564, 16.5], [5.7373, 2.2627, 16.5], [5.4544, 2.5456, 16.5], [6.6223, 3.326, 16.5]], collide: 0}
      - {kind: loft, a: [[5.7373, 2.2627, 17], [5.0436, 1.2246, 17], [4.674, 1.3777, 17], [5.4544, 2.5456, 17]], b: [[5.7373, 2.2627, 16.5], [5.0436, 1.2246, 16.5], [4.674, 1.3777, 16.5], [5.4544, 2.5456, 16.5]], collide: 0}
      - {kind: loft, a: [[5.0436, 1.2246, 17], [4.8, 0, 17], [4.4, 0, 17], [4.674, 1.3777, 17]], b: [[5.0436, 1.2246, 16.5], [4.8, 0, 16.5], [4.4, 0, 16.5], [4.674, 1.3777, 16.5]], collide: 0}
      - {kind: loft, a: [[4.5, 0, 3.6], [5.5, 0, 3.6], [5.5, 4.4, 3.6], [4.5, 4.4, 3.6]], b: [[4.5, 0, 3], [5.5, 0, 3], [5.5, 4.4, 3], [4.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[10.5, 0, 3.6], [11.5, 0, 3.6], [11.5, 4.4, 3.6], [10.5, 4.4, 3.6]], b: [[10.5, 0, 3], [11.5, 0, 3], [11.5, 4.4, 3], [10.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[4.3, 0, 3.6], [4.7, 0, 3.6], [4.7, 4.4, 3.6], [4.3, 4.4, 3.6]], b: [[4.3, 0, 2.8], [4.7, 0, 2.8], [4.7, 4.4, 2.8], [4.3, 4.4, 2.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[11.3, 0, 3.6], [11.7, 0, 3.6], [11.7, 4.4, 3.6], [11.3, 4.4, 3.6]], b: [[11.3, 0, 2.8], [11.7, 0, 2.8], [11.7, 4.4, 2.8], [11.3, 4.4, 2.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[11.5, 0, 3.6], [12.5, 0, 3.6], [12.5, 4.4, 3.6], [11.5, 4.4, 3.6]], b: [[11.5, 0, 3], [12.5, 0, 3], [12.5, 4.4, 3], [11.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[12.1, 0, 22], [12.5, 0, 22], [12.5, 4.4, 22], [12.1, 4.4, 22]], b: [[12.1, 0, 3.6], [12.5, 0, 3.6], [12.5, 4.4, 3.6], [12.1, 4.4, 3.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[14.5, 0, 24.4], [14.9, 0, 24.4], [14.9, 4.4, 24.4], [14.5, 4.4, 24.4]], b: [[14.5, 0, -0.8], [14.9, 0, -0.8], [14.9, 4.4, -0.8], [14.5, 4.4, -0.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[12.1, 0, 24.4], [14.5, 0, 24.4], [14.5, 4.4, 24.4], [12.1, 4.4, 24.4]], b: [[12.1, 0, 24], [14.5, 0, 24], [14.5, 4.4, 24], [12.1, 4.4, 24]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[14.5, 0, 22], [18.5, 0, 22], [18.5, 4.4, 22], [14.5, 4.4, 22]], b: [[14.5, 0, 21.6], [18.5, 0, 21.6], [18.5, 4.4, 21.6], [14.5, 4.4, 21.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[14.9, 0, 24], [18.5, 0, 24], [18.5, 4.4, 24], [14.9, 4.4, 24]], b: [[14.9, 0, 23.6], [18.5, 0, 23.6], [18.5, 4.4, 23.6], [14.9, 4.4, 23.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[12.5, 4, 24], [14.5, 4, 24], [14.5, 4.4, 24], [12.5, 4.4, 24]], b: [[12.5, 4, 3], [14.5, 4, 3], [14.5, 4.4, 3], [12.5, 4.4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[16.6, 0, -3.4], [24.4, 0, -3.4], [24.4, 6.4, -3.4], [16.6, 6.4, -3.4]], b: [[16.6, 0, -4], [24.4, 0, -4], [24.4, 6.4, -4], [16.6, 6.4, -4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[16.6, 0, 0.5], [17, 0, 0.5], [17, 6.4, 0.5], [16.6, 6.4, 0.5]], b: [[16.6, 0, -3.4], [17, 0, -3.4], [17, 6.4, -3.4], [16.6, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[24, 0, 0.5], [24.4, 0, 0.5], [24.4, 6.4, 0.5], [24, 6.4, 0.5]], b: [[24, 0, -3.4], [24.4, 0, -3.4], [24.4, 6.4, -3.4], [24, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[17, 6, 0.5], [24, 6, 0.5], [24, 6.4, 0.5], [17, 6.4, 0.5]], b: [[17, 6, -3.4], [24, 6, -3.4], [24, 6.4, -3.4], [17, 6.4, -3.4]], collide: 0, color: "#8b6a44"}
      - {kind: loft, a: [[12, 0, -4], [30, 0, -4], [30, 8, -4], [12, 8, -4]], b: [[12, 0, -5.2], [30, 0, -5.2], [30, 8, -5.2], [12, 8, -5.2]], collide: 0, color: "#8b7d66"}
      - {kind: loft, a: [[-1.6, 0, -0.8], [-1.2, 0, -0.8], [-1.2, 4.4, -0.8], [-1.6, 4.4, -0.8]], b: [[-1.6, 0, -12], [-1.2, 0, -12], [-1.2, 4.4, -12], [-1.6, 4.4, -12]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[1.2, 0, -0.8], [1.6, 0, -0.8], [1.6, 4.4, -0.8], [1.2, 4.4, -0.8]], b: [[1.2, 0, -12], [1.6, 0, -12], [1.6, 4.4, -12], [1.2, 4.4, -12]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-1.6, 4, -0.8], [1.6, 4, -0.8], [1.6, 4.4, -0.8], [-1.6, 4.4, -0.8]], b: [[-1.6, 4, -12], [1.6, 4, -12], [1.6, 4.4, -12], [-1.6, 4.4, -12]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-12.6, 0, -14], [12.6, 0, -14], [12.6, 6.6, -14], [-12.6, 6.6, -14]], b: [[-12.6, 0, -14.6], [12.6, 0, -14.6], [12.6, 6.6, -14.6], [-12.6, 6.6, -14.6]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-12.6, 6, -4], [12.6, 6, -4], [12.6, 6.6, -4], [-12.6, 6.6, -4]], b: [[-12.6, 6, -14], [12.6, 6, -14], [12.6, 6.6, -14], [-12.6, 6.6, -14]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-12.6, 0, -4], [-12, 0, -4], [-12, 6, -4], [-12.6, 6, -4]], b: [[-12.6, 0, -14], [-12, 0, -14], [-12, 6, -14], [-12.6, 6, -14]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[12, 0, -4], [12.6, 0, -4], [12.6, 6, -4], [12, 6, -4]], b: [[12, 0, -14], [12.6, 0, -14], [12.6, 6, -14], [12, 6, -14]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-0.9, 3.8, 27.4], [0.9, 3.8, 27.4], [0.9, 5.6, 27.4], [-0.9, 5.6, 27.4]], b: [[-0.9, 3.8, 3.6], [0.9, 3.8, 3.6], [0.9, 5.6, 3.6], [-0.9, 5.6, 3.6]], collide: 0, color: "#8b6a44"}
      - {kind: rod, from: [0, -1.2, 28], to: [0, 5.6, 28], radius: 0.35, collide: 0, color: "#4a4038"}
joints:
  - {id: j_b, type: hinge, body: beam, axis: [0, 1, 0], damping: 0.002}   # the beam on its post (the person's; + lowers the right end)
  - {id: j_pL, type: slide, body: plungerL, axis: [0, 0, 1], range: [-5.4, 3.4], damping: 0.01}
  - {id: j_rL, type: hinge, body: rodL, axis: [0, 1, 0], damping: 0.0005}
  - {id: j_iL, type: hinge, body: iL, axis: [0, 1, 0], range: [0, 0.9], damping: 0.00002}   # 0: hanging shut on its port, + swings open (outward)
  - {id: j_oL, type: hinge, body: oL, axis: [0, 1, 0], range: [0, 0.9], damping: 0.00002}   # 0: hanging shut on its port, + swings open (outward)
  - {id: j_pR, type: slide, body: plungerR, axis: [0, 0, 1], range: [-5.4, 3.4], damping: 0.01}
  - {id: j_rR, type: hinge, body: rodR, axis: [0, 1, 0], damping: 0.0005}
  - {id: j_iR, type: hinge, body: iR, axis: [0, -1, 0], range: [0, 0.9], damping: 0.00002}   # 0: hanging shut on its port, + swings open (outward)
  - {id: j_oR, type: hinge, body: oR, axis: [0, -1, 0], range: [0, 0.9], damping: 0.00002}   # 0: hanging shut on its port, + swings open (outward)
pins:
  - {id: p_L, a: beam, b: rodL, at: [-8, 0, 28]}
  - {id: p_R, a: beam, b: rodR, at: [8, 0, 28]}
vessels:
  substeps: 4
  nodes:
    - {id: ground, kind: source, p: 588.6}   # the ground water feeding the well, keeping its level
    - {id: well, kind: tank, area: 144, z: -14, level: 6,
       draw: {section: [[-12, -14], [12, -14], [12, -4], [-12, -4]], y: [0.05, 6]}}
    - {id: spipe, kind: chamber, fixed: -12, sections: [[-12, 9.6], [0, 36]], volume: 223.2, water: 223.2, K: 2e+06,
       draw: {sections: [[[-1.2, -12], [1.2, -12], [1.2, 0], [-1.2, 0]], [[-4.3, 0], [4.3, 0], [4.3, 3], [-4.3, 3]]], y: [0, 4]}}   # the suction pipe and the pocket between the barrels, primed
    - {id: barrelL, kind: chamber, fixed: 0, sections: [[0, 28], [3, 19.635]], volume: 201.81, water: 201.81, K: 2e+06,
       draw: {sections: [[[-11.3, 0], [-4.7, 0], [-4.7, 3], [-11.3, 3]], [[-10.45, 3], [-5.55, 3], [-5.55, 17], [-10.45, 17]]], y: [0, 4]}}   # the head and the barrel under the plunger
    - {id: riserL, kind: chamber, fixed: 0, sections: [[0, 11.2]], volume: 33.6, water: 33.6, K: 2e+06,
       draw: {sections: [[[-14.5, 0], [-11.7, 0], [-11.7, 3], [-14.5, 3]]], y: [0, 4]}}   # the pocket at the riser's foot
    - {id: troughL, kind: tank, area: 42, z: -3.4, level: 1.5, max: 3.9,
       draw: {section: [[-24, -3.4], [-17, -3.4], [-17, 0.5], [-24, 0.5]], y: [0.05, 6]}}
    - {id: barrelR, kind: chamber, fixed: 0, sections: [[0, 28], [3, 19.635]], volume: 201.81, water: 201.81, K: 2e+06,
       draw: {sections: [[[4.7, 0], [11.3, 0], [11.3, 3], [4.7, 3]], [[5.55, 3], [10.45, 3], [10.45, 17], [5.55, 17]]], y: [0, 4]}}   # the head and the barrel under the plunger
    - {id: riserR, kind: chamber, fixed: 0, sections: [[0, 11.2]], volume: 33.6, water: 33.6, K: 2e+06,
       draw: {sections: [[[11.7, 0], [14.5, 0], [14.5, 3], [11.7, 3]]], y: [0, 4]}}   # the pocket at the riser's foot
    - {id: troughR, kind: tank, area: 42, z: -3.4, level: 1.5, max: 3.9,
       draw: {section: [[17, -3.4], [24, -3.4], [24, 0.5], [17, 0.5]], y: [0.05, 6]}}
  links:
    - {id: spring, from: ground, to: well, area: 30, cd: 0.62, z: -14}
    - {id: suck, from: well, to: spipe, area: 9.6, cd: 0.8, z: -11.8, length: 15}   # up the suction pipe (its water drawn as the pocket's)
    - {id: inL, from: spipe, to: barrelL, area: 3, cd: 0.62, z: 1.5, zTo: 1.5, open: {joint: j_iL, q: [0, 0.5], frac: [0, 1]}}
    - {id: outL, from: barrelL, to: riserL, area: 3, cd: 0.62, z: 1.5, zTo: 1.5, open: {joint: j_oL, q: [0, 0.5], frac: [0, 1]}}
    - {id: upL, from: riserL, to: troughL, area: 4, cd: 0.9, z: 2.8, zTo: 22.8, check: true, length: 23,
       draw: {from: [-13.5, 0.6, 2.7], via: [[-13.5, 0.6, 22.8]], to: [-18.5, 0.6, 22.8], width: 1.7, flow: 0.06, fall: {dir: [-1, 0, 0], floor: -2.9}}}   # up the riser, out of the spout into the trough
    - {id: drainL, from: troughL, to: well, area: 0.33, cd: 0.62, z: -3.4, zTo: -14, length: 10.6, check: true}   # the trough's waste back down to the well
    - {id: inR, from: spipe, to: barrelR, area: 3, cd: 0.62, z: 1.5, zTo: 1.5, open: {joint: j_iR, q: [0, 0.5], frac: [0, 1]}}
    - {id: outR, from: barrelR, to: riserR, area: 3, cd: 0.62, z: 1.5, zTo: 1.5, open: {joint: j_oR, q: [0, 0.5], frac: [0, 1]}}
    - {id: upR, from: riserR, to: troughR, area: 4, cd: 0.9, z: 2.8, zTo: 22.8, check: true, length: 23,
       draw: {from: [13.5, 0.6, 2.7], via: [[13.5, 0.6, 22.8]], to: [18.5, 0.6, 22.8], width: 1.7, flow: 0.06, fall: {dir: [1, 0, 0], floor: -2.9}}}   # up the riser, out of the spout into the trough
    - {id: drainR, from: troughR, to: well, area: 0.33, cd: 0.62, z: -3.4, zTo: -14, length: 10.6, check: true}   # the trough's waste back down to the well
  pistons:
    - {node: barrelL, joint: j_pL, area: 19.635, sign: 1}
    - {node: barrelR, joint: j_pR, area: 19.635, sign: 1}
    - {node: spipe, joint: j_iL, area: 3, arm: 1.3, sign: 1, z: 1.5}
    - {node: barrelL, joint: j_iL, area: 3, arm: 1.3, sign: -1, z: 1.5}
    - {node: barrelL, joint: j_oL, area: 3, arm: 1.3, sign: 1, z: 1.5}
    - {node: riserL, joint: j_oL, area: 3, arm: 1.3, sign: -1, z: 1.5}
    - {node: spipe, joint: j_iR, area: 3, arm: 1.3, sign: 1, z: 1.5}
    - {node: barrelR, joint: j_iR, area: 3, arm: 1.3, sign: -1, z: 1.5}
    - {node: barrelR, joint: j_oR, area: 3, arm: 1.3, sign: 1, z: 1.5}
    - {node: riserR, joint: j_oR, area: 3, arm: 1.3, sign: -1, z: 1.5}
driver: {joint: j_b, kind: velocity, rpm: 0, swing: {amplitude: 0.2, hz: 0.5}, kv: 3000, max_torque: 40}
checks:
  - {type: amplitude, joint: j_pL, min: 0.0135, max: 0.0183, settle_s: 1.0, window_s: 12.5}
  - {type: amplitude, joint: j_pR, min: 0.0135, max: 0.0183, settle_s: 1.0, window_s: 12.5}
  - {type: amplitude, joint: j_iL, min: 0.05, max: 0.5, settle_s: 1.0, window_s: 12.5}
  - {type: amplitude, joint: j_oL, min: 0.05, max: 0.5, settle_s: 1.0, window_s: 12.5}
  - {type: amplitude, joint: j_iR, min: 0.05, max: 0.5, settle_s: 1.0, window_s: 12.5}
  - {type: amplitude, joint: j_oR, min: 0.05, max: 0.5, settle_s: 1.0, window_s: 12.5}
  - {type: penetration, max: 0.003}
camera: {target: [0, 0, 6], position: [0, -200, 9], fov: 18.5}
display:
  output: j_pR
  labels: {j_b: "Beam (driver)", j_pL: "Left plunger", j_pR: "Right plunger", j_rL: "Left rod", j_rR: "Right rod", j_iL: "Left suction flap", j_oL: "Left delivery flap", j_iR: "Right suction flap", j_oR: "Right delivery flap"}
