PD20 — continuous-flow regenerative peritoneal dialysis

A physics simulator, its literature calibration, its results, and everything needed to reproduce them.

The invention

What the device is, and the one thing that makes it different.

PD20 is a continuous-flow regenerative peritoneal dialysis device. Instead of instilling a bag of fresh dialysate, letting it dwell, and draining it, it circulates dialysate continuously through the peritoneal cavity and regenerates the spent fluid by reverse osmosis, returning recovered water and re-dosing the solutes that need replacing.

The clinically important consequence is that ultrafiltration and solute clearance are decoupled from the osmotic agent. In conventional peritoneal dialysis, water removal is bought with dextrose, and sodium leaves the body mainly by being dragged along with that water. If ultrafiltration falls, sodium removal falls with it. A continuous-flow regenerative system removes solute by exchanging a large volume of dialysate across the membrane rather than by concentrating an osmotic gradient, so the two are no longer chained together.

The simulator on this site exists to test whether that claim survives contact with physiology, across a cohort of patients whose behaviour a nephrologist can predict in advance.

Concentration-blind control. The device is designed to operate without ever reading a serum or blood concentration. It senses only bulk physical properties of the fluid it circulates and the patient's weight. This is a deliberate design constraint — it is what makes the device implementable without continuous blood chemistry — and it is enforced structurally in the code by an automated test that fails if any serum concentration reaches the decision path.

The physics engine

Fourteen solutes, ten flux laws, conservation by construction.

Conservation is structural, not checked afterwards

Every physical process in the model moves mass through exactly two primitives: a paired water-plus-carried-solute transfer, and a paired solute-only transfer. Both are atomic and clamped to the source pool, so total water and total per-solute quantity are invariant under any sequence of transfers — mass cannot be created or destroyed by a modelling error, only moved to the wrong place. Measured conservation residuals across a 30-day ten-patient cohort are of order 10-8, which is floating-point noise rather than physics.

The species, and their transport coefficients

