# No. 454 (Brown 1868): "Diaphragm forcing pump. A flexible diaphragm is employed instead of bellows, and valves are arranged same as in
# preceding."
# Model (cm, gravity on, Brown's view from in front, cut in section). The handle turns on the standard rising from the chamber's flange
# and is swung by hand at its grip (the only drive); its arm arches over to a rod hinged on the plate in the diaphragm's middle. The
# diaphragm is leather clamped under the flange; in section each side is a leaf hung from the rim and a leaf from the plate's edge,
# hinged at the crease, so the sheet hangs as a bowl and follows the plate. A poppet closes the suction hole in the chamber's floor; a
# clack hinged at its left edge lies on the delivery seat in the bulb up the riser. The water is lumped vessels (src/fluid/vessels.c):
# the chamber under the diaphragm is a closed chamber the plate sweeps with the diaphragm's effective area (35.2565 cm^2: its plate
# and half its leather); the duct and riser up to the clack, the delivery pipe over it, and the suction pipe from the well are full.
# The delivery pipe delivers 60 cm up, out of the picture, with inertia. Both valves move only by their weight and the pressures
# on their faces.
# Generator: opencode-runs/water/gen454.py.
number: 454
slug: diaphragm-forcing-pump
name: Diaphragm forcing pump
brown: "Diaphragm forcing pump. A flexible diaphragm is employed instead of bellows, and valves are arranged same as in preceding."
units: cm
sim:
  timestep: 0.0001
  integrator: implicitfast
  iterations: 60
  duration_s: 12
  floor: false
