Units
The two main functions for working with units are uparse and u_str:
DynamicQuantities.UnitsParse.@u_str — Macro
u"[unit expression]"Parse a string containing an expression of units and return the corresponding Quantity object with Float64 value. For example, u"km/s^2" would be parsed to Quantity(1000.0, length=1, time=-2).
Note that inside this expression, you also have access to the Constants module. So, for example, u"Constants.c^2 * Hz^2" would evaluate to the quantity corresponding to the speed of light multiplied by Hertz, squared.
DynamicQuantities.UnitsParse.uparse — Function
uparse(s::AbstractString)Parse a string containing an expression of units and return the corresponding Quantity object with Float64 value. For example, uparse("m/s") would be parsed to Quantity(1.0, length=1, time=-1).
Note that inside this expression, you also have access to the Constants module. So, for example, uparse("Constants.c^2 * Hz^2") would evaluate to the quantity corresponding to the speed of light multiplied by Hertz, squared.
Available units
The base SI units are as follows. You can either use the @u_str macro like 1.5u"m", or simply import these explicitly from the package with using DynamicQuantities: m.
DynamicQuantities.Units.m — Constant
Length in meters. Available variants: fm, pm, nm, μm (/um), cm, inch, dm, mm, ft, km, mi, Mm, Gm.
DynamicQuantities.Units.kg — Constant
Mass in kilograms. Available variants: pg, ng, μg (/ug), mg, g.
DynamicQuantities.Units.s — Constant
Time in seconds. Available variants: fs, ps, ns, μs (/us), ms, min (/minute), h (/hr), day (/d), wk, yr, kyr, Myr, Gyr.
DynamicQuantities.Units.A — Constant
Current in Amperes. Available variants: nA, μA (/uA), mA, kA.
DynamicQuantities.Units.K — Constant
Temperature in Kelvin. Available variant: mK.
DynamicQuantities.Units.cd — Constant
Luminosity in candela. Available variant: mcd.
DynamicQuantities.Units.mol — Constant
Amount in moles. Available variant: pmol, nmol, μmol (/umol), mmol.
Derived units
Several derived SI units are available as well:
DynamicQuantities.Units.C — Constant
Charge in Coulombs.
sourceDynamicQuantities.Units.F — Constant
Capacitance in Farads. Available variants: fF, pF, nF, μF (/uF), mF.
DynamicQuantities.Units.H — Constant
Electrical inductance in henries.
sourceDynamicQuantities.Units.Hz — Constant
Frequency in Hertz. Available variants: nHz, μHz (/uHz), mHz, kHz, MHz, GHz.
DynamicQuantities.Units.J — Constant
Energy in Joules. Available variant: kJ.
DynamicQuantities.Units.L — Constant
Volume in liters. Available variants: μL (/uL), mL, cL, dL.
DynamicQuantities.Units.M — Constant
Molar concentration in molar. Available variants: pM, nM, μM (/uM), mM.
DynamicQuantities.Units.N — Constant
Force in Newtons. Available variants: μN (/uN), mN, kN.
DynamicQuantities.Units.Pa — Constant
Pressure in Pascals. Available variants: μPa (/uPa), mPa, kPa.
DynamicQuantities.Units.S — Constant
Electrical conductance, electric susceptance, and electric admittance in siemens. Available variants: nS, μS (/uS), mS, kS, MS, GS.
DynamicQuantities.Units.T — Constant
Magnetic flux density in Teslas. Available variants: Gauss
DynamicQuantities.Units.Torr — Constant
Pressure in Torr. Available variants: mTorr.
DynamicQuantities.Units.V — Constant
Voltage in Volts. Available variants: pV, nV, μV (/uV), mV, kV, MV, GV.
DynamicQuantities.Units.W — Constant
Power in Watts. Available variants: mW, kW, MW, GW.
DynamicQuantities.Units.Wb — Constant
Magnetic flux in webers. Available variants: nWb, μWb (/uWb), mWb.
DynamicQuantities.Units.bar — Constant
Pressure in bars. Available variants: mbar.
DynamicQuantities.Units.mmHg — Constant
Pressure in mmHg.
sourceDynamicQuantities.Units.rad — Constant
Angle in radians. Note that the SI definition is simply 1 rad = 1, so use symbolic units to avoid this. Available variants: nrad, μrad (/urad), mrad, deg, arcmin, arcsec, μarcsec (/uarcsec), marcsec.
DynamicQuantities.Units.sr — Constant
Solid angle in steradians. Note that the SI definition is simply 1 sr = 1, so use symbolic units to avoid this.
sourceDynamicQuantities.Units.Ω — Constant
Resistance in Ohms. Available variant: nΩ, μΩ (/uΩ), mΩ, kΩ, MΩ, GΩ. Also available is ASCII ohm (with variants nohm, μohm (/uohm), mohm, kohm, Mohm, Gohm).
Custom Units
You can define custom units with the @register_unit macro:
DynamicQuantities.@register_unit — Macro
@register_unit symbol valueRegister a new unit under the given symbol to have a particular value.
Example
julia> @register_unit MyVolt 1.5u"V"This will register a new unit MyVolt with a value of 1.5u"V". You can then use this unit in your calculations:
julia> x = 20us"MyVolt^2"
20.0 MyVolt²
julia> y = 2.5us"A"
2.5 A
julia> x * y^2 |> us"W^2"
281.25 W²
julia> x * y^2 |> us"W^2" |> sqrt |> uexpand
16.77050983124842 m² kg s⁻³sourceAffine Units
DynamicQuantities also supports affine units like Celsius and Fahrenheit through the AffineUnit{R} type and the ua string macro. For example,
# Define temperature in Celsius
room_temp = 22ua"degC" # 295.15 K
# Define temperature in Fahrenheit
freezing = 32ua"degF" # 273.15 K
# Can take differences normally, as these are now regular Quantities:
room_temp - freezing
# 22 KNote there are some subtleties about working with these:
DynamicQuantities.@ua_str — Macro
ua"unit"Parse a string containing an affine unit expression. Currently only supports °C (or degC) and °F (or degF).
For example:
room_temp = 22ua"degC" # The multiplication returns a QuantitysourceDynamicQuantities.aff_uparse — Function
aff_uparse(s::AbstractString)Parse a string into an affine unit (°C/degC, °F/degF). Function equivalent of ua"unit".
DynamicQuantities.AffineUnit — Type
AffineUnit{R}A simple struct for representing affine units like Celsius and Fahrenheit. This is not part of the AbstractDimensions hierarchy.
AffineUnit only supports scalar multiplication in the form number * unit (e.g., 22ua"degC"), which immediately converts it to a regular Quantity{Float64,Dimensions{R}}. Other operations like unit * number, division, addition, or subtraction with AffineUnit are not supported.
Multiplication with AffineUnit is non-associative due to the auto-conversion property. For example, (2 * 3) * ua"degC" ≠ 2 * (3 * ua"degC") because when a number multiplies an AffineUnit, it immediately converts to a regular Quantity with the affine transformation applied.
Currently, the only supported affine units are:
°CordegC- Degrees Celsius°FordegF- Degrees Fahrenheit