Extends Unitful.jl to include angle as a dimension and allow dispatching on angles.
Install DimensionfulAngles.jl the usual way Julia packages are installed, i.e., using Julia package manager:
using Pkg
Pkg.add("DimensionfulAngles")
or in the Pkg REPL (enter from the Julia REPL with ]
):
pkg> add DimensionfulAngles
If you use this code for your research please consider citing:
Michelén Ströfer, C. A. (2022). DimensionfulAngles.jl (Version 0.1.0) [Computer software]. https://github.com/cmichelenstrofer/DimensionfulAngles.jl
BibTeX:
@software{Michelen_Strofer_DimensionfulAngles_jl_2022,
author = {Michelén Ströfer, Carlos Alejandro},
doi = {10.5281/zenodo.7500588},
month = {12},
title = {{DimensionfulAngles.jl}},
url = {https://github.com/cmichelenstrofer/DimensionfulAngles.jl},
version = {0.1.0},
year = {2022}
}
Use DimensionfulAngles.jl for units containing angles and Unitful.jl for all other units.
The units in DimensionfulAngles.jl are differentiated from their dimensionless counterparts with a superscript ᵃ
.
Simply add this superscript to any angle units to make it dimensionful.
In Julia environments this can be typed as \^a<tab>
.
julia> using Unitful
julia> using DimensionfulAngles
julia> dimensionless_angle = 1u"rad"
1 rad
julia> dimensionful_angle = 1u"radᵃ"
1 rad
julia> typeof(dimensionless_angle)
Quantity{Int64, NoDims, Unitful.FreeUnits{(rad,), NoDims, nothing}}
julia> typeof(dimensionful_angle)
Quantity{Int64, 𝐀, Unitful.FreeUnits{(rad,), 𝐀, nothing}}
When defining quantities with units from DimensionfulAngles.jl you can use the ua
string instead and omit the superscript ᵃ
.
But when defining quantities with units from both it is more convenient to use the u
string.
julia> dimensionful_angle = 1ua"rad"
1 rad
julia> typeof(dimensionful_angle)
Quantity{Int64, 𝐀, Unitful.FreeUnits{(rad,), 𝐀, nothing}}
julia> angular_velocity = 1.2u"radᵃ/s"
1.2 rad s⁻¹
julia> typeof(angular_velocity)
Quantity{Float64, 𝐀 𝐓⁻¹, Unitful.FreeUnits{(rad, s⁻¹), 𝐀 𝐓⁻¹, nothing}}
A third alternative is to directly import only the units you will be using and renaming those from DimensionfulAngles.jl to remove the superscript ᵃ
.
julia> using Unitful
julia> using Unitful: m, s, kg
julia> using DimensionfulAngles: radᵃ as rad, °ᵃ as °
julia> angular_velocity = 1.2rad / s
1.2 rad s⁻¹
Another way of doing this is to import all default units, which includes SI base and derived units from Unitful.jl
with angle units from DimensionfulAngles.jl
.
This is done as
julia> using DimensionfulAngles.DefaultSymbols
julia> angular_velocity = 1.2rad / s
To convert a quantity to or from Unitful.jl
use the uconvert
function with first
argument either :Unitful
or :DimensionfulAngles
.
For example:
julia> using Unitful, DimensionfulAngles
julia> ω = 3.2u"radᵃ/s"
3.2 rad s⁻¹
julia> ω̄ = uconvert(:Unitful, ω)
3.2 rad s⁻¹
julia> dimension(ω)
𝐀 𝐓⁻¹
julia> dimension(ω̄)
𝐓⁻¹
Contributions are welcome! 🎊 Please see the contribution guidelines for ways to contribute to the project.
Thanks goes to these wonderful people (emoji key):
Carlos A. Michelén Ströfer 💻 📖 |
Sebastian Stock 🤔 |
Kristoffer Carlsson 🚧 |
Daniel Boland 🤔 🐛 💻 |
devel-chm 📖 |
Ben Conrad 🚧 |
Some portions of this software are adapted from:
- UnitfulAngles.jl: Copyright (c) 2017: Yakir Luc Gagnon.
- UnitfulUS.jl: Copyright (c) 2017, California Institute of Technology. All rights reserved.