bodies:
  - id: handle
    shape: part
    pos: [-11, 0, 21.5]
    mass: 0.2
    color: "#5f5a52"
    pieces:
      - {kind: loft, a: [[-10.8069, -0.4, 21.0935], [-14.8069, -0.4, 19.1935], [-15.1931, -0.4, 20.0065], [-11.1931, -0.4, 21.9065]], b: [[-10.8069, -1.4, 21.0935], [-14.8069, -1.4, 19.1935], [-15.1931, -1.4, 20.0065], [-11.1931, -1.4, 21.9065]], collide: 0, color: "#5f5a52"}
      - {kind: loft, a: [[-14.8032, -0.4, 19.3106], [-22.3032, -0.4, 14.2106], [-22.6968, -0.4, 14.7894], [-15.1968, -0.4, 19.8894]], b: [[-14.8032, -1.4, 19.3106], [-22.3032, -1.4, 14.2106], [-22.6968, -1.4, 14.7894], [-15.1968, -1.4, 19.8894]], collide: 0, color: "#5f5a52"}
      - {kind: loft, a: [[-11.1964, -0.4, 21.8485], [-5.6964, -0.4, 24.9485], [-5.3036, -0.4, 24.2515], [-10.8036, -0.4, 21.1515]], b: [[-11.1964, -1.4, 21.8485], [-5.6964, -1.4, 24.9485], [-5.3036, -1.4, 24.2515], [-10.8036, -1.4, 21.1515]], collide: 0, color: "#5f5a52"}
      - {kind: loft, a: [[-5.3573, -0.4, 24.9737], [0.1427, -0.4, 22.8737], [-0.1427, -0.4, 22.1263], [-5.6427, -0.4, 24.2263]], b: [[-5.3573, -1.4, 24.9737], [0.1427, -1.4, 22.8737], [-0.1427, -1.4, 22.1263], [-5.6427, -1.4, 24.2263]], collide: 0, color: "#5f5a52"}
      - {kind: rod, from: [0, -1.5, 22.5], to: [0, -0.3, 22.5], radius: 0.45, collide: 0, color: "#b9ae98"}
  - id: plate
    shape: part
    pos: [0, 0, 5.5]
    mass: 0.05
    color: "#5f5a52"
    pieces:
      - {kind: loft, a: [[1.5, 0, 6.1], [1.4266, 0.4635, 6.1], [1.2135, 0.8817, 6.1], [0.8817, 1.2135, 6.1], [0.4635, 1.4266, 6.1], [0, 1.5, 6.1], [-0.4635, 1.4266, 6.1], [-0.8817, 1.2135, 6.1], [-1.2135, 0.8817, 6.1], [-1.4266, 0.4635, 6.1], [-1.5, 0, 6.1], [-1.4266, -0.4635, 6.1], [-1.2135, -0.8817, 6.1], [-0.8817, -1.2135, 6.1], [-0.4635, -1.4266, 6.1], [-0, -1.5, 6.1], [0.4635, -1.4266, 6.1], [0.8817, -1.2135, 6.1], [1.2135, -0.8817, 6.1], [1.4266, -0.4635, 6.1]], b: [[1.5, 0, 5.5], [1.4266, 0.4635, 5.5], [1.2135, 0.8817, 5.5], [0.8817, 1.2135, 5.5], [0.4635, 1.4266, 5.5], [0, 1.5, 5.5], [-0.4635, 1.4266, 5.5], [-0.8817, 1.2135, 5.5], [-1.2135, 0.8817, 5.5], [-1.4266, 0.4635, 5.5], [-1.5, 0, 5.5], [-1.4266, -0.4635, 5.5], [-1.2135, -0.8817, 5.5], [-0.8817, -1.2135, 5.5], [-0.4635, -1.4266, 5.5], [-0, -1.5, 5.5], [0.4635, -1.4266, 5.5], [0.8817, -1.2135, 5.5], [1.2135, -0.8817, 5.5], [1.4266, -0.4635, 5.5]], collide: 0, color: "#5f5a52"}
      - {kind: loft, a: [[0.7, 0, 5.5], [0.6657, 0.2163, 5.5], [0.5663, 0.4114, 5.5], [0.4114, 0.5663, 5.5], [0.2163, 0.6657, 5.5], [0, 0.7, 5.5], [-0.2163, 0.6657, 5.5], [-0.4114, 0.5663, 5.5], [-0.5663, 0.4114, 5.5], [-0.6657, 0.2163, 5.5], [-0.7, 0, 5.5], [-0.6657, -0.2163, 5.5], [-0.5663, -0.4114, 5.5], [-0.4114, -0.5663, 5.5], [-0.2163, -0.6657, 5.5], [-0, -0.7, 5.5], [0.2163, -0.6657, 5.5], [0.4114, -0.5663, 5.5], [0.5663, -0.4114, 5.5], [0.6657, -0.2163, 5.5]], b: [[0.7, 0, 4.8], [0.6657, 0.2163, 4.8], [0.5663, 0.4114, 4.8], [0.4114, 0.5663, 4.8], [0.2163, 0.6657, 4.8], [0, 0.7, 4.8], [-0.2163, 0.6657, 4.8], [-0.4114, 0.5663, 4.8], [-0.5663, 0.4114, 4.8], [-0.6657, 0.2163, 4.8], [-0.7, 0, 4.8], [-0.6657, -0.2163, 4.8], [-0.5663, -0.4114, 4.8], [-0.4114, -0.5663, 4.8], [-0.2163, -0.6657, 4.8], [-0, -0.7, 4.8], [0.2163, -0.6657, 4.8], [0.4114, -0.5663, 4.8], [0.5663, -0.4114, 4.8], [0.6657, -0.2163, 4.8]], collide: 0, color: "#5f5a52"}
  - id: rod
    shape: part
    mount: plate
    pos: [0, 0, 6.1]
    mass: 0.02
    color: "#6d675c"
    pieces:
      - {kind: rod, from: [0, -0.9, 6.1], to: [0, -0.9, 22.5], radius: 0.3, collide: 0, color: "#6d675c"}
  - id: dflo
    shape: part
    pos: [-5.2, 0, 9.6]
    mass: 0.001
    color: "#6b4a2e"
    pieces:
      - {kind: loft, a: [[-5.0501, 3.4, 9.6041], [-4.9377, 3.4, 5.5057], [-5.2376, 3.4, 5.4974], [-5.3499, 3.4, 9.5959]], b: [[-5.0501, -0.4, 9.6041], [-4.9377, -0.4, 5.5057], [-5.2376, -0.4, 5.4974], [-5.3499, -0.4, 9.5959]], collide: 0, color: "#6b4a2e"}
  - id: dfli
    shape: part
    mount: plate
    pos: [-1.5, 0, 5.8]
    mass: 0.001
    color: "#6b4a2e"
    pieces:
      - {kind: loft, a: [[-1.4876, 3.4, 5.6505], [-5.0752, 3.4, 5.3521], [-5.1, 3.4, 5.651], [-1.5124, 3.4, 5.9495]], b: [[-1.4876, -0.4, 5.6505], [-5.0752, -0.4, 5.3521], [-5.1, -0.4, 5.651], [-1.5124, -0.4, 5.9495]], collide: 0, color: "#6b4a2e"}
  - id: dfro
    shape: part
    pos: [5.2, 0, 9.6]
    mass: 0.001
    color: "#6b4a2e"
    pieces:
      - {kind: loft, a: [[5.3499, 3.4, 9.5959], [5.2376, 3.4, 5.4974], [4.9377, 3.4, 5.5057], [5.0501, 3.4, 9.6041]], b: [[5.3499, -0.4, 9.5959], [5.2376, -0.4, 5.4974], [4.9377, -0.4, 5.5057], [5.0501, -0.4, 9.6041]], collide: 0, color: "#6b4a2e"}
  - id: dfri
    shape: part
    mount: plate
    pos: [1.5, 0, 5.8]
    mass: 0.001
    color: "#6b4a2e"
    pieces:
      - {kind: loft, a: [[1.5124, 3.4, 5.9495], [5.1, 3.4, 5.651], [5.0752, 3.4, 5.3521], [1.4876, 3.4, 5.6505]], b: [[1.5124, -0.4, 5.9495], [5.1, -0.4, 5.651], [5.0752, -0.4, 5.3521], [1.4876, -0.4, 5.6505]], collide: 0, color: "#6b4a2e"}
  - id: sv
    shape: part
    pos: [1, 0, 0]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[2.7, 0, 0.3], [2.6168, 0.5253, 0.3], [2.3753, 0.9992, 0.3], [1.9992, 1.3753, 0.3], [1.5253, 1.6168, 0.3], [1, 1.7, 0.3], [0.4747, 1.6168, 0.3], [0.0008, 1.3753, 0.3], [-0.3753, 0.9992, 0.3], [-0.6168, 0.5253, 0.3], [-0.7, 0, 0.3], [-0.6168, -0.5253, 0.3], [-0.3753, -0.9992, 0.3], [0.0008, -1.3753, 0.3], [0.4747, -1.6168, 0.3], [1, -1.7, 0.3], [1.5253, -1.6168, 0.3], [1.9992, -1.3753, 0.3], [2.3753, -0.9992, 0.3], [2.6168, -0.5253, 0.3]], b: [[2.7, 0, 0], [2.6168, 0.5253, 0], [2.3753, 0.9992, 0], [1.9992, 1.3753, 0], [1.5253, 1.6168, 0], [1, 1.7, 0], [0.4747, 1.6168, 0], [0.0008, 1.3753, 0], [-0.3753, 0.9992, 0], [-0.6168, 0.5253, 0], [-0.7, 0, 0], [-0.6168, -0.5253, 0], [-0.3753, -0.9992, 0], [0.0008, -1.3753, 0], [0.4747, -1.6168, 0], [1, -1.7, 0], [1.5253, -1.6168, 0], [1.9992, -1.3753, 0], [2.3753, -0.9992, 0], [2.6168, -0.5253, 0]], collide: 0, color: "#e0a030"}
      - {kind: loft, a: [[1.3, 0, 1], [1.2598, 0.15, 1], [1.15, 0.2598, 1], [1, 0.3, 1], [0.85, 0.2598, 1], [0.7402, 0.15, 1], [0.7, 0, 1], [0.7402, -0.15, 1], [0.85, -0.2598, 1], [1, -0.3, 1], [1.15, -0.2598, 1], [1.2598, -0.15, 1]], b: [[2.5, 0, 0.3], [2.299, 0.75, 0.3], [1.75, 1.299, 0.3], [1, 1.5, 0.3], [0.25, 1.299, 0.3], [-0.299, 0.75, 0.3], [-0.5, 0, 0.3], [-0.299, -0.75, 0.3], [0.25, -1.299, 0.3], [1, -1.5, 0.3], [1.75, -1.299, 0.3], [2.299, -0.75, 0.3]], collide: 0, color: "#e0a030"}
  - id: clack
    shape: part
    pos: [13.7, 0, 10.2]
    mass: 0.006
    color: "#e0a030"
    pieces:
      - {kind: loft, a: [[13.7, -0.3, 10.4], [18, -0.3, 10.4], [18, 2.6, 10.4], [13.7, 2.6, 10.4]], b: [[13.7, -0.3, 10], [18, -0.3, 10], [18, 2.6, 10], [13.7, 2.6, 10]], collide: 0, color: "#c8781e"}
      - {kind: rod, from: [13.7, -0.4, 10.2], to: [13.7, 2.8, 10.2], radius: 0.2, collide: 0}
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    color: "#d6cdb8"
    pieces:
      - {kind: loft, a: [[-7.8, 0, 0], [18.8, 0, 0], [18.8, 4, 0], [-7.8, 4, 0]], b: [[-7.8, 0, -0.8], [18.8, 0, -0.8], [18.8, 4, -0.8], [-7.8, 4, -0.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-7.8, 0, 10.8], [-7, 0, 10.8], [-7, 4, 10.8], [-7.8, 4, 10.8]], b: [[-7.8, 0, 0], [-7, 0, 0], [-7, 4, 0], [-7.8, 4, 0]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[6.5, 0, 10.8], [7.3, 0, 10.8], [7.3, 4, 10.8], [6.5, 4, 10.8]], b: [[6.5, 0, 3], [7.3, 0, 3], [7.3, 4, 3], [6.5, 4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-8.4, 0, 10.8], [-5.2, 0, 10.8], [-5.2, 4, 10.8], [-8.4, 4, 10.8]], b: [[-8.4, 0, 9.6], [-5.2, 0, 9.6], [-5.2, 4, 9.6], [-8.4, 4, 9.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[5.2, 0, 10.8], [7.9, 0, 10.8], [7.9, 4, 10.8], [5.2, 4, 10.8]], b: [[5.2, 0, 9.6], [7.9, 0, 9.6], [7.9, 4, 9.6], [5.2, 4, 9.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[7.3, 0, 3.8], [14, 0, 3.8], [14, 4, 3.8], [7.3, 4, 3.8]], b: [[7.3, 0, 3], [14, 0, 3], [14, 4, 3], [7.3, 4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[13.2, 0, 9], [14, 0, 9], [14, 4, 9], [13.2, 4, 9]], b: [[13.2, 0, 3.8], [14, 0, 3.8], [14, 4, 3.8], [13.2, 4, 3.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[18, 0, 9], [18.8, 0, 9], [18.8, 4, 9], [18, 4, 9]], b: [[18, 0, 0], [18.8, 0, 0], [18.8, 4, 0], [18, 4, 0]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[11.4, 0, 14], [12.2, 0, 14], [12.2, 4, 14], [11.4, 4, 14]], b: [[11.4, 0, 9.4], [12.2, 0, 9.4], [12.2, 4, 9.4], [11.4, 4, 9.4]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[19.8, 0, 14], [20.6, 0, 14], [20.6, 4, 14], [19.8, 4, 14]], b: [[19.8, 0, 9.4], [20.6, 0, 9.4], [20.6, 4, 9.4], [19.8, 4, 9.4]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[11.4, 0, 9.4], [14, 0, 9.4], [14, 4, 9.4], [11.4, 4, 9.4]], b: [[11.4, 0, 8.6], [14, 0, 8.6], [14, 4, 8.6], [11.4, 4, 8.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[18, 0, 9.4], [20.6, 0, 9.4], [20.6, 4, 9.4], [18, 4, 9.4]], b: [[18, 0, 8.6], [20.6, 0, 8.6], [20.6, 4, 8.6], [18, 4, 8.6]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[11.4, 0, 14.8], [14, 0, 14.8], [14, 4, 14.8], [11.4, 4, 14.8]], b: [[11.4, 0, 14], [14, 0, 14], [14, 4, 14], [11.4, 4, 14]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[18, 0, 14.8], [20.6, 0, 14.8], [20.6, 4, 14.8], [18, 4, 14.8]], b: [[18, 0, 14], [20.6, 0, 14], [20.6, 4, 14], [18, 4, 14]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[13.2, 0, 24], [14, 0, 24], [14, 4, 24], [13.2, 4, 24]], b: [[13.2, 0, 14.8], [14, 0, 14.8], [14, 4, 14.8], [13.2, 4, 14.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[18, 0, 24], [18.8, 0, 24], [18.8, 4, 24], [18, 4, 24]], b: [[18, 0, 14.8], [18.8, 0, 14.8], [18.8, 4, 14.8], [18, 4, 14.8]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-7, 3.6, 3], [18, 3.6, 3], [18, 4, 3], [-7, 4, 3]], b: [[-7, 3.6, 0], [18, 3.6, 0], [18, 4, 0], [-7, 4, 0]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-7, 3.6, 9.6], [6.5, 3.6, 9.6], [6.5, 4, 9.6], [-7, 4, 9.6]], b: [[-7, 3.6, 3], [6.5, 3.6, 3], [6.5, 4, 3], [-7, 4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[14, 3.6, 24], [18, 3.6, 24], [18, 4, 24], [14, 4, 24]], b: [[14, 3.6, 3], [18, 3.6, 3], [18, 4, 3], [14, 4, 3]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[12.2, 3.6, 14], [19.8, 3.6, 14], [19.8, 4, 14], [12.2, 4, 14]], b: [[12.2, 3.6, 9.4], [19.8, 3.6, 9.4], [19.8, 4, 9.4], [12.2, 4, 9.4]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-2, 0, -0.8], [-1.2, 0, -0.8], [-1.2, 4, -0.8], [-2, 4, -0.8]], b: [[-2, 0, -9], [-1.2, 0, -9], [-1.2, 4, -9], [-2, 4, -9]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[1.2, 0, -0.8], [2, 0, -0.8], [2, 4, -0.8], [1.2, 4, -0.8]], b: [[1.2, 0, -9], [2, 0, -9], [2, 4, -9], [1.2, 4, -9]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-1.2, 3.6, 0], [1.2, 3.6, 0], [1.2, 4, 0], [-1.2, 4, 0]], b: [[-1.2, 3.6, -9], [1.2, 3.6, -9], [1.2, 4, -9], [-1.2, 4, -9]], collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-8.0779, 1.4, 10.653], [-9.6779, 1.4, 15.853], [-8.7221, 1.4, 16.147], [-7.1221, 1.4, 10.947]], b: [[-8.0779, 0.2, 10.653], [-9.6779, 0.2, 15.853], [-8.7221, 0.2, 16.147], [-7.1221, 0.2, 10.947]], collide: 0, color: "#5f5a52"}
      - {kind: loft, a: [[-9.6752, 1.4, 15.8445], [-11.4752, 1.4, 21.3445], [-10.5248, 1.4, 21.6555], [-8.7248, 1.4, 16.1555]], b: [[-9.6752, 0.2, 15.8445], [-11.4752, 0.2, 21.3445], [-10.5248, 0.2, 21.6555], [-8.7248, 0.2, 16.1555]], collide: 0, color: "#5f5a52"}
      - {kind: rod, from: [-11, -1, 21.5], to: [-11, 1.4, 21.5], radius: 0.4, collide: 0, color: "#b9ae98"}
      - {kind: loft, a: [[-6.6, 0, -11], [6.6, 0, -11], [6.6, 6.6, -11], [-6.6, 6.6, -11]], b: [[-6.6, 0, -11.6], [6.6, 0, -11.6], [6.6, 6.6, -11.6], [-6.6, 6.6, -11.6]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-6.6, 6, -6], [6.6, 6, -6], [6.6, 6.6, -6], [-6.6, 6.6, -6]], b: [[-6.6, 6, -11], [6.6, 6, -11], [6.6, 6.6, -11], [-6.6, 6.6, -11]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-6.6, 0, -6], [-6, 0, -6], [-6, 6, -6], [-6.6, 6, -6]], b: [[-6.6, 0, -11], [-6, 0, -11], [-6, 6, -11], [-6.6, 6, -11]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[6, 0, -6], [6.6, 0, -6], [6.6, 6, -6], [6, 6, -6]], b: [[6, 0, -11], [6.6, 0, -11], [6.6, 6, -11], [6, 6, -11]], collide: 0, color: "#9c9282"}
      - {kind: loft, a: [[-24, 0, -6], [-6.6, 0, -6], [-6.6, 8, -6], [-24, 8, -6]], b: [[-24, 0, -7.2], [-6.6, 0, -7.2], [-6.6, 8, -7.2], [-24, 8, -7.2]], collide: 0, color: "#8b7d66"}
      - {kind: loft, a: [[6.6, 0, -6], [24, 0, -6], [24, 8, -6], [6.6, 8, -6]], b: [[6.6, 0, -7.2], [24, 0, -7.2], [24, 8, -7.2], [6.6, 8, -7.2]], collide: 0, color: "#8b7d66"}
