This package provides a set of predefined conventional elemental mol units (like molC for moles of carbon) and a standardised method for defining custom mol units for the Julia language.
It essentially extends the Unitful.jl package.
Units are available as u"molXX" for most of the elements of the periodic table (just replace XX with the element's symbol).
julia> using UnitfulMoles
julia> 3u"mmolFe" / 10u"molC"
0.3 mmolFe molC⁻¹You can also directly load the iron mmol and carbon mol units via
julia> using UnitfulMoles: mmolFe, molC
julia> 3mmolFe / 10molC
0.3 mmolFe molC⁻¹Molar weights are provided for free, so you can convert from moles to grams effortlessly with Unitful's uconvert function (or the |> symbol):
julia> using UnitfulMoles
julia> uconvert(u"g", 5u"mmolFe")
0.279225 g
julia> 200u"molC" |> u"kg"
2.4021999999999997 kgNote:
Atomic weights taken from Atomic weights of the elements 2013 (IUPAC Technical Report) doi:10.1515/pac-2015-0305. Weights in g are provided with 5 digit precision, using "Conventional" weights where a range is provided instead of a specific value.
And you can create custom compounds with the @compound macro:
julia> using UnitfulMoles, Unitful
julia> @compound H2O
molH₂O
julia> 10molH₂O |> u"g" # Molecular weight is calculated automatically!
180.15 g
julia> @compound CH₄ # subscripts work as well (and look nicer, too!)
molCH₄
julia> 1molCH₄ |> u"g"
16.043 gFor custom mol units, the main command is the @mol macro:
julia> using UnitfulMoles, Unitful
julia> @mol A
molAThis allows for stoichiometric ratios to be expressed more naturally:
julia> @mol B
molB
julia> 0.5molA/molB
0.5 molA molB⁻¹You can also assign a molar weight to the unit to allow conversion between mol and g:
julia> @mol Foo 14.0067
molFoo
julia> uconvert(u"g", 5molFoo)
70.0335 gYou can use these macros in assignments:
julia> using UnitfulMoles, Unitful
julia> x = (100@compound CO2) / 25u"L"
4.0 molCO₂ L⁻¹
julia> x |> u"g/L"
176.036 g L⁻¹The @xmol macro creates fractional moles scaled to one mole of an element in a
compound. The best example is the C-mole, which measure the amount of a compound
relative to one mole of C:
julia> using UnitfulMoles
julia> @xmol C C₈H₁₀N₄O₂
C-molC₈H₁₀N₄O₂
julia> uconvert(molC₈H₁₀N₄O₂, 1CmolC₈H₁₀N₄O₂)
0.125 molC₈H₁₀N₄O₂
julia> uconvert(CmolC₈H₁₀N₄O₂, 1molC₈H₁₀N₄O₂)
8.0 C-molC₈H₁₀N₄O₂
julia> uconvert(u"g", 1CmolC₈H₁₀N₄O₂)
24.27425 ggTo use UnitfulMoles.jl in a package you will need to register your package with Unitful.jl, by adding this code in the main package module.
function __init__()\
Unitful.register(YourPackageName)
endWithout this you will likely have errors with using e.g. a @compound you define in the package.
See the Unitful docs for details.