Project 4 · Biophysics and medicine
How thick can lab-grown tissue be?
Lab-grown organs have a size limit, and it comes from physics. Work out what it is.
- Math
- Algebra II, exponentials; cosh is introduced in the project
- You need
- A laptop and published research
- Tools
- Python or a spreadsheet; published biology literature
- Solver
- Reaction-diffusion, 3D
The question
Oxygen diffuses into tissue while cells consume it, which limits how large a tissue grown without blood vessels can be. What is the largest cube whose centre still gets enough oxygen, and do shape and surface area matter?
Objectives
Twelve weeks, in the four stages every TopEdu project follows. Your mentor reviews each checkpoint before you move on.
Weeks 1 to 3
Learn to trust the model
Run 04_tissue_oxygen.py until its CHECK line says PASS, and explain every line of it to your mentor. Then reproduce a known answer: A slab has the exact answer c = cosh((x−a)/L) / cosh(a/L), with penetration length L = √(D/k).
Checkpoint: you reproduce a known answer and report how close you got.
Weeks 4 and 5
Ask your own question
Narrow the question above to one sentence that could turn out to be wrong, and write your prediction before you run anything. The first experiments below are a place to start.
Checkpoint: a one-page plan with your question and prediction.
Weeks 6 to 9
Run it, then measure the world
Find the side length at which the centre falls to a chosen oxygen threshold; repeat for flat slabs and long bars of the same volume. Then step away from the screen: compare the penetration length with published oxygen diffusion limits and with the sizes of real organoids and spheroids.
Checkpoint: one chart comparing your model with reality.
Weeks 10 to 12
Explain the gap, and share it
Work out why your model and your measurements disagree, test at least one explanation, and write it up yourself. Say which numbers came from the starter and which from the lab. Keep the honest limit in view: consumption here is proportional to oxygen. Real cells keep consuming at a nearly fixed rate until oxygen is low, so say how that would change your estimate.
Checkpoint: a final paper, your code and a ten-minute talk.
The data
What the lab lets you change, how the project was checked before we listed it, and what the starter prints on a laptop.
Settings in the online lab
| Setting | Range | Starts at |
|---|---|---|
| Cube side | 0.5 to 8 penetration lengths | 2 |
Checked on the research solver
| Solver (Reaction-diffusion, 3D) | side 1: centre 0.9462; side 2: centre 0.8072; side 4: centre 0.4632 |
|---|---|
| Known answer | 0.9459; 0.8061; 0.4596 |
| Error | 0.78% (limit 1.00%): passed |
What the starter prints
From the run that built this page. Timings depend on your computer; the CHECK line must say PASS.
slab 4 thick: centre 0.2659, exact 0.2658, worst error 5.3e-05 cube side 1: centre oxygen 0.9462, series 0.9459, error 0.03% cube side 2: centre oxygen 0.8073, series 0.8061, error 0.15% cube side 4: centre oxygen 0.4630, series 0.4596, error 0.73% CHECK slab and cubes against exact answers -> PASS (limit 1%)

The starter code
One Python file that needs only numpy and matplotlib. Run python3 04_tissue_oxygen.py --show to see the plots. How to set up.
The model
Oxygen soaks into tissue from its surface while the cells use it up. With no blood vessels, the centre of a large piece starves. In scaled units the oxygen c obeys -laplacian(c) + c = 0 inside, with c = 1 on the surface. Lengths are measured in "penetration lengths" L = sqrt(D / k): D is how fast oxygen spreads, k how fast it is used.
What it does
- Stage 1: run this file. It solves a flat slab (exact answer: cosh) and a cube (exact answer: a series), and checks both. The CHECK line should say PASS.
- Stage 2: find the largest cube, slab and bar whose centre stays above an oxygen threshold you choose.
Your first experiments
From the YOUR TURN list at the bottom of the file. Write your prediction in your log before you run each one.
- Pick a threshold, say the centre must keep 20% of the surface oxygen. Predict the largest cube side, then find it by trying sides between 2 and 8 with box_centre_series (fast) and checking one with box().
- Same volume, other shapes: a slab 0.5 thick and a long square bar (make one side 10). Which keeps its centre alive best? Is it the one with the most surface?
- Turn units back into micrometres: look up D for oxygen in tissue and a cell consumption rate, compute L = sqrt(D / k), and compare your limit with published organoid sizes (often a few hundred micrometres).
- Honest limit: real cells use oxygen at a nearly fixed rate until it runs low. Would that make your limit larger or smaller? Argue it before you test it.
Download 04_tissue_oxygen.pyAll ten (.zip)Instructions (PDF)
The real world
Compare the penetration length with published oxygen diffusion limits and with the sizes of real organoids and spheroids.
The honest limit
Consumption here is proportional to oxygen. Real cells keep consuming at a nearly fixed rate until oxygen is low, so say how that would change your estimate.
Want to work on this one?
Members run it on the research solver in the lab and choose a mentor to guide them.