1 /++ 2 This module only contains a template mixin that defines 3 SI units, prefixes and symbols. 4 5 Copyright: Copyright 2013-2018, Nicolas Sicard 6 Authors: Nicolas Sicard 7 License: $(LINK www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 Source: $(LINK https://github.com/biozic/quantities) 9 +/ 10 module quantities.si.definitions; 11 12 /++ 13 Generates the definitions of the SI units, prefixes and symbols. 14 +/ 15 mixin template SIDefinitions(N) 16 { 17 import quantities.compiletime.quantity : Quantity, unit, square, cubic; 18 import quantities.runtime.qvariant : prefix; 19 import quantities.runtime.parsing : SymbolList; 20 import std.math : PI; 21 import std.traits : isNumeric; 22 23 static assert(isNumeric!N); 24 25 /// The dimensionless unit 1. 26 enum one = unit!(N, ""); 27 28 /// Base SI units. 29 enum meter = unit!(N, "L"); 30 alias metre = meter; /// ditto 31 enum kilogram = unit!(N, "M"); /// ditto 32 enum second = unit!(N, "T"); /// ditto 33 enum ampere = unit!(N, "I"); /// ditto 34 enum kelvin = unit!(N, "Θ"); /// ditto 35 enum mole = unit!(N, "N"); /// ditto 36 enum candela = unit!(N, "J"); /// ditto 37 38 /// Derived SI units 39 enum radian = meter / meter; // ditto 40 enum steradian = square(meter) / square(meter); /// ditto 41 enum hertz = 1 / second; /// ditto 42 enum newton = kilogram * meter / square(second); /// ditto 43 enum pascal = newton / square(meter); /// ditto 44 enum joule = newton * meter; /// ditto 45 enum watt = joule / second; /// ditto 46 enum coulomb = second * ampere; /// ditto 47 enum volt = watt / ampere; /// ditto 48 enum farad = coulomb / volt; /// ditto 49 enum ohm = volt / ampere; /// ditto 50 enum siemens = ampere / volt; /// ditto 51 enum weber = volt * second; /// ditto 52 enum tesla = weber / square(meter); /// ditto 53 enum henry = weber / ampere; /// ditto 54 enum celsius = kelvin; /// ditto 55 enum lumen = candela / steradian; /// ditto 56 enum lux = lumen / square(meter); /// ditto 57 enum becquerel = 1 / second; /// ditto 58 enum gray = joule / kilogram; /// ditto 59 enum sievert = joule / kilogram; /// ditto 60 enum katal = mole / second; /// ditto 61 62 /// Units compatible with the SI 63 enum gram = 1e-3 * kilogram; 64 enum minute = 60 * second; /// ditto 65 enum hour = 60 * minute; /// ditto 66 enum day = 24 * hour; /// ditto 67 enum degreeOfAngle = PI / 180 * radian; /// ditto 68 enum minuteOfAngle = degreeOfAngle / 60; /// ditto 69 enum secondOfAngle = minuteOfAngle / 60; /// ditto 70 enum hectare = 1e4 * square(meter); /// ditto 71 enum liter = 1e-3 * cubic(meter); /// ditto 72 alias litre = liter; /// ditto 73 enum ton = 1e3 * kilogram; /// ditto 74 enum electronVolt = 1.60217653e-19 * joule; /// ditto 75 enum dalton = 1.66053886e-27 * kilogram; /// ditto 76 77 /// SI prefixes. 78 alias yotta = prefix!1e24; 79 alias zetta = prefix!1e21; /// ditto 80 alias exa = prefix!1e18; /// ditto 81 alias peta = prefix!1e15; /// ditto 82 alias tera = prefix!1e12; /// ditto 83 alias giga = prefix!1e9; /// ditto 84 alias mega = prefix!1e6; /// ditto 85 alias kilo = prefix!1e3; /// ditto 86 alias hecto = prefix!1e2; /// ditto 87 alias deca = prefix!1e1; /// ditto 88 alias deci = prefix!1e-1; /// ditto 89 alias centi = prefix!1e-2; /// ditto 90 alias milli = prefix!1e-3; /// ditto 91 alias micro = prefix!1e-6; /// ditto 92 alias nano = prefix!1e-9; /// ditto 93 alias pico = prefix!1e-12; /// ditto 94 alias femto = prefix!1e-15; /// ditto 95 alias atto = prefix!1e-18; /// ditto 96 alias zepto = prefix!1e-21; /// ditto 97 alias yocto = prefix!1e-24; /// ditto 98 99 /// A list of common SI symbols and prefixes 100 // dfmt off 101 enum siSymbolList = SymbolList!N() 102 .addUnit("m", meter) 103 .addUnit("kg", kilogram) 104 .addUnit("s", second) 105 .addUnit("A", ampere) 106 .addUnit("K", kelvin) 107 .addUnit("mol", mole) 108 .addUnit("cd", candela) 109 .addUnit("rad", radian) 110 .addUnit("sr", steradian) 111 .addUnit("Hz", hertz) 112 .addUnit("N", newton) 113 .addUnit("Pa", pascal) 114 .addUnit("J", joule) 115 .addUnit("W", watt) 116 .addUnit("C", coulomb) 117 .addUnit("V", volt) 118 .addUnit("F", farad) 119 .addUnit("Ω", ohm) 120 .addUnit("S", siemens) 121 .addUnit("Wb", weber) 122 .addUnit("T", tesla) 123 .addUnit("H", henry) 124 .addUnit("lm", lumen) 125 .addUnit("lx", lux) 126 .addUnit("Bq", becquerel) 127 .addUnit("Gy", gray) 128 .addUnit("Sv", sievert) 129 .addUnit("kat", katal) 130 .addUnit("g", gram) 131 .addUnit("min", minute) 132 .addUnit("h", hour) 133 .addUnit("d", day) 134 .addUnit("l", liter) 135 .addUnit("L", liter) 136 .addUnit("t", ton) 137 .addUnit("eV", electronVolt) 138 .addUnit("Da", dalton) 139 .addPrefix("Y", 1e24) 140 .addPrefix("Z", 1e21) 141 .addPrefix("E", 1e18) 142 .addPrefix("P", 1e15) 143 .addPrefix("T", 1e12) 144 .addPrefix("G", 1e9) 145 .addPrefix("M", 1e6) 146 .addPrefix("k", 1e3) 147 .addPrefix("h", 1e2) 148 .addPrefix("da", 1e1) 149 .addPrefix("d", 1e-1) 150 .addPrefix("c", 1e-2) 151 .addPrefix("m", 1e-3) 152 .addPrefix("µ", 1e-6) 153 .addPrefix("n", 1e-9) 154 .addPrefix("p", 1e-12) 155 .addPrefix("f", 1e-15) 156 .addPrefix("a", 1e-18) 157 .addPrefix("z", 1e-21) 158 .addPrefix("y", 1e-24); 159 // dfmt on 160 }