# Physical quantities (`rmgpy.quantity`

)¶

A physical quantity is defined by a numerical value and a unit of measurement.

The `rmgpy.quantity`

module contains classes and methods for working with
physical quantities. Physical quantities are represented by either the
`ScalarQuantity`

or
`ArrayQuantity`

class depending on
whether a scalar or vector (or tensor) value is used. The
`Quantity`

function automatically chooses the
appropriate class based on the input value. In both cases, the value of a
physical quantity is available from the `value`

attribute, and the units from
the `units`

attribute.

For efficient computation, the value is stored internally in the SI equivalent
units. The SI value can be accessed directly using the `value_si`

attribute.
Usually it is good practice to read the `value_si`

attribute into a local
variable and then use it for computations, especially if it is referred to
multiple times in the calculation.

Physical quantities also allow for storing of uncertainty values for both
scalars and arrays. The `uncertaintyType`

attribute indicates whether the
given uncertainties are additive (`"+|-"`

) or multiplicative (`"*|/"`

),
and the `uncertainty`

attribute contains the stored uncertainties. For
additive uncertainties these are stored in the given units (not the SI
equivalent), since they are generally not needed for efficient computations.
For multiplicative uncertainties, the uncertainty values are by definition
dimensionless.

## Quantity objects¶

Class | Description |
---|---|

`ScalarQuantity` |
A scalar physical quantity, with units and uncertainty |

`ArrayQuantity` |
An array physical quantity, with units and uncertainty |

`Quantity()` |
Return a scalar or array physical quantity |

## Unit types¶

Units can be classified into categories based on the associated dimensionality. For example, miles and kilometers are both units of length; seconds and hours are both units of time, etc. Clearly, quantities of different unit types are fundamentally different.

RMG provides functions that create physical quantities (scalar or array) and validate the units for a variety of unit types. This prevents the user from inadvertently mixing up their units - e.g. by setting an enthalpy with entropy units - which should reduce errors. RMG recognizes the following unit types:

Function Unit type SI unit `Acceleration()`

acceleration \(\mathrm{m/s^2}\) `Area()`

area \(\mathrm{m^2}\) `Concentration()`

concentration \(\mathrm{mol/cm^3}\) `Dimensionless()`

dimensionless `Energy()`

energy \(\mathrm{J/mol}\) `Entropy()`

entropy \(\mathrm{J/mol \cdot K}\) `Flux()`

flux \(\mathrm{mol/cm^2 \cdot s}\) `Frequency()`

frequency \(\mathrm{cm^{-1}}\) `Force()`

force \(\mathrm{N}\) `Inertia()`

inertia \(\mathrm{kg \cdot m^2}\) `Length()`

length \(\mathrm{m}\) `Mass()`

mass \(\mathrm{kg}\) `Momentum()`

momentum \(\mathrm{kg \cdot m/s^2}\) `Power()`

power \(\mathrm{W}\) `Pressure()`

pressure \(\mathrm{Pa}\) `RateCoefficient()`

rate coefficient \(\mathrm{s^{-1}}\), \(\mathrm{m^3/mol \cdot s}\), \(\mathrm{m^6/mol^2 \cdot s}\), \(\mathrm{m^9/mol^3 \cdot s}\) `Temperature()`

temperature \(\mathrm{K}\) `Time()`

time \(\mathrm{s}\) `Velocity()`

velocity \(\mathrm{m/s}\) `Volume()`

volume \(\mathrm{m^3}\)

In RMG, all energies, heat capacities, concentrations, fluxes, and rate coefficients are treated as intensive; this means that these quantities are always expressed “per mole” or “per molecule”. All other unit types are extensive. A special exception is added for mass so as to allow for coercion of g/mol to amu.

RMG also handles rate coefficient units as a special case, as there are multiple allowed dimensionalities based on the reaction order. Note that RMG generally does not attempt to verify that the rate coefficient units match the reaction order, but only that it matches one of the possibilities.

The table above gives the SI unit that RMG uses internally to work with physical quantities. This does not necessarily correspond with the units used when outputting values. For example, pressures are often output in units of \(\mathrm{bar}\) instead of \(\mathrm{Pa}\), and moments of inertia in \(\mathrm{amu*angstrom^2}\) instead of \(\mathrm{kg*m^2}\). The recommended rule of thumb is to use prefixed SI units (or aliases thereof) in the output; for example, use \(\mathrm{kJ/mol}\) instead of \(\mathrm{kcal/mol}\) for energy values.