joints:
  - {id: j_h, type: hinge, body: handle, axis: [0, 1, 0], range: [-0.5, 0.5], damping: 0.01}   # the handle on its fulcrum (the hand's); + lowers the rod
  - {id: j_p, type: slide, body: plate, axis: [0, 0, 1], range: [-4.5, 2.6], damping: 0.05}   # the diaphragm's middle, its plate
  - {id: j_r, type: hinge, body: rod, axis: [0, 1, 0], damping: 0.0005}
  - {id: j_dflo, type: hinge, body: dflo, axis: [0, 1, 0], damping: 0.00005}
  - {id: j_dfli, type: hinge, body: dfli, axis: [0, 1, 0], damping: 0.00005}
  - {id: j_dfro, type: hinge, body: dfro, axis: [0, 1, 0], damping: 0.00005}
  - {id: j_dfri, type: hinge, body: dfri, axis: [0, 1, 0], damping: 0.00005}
  - {id: j_sv, type: slide, body: sv, axis: [0, 0, 1], range: [0, 0.9], damping: 0.0005}   # 0: on its seat
  - {id: j_cv, type: hinge, body: clack, axis: [0, -1, 0], range: [0, 0.9], damping: 0.00002}   # 0: lying shut on its seat, + lifts
pins:
  - {id: p_R, a: handle, b: rod, at: [0, 0, 22.5]}
  - {id: p_dfl, a: dflo, b: dfli, at: [-5.0876, 0, 5.5015]}
  - {id: p_dfr, a: dfro, b: dfri, at: [5.0876, 0, 5.5015]}
