My game setting is voxels in space and I need a way to keep interiors and outside separated to track oxygen levels. World data is a 3d grid of cubes, each block defines a 'substance' at given position (a byte). Since it already uses a lot of memory I'd like to avoid having another 3d array just for oxygen levels.
Oxygene (or other substance like water) should disperse from the sources across the place over time.

Player can build whatever he wishes with given resources so there are no fixed buildings with known interior layout.
I have couple of ideas how to approach this but maybe someone has a better one:

have a number of blocks just to represent oxygen percentage at given block (like btOxygen10, btOxygen20 etc.)
not sure how such low resolution would work when trying to simulate disperse though.
or
have a some sort of list/map of existing oxygen blocks in the space. does it make sense to have a 3d map? like TFPGMap <TVector3f, byte> or nested map. Wouldn't it be too slow?

Simulating disperse across terrain is another problem. There should be some delay when updating neighbouring blocks (especially when simulating water flow, oxygen is not gonna be visible anyways). I write this post partially to sort things in my head but other ideas are welcome ;)