σ is the osmotic reflection coefficient (how strongly the membrane opposes that solute's osmotic pull), S is the convective sieving coefficient (what fraction of the solute is dragged through with ultrafiltrate), and MTAC is the diffusive mass-transfer-area coefficient.

SoluteChargeσS MTAC (mL/min)
Sodium+10.0500.5504.5000
Chloride-10.0500.5884.5000
Glucose00.0490.38212.0000
Potassium+10.0500.53510.0000
Urea00.0200.68820.0000
Albumin-18.60.8400.0100.1000
Globulin00.9000.0050.0500
Icodextrin00.5000.0200.1000
Bicarbonate-10.0500.53510.0000
Lactate-10.0500.61110.0000
Calcium+20.0500.4586.0000
Magnesium+20.0500.4586.0000
Phosphate-1.80.0500.4975.0000
Sulfate-20.0500.4584.0000

Plasma colloid osmotic pressure is not van't Hoff

Plasma protein is strongly non-ideal at physiologic concentration, so the ideal-solution law underestimates the oncotic pressure that opposes ultrafiltration by roughly 40%. The model uses the standard empirical replacement:

COP (mmHg) = 2.1·C + 0.16·C² + 0.009·C³        C = total plasma protein, g/dL

Landis EM & Pappenheimer JR, Handbook of Physiology, Section 2: Circulation, Vol II, American Physiological Society, 1963, p.975.

At a normal total protein of 7.0 g/dL this gives 25.6 mmHg, the textbook plasma value; the ideal law gives 15.8 on the same protein mass. Both albumin and globulin are tracked as separate species, because peritoneal dialysis removes the smaller albumin preferentially and so the albumin fraction of plasma protein falls over a long treatment — a fixed albumin-to-globulin ratio would freeze exactly the quantity that ought to move.

An emergent check, not a fitted one. Globulin was set to its normal reference concentration and nothing was tuned toward any target. Under treatment the model's total protein falls from 7.46 to 6.39 g/dL — the mild hypoproteinaemia of a real PD patient — and the published cubic then produces a transperitoneal protein oncotic gradient of 22.3 mmHg, against the 22 mmHg measured in human PD patients by Öberg & Rippe (Kidney Int Rep 2017;2(6):1128–38, Table 1).

Other laws

Literature calibration

Every constant checked against a published measurement, and the ones that are not measured are labelled as such.

The model carries an automated audit that compares each physical constant against its published range and fails the build if one drifts outside without a recorded justification. The point is not that every number is measured — several genuinely are not — but that the unmeasured ones are named rather than quietly presented as if they were.

ConstantModel valuePublished range StatusSource
MTAC urea20.000 mL/min15.9-30.0verifiedSelgas 2005: 22.9 +/- 7.04 mL/min
MTAC glucose12.000 mL/min10.0-17.0verifiedDouma 1995 (nitrate, 180 Da proxy): 11.5 (10.0-17.0)
MTAC sodium4.500 mL/min3.5-6.0verifiedOberg & Rippe 2017 (PMC5733752 T1), human: PS for Na+ and anions = 4.5 mL/min (DIRECT)
MTAC potassium10.000 mL/min5.0-15.0inferredINFERRED from the small-monovalent-ion argument — NO measured source exists for potassium
lymphatic absorption1.070 mL/min1.0-1.35verifiedImholz 1993 1.07+/-0.18; Monquil 1995 1.01-1.34; Rippe 2001 ~1
reflection sigma glucose0.049 not verifiedcited to Rippe 2004 in physics_core.py:20
reflection sigma Na0.05 not verifiedcited to Rippe 2004
reflection sigma albumin0.84 not verifiedcited to Rippe 2004
sieving Na (convective)0.550 -0.39-0.71verifiedderived from Bernardo 2012 FWT 0.45+/-0.16 -> Na sieving 1-FWT = 0.39-0.71 (centre 0.55); Helman 2024 PMC10914194 independently puts free-water transport at a fixed 40-50%% of UF and adopts 50%%, implying 0.50-0.60 — the two agree on ~0.55
cp_beta_ref1 not verifiedSEARCHED AND NOT FOUND 2026-07-19 — do not repeat these dead ends: PubMed returns a CFD paper that explicitly AVOIDS film theory, and two targeted PubMed queries returned ZERO results (it is a chemical-engineering topic, barely indexed in a biomedical database); MDPI and pubs.acs.org both 403; lenntech and DuPont design-manual URLs 404. The right sources are J. Membrane Science or a manufacturer design manual, neither reachable from the allowed domains. DOES NOT BLOCK ANY DECISION: exp_polarization.py sweeps 1.0-1.4 and the conclusion (2 passes fails, 3 passes holds) is IDENTICAL at every point in that range.
Kf0.08 mL/min/mmHgnot verifiedhuman LpS not located in the 2026-07-18 fetch (the hit was Zakaria & Rippe 1993, a RAT study). Open item — do not cite a human source for this until one is actually read.
R*T (van't Hoff)19.342 mmHg/(mmol/L)19.2-19.5verifiedR=62.3637 L.mmHg/(mol.K) x T=310.15 K / 1000 — arithmetic, not empirical
net endogenous acid0.800 mmol/kg/d0.7-1.0verifiedRemer & Manz 1995 PMID 7797810 and Frassetto 1998 PMID 9734733 give 0.7-1.0 mEq/kg/d on a Western diet; dialysis cohorts measure 42.7 +/- 10.1 (HD) and 58.2 +/- 24.3 (CKD) mEq/d (PMID 26508542). 0.80 mmol/kg/d gives 56 mEq/d at 70 kg.
Stated openly: what is not measured. The capillary hydrostatic pressure used in the Starling balance has no citation we could find, and is the one free constant in that balance. The intracavitary mixing coefficient has no published value at all — Dedrick & Flessner (PMID 9086004) describe intraperitoneal mixing as an explicit knowledge gap — so it is labelled a dispersion parameter rather than a molecular diffusivity. The peritoneal potassium MTAC is inferred from the small-monovalent-ion argument, not measured. These are listed here rather than buried because a model's credibility rests on which numbers it cannot defend as much as on which it can.

Results — PD20, ten patients, thirty days

A deliberately varied cohort: typical, high and low transporters, anuric, small and large body size, high-MTAC, and diabetic.

10/10
patients surviving 30 days
37/37
automated tests passing
~10-8
conservation residual
14
solute species tracked

Each patient is simulated minute by minute for 30 days with dietary intake, residual renal function where present, osmotic thirst, endogenous acid production and stool losses all active. The figures below are the pinned published outcomes — an automated test re-runs the whole cohort and fails if any of them moves.

PatientNa
mmol/L
K
mmol/L
HCO₃
mmol/L
BUN
mg/dL
Glucose
mmol/L
Cum. UF
L/30d
Glucose abs.
g/day
Net Na
mmol/day
P1_typical_M70142.94.7925.8206.0+42.7191+4
P2_high_transporter142.54.6726.5186.3+47.1268+4
P3_low_transporter143.34.9124.2265.7+42.7131+5
P4_anuric142.95.0325.6236.1+59.4212+4
P5_smaller_F50143.54.8327.1156.5+32.6177+3
P6_large_M90142.84.7724.4275.8+56.4208+5
P7_small_M55143.14.8326.7166.1+28.2165+4
P8_anuric_small_F45143.95.1726.9176.5+43.8159+3
P9_HighMTAC_F60142.64.8227.5147.2+46.0307+3
P10_diabetic_M80140.95.0124.72610.6+71.3203+4

Body water is held to within a fraction of a litre over the month in every patient, with no restriction placed on what they drink — the cohort drinks 1.9–2.6 L/day, thirst-driven.

An honest exposure. Glucose absorption across this cohort averages 202 g/day with a range of 131–307 g/day. The published range for peritoneal dialysis is roughly 100–200 g/day, so the cohort mean sits at the top of that band and the high-transporter and high-MTAC patients sit above it. This is the expected direction once the osmotic drive is corrected upward to the measured value, but it is a real limitation and is stated rather than omitted.

Contemporary peritoneal dialysis, same ten patients

The comparator arm: a conventional night cycler, five 2-litre exchanges over nine hours, dry day, filling and draining through the bottom lumen as a real catheter does.

The same ten patients are run on conventional automated peritoneal dialysis, each on the bag strength that suits them best (1.5%, 2.5% or 4.25% dextrose), at three different drinking behaviours. A prescription counts as held only if body water stays within ±1.5 L over 30 days — dehydration counts as failure exactly as overload does.

Drinking behaviourIntakeHeldDied
freethirst-driven3/100/10
moderate1.5 L/day1/106/10
low1.0 L/day0/1010/10

Fluid restriction does not fail gently — it kills by hypernatraemia

This is the result that most deserves attention, and it is not the one we expected. At a restricted intake of 1.0 L/day, every patient dies, and none of them dies of dehydration. Body water at death spans −3.5 to +1.0 L, nowhere near the fatal volume threshold. They die of serum sodium reaching 165 mmol/L.

PatientBagUF L/dayΔ body water L Outcome
P1_typical_M702.5%-0.07-2.35DIED d8.3 FATAL high Sodium=165.0 (>165)
P2_high_transporter2.5%-0.230.35DIED d11.7 FATAL high Sodium=165.0 (>165)
P3_low_transporter2.5%0.07-3.49DIED d6.7 FATAL high Sodium=165.0 (>165)
P4_anuric2.5%0.061.04DIED d11.2 FATAL high Sodium=165.0 (>165)
P5_smaller_F502.5%-0.08-1.24DIED d7.3 FATAL high Sodium=165.0 (>165)
P6_large_M902.5%-0.04-1.89DIED d9.0 FATAL high Sodium=165.0 (>165)
P7_small_M552.5%-0.16-2.86DIED d7.2 FATAL high Sodium=165.0 (>165)
P8_anuric_small_F452.5%0.130.18DIED d8.2 FATAL high Sodium=165.0 (>165)
P9_HighMTAC_F604.25%0.82-4.25DIED d6.3 FATAL high Sodium=165.0 (>165)
P10_diabetic_M802.5%0.061.03DIED d11.3 FATAL high Sodium=165.0 (>165)

The mechanism is visible in the ultrafiltration column. Restricting intake collapses ultrafiltration to zero or below, against 0.72–2.09 L/day when the same patients drink freely. Conventional peritoneal dialysis removes sodium principally by convection — solvent drag with the ultrafiltrate — so when ultrafiltration stops, sodium removal stops with it, whatever the dialysate sodium concentration is. Sodium then accumulates while body water stays normal.

And the process is self-reinforcing: less body water raises serum osmolality, which shrinks the dialysate-to-serum osmotic gradient, which further reduces ultrafiltration, which removes still less sodium. That spiral is what turns six deaths at 1.5 L/day into ten at 1.0 L/day.

Why this matters for the invention. The failure is specific to a system in which sodium removal is chained to dextrose-driven water removal. A continuous-flow regenerative device removes sodium by exchanging dialysate volume across the membrane rather than by concentrating an osmotic gradient, and so is not subject to the same spiral. In this simulator the PD20 arm holds all ten of the same patients over 30 days with no intake restriction at all.
Read this as a simulation result, not a clinical trial. No patient has been treated with this device. What is shown is that a physics model calibrated independently to the published literature, and validated against clinical behaviour a nephrologist can predict in advance, produces this outcome. Clinical hypernatraemia in peritoneal dialysis is well recognised in connection with sodium sieving during short hypertonic dwells; the magnitude here is a model output and requires clinical confirmation.

Validation — does it behave like the patients we know?

Forty arms: five levels of renal function × two potassium diets × two fluid-compliance behaviours × two phosphate-management behaviours.

A simulator that reproduces its own assumptions proves nothing. The test that matters is whether it reproduces the behaviour of patients whose direction of travel is already known clinically. Each expectation below is asserted in code, and the run exits with an error if the engine contradicts it.

VerdictClinical expectationMeasured
OKBUN rises as renal function fallsnormal -> anuric: 30 < 61 < 70 < 73 < 75 mg/dL
OKserum K rises with dietary K (anuric)delta +1.21 mmol/L
OKthat rise is STEEPEST when anuricanuric +1.21 vs normal +0.93 mmol/L — residual renal secretion is the missing buffer
OKfluid non-compliance gains water (anuric)delta +5.87 L
OKand it hurts the anuric patient moreanuric +5.87 L vs normal +0.90 L
OKserum phosphate rises with intakedelta +1.05 mmol/L

The phosphate expectation is worth singling out: conventional peritoneal dialysis must fail to control phosphate in a non-compliant anuric patient, because that is precisely why phosphate binders exist. The engine reproduces that failure, which is also what settles an open question about the phosphate transport coefficient — a higher published value would have controlled phosphate without binders, and would therefore have been wrong.

Reproduce every number on this page

The simulator is deterministic. Same inputs, same outputs, bit for bit.

Environment

# Python 3.11+, numpy. Single-threaded execution is required for bit-reproducibility.
export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 PARALLEL=1

The full verification sequence, in order

# 1. The automated test suite — 37 enforcing tests covering conservation, every flux law,
#    the literature calibration, device blindness, and the pinned published results.
bash run_testsuite.sh

# 2. Regenerate the controller from the physics (deterministic given unchanged physics).
python3 pretrain_robust.py

# 3. Re-run the ten-patient cohort and regenerate the per-patient report data.
python3 run_cohort.py
python3 gen_report_data.py

# 4. Confirm every published number still reproduces.
python3 test_published_regression.py

# 5. The contemporary-PD comparator arm.
python3 exp_conventional_apd.py

# 6. The forty-arm clinical validation matrix.
python3 exp_validation_matrix.py

Verification state of this build

Test suite37 passed, 0 failed
Cohort10 of 10 patients survive 30 days; conservation residual ~10-8
Controller buildmd5 a730b25bef2234c2ae2026a44ca6fde5
Solute species14
Peritoneal Kf8.00e-05 L/min/mmHg per unit area
Total peritoneal absorption0.00107 L/min

The controller build hash is stamped because the trained controller is a function of the physics: if a physical constant changes, retraining produces a different controller and every downstream number moves. Quoting a result without the hash of the controller that produced it is not reproducible.

What is withheld, and what is not

Stated plainly so that nobody has to guess where the line is.

Fully disclosed

Withheld as pending patent matter

This boundary is enforced mechanically, not by good intentions: an automated firewall scans every outward-facing artifact — including this page — for the withheld identifiers, for the numeric set-points, and for descriptions of the control logic written in plain English that a token scan would miss. The build fails if any of them appear.

On the concentration-blind claim. That the device never reads a serum or blood concentration is not merely asserted here; it is enforced by a structural test that inspects the decision path and fails if any serum concentration reaches it. The claim is therefore checkable by anyone who runs the test suite, without access to the withheld internals.