vessels:
  substeps: 4
  nodes:
    - {id: ground, kind: source, p: 343.35}
    - {id: well, kind: tank, area: 72, z: -11, level: 3.5,
       draw: {section: [[-6, -11], [6, -11], [6, -6], [-6, -6]], y: [0.05, 6]}}
    - {id: spipe, kind: chamber, fixed: -9, sections: [[-9, 9.6]], volume: 86.4, water: 86.4, K: 2e+06,
       draw: {sections: [[[-1.2, -9], [1.2, -9], [1.2, 0], [-1.2, 0]]], y: [0, 2.4]}}   # the suction pipe, primed
    - {id: ch, kind: chamber, fixed: 0, sections: [[0, 54], [2.5, 35.2565]], volume: 240.77, water: 240.77, K: 2e+06,
       draw: {sections: [[[-7, 0], [6.5, 0], [6.5, 99], [-7, 99]]], y: [0, 2.4]}}   # the chamber under the diaphragm (its top drawn at the plate)
    - {id: duct, kind: chamber, fixed: 0, sections: [[0, 30], [3, 16], [10, 40]], volume: 242, water: 242, K: 2e+06,
       draw: {sections: [[[6.5, 0], [18, 0], [18, 3], [6.5, 3]], [[14, 3], [18, 3], [18, 10], [14, 10]]], y: [0, 2.4]}}   # the duct and the riser up to the clack (its last cm, 40 cm^2 over the seat, is the riser's give: the clack's sweep moves its top under half a cm there, unseen)
    - {id: up, kind: chamber, fixed: 10, sections: [[10, 9.6], [24, 40]], volume: 174.4, water: 174.4, K: 2e+06,
       draw: {sections: [[[12.2, 10], [19.8, 10], [19.8, 14], [12.2, 14]], [[14, 14], [18, 14], [18, 24], [14, 24]]], y: [0, 2.4]}}   # the bulb over the clack and the delivery pipe (likewise 40 cm^2 over its top)
    - {id: air, kind: source, p: 0}
  links:
    - {id: spring, from: ground, to: well, area: 30, cd: 0.62, z: -11}
    - {id: suck, from: well, to: spipe, area: 9.6, cd: 0.8, z: -8.8, length: 9}   # up the suction pipe (drawn full by spipe; its stream is not drawn: water-hammer ringing keeps it a hair either side of zero between strokes)
    - {id: sv, from: spipe, to: ch, area: 4.5239, cd: 0.62, z: 99, zTo: -99, open: {joint: j_sv, q: [0, 0.6], frac: [0, 1]}}
    - {id: foot, from: ch, to: duct, area: 7.2, cd: 0.9, z: 1.0, zTo: 1.0}   # the chamber's foot open into the duct
    - {id: cv, from: duct, to: up, area: 9.6, cd: 0.62, z: 10, zTo: 10, open: {joint: j_cv, q: [0, 0.4], frac: [0, 1]}}
    - {id: deliver, from: up, to: air, area: 1, cd: 0.9, z: 10.5, zTo: 60, check: true, length: 60,
       draw: {from: [16, 0.6, 10.6], to: [16, 0.6, 24], width: 3.7, flow: 0.2}}   # up the delivery pipe and on out of the picture
  pistons:
    - {node: ch, joint: j_p, area: 35.2565, sign: 1}
    - {node: spipe, joint: j_sv, area: 4.5239, sign: 1}
    - {node: ch, joint: j_sv, area: 4.5239, sign: -1, z: 0}
    - {node: duct, joint: j_cv, area: 9.6, arm: 2.15, sign: 1, z: 10}
    - {node: up, joint: j_cv, area: 9.6, arm: 2.15, sign: -1, z: 10}
driver: {joint: j_h, kind: velocity, rpm: 0, swing: {amplitude: 0.14, hz: 0.27}, kv: 3000, max_torque: 60}
checks:
  - {type: amplitude, joint: j_h, min: 0.119, max: 0.161, settle_s: 1.0, window_s: 10.5}
  - {type: amplitude, joint: j_p, min: 0.01, max: 0.02, settle_s: 1.0, window_s: 10.5}
  - {type: amplitude, joint: j_sv, min: 0.001, max: 0.009, settle_s: 1.0, window_s: 10.5}
  - {type: amplitude, joint: j_cv, min: 0.05, max: 0.5, settle_s: 1.0, window_s: 10.5}
  - {type: penetration, max: 0.003}
camera: {target: [-1, 0, 3.5], position: [-1, -200, 6.5], fov: 12.8}
display:
  output: j_p
  labels: {j_h: "Handle (driver)", j_p: "Diaphragm", j_r: "Rod", j_sv: "Suction valve", j_cv: "Delivery valve"}
