Prefixes.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <boost/units/scale.hpp>
7 #include <boost/units/make_scaled_unit.hpp>
8 #include <boost/units/systems/si/dimensionless.hpp>
9 #include <boost/units/pow.hpp>
10 // #include <boost/units/systems/si/prefixes.hpp>
11 
12 #include "boca/units/Si.hh"
13 #include "boca/units/Barn.hh"
15 
16 namespace boca
17 {
18 
19 namespace units
20 {
21 
22 // redefine prefixes in boca namespace
23 // TODO find a way to import the prefixes into boca namespace without reimplementing them or including the full si namespace
24 #define BOOST_UNITS_METRIC_PREFIX_2(exponent, name) \
25  using name ## _type = boost::units::make_scaled_unit<boost::units::si::dimensionless, boost::units::scale<10, boost::units::static_rational<exponent> > >::type; \
26  BOOST_UNITS_STATIC_CONSTANT(name, name ## _type)
47 
48 #define BOOST_UNITS_LITERAL(suffix, quant, unit, prefix, exponent) \
49  inline boost::units::quantity<quant, double> operator "" _##prefix##suffix(long double x) { \
50  return boost::units::quantity<quant, double>(x * std::pow(10, exponent) * unit); \
51  } \
52  inline boost::units::quantity<quant, double > operator "" _##prefix##suffix(unsigned long long x) { \
53  return boost::units::quantity<quant, double >(static_cast<double>(x) * std::pow(10, exponent) * unit); \
54  } \
55  static const boost::units::quantity<quant, double> prefix##suffix(1. * std::pow(10, exponent) * unit); \
56  static const auto prefix##suffix##2 = boost::units::pow<2>(prefix##suffix); \
57 
58 #define BOOST_UNITS_LITERAL_SET(suffix, quant, unit) \
59  BOOST_UNITS_LITERAL(suffix, quant, unit, Y, 24) \
60  BOOST_UNITS_LITERAL(suffix, quant, unit, Z, 21) \
61  BOOST_UNITS_LITERAL(suffix, quant, unit, E, 18) \
62  BOOST_UNITS_LITERAL(suffix, quant, unit, P, 15) \
63  BOOST_UNITS_LITERAL(suffix, quant, unit, T, 12) \
64  BOOST_UNITS_LITERAL(suffix, quant, unit, G, 9) \
65  BOOST_UNITS_LITERAL(suffix, quant, unit, M, 6) \
66  BOOST_UNITS_LITERAL(suffix, quant, unit, k, 3) \
67  BOOST_UNITS_LITERAL(suffix, quant, unit, h, 2) \
68  BOOST_UNITS_LITERAL(suffix, quant, unit, da, 1) \
69  BOOST_UNITS_LITERAL(suffix, quant, unit, , 0) \
70  BOOST_UNITS_LITERAL(suffix, quant, unit, d, -1) \
71  BOOST_UNITS_LITERAL(suffix, quant, unit, c, -2) \
72  BOOST_UNITS_LITERAL(suffix, quant, unit, m, -3) \
73  BOOST_UNITS_LITERAL(suffix, quant, unit, u, -6) \
74  BOOST_UNITS_LITERAL(suffix, quant, unit, n, -9) \
75  BOOST_UNITS_LITERAL(suffix, quant, unit, p, -12) \
76  BOOST_UNITS_LITERAL(suffix, quant, unit, f, -15) \
77  BOOST_UNITS_LITERAL(suffix, quant, unit, a, -18) \
78  BOOST_UNITS_LITERAL(suffix, quant, unit, z, -21) \
79  BOOST_UNITS_LITERAL(suffix, quant, unit, y, -24)
80 
86 BOOST_UNITS_LITERAL_SET(m, boost::units::si::length, boost::units::si::metre)
87 
88 // BOOST_UNITS_LITERAL_SET(g, boost::units::si::mass, 0.001 * boost::units::si::kilogram)
89 // BOOST_UNITS_LITERAL_SET(s, boost::units::si::time, boost::units::si::second)
90 // BOOST_UNITS_LITERAL_SET(A, boost::units::si::current, boost::units::si::ampere)
91 // BOOST_UNITS_LITERAL_SET(K, boost::units::si::temperature, boost::units::si::kelvin)
92 // BOOST_UNITS_LITERAL_SET(mol, boost::units::si::amount, boost::units::si::mole)
93 // BOOST_UNITS_LITERAL_SET(cd, boost::units::si::luminous_intensity, boost::units::si::candela)
94 // BOOST_UNITS_LITERAL_SET(Hz, boost::units::si::frequency, boost::units::si::hertz)
95 
96 
101 BOOST_UNITS_LITERAL_SET(rad, boost::units::si::plane_angle, boost::units::si::radian)
102 
103 // BOOST_UNITS_LITERAL_SET(sr, boost::units::si::solid_angle, boost::units::si::steradian)
104 // BOOST_UNITS_LITERAL_SET(N, boost::units::si::force, boost::units::si::newton)
105 // BOOST_UNITS_LITERAL_SET(Pa, boost::units::si::pressure, boost::units::si::pascal)
106 // BOOST_UNITS_LITERAL_SET(J, boost::units::si::energy, boost::units::si::joule)
107 // BOOST_UNITS_LITERAL_SET(W, boost::units::si::power, boost::units::si::watt)
108 // BOOST_UNITS_LITERAL_SET(C, boost::units::si::electric_charge, boost::units::si::coulomb)
109 // BOOST_UNITS_LITERAL_SET(V, boost::units::si::electric_potential, boost::units::si::volt)
110 // BOOST_UNITS_LITERAL_SET(F, boost::units::si::capacitance, boost::units::si::farad)
111 // BOOST_UNITS_LITERAL_SET(ohm, boost::units::si::resistance, boost::units::si::ohm)
112 // BOOST_UNITS_LITERAL_SET(S, boost::units::si::conductance, boost::units::si::siemens)
113 // BOOST_UNITS_LITERAL_SET(Wb, boost::units::si::magnetic_flux, boost::units::si::weber)
114 // BOOST_UNITS_LITERAL_SET(T, boost::units::si::magnetic_flux_density, boost::units::si::tesla)
115 // BOOST_UNITS_LITERAL_SET(H, boost::units::si::inductance, boost::units::si::henry)
116 // BOOST_UNITS_LITERAL_SET(degC, boost::units::si::temperature, boost::units::si::kelvin + 273.15 * boost::units::si::kelvin)
117 // BOOST_UNITS_LITERAL_SET(lm, boost::units::si::luminous_flux, boost::units::si::lumen)
118 // BOOST_UNITS_LITERAL_SET(lx, boost::units::si::illuminance, boost::units::si::lux)
119 // BOOST_UNITS_LITERAL_SET(Bq, boost::units::si::activity, boost::units::si::becquerel)
120 // BOOST_UNITS_LITERAL_SET(Gy, boost::units::si::absorbed_dose, boost::units::si::gray)
121 // BOOST_UNITS_LITERAL_SET(Sv, boost::units::si::dose_equivalent, boost::units::si::sievert)
122 // BOOST_UNITS_LITERAL_SET(kat, boost::units::si::catalytic_activity, boost::units::si::katal)
123 // BOOST_UNITS_LITERAL_SET(min, boost::units::si::time, 60. * boost::units::si::second)
124 // BOOST_UNITS_LITERAL_SET(h, boost::units::si::time, 60. * 60. * boost::units::si::second)
125 // BOOST_UNITS_LITERAL_SET(day, boost::units::si::time, 60. * 60. * 24. * boost::units::si::second)
126 // BOOST_UNITS_LITERAL_SET(deg, boost::units::si::plane_angle, Pi() / 180.)
127 // BOOST_UNITS_LITERAL_SET(l, boost::units::si::volume, 0.001 * boost::units::si::cubic_meter)
128 // BOOST_UNITS_LITERAL_SET(L, boost::units::si::volume, 0.001 * boost::units::si::cubic_meter)
129 // BOOST_UNITS_LITERAL_SET(t, boost::units::si::mass, 1000. * boost::units::si::kilogram)
130 
136 BOOST_UNITS_LITERAL_SET(eV, electronvolt::Energy, ElectronVolt)
137 
144 
150 BOOST_UNITS_LITERAL_SET(U, boost::units::si::dimensionless, boost::units::si::si_dimensionless)
151 
152 }
153 
154 using namespace units;
155 
156 }
Boost provides free peer-reviewed portable C++ source libraries.
Definition: LorentzVectorBase.hh:726
boost::units::unit< boost::units::area_dimension, System > Area
Definition: Barn.hh:24
Boosted Collider Analysis.
Definition: Analysis.hh:15
#define BOOST_UNITS_LITERAL_SET(suffix, quant, unit)
Definition: Prefixes.hh:58
boost::units::quantity< electronvolt::Energy > Energy
Energy measured in electronvolt.
Definition: ElectronVolt.hh:56
#define BOOST_UNITS_METRIC_PREFIX_2(exponent, name)
Definition: Prefixes.hh:24