{
 "about": {
  "date": "2026-10-24",
  "python": "3.12.14",
  "oracle": "Python decimal at 40 significant digits: the feed's pieces, their exact integrals, the Vmax and tEnd stops, the pump sheet and the design rate, restated from the feed's statement",
  "method": {
   "id": "feed-law"
  },
  "ruling": "docs/board/memos/2026-10-24-cso-bioreactor-stage.md, addition A2",
  "generator": "pipeline/bioreactor-simulator/reference-feed.py",
  "generatorSha256": "50cccacb9dc0a407b443be0338aa9cac4aecdc5fd35514f36ff5909b3b6e6741",
  "tolerance": {
   "relative": 1e-12,
   "absoluteFloor": 1e-15,
   "timeRelativeToFeedLength": 1e-12
  },
  "decimalPrecision": 40
 },
 "feeds": [
  {
   "id": "constant",
   "description": "A constant 0.05 L/h from 4 h to tEnd 20 h, asked to 24 h, rows every 2 h.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": 20,
    "Vmax": null,
    "cap": null
   },
   "until": 24,
   "step": 2,
   "expected": {
    "pieces": [
     {
      "from": 4.0,
      "to": 20.0,
      "F": 0.05,
      "mu": 0.0
     }
    ],
    "stopsAt": 20.0,
    "stopsAtDigits": "20",
    "stopReason": "tEnd",
    "feedLengthHours": 16.0,
    "probes": [
     {
      "t": 3,
      "rate": 0.0,
      "fedVolume": 0.0
     },
     {
      "t": 4,
      "rate": 0.05,
      "fedVolume": 0.0
     },
     {
      "t": 9.5,
      "rate": 0.05,
      "fedVolume": 0.275
     },
     {
      "t": 19.999,
      "rate": 0.05,
      "fedVolume": 0.79995
     },
     {
      "t": 20,
      "rate": 0.0,
      "fedVolume": 0.8
     },
     {
      "t": 23,
      "rate": 0.0,
      "fedVolume": 0.8
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 4.0,
       "fromStart": 0.0,
       "rate": 0.05,
       "fedSoFar": 0.0
      },
      {
       "t": 6.0,
       "fromStart": 2.0,
       "rate": 0.05,
       "fedSoFar": 0.1
      },
      {
       "t": 8.0,
       "fromStart": 4.0,
       "rate": 0.05,
       "fedSoFar": 0.2
      },
      {
       "t": 10.0,
       "fromStart": 6.0,
       "rate": 0.05,
       "fedSoFar": 0.3
      },
      {
       "t": 12.0,
       "fromStart": 8.0,
       "rate": 0.05,
       "fedSoFar": 0.4
      },
      {
       "t": 14.0,
       "fromStart": 10.0,
       "rate": 0.05,
       "fedSoFar": 0.5
      },
      {
       "t": 16.0,
       "fromStart": 12.0,
       "rate": 0.05,
       "fedSoFar": 0.6
      },
      {
       "t": 18.0,
       "fromStart": 14.0,
       "rate": 0.05,
       "fedSoFar": 0.7
      },
      {
       "t": 20.0,
       "fromStart": 16.0,
       "rate": 0.0,
       "fedSoFar": 0.8
      }
     ],
     "total": 0.8,
     "totalDigits": "0.80"
    }
   }
  },
  {
   "id": "constant-vmax",
   "description": "As constant with Vmax 5.6 L: the vessel fills at 16 h, before tEnd; rows every 2.5 h.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": 20,
    "Vmax": 5.6,
    "cap": null
   },
   "until": 24,
   "step": 2.5,
   "expected": {
    "pieces": [
     {
      "from": 4.0,
      "to": 16.0,
      "F": 0.05,
      "mu": 0.0
     }
    ],
    "stopsAt": 16.0,
    "stopsAtDigits": "16",
    "stopReason": "Vmax",
    "feedLengthHours": 12.0,
    "probes": [
     {
      "t": 10,
      "rate": 0.05,
      "fedVolume": 0.3
     },
     {
      "t": 15.9,
      "rate": 0.05,
      "fedVolume": 0.595
     },
     {
      "t": 16,
      "rate": 0.0,
      "fedVolume": 0.6
     },
     {
      "t": 17,
      "rate": 0.0,
      "fedVolume": 0.6
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 4.0,
       "fromStart": 0.0,
       "rate": 0.05,
       "fedSoFar": 0.0
      },
      {
       "t": 6.5,
       "fromStart": 2.5,
       "rate": 0.05,
       "fedSoFar": 0.125
      },
      {
       "t": 9.0,
       "fromStart": 5.0,
       "rate": 0.05,
       "fedSoFar": 0.25
      },
      {
       "t": 11.5,
       "fromStart": 7.5,
       "rate": 0.05,
       "fedSoFar": 0.375
      },
      {
       "t": 14.0,
       "fromStart": 10.0,
       "rate": 0.05,
       "fedSoFar": 0.5
      },
      {
       "t": 16.0,
       "fromStart": 12.0,
       "rate": 0.0,
       "fedSoFar": 0.6
      }
     ],
     "total": 0.6,
     "totalDigits": "0.60"
    }
   }
  },
  {
   "id": "constant-horizon",
   "description": "A constant 0.03 L/h from 2 h with no stop, asked only to 9 h: the pieces end at the horizon and no stop is reported; rows every 0.75 h.",
   "feed": {
    "law": "constant",
    "start": 2,
    "V0": 3,
    "F": 0.03,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": null,
    "Vmax": null,
    "cap": null
   },
   "until": 9,
   "step": 0.75,
   "expected": {
    "pieces": [
     {
      "from": 2.0,
      "to": 9.0,
      "F": 0.03,
      "mu": 0.0
     }
    ],
    "stopsAt": null,
    "stopsAtDigits": null,
    "stopReason": null,
    "feedLengthHours": 7.0,
    "probes": [
     {
      "t": 2,
      "rate": 0.03,
      "fedVolume": 0.0
     },
     {
      "t": 5,
      "rate": 0.03,
      "fedVolume": 0.09
     },
     {
      "t": 8.99,
      "rate": 0.03,
      "fedVolume": 0.2097
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 2.0,
       "fromStart": 0.0,
       "rate": 0.03,
       "fedSoFar": 0.0
      },
      {
       "t": 2.75,
       "fromStart": 0.75,
       "rate": 0.03,
       "fedSoFar": 0.0225
      },
      {
       "t": 3.5,
       "fromStart": 1.5,
       "rate": 0.03,
       "fedSoFar": 0.045
      },
      {
       "t": 4.25,
       "fromStart": 2.25,
       "rate": 0.03,
       "fedSoFar": 0.0675
      },
      {
       "t": 5.0,
       "fromStart": 3.0,
       "rate": 0.03,
       "fedSoFar": 0.09
      },
      {
       "t": 5.75,
       "fromStart": 3.75,
       "rate": 0.03,
       "fedSoFar": 0.1125
      },
      {
       "t": 6.5,
       "fromStart": 4.5,
       "rate": 0.03,
       "fedSoFar": 0.135
      },
      {
       "t": 7.25,
       "fromStart": 5.25,
       "rate": 0.03,
       "fedSoFar": 0.1575
      },
      {
       "t": 8.0,
       "fromStart": 6.0,
       "rate": 0.03,
       "fedSoFar": 0.18
      },
      {
       "t": 8.75,
       "fromStart": 6.75,
       "rate": 0.03,
       "fedSoFar": 0.2025
      },
      {
       "t": 9.0,
       "fromStart": 7.0,
       "rate": 0.0,
       "fedSoFar": 0.21
      }
     ],
     "total": 0.21,
     "totalDigits": "0.21"
    }
   }
  },
  {
   "id": "exponential",
   "description": "Exponential from F0 0.012 L/h at 0.15 per hour from 6 h to tEnd 24 h, asked to 30 h; rows every hour.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": null,
    "tEnd": 24,
    "Vmax": null,
    "cap": null
   },
   "until": 30,
   "step": 1,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 24.0,
      "F": 0.012,
      "mu": 0.15
     }
    ],
    "stopsAt": 24.0,
    "stopsAtDigits": "24",
    "stopReason": "tEnd",
    "feedLengthHours": 18.0,
    "probes": [
     {
      "t": 6,
      "rate": 0.012,
      "fedVolume": 0.0
     },
     {
      "t": 12.3,
      "rate": 0.030873760543059913,
      "fedVolume": 0.12582507028706608
     },
     {
      "t": 23.99,
      "rate": 0.17828914630340406,
      "fedVolume": 1.1085943086893604
     },
     {
      "t": 24,
      "rate": 0.0,
      "fedVolume": 1.1103785379898268
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.012946739418262649,
       "fedSoFar": 0.0
      },
      {
       "t": 7.0,
       "fromStart": 1.0,
       "rate": 0.0150419651878176,
       "fedSoFar": 0.012946739418262649
      },
      {
       "t": 8.0,
       "fromStart": 2.0,
       "rate": 0.017476270233133258,
       "fedSoFar": 0.027988704606080248
      },
      {
       "t": 9.0,
       "fromStart": 3.0,
       "rate": 0.020304529192027212,
       "fedSoFar": 0.0454649748392135
      },
      {
       "t": 10.0,
       "fromStart": 4.0,
       "rate": 0.023590497297773256,
       "fedSoFar": 0.06576950403124072
      },
      {
       "t": 11.0,
       "fromStart": 5.0,
       "rate": 0.027408247563541998,
       "fedSoFar": 0.08936000132901398
      },
      {
       "t": 12.0,
       "fromStart": 6.0,
       "rate": 0.03184384055249713,
       "fedSoFar": 0.11676824889255598
      },
      {
       "t": 13.0,
       "fromStart": 7.0,
       "rate": 0.03699726437387069,
       "fedSoFar": 0.1486120894450531
      },
      {
       "t": 14.0,
       "fromStart": 8.0,
       "rate": 0.04298468863683415,
       "fedSoFar": 0.1856093538189238
      },
      {
       "t": 15.0,
       "fromStart": 9.0,
       "rate": 0.04994108317128724,
       "fedSoFar": 0.22859404245575796
      },
      {
       "t": 16.0,
       "fromStart": 10.0,
       "rate": 0.05802326054734271,
       "fedSoFar": 0.2785351256270452
      },
      {
       "t": 17.0,
       "fromStart": 11.0,
       "rate": 0.06741341097864778,
       "fedSoFar": 0.3365583861743879
      },
      {
       "t": 18.0,
       "fromStart": 12.0,
       "rate": 0.07832320929410778,
       "fedSoFar": 0.40397179715303566
      },
      {
       "t": 19.0,
       "fromStart": 13.0,
       "rate": 0.09099858655826853,
       "fedSoFar": 0.48229500644714346
      },
      {
       "t": 20.0,
       "fromStart": 14.0,
       "rate": 0.10572527390327005,
       "fedSoFar": 0.573293593005412
      },
      {
       "t": 21.0,
       "fromStart": 15.0,
       "rate": 0.12283524354264608,
       "fedSoFar": 0.6790188669086821
      },
      {
       "t": 22.0,
       "fromStart": 16.0,
       "rate": 0.14271419216171444,
       "fedSoFar": 0.8018541104513282
      },
      {
       "t": 23.0,
       "fromStart": 17.0,
       "rate": 0.16581023537678416,
       "fedSoFar": 0.9445683026130426
      },
      {
       "t": 24.0,
       "fromStart": 18.0,
       "rate": 0.0,
       "fedSoFar": 1.1103785379898268
      }
     ],
     "total": 1.1103785379898268,
     "totalDigits": "1.110378537989826728949519441557471662455"
    }
   }
  },
  {
   "id": "exponential-pump-limit",
   "description": "As exponential with Fmax 0.08 L/h: the limit is reached at 6 + ln(0.08/0.012)/0.15 h, then held; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.08,
    "tEnd": 30,
    "Vmax": null,
    "cap": null
   },
   "until": 30,
   "step": 2,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 18.647466565905876,
      "F": 0.012,
      "mu": 0.15
     },
     {
      "from": 18.647466565905876,
      "to": 30.0,
      "F": 0.08,
      "mu": 0.0
     }
    ],
    "stopsAt": 30.0,
    "stopsAtDigits": "30",
    "stopReason": "tEnd",
    "feedLengthHours": 24.0,
    "probes": [
     {
      "t": 10,
      "rate": 0.021865425604686108,
      "fedVolume": 0.06576950403124072
     },
     {
      "t": 18.6,
      "rate": 0.07943242417251693,
      "fedVolume": 0.44954949448344617
     },
     {
      "t": 19,
      "rate": 0.08,
      "fedVolume": 0.48153600806086333
     },
     {
      "t": 25,
      "rate": 0.08,
      "fedVolume": 0.9615360080608633
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.013994352303040124,
       "fedSoFar": 0.0
      },
      {
       "t": 8.0,
       "fromStart": 2.0,
       "rate": 0.018890399712580237,
       "fedSoFar": 0.027988704606080248
      },
      {
       "t": 10.0,
       "fromStart": 4.0,
       "rate": 0.025499372430657627,
       "fedSoFar": 0.06576950403124072
      },
      {
       "t": 12.0,
       "fromStart": 6.0,
       "rate": 0.034420552463183915,
       "fedSoFar": 0.11676824889255598
      },
      {
       "t": 14.0,
       "fromStart": 8.0,
       "rate": 0.0464628859040607,
       "fedSoFar": 0.1856093538189238
      },
      {
       "t": 16.0,
       "fromStart": 10.0,
       "rate": 0.06271833576299525,
       "fedSoFar": 0.2785351256270452
      },
      {
       "t": 18.0,
       "fromStart": 12.0,
       "rate": 0.07623796930925004,
       "fedSoFar": 0.40397179715303566
      },
      {
       "t": 18.647466565905876,
       "fromStart": 12.647466565905875,
       "rate": 0.08,
       "fedSoFar": 0.4533333333333333
      },
      {
       "t": 20.0,
       "fromStart": 14.0,
       "rate": 0.08,
       "fedSoFar": 0.5615360080608633
      },
      {
       "t": 22.0,
       "fromStart": 16.0,
       "rate": 0.08,
       "fedSoFar": 0.7215360080608633
      },
      {
       "t": 24.0,
       "fromStart": 18.0,
       "rate": 0.08,
       "fedSoFar": 0.8815360080608633
      },
      {
       "t": 26.0,
       "fromStart": 20.0,
       "rate": 0.08,
       "fedSoFar": 1.0415360080608633
      },
      {
       "t": 28.0,
       "fromStart": 22.0,
       "rate": 0.08,
       "fedSoFar": 1.2015360080608632
      },
      {
       "t": 30.0,
       "fromStart": 24.0,
       "rate": 0.0,
       "fedSoFar": 1.3615360080608634
      }
     ],
     "total": 1.3615360080608634,
     "totalDigits": "1.361536008060863305578678219082658628784"
    }
   }
  },
  {
   "id": "exponential-vmax-growing",
   "description": "Exponential from 0.02 L/h at 0.2 per hour from 5 h with Vmax 8 L from 7 L: the vessel fills during growth (the cut time from ln(1 + mu W/F)/mu); rows every 1.5 h.",
   "feed": {
    "law": "exponential",
    "start": 5,
    "V0": 7,
    "F": null,
    "muSet": 0.2,
    "F0": 0.02,
    "Fmax": null,
    "tEnd": 40,
    "Vmax": 8,
    "cap": null
   },
   "until": 40,
   "step": 1.5,
   "expected": {
    "pieces": [
     {
      "from": 5.0,
      "to": 16.98947636399185,
      "F": 0.02,
      "mu": 0.2
     }
    ],
    "stopsAt": 16.98947636399185,
    "stopsAtDigits": "16.98947636399185272030971788982564649911",
    "stopReason": "Vmax",
    "feedLengthHours": 11.989476363991853,
    "probes": [
     {
      "t": 8,
      "rate": 0.03644237600781018,
      "fedVolume": 0.0822118800390509
     },
     {
      "t": 15,
      "rate": 0.147781121978613,
      "fedVolume": 0.638905609893065
     },
     {
      "t": 30,
      "rate": 0.0,
      "fedVolume": 1.0
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 5.0,
       "fromStart": 0.0,
       "rate": 0.023323920505066875,
       "fedSoFar": 0.0
      },
      {
       "t": 6.5,
       "fromStart": 1.5,
       "rate": 0.03148399952096706,
       "fedSoFar": 0.03498588075760031
      },
      {
       "t": 8.0,
       "fromStart": 3.0,
       "rate": 0.04249895405109604,
       "fedSoFar": 0.0822118800390509
      },
      {
       "t": 9.5,
       "fromStart": 4.5,
       "rate": 0.05736758743863986,
       "fedSoFar": 0.14596031111569496
      },
      {
       "t": 11.0,
       "fromStart": 6.0,
       "rate": 0.07743814317343449,
       "fedSoFar": 0.23201169227365476
      },
      {
       "t": 12.5,
       "fromStart": 7.5,
       "rate": 0.10453055960499208,
       "fedSoFar": 0.3481689070338065
      },
      {
       "t": 14.0,
       "fromStart": 9.0,
       "rate": 0.14110149654364693,
       "fedSoFar": 0.5049647464412946
      },
      {
       "t": 15.5,
       "fromStart": 10.5,
       "rate": 0.19025680137935044,
       "fedSoFar": 0.716616991256765
      },
      {
       "t": 16.98947636399185,
       "fromStart": 11.989476363991853,
       "rate": 0.0,
       "fedSoFar": 1.0
      }
     ],
     "total": 1.0,
     "totalDigits": "1.000000000000000000000000000000000000000"
    }
   }
  },
  {
   "id": "exponential-vmax-at-limit",
   "description": "Exponential from 0.012 L/h at 0.15 per hour, Fmax 0.08 L/h, Vmax 8.2 L from 7 L: the vessel fills while the pump is at its limit; rows every 3 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.08,
    "tEnd": 48,
    "Vmax": 8.2,
    "cap": null
   },
   "until": 48,
   "step": 3,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 18.647466565905876,
      "F": 0.012,
      "mu": 0.15
     },
     {
      "from": 18.647466565905876,
      "to": 27.98079989923921,
      "F": 0.08,
      "mu": 0.0
     }
    ],
    "stopsAt": 27.98079989923921,
    "stopsAtDigits": "27.98079989923920868026652226146676714019",
    "stopReason": "Vmax",
    "feedLengthHours": 21.98079989923921,
    "probes": [
     {
      "t": 12,
      "rate": 0.029515237333883396,
      "fedVolume": 0.11676824889255598
     },
     {
      "t": 20,
      "rate": 0.08,
      "fedVolume": 0.5615360080608633
     },
     {
      "t": 30,
      "rate": 0.0,
      "fedVolume": 1.2
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.015154991613071168,
       "fedSoFar": 0.0
      },
      {
       "t": 9.0,
       "fromStart": 3.0,
       "rate": 0.023767758017780822,
       "fedSoFar": 0.0454649748392135
      },
      {
       "t": 12.0,
       "fromStart": 6.0,
       "rate": 0.037275264521067324,
       "fedSoFar": 0.11676824889255598
      },
      {
       "t": 15.0,
       "fromStart": 9.0,
       "rate": 0.05845925156575925,
       "fedSoFar": 0.22859404245575796
      },
      {
       "t": 18.0,
       "fromStart": 12.0,
       "rate": 0.07623796930925004,
       "fedSoFar": 0.40397179715303566
      },
      {
       "t": 18.647466565905876,
       "fromStart": 12.647466565905875,
       "rate": 0.08,
       "fedSoFar": 0.4533333333333333
      },
      {
       "t": 21.0,
       "fromStart": 15.0,
       "rate": 0.08,
       "fedSoFar": 0.6415360080608633
      },
      {
       "t": 24.0,
       "fromStart": 18.0,
       "rate": 0.08,
       "fedSoFar": 0.8815360080608633
      },
      {
       "t": 27.0,
       "fromStart": 21.0,
       "rate": 0.08,
       "fedSoFar": 1.1215360080608634
      },
      {
       "t": 27.98079989923921,
       "fromStart": 21.98079989923921,
       "rate": 0.0,
       "fedSoFar": 1.2
      }
     ],
     "total": 1.2,
     "totalDigits": "1.200000000000000000000000000000000000000"
    }
   }
  },
  {
   "id": "exponential-starts-at-limit",
   "description": "Exponential from 0.1 L/h with Fmax 0.08 L/h: at the limit throughout, from 3 h to tEnd 9 h; rows every hour.",
   "feed": {
    "law": "exponential",
    "start": 3,
    "V0": 4,
    "F": null,
    "muSet": 0.1,
    "F0": 0.1,
    "Fmax": 0.08,
    "tEnd": 9,
    "Vmax": null,
    "cap": null
   },
   "until": 12,
   "step": 1,
   "expected": {
    "pieces": [
     {
      "from": 3.0,
      "to": 9.0,
      "F": 0.08,
      "mu": 0.0
     }
    ],
    "stopsAt": 9.0,
    "stopsAtDigits": "9",
    "stopReason": "tEnd",
    "feedLengthHours": 6.0,
    "probes": [
     {
      "t": 3,
      "rate": 0.08,
      "fedVolume": 0.0
     },
     {
      "t": 6,
      "rate": 0.08,
      "fedVolume": 0.24
     },
     {
      "t": 9,
      "rate": 0.0,
      "fedVolume": 0.48
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 3.0,
       "fromStart": 0.0,
       "rate": 0.08,
       "fedSoFar": 0.0
      },
      {
       "t": 4.0,
       "fromStart": 1.0,
       "rate": 0.08,
       "fedSoFar": 0.08
      },
      {
       "t": 5.0,
       "fromStart": 2.0,
       "rate": 0.08,
       "fedSoFar": 0.16
      },
      {
       "t": 6.0,
       "fromStart": 3.0,
       "rate": 0.08,
       "fedSoFar": 0.24
      },
      {
       "t": 7.0,
       "fromStart": 4.0,
       "rate": 0.08,
       "fedSoFar": 0.32
      },
      {
       "t": 8.0,
       "fromStart": 5.0,
       "rate": 0.08,
       "fedSoFar": 0.4
      },
      {
       "t": 9.0,
       "fromStart": 6.0,
       "rate": 0.0,
       "fedSoFar": 0.48
      }
     ],
     "total": 0.48,
     "totalDigits": "0.48"
    }
   }
  },
  {
   "id": "rescue-cap",
   "description": "Exponential from 0.012 L/h at 0.15 per hour from 6 h, Fmax 0.05 L/h, with the rescue's cap at 10 h: 0.02 L/h growing at 0.05 per hour until the limit; tEnd 30 h; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.05,
    "tEnd": 30,
    "Vmax": null,
    "cap": {
     "capAt": 10,
     "muCap": 0.05,
     "Fcap": 0.02
    }
   },
   "until": 30,
   "step": 2,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 10.0,
      "F": 0.012,
      "mu": 0.15
     },
     {
      "from": 10.0,
      "to": 28.325814637483102,
      "F": 0.02,
      "mu": 0.05
     },
     {
      "from": 28.325814637483102,
      "to": 30.0,
      "F": 0.05,
      "mu": 0.0
     }
    ],
    "stopsAt": 30.0,
    "stopsAtDigits": "30",
    "stopReason": "tEnd",
    "feedLengthHours": 24.0,
    "probes": [
     {
      "t": 9.99,
      "rate": 0.021832652052588192,
      "fedVolume": 0.06555101368392129
     },
     {
      "t": 10,
      "rate": 0.02,
      "fedVolume": 0.06576950403124072
     },
     {
      "t": 20,
      "rate": 0.03297442541400256,
      "fedVolume": 0.325258012311292
     },
     {
      "t": 29.9,
      "rate": 0.05,
      "fedVolume": 0.7444787721570857
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.013994352303040124,
       "fedSoFar": 0.0
      },
      {
       "t": 8.0,
       "fromStart": 2.0,
       "rate": 0.018890399712580237,
       "fedSoFar": 0.027988704606080248
      },
      {
       "t": 10.0,
       "fromStart": 4.0,
       "rate": 0.021034183615129525,
       "fedSoFar": 0.06576950403124072
      },
      {
       "t": 12.0,
       "fromStart": 6.0,
       "rate": 0.023246368016904443,
       "fedSoFar": 0.10783787126149977
      },
      {
       "t": 14.0,
       "fromStart": 8.0,
       "rate": 0.025691209883166654,
       "fedSoFar": 0.15433060729530865
      },
      {
       "t": 16.0,
       "fromStart": 10.0,
       "rate": 0.028393178013053442,
       "fedSoFar": 0.20571302706164196
      },
      {
       "t": 18.0,
       "fromStart": 12.0,
       "rate": 0.03137931461177156,
       "fedSoFar": 0.26249938308774884
      },
      {
       "t": 20.0,
       "fromStart": 14.0,
       "rate": 0.034679505938076165,
       "fedSoFar": 0.325258012311292
      },
      {
       "t": 22.0,
       "fromStart": 16.0,
       "rate": 0.03832678141599351,
       "fedSoFar": 0.3946170241874443
      },
      {
       "t": 24.0,
       "fromStart": 18.0,
       "rate": 0.042357644204398213,
       "fedSoFar": 0.4712705870194313
      },
      {
       "t": 26.0,
       "fromStart": 20.0,
       "rate": 0.04681243653289641,
       "fedSoFar": 0.5559858754282277
      },
      {
       "t": 28.0,
       "fromStart": 22.0,
       "rate": 0.049594934291613046,
       "fedSoFar": 0.6496107484940206
      },
      {
       "t": 28.325814637483102,
       "fromStart": 22.325814637483102,
       "rate": 0.05,
       "fedSoFar": 0.6657695040312407
      },
      {
       "t": 30.0,
       "fromStart": 24.0,
       "rate": 0.0,
       "fedSoFar": 0.7494787721570857
      }
     ],
     "total": 0.7494787721570857,
     "totalDigits": "0.7494787721570856528065022016850180896206"
    }
   }
  },
  {
   "id": "rescue-cap-unresolved",
   "description": "As rescue-cap before the run has resolved Fcap: the pieces stop at the cap's time, 10 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.05,
    "tEnd": 30,
    "Vmax": null,
    "cap": {
     "capAt": 10,
     "muCap": 0.05,
     "Fcap": null
    }
   },
   "until": 30,
   "step": 2,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 10.0,
      "F": 0.012,
      "mu": 0.15
     }
    ],
    "stopsAt": 30.0,
    "stopsAtDigits": "30",
    "stopReason": "tEnd",
    "feedLengthHours": 4.0,
    "probes": [
     {
      "t": 8,
      "rate": 0.016198305690912036,
      "fedVolume": 0.027988704606080248
     },
     {
      "t": 11,
      "rate": 0.0,
      "fedVolume": 0.06576950403124072
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.013994352303040124,
       "fedSoFar": 0.0
      },
      {
       "t": 8.0,
       "fromStart": 2.0,
       "rate": 0.018890399712580237,
       "fedSoFar": 0.027988704606080248
      },
      {
       "t": 10.0,
       "fromStart": 4.0,
       "rate": 0.0,
       "fedSoFar": 0.06576950403124072
      }
     ],
     "total": 0.06576950403124072,
     "totalDigits": "0.06576950403124071799002941345302916107056"
    }
   }
  },
  {
   "id": "rescue-cap-before-start",
   "description": "A cap timed at 2 h on a feed that starts at 6 h: the cap applies from the feed's start; 0.015 L/h growing at 0.04 per hour to tEnd 14 h; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": null,
    "tEnd": 14,
    "Vmax": null,
    "cap": {
     "capAt": 2,
     "muCap": 0.04,
     "Fcap": 0.015
    }
   },
   "until": 20,
   "step": 2,
   "expected": {
    "pieces": [
     {
      "from": 6.0,
      "to": 14.0,
      "F": 0.015,
      "mu": 0.04
     }
    ],
    "stopsAt": 14.0,
    "stopsAtDigits": "14",
    "stopReason": "tEnd",
    "feedLengthHours": 8.0,
    "probes": [
     {
      "t": 6,
      "rate": 0.015,
      "fedVolume": 0.0
     },
     {
      "t": 10,
      "rate": 0.017602663064877153,
      "fedVolume": 0.06506657662192884
     }
    ],
    "pumpSheet": {
     "rows": [
      {
       "t": 6.0,
       "fromStart": 0.0,
       "rate": 0.015616325189054729,
       "fedSoFar": 0.0
      },
      {
       "t": 8.0,
       "fromStart": 2.0,
       "rate": 0.01691696312190969,
       "fedSoFar": 0.031232650378109458
      },
      {
       "t": 10.0,
       "fromStart": 4.0,
       "rate": 0.018325927374298962,
       "fedSoFar": 0.06506657662192884
      },
      {
       "t": 12.0,
       "fromStart": 6.0,
       "rate": 0.019852240127728574,
       "fedSoFar": 0.10171843137052676
      },
      {
       "t": 14.0,
       "fromStart": 8.0,
       "rate": 0.0,
       "fedSoFar": 0.14142291162598392
      }
     ],
     "total": 0.14142291162598392,
     "totalDigits": "0.1414229116259839066975789004355544872221"
    }
   }
  },
  {
   "id": "vessel-full",
   "description": "Vmax 7 L with the vessel already at 7.5 L: no feed; the stop is at the feed's start.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 7.5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": null,
    "Vmax": 7,
    "cap": null
   },
   "until": 24,
   "step": 2,
   "expected": {
    "pieces": [],
    "stopsAt": 4.0,
    "stopsAtDigits": "4",
    "stopReason": "Vmax",
    "feedLengthHours": 0.0,
    "probes": [
     {
      "t": 5,
      "rate": 0.0,
      "fedVolume": 0.0
     }
    ],
    "pumpSheet": {
     "rows": [],
     "total": 0.0,
     "totalDigits": "0"
    }
   }
  }
 ],
 "designRate": [
  {
   "id": "f0-ecoli",
   "description": "Yxs 0.5, ms 0.03, no product; 0.15 per hour from 10 g/L biomass, 0.05 g/L glucose, 7 L, feed 500 g/L.",
   "kinetics": {
    "Yxs": 0.5,
    "ms": 0.03,
    "alpha": 0,
    "beta": 0
   },
   "muSet": 0.15,
   "X0": 10,
   "S0": 0.05,
   "V0": 7,
   "Sf": 500,
   "expected": {
    "F0": 0.0462046204620462,
    "F0Digits": "0.04620462046204620462046204620462046204620",
    "defined": true
   }
  },
  {
   "id": "f0-product",
   "description": "As f0-ecoli with alpha 0.2 and beta 0.01 paid from the same substrate.",
   "kinetics": {
    "Yxs": 0.5,
    "ms": 0.03,
    "alpha": 0.2,
    "beta": 0.01
   },
   "muSet": 0.15,
   "X0": 10,
   "S0": 0.05,
   "V0": 7,
   "Sf": 500,
   "expected": {
    "F0": 0.0574057405740574,
    "F0Digits": "0.05740574057405740574057405740574057405741",
    "defined": true
   }
  },
  {
   "id": "f0-methanol",
   "description": "Yxs 0.4, ms 0.02 at 0.03 per hour from 25 g/L, 0.2 g/L residual, 4 L, feed 790 g/L.",
   "kinetics": {
    "Yxs": 0.4,
    "ms": 0.02,
    "alpha": 0,
    "beta": 0
   },
   "muSet": 0.03,
   "X0": 25,
   "S0": 0.2,
   "V0": 4,
   "Sf": 790,
   "expected": {
    "F0": 0.012028361610534312,
    "F0Digits": "0.01202836161053431248417320840719169409977",
    "defined": true
   }
  },
  {
   "id": "f0-undefined",
   "description": "Feed no richer than the broth (Sf 0.05 g/L, S0 0.05 g/L): undefined.",
   "kinetics": {
    "Yxs": 0.5,
    "ms": 0.03,
    "alpha": 0,
    "beta": 0
   },
   "muSet": 0.15,
   "X0": 10,
   "S0": 0.05,
   "V0": 7,
   "Sf": 0.05,
   "expected": {
    "F0": null,
    "F0Digits": null,
    "defined": false
   }
  }
 ]
}
