the charge state and temperature distribution of a spectrum of grains. This population balance is then used by outer solvers for the material temperature, pressure (when required) and radiation transfer, and used to predict the resulting spectrum. As described in the previous sections, the range of physics treated has expanded significantly since the last review.

At the simplest level, the method of solution for the populations remains similar to that used previously, with the populations of different systems solved for in an iterative loop. However, the increasing level of coupling between species has required significant work to be done on improving the robustness of convergence and the self-consistency of the solutions. The broad range of physics which Cloudy solves in a self-consistent fashion means that the resulting system has a very wide range of physical timescales, a significant challenge for any numerical scheme; the status of the code as an open resource for the astrophysical community means that this challenge must be met by means which require no user intervention. Details of this work will be described in detail in Williams et al. (2013, “Hierarchical physics”, in preparation), so in the present paper we will summarize the overall approach.

The 