Working with Units

The AMUSE framework provides a unit handling library. This library is used throughout the AMUSE framework. When interacting with a code all data has a unit, even scaled systems have units.

Quantities

The basic data object is a quantity, a quantity is made up of a value and a unit. The value can be a single number (a scalar quantity) or a multi-dimensional array (a vector quantity).

Quantities are created by the `|(bar)` operator. All quantities can be used like numbers and a lot of numpy functions also work on quantities.

>>> from amuse.units.si import *
>>> from amuse.units.core import named_unit
>>>
>>> weigth = 80 | kg
>>> persons = 10
>>> print ("Total weight: ", persons * weigth)
Total weight:  800 kg

>>> day = named_unit("day", "d", s * 60 * 60 * 24 )
>>> weight_loss = (0.1 | kg) / (1 | day)
>>> print ("Weight loss: ", weight_loss)
Weight loss:  0.1 1.15740740741e-05 * kg * s**-1
>>> print ("Weight loss: ", weight_loss.as_quantity_in(kg/day))
Weight loss:  0.1 kg / d

Working with arrays

A vector quantity can be used like a python list. Take care to only put quantities into a vector quantity. These vector quantities behave more like numpy arrays than like python lists in that numeric operators operate on them element-wise; they can also be initialized from numpy arrays.

>>> from amuse.units.units import MSun
>>>
>>> masses = [] | MSun
>>> for i in range(10):
...     masses.append(i**2 | MSun)
>>> print ("Masses:", masses)
Masses: [0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0] MSun

Note

When working with arrays, some care must be taken to ensure that vector quantities are created and not arrays of quantities. The following code will create an array of quantities

>>> from amuse.units.units import MSun
>>>
>>> masses = []
>>> for i in range(2):
...     masses.append(i**2 | MSun)
>>> print ("Masses:", masses)
Masses: [quantity<0 MSun>, quantity<1 MSun>]