I think the problem is that we are changing a prior implicit assumption, which was that a simulation class knew which fields it was using before it was initialized. This is why fields() was marked as a @classmethod. This is now no longer true, since the number of fields can be dynamically determined via --lat_nc.

I think it would be preferable to make fields() a normal method (drop @classmethod, rename first argument from cls to self), and then access grids via self.grids.