Going on from here

This could be your homework.

Idea 1: Add a component

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.

Idea 2: Optimize layout based on computational cost / other constraints

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:

  • Adding more resources (CPU, RAM) to more expensive components, taking away resources from other components.
  • Adding more instances of expensive components.
  • ...

Idea 3: Develop a reproducible parallelized random number generator

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?

Idea N: Feel free to insert your Idea here