Why does TissueModel::CalculateDiffusion() apply both instant and simple diffusion to O2/CO2?

Hi Pulse Physiology Engine team,

I am trying to understand the tissue gas diffusion methodology in TissueModel::CalculateDiffusion().

For gaseous substances such as O2 and CO2, the code appears to perform both instantaneous diffusion and simple diffusion in sequence for the same compartment pair:

  1. vascular <-> extracellular

    • MoveMassByInstantDiffusion(*vascular, extracellular, *sub);
    • MoveMassBySimpleDiffusion(*vascular, extracellular, *sub, ..., dt);
  2. extracellular <-> intracellular

    • MoveMassByInstantDiffusion(extracellular, intracellular, *sub);
    • MoveMassBySimpleDiffusion(extracellular, intracellular, *sub, ..., dt);

Both functions calculate a mass increment and then directly modify the substance mass in the source and target compartments. They also intentionally do not call Balance() until the full diffusion methodology is complete.

My question is about the intended physical/modeling interpretation of applying both methods sequentially.

If instantaneous diffusion is meant to equilibrate the concentrations between two compartments within the current time step, then I would expect the concentration gradient for simple diffusion to be eliminated, at least conceptually. However, because Balance() is delayed, it looks like the subsequent simple diffusion step may still use the pre-balance concentration gradient and add an additional mass transfer on top of the instantaneous diffusion result.

So I am wondering:

  1. Is the intended model that gas transfer is the sum of an “instant equilibrium” term plus a permeability-limited Fick/simple diffusion term?

  2. If so, what is the physiological or numerical rationale for combining these two mechanisms for O2 and CO2?

  3. Is the delayed Balance() intentional here so that all diffusion terms are computed from the same starting concentrations, or is it mainly a numerical implementation detail?

  4. Would it be more accurate to interpret this as an empirical/effective diffusion model rather than a strict mechanistic representation of gas diffusion across vascular-extracellular and extracellular-intracellular barriers?

I checked the methodology documentation, and it says that gases and small molecules are transported by instantaneous diffusion, while simple diffusion is also described separately. I may be missing the reason why both are applied to O2/CO2 in the code.

Thanks for any clarification.