Why are are my models passing through one another?

I'm running a coupled temperature-displacement multi-particle model of a Li-ion battery cathode under a surface heat flux. When the particles are subjected to the surface heat flux, they begin to expand therefore I have applied interactions between the surfaces of the particles in order to observe the stress generated by this interaction. These are frictionless and have a 'hard' contact type but when I run the analysis they still pass through one another.

Can anyone help explain why this happens please?

I have attached a screen grab of the model assembly, interaction window and the results.

Note: the particles are not initially in contact