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.

Hi @yifan_sun

Thanks for the taking the time to deep dive in Pulse!

You bring up an excellent set of observations.
We will definitely need to dig into this and keep you posted on our findings.

Great job, we’d love to hear about how you are using Pulse and how well its working for you.

Thanks!

Hi abray,

I look forward to receiving your further response to this issue. Additionally, I am still in the learning phase and have only performed few calculations, so I have not yet utilized it for in-depth applications. I intend to apply it to my areas of research interest in the future.

Thank you and your team for developing such a massive and wonderful model.