new diffusion function for Substance (not perfect, but ok)