Example 22 — PBPK Modelling

Script: examples/22_pbpk_model.py

Demonstrates the FiveOrganPBPK template for physiologically-based pharmacokinetic (PBPK) modelling.

Model structure

Five organs with blood-flow-limited distribution:

dose → lung ↔ blood ↔ liver (+ CL_liver)
                    ↔ kidney (+ CL_kidney)
                    ↔ gut
                    ↔ muscle

Each organ satisfies:

dA_organ/dt = Q_organ * (C_blood - C_organ/Kp_organ) [- CL_organ * C_organ]

Usage

from openpkpd.pk.pbpk import FiveOrganPBPK
from openpkpd.data.event_processor import DoseEvent
import numpy as np

model = FiveOrganPBPK()

pk_params = {
    "Q_lung": 350.0, "Q_liver": 90.0, "Q_kidney": 72.0,
    "Q_gut": 60.0,  "Q_muscle": 75.0,
    "V_lung": 0.5,  "V_liver": 1.8,  "V_kidney": 0.3,
    "V_gut": 1.1,   "V_muscle": 35.0, "V_central": 5.0,
    "Kp_lung": 1.2, "Kp_liver": 3.5, "Kp_kidney": 2.8,
    "Kp_gut": 2.1,  "Kp_muscle": 0.9,
    "CL_liver": 15.0, "CL_kidney": 5.0,
}

dose = DoseEvent(time=0.0, amount=100.0, compartment=1)
times = np.linspace(0, 24, 100)
sol = model.solve(pk_params, [dose], times)

Output

sol.ipred returns plasma concentration (central compartment / V_central). sol.amounts has shape (n_times, n_organs+1) with column order matching FiveOrganPBPK.organ_names + ["central"].

Reference

Rowland M et al. (2011). Physiologically-based pharmacokinetics in drug development and regulatory science. Annu Rev Pharmacol Toxicol 51:45–73.