Unit Conversion and Dimensional Analysis Library 3.6.1
A compile-time, header-only C++23 dimensional-analysis library
Loading...
Searching...
No Matches
units.h
Go to the documentation of this file.
1//--------------------------------------------------------------------------------------------------
2//
3// UnitConversion: A compile-time c++23 unit conversion library with no dependencies
4//
5//--------------------------------------------------------------------------------------------------
6//
7// The MIT License (MIT)
8//
9// Permission is hereby granted, free of charge, to any person obtaining a copy of this software
10// and associated documentation files (the "Software"), to deal in the Software without
11// restriction, including without limitation the rights to use, copy, modify, merge, publish,
12// distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
13// Software is furnished to do so, subject to the following conditions:
14//
15// The above copyright notice and this permission notice shall be included in all copies or
16// substantial portions of the Software.
17//
18// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
19// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23//
24//--------------------------------------------------------------------------------------------------
25//
26// Copyright (c) 2016 Nic Holthaus
27//
28//--------------------------------------------------------------------------------------------------
29//
30// ATTRIBUTION:
31// Parts of this work have been adapted from:
32// http://stackoverflow.com/questions/35069778/create-comparison-trait-for-template-classes-whose-parameters-are-in-a-different
33// http://stackoverflow.com/questions/28253399/check-traits-for-all-variadic-template-arguments/28253503
34// http://stackoverflow.com/questions/36321295/rational-approximation-of-square-root-of-stdratio-at-compile-time?noredirect=1#comment60266601_36321295
35// https://github.com/swatanabe/cppnow17-units
36// https://physics.nist.gov/cuu/Constants/index.html
37//
38//--------------------------------------------------------------------------------------------------
39//
43//
44//--------------------------------------------------------------------------------------------------
45
46#pragma once
47
48#ifndef units_h_
49#define units_h_
50
51#include <units/acceleration.h>
52#include <units/angle.h>
54#include <units/area.h>
55#include <units/capacitance.h>
56#include <units/charge.h>
57#include <units/concentration.h>
58#include <units/conductance.h>
59#include <units/current.h>
60#include <units/data.h>
62#include <units/density.h>
63#include <units/energy.h>
65#include <units/force.h>
66#include <units/frequency.h>
67#include <units/illuminance.h>
68#include <units/impedance.h>
69#include <units/inductance.h>
70#include <units/irradiance.h>
71#include <units/jerk.h>
72#include <units/length.h>
73#include <units/luminance.h>
74#include <units/luminous_flux.h>
77#include <units/magnetic_flux.h>
78#include <units/mass.h>
79#include <units/power.h>
80#include <units/pressure.h>
81#include <units/radiance.h>
83#include <units/radiation.h>
84#include <units/solid_angle.h>
85#include <units/spectral_flux.h>
89#include <units/substance.h>
92#include <units/temperature.h>
93#include <units/time.h>
94#include <units/torque.h>
95#include <units/velocity.h>
96#include <units/viscosity.h>
97#include <units/voltage.h>
98#include <units/volume.h>
100
101// Optional interoperability with the Eigen linear-algebra library. Inert unless <Eigen/Core> is on the include
102// path; see units/eigen.h. Included last so it can reference any dimension defined above.
103#include <units/eigen.h>
104
105namespace units
106{
107 namespace detail
108 {
109 struct PI : conversion_factor<std::ratio<1>, dimensionless_, std::ratio<1>>
110 {
111 };
112 } // namespace detail
113
114 //------------------------------
115 // CONSTANTS
116 //------------------------------
117
123 inline namespace constants
124 {
130
131 // clang-format off
132 inline constexpr unit<detail::PI> pi(1);
133 inline constexpr meters_per_second c(299792458.0);
135 inline constexpr unit<compound_conversion_factor<joules_, seconds_>> h(6.62607015e-34);
139 inline constexpr ohms Z0(376.730313668);
141 inline constexpr coulombs e(1.602176634e-19);
142 inline constexpr kilograms m_e(9.1093837015e-31);
143 inline constexpr kilograms m_p(1.67262192369e-27);
145 inline constexpr unit<inverse<mols_>> N_A(6.02214076e23);
151 // clang-format on
152 } // namespace constants
153} // end namespace units
154
155#endif // units_h_
units representing acceleration values
units representing angular velocity values
units representing area values
units representing capacitance values
units representing charge values
Definition core.h:2735
units representing concentration values
units representing conductance values
units representing current values
units representing data values
units representing data transfer rate values
units representing density values
optional, dependency-free interoperability between units and the Eigen linear-algebra library
units representing energy values
units representing energy density values
units representing force values
units representing frequency values
typename detail::inverse_impl< Cf >::type inverse
represents the inverse unit type of class U.
Definition core.h:1641
units representing illuminance values
units representing impedance values
units representing inductance values
units representing irradiance values
units representing jerk values
units representing length values
units representing luminance values
units representing luminous flux values
units representing luminous intensity values
units representing magnetic field strength values
units representing magnetic flux values
units representing mass values
namespace for physical constants like PI and Avogadro's Number.
Definition units.h:124
constexpr kilograms m_p(1.67262192369e-27)
proton mass.
constexpr unit< compound_conversion_factor< newtons_, square_meters_, inverse< squared< coulombs_ > > > > k_e(8.9875517923e9)
Coulomb's constant.
constexpr ohms Z0(376.730313668)
characteristic impedance of vacuum.
constexpr unit< compound_conversion_factor< cubed< meters_ >, inverse< kilograms_ >, inverse< squared< seconds_ > > > > G(6.67430e-11)
Newtonian constant of gravitation.
constexpr unit< compound_conversion_factor< watts_, inverse< square_meters_ >, inverse< squared< squared< kelvin_ > > > > > sigma(5.670374419e-8)
Stefan-Boltzmann constant.
constexpr unit< compound_conversion_factor< coulombs_, inverse< mols_ > > > F(96485.33212)
Faraday constant.
constexpr unit< compound_conversion_factor< joules_, inverse< kelvin_ > > > k_B(1.380649e-23)
Boltzmann constant.
constexpr unit< compound_conversion_factor< farads_, inverse< meters_ > > > epsilon0(8.8541878128e-12)
vacuum permittivity.
constexpr unit< compound_conversion_factor< joules_, inverse< teslas_ > > > mu_B(9.2740100783e-24)
Bohr Magneton.
constexpr unit< inverse< mols_ > > N_A(6.02214076e23)
Avogadro's Number.
constexpr unit< detail::PI > pi(1)
Ratio of a circle's circumference to its diameter.
constexpr kilograms m_e(9.1093837015e-31)
electron mass.
constexpr coulombs e(1.602176634e-19)
elementary charge.
constexpr unit< compound_conversion_factor< joules_, inverse< kelvin_ >, inverse< mols_ > > > R(8.314462618)
Gas constant.
constexpr meters_per_second c(299792458.0)
Speed of light in vacuum.
constexpr unit< compound_conversion_factor< joules_, seconds_ > > h_bar(1.054571817e-34)
Reduced Planck constant.
constexpr unit< compound_conversion_factor< newtons_, inverse< squared< amperes_ > > > > mu0(1.25663706212e-6)
vacuum permeability.
constexpr unit< compound_conversion_factor< joules_, seconds_ > > h(6.62607015e-34)
Planck constant.
Unit Conversion Library namespace.
Definition units.h:106
units representing power values
units representing angle values
units representing radiance values
units representing radiant intensity values
units representing radiation values
units representing solid angle values
units representing spectral flux values
units representing spectral intensity values
units representing spectral irradiance values
units representing spectral radiance values
Type representing an arbitrary conversion factor between units.
Definition core.h:1563
Definition units.h:110
units representing amount of substance values
units representing substance concentration values
units representing substance mass values
units representing temperature values
units representing time values
units representing torque values
units representing velocity values
units representing dynamic and kinematic viscosity values
units representing voltage values
units representing volume values
units representing volumetric flow rate values