Unit Domains¶
There are some ambiguous unit symbols. Different fields use the same symbol to mean different things. In the units library the definition has defaulted to SI standard definition with two known ambiguities. the symbol ‘a’ is used for are, the symbol rad refers to radians.
However there are occasions where the units from one field or another are desired. The units library applies the notion of a unit domain which can be passed to the unit_flags argument for any string conversion, for a few select units this will change the resulting from a string.
Available Domains¶
thus far 5 specific unit domains have been defined they are in the units::domains namespace.
ucum – THE UNIFIED CODE FOR UNITS OF MEASURE
cooking – units and symbols commonly used for recipes
astronomy – units and symbols used in astronomy
nuclear – units and symbols used in nuclear or particle physics
surveying – units and symbols used in surveying in the United states
us_customary – units and symbols traditionally used in the us(combination of cooking and surveying)
climate – units and symbols used in climate science
allDomains – this domain does all the above domains where not mutually exclusive. So mostly a combination of ucum and astronomy/nuclear with a few us customary units IT is not recommended to use this but provided for the combinations
The only units and symbols using the domain are those that might be ambiguous or contradictory to the ST definition. The specific units affected are defined in the next section.
Domain Specific Units¶
These are unit definitions affected by specifying a specific unit domain
UCUM¶
B – bel vs Byte
a – julian year vs are
Astronomy¶
am – arc minute vs attometer
as – arc second vs attosecond
year – mean tropical year vs median calendar year
Cooking¶
C – cup vs coulomb
T – Tablespoon vs Tesla
c – cup vs speed of light
t – teaspoon vs metric tonne
TB – Tablespoon vs TeraByte
smi – smidgen vs square mile
scruple – slightly different definition when used in cooking context
ds – dessertspoon vs deci second
Surveying¶
‘ and all variants refer to feet vs arcmin
‘’ and all variants refer to inches vs arcsec
Nuclear¶
rad radiation absorbed dose vs radian
rd same as rad vs rod
Climate¶
kt kilo-tonne vs karat
US customary¶
Combination of surveying and cooking
All domains¶
Combination of all of the above
More units will likely be added to this as the need arises
Specifying the domain¶
The domain can be specified in the unit_flag string supplied to the unit_from_string operation.
auto unit1=units::unit_from_string(unitString,nuclear_units)
when used as part of the flags argument the definitions are in the unit_conversion_flags enumeration
strict_ucum
cooking_units
astronomy_units
surveying_units
nuclear_units
climate_units
us_customary_units
A default domain can also be specified though
setUnitsDomain(code);
with the code using one of those found in the units::domains namespace. this domain will be used unless another is specified through the match flags. This function return the previous domain which can be used if only setting the value temporarily.
The default domain can be set at compile time through the UNITS_DEFAULT_DOMAIN definition
#define UNITS_DEFAULT_DOMAIN units::domains::astronomy
#include "units/units.hpp"
In CMake this field can be defined and will be directly translated. The UNITS_DOMAIN CMake variable can also be used to specify a domain as a string like UCUM or COOKING and have it appropriately translate. See Unit Library CMake Reference for more details.