This could be your homework.
We could implement a physical field (temperature) that lives on a separate worker and can be queried for the value of the physical field at a given position (or an array of positions.
We could estimate the computational cost (per iteration) of each component, and optimize the model for certain conditions (communication bandwidth, ...). Optimization could be done along the following lines:
It is possible that we want to use more than one group of particles that all share a random number generator. As the evolution of each group of particles is not necessarily synchronized, we'll see race conditions leading to non-reproducible sequences of random numbers per particle. (See rule 6 from [Sandve et al. (2013)] to learn why this is a problem.)
Can you design a random number generator that can handle different particle groups in a reproducible way?