Ideas for how we can use normalizations objects

In pull request #859 I’ve been working on a class to represent normalizations that we can use to get the dimensionless forms of equations. At the community meeting we talked a bit about potential uses for an object that contains normalizations. My main motivation is to have something that we can use to keep track of normalizations for when we do dimensionless plasma simulations.

If we have a class called UniformPlasma, then we could potentially do operations like

import astropy.units as u

uniform_plasma = UniformPlasma(B=0.319*u.T, n=9.3e18*u.m**-3, ...)
normalizations = MHDNormalizations(B=0.5*u.T, n=5e19*u.m**-3, L=0.2*u.m)

dimensionless_plasma = uniform_plasma / normalizations
dimensional_plasma = normalizations * dimensionless_plasma

Along those lines, we could also do things like

custom_particle = CustomParticle(mass=5e-25*, charge=1.6e-19*u.C)
dimensionless_particle = custom_particle / normalizations
dimensional_particle = normalizations * dimensionless_particle

Does anything else have thoughts or ideas on how a normalizations object could be used? Is using the multiplication and division operations like this the most reasonable interface for this?

To discuss the use case: would you say this would be helpful to run a parameter space exploration? E.g., I start with a bunch of dimensionless_plasma from some parameter range, run simulations from those (because dimensionless tends to be nicer for simulations due to floating point resolution?), then cast the results back to dimensional space?