Extrusion bioprinting deposits tissue as long filaments, not spheres — so this simulator solves the steady-state reaction-diffusion equation for a filament cross-section: an infinite cylinder of tissue, oxygen entering radially from the surrounding medium. Assuming no variation along the filament's length reduces the physics to a 2D field in the cross-sectional plane, solved here directly on a 2D Cartesian grid (successive over-relaxation, ~300 sweeps, re-solved live as you move the sliders) rather than reusing a 1D formula:
D · ∇²c = Q (2D Laplacian, where c > 0)
Boundary: c = C_s at r = R (medium concentration at the surface)
Necrosis: c = 0 and consumption stops once local O₂ is exhausted
Because the geometry here is a cylinder rather than a sphere, the no-necrosis analytic solution has a different shape than the spherical case: c(r) = Cs − (Q/4D)(R² − r²), versus Cs − (Q/6D)(R² − r²) for a sphere — thicker cross-sections lose the "1/6" cushion the sphere gets from its extra curvature term, so a filament of the same radius runs hypoxic sooner. D is fixed at a typical soft-tissue oxygen diffusivity (~1500 µm²/s). The left panel renders the solved 2D field directly as a heatmap; the right panel plots the radially-averaged concentration profile c(r) against the necrosis threshold.
- Filament radius R — thicker filaments have farther to diffuse; this is the single biggest lever on viability.
- Consumption rate Q — higher cell density or more metabolically active cell types consume O₂ faster.
- Medium O₂ (Cs) — hypoxic incubators or poor media exchange lower the surface boundary value.
- Necrosis threshold (Ccrit) — the O₂ concentration below which a given cell type becomes hypoxic/dies; varies by cell line.
Real-world relevance: this diffusion limit is exactly why bioprinted filaments beyond a few hundred microns thick need sacrificial vascular channels, perfusion bioreactors, or pre-vascularization — without them the centre of any sufficiently thick filament starves before ingrowing vessels can rescue it.