LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
electromagnetism.h
Go to the documentation of this file.
1 
19 #ifndef LARDATAALG_UTILITIES_QUANTITIES_ELECTROMAGNETISM_H
20 #define LARDATAALG_UTILITIES_QUANTITIES_ELECTROMAGNETISM_H
21 
22 // LArSoft libraries
24 
25 // C/C++ standard libraries
26 #include <ratio>
27 #include <string_view>
28 
29 //------------------------------------------------------------------------------
30 namespace util::quantities {
31 
32  namespace units {
33 
34  using namespace std::string_view_literals; // for operator""sv()
35 
36  struct Coulomb : public concepts::UnitBase {
37  static constexpr auto symbol = "C"sv;
38  static constexpr auto name = "coulomb"sv;
39  };
40 
41  struct Volt : public concepts::UnitBase {
42  static constexpr auto symbol = "V"sv;
43  static constexpr auto name = "volt"sv;
44  };
45 
46  } // namespace units
47 
48  // -- BEGIN Charge -----------------------------------------------------------
63 
66  template <typename R, typename T = double>
68 
69  //
70  // coulomb
71  //
73  template <typename T = double>
75 
78 
79  //
80  // millicoulomb
81  //
83  template <typename T = double>
85 
88 
89  //
90  // microcoulomb
91  //
93  template <typename T = double>
95 
98 
99  //
100  // nanocoulomb
101  //
103  template <typename T = double>
105 
108 
109  //
110  // picocoulomb
111  //
113  template <typename T = double>
115 
118 
119  //
120  // femtocoulomb
121  //
123  template <typename T = double>
125 
128 
129  // -- END Charge -------------------------------------------------------------
130 
131  // -- BEGIN Electric potential -----------------------------------------------
146 
149  template <typename R, typename T = double>
151 
152  //
153  // volt
154  //
156  template <typename T = double>
158 
160  using volt = volt_as<>;
161 
162  //
163  // millivolt
164  //
166  template <typename T = double>
168 
171 
172  //
173  // microvolt
174  //
176  template <typename T = double>
178 
181 
182  //
183  // kilovolt
184  //
186  template <typename T = double>
188 
191 
192  //
193  // megavolt
194  //
196  template <typename T = double>
198 
201 
202  //
203  // gigavolt
204  //
206  template <typename T = double>
208 
211 
213  // -- END Electric potential -------------------------------------------------
214 
233  namespace electromagnetism_literals {
234 
235  // @{
237  constexpr coulomb operator""_C(long double v)
238  {
239  return coulomb{static_cast<double>(v)};
240  }
241  constexpr coulomb operator""_C(unsigned long long int v)
242  {
243  return coulomb{static_cast<double>(v)};
244  }
245  // @}
246 
247  // @{
249  constexpr millicoulomb operator""_mC(long double v)
250  {
251  return millicoulomb{static_cast<double>(v)};
252  }
253  constexpr millicoulomb operator""_mC(unsigned long long int v)
254  {
255  return millicoulomb{static_cast<double>(v)};
256  }
257  // @}
258 
259  // @{
261  constexpr microcoulomb operator""_uC(long double v)
262  {
263  return microcoulomb{static_cast<double>(v)};
264  }
265  constexpr microcoulomb operator""_uC(unsigned long long int v)
266  {
267  return microcoulomb{static_cast<double>(v)};
268  }
269  // @}
270 
271  // @{
273  constexpr nanocoulomb operator""_nC(long double v)
274  {
275  return nanocoulomb{static_cast<double>(v)};
276  }
277  constexpr nanocoulomb operator""_nC(unsigned long long int v)
278  {
279  return nanocoulomb{static_cast<double>(v)};
280  }
281  // @}
282 
283  // @{
285  constexpr picocoulomb operator""_pC(long double v)
286  {
287  return picocoulomb{static_cast<double>(v)};
288  }
289  constexpr picocoulomb operator""_pC(unsigned long long int v)
290  {
291  return picocoulomb{static_cast<double>(v)};
292  }
293  // @}
294 
295  // @{
297  constexpr femtocoulomb operator""_fC(long double v)
298  {
299  return femtocoulomb{static_cast<double>(v)};
300  }
301  constexpr femtocoulomb operator""_fC(unsigned long long int v)
302  {
303  return femtocoulomb{static_cast<double>(v)};
304  }
305  // @}
306 
307  // @{
309  constexpr volt operator""_V(long double v)
310  {
311  return volt{static_cast<double>(v)};
312  }
313  constexpr volt operator""_V(unsigned long long int v)
314  {
315  return volt{static_cast<double>(v)};
316  }
317  // @}
318 
319  // @{
321  constexpr millivolt operator""_mV(long double v)
322  {
323  return millivolt{static_cast<double>(v)};
324  }
325  constexpr millivolt operator""_mV(unsigned long long int v)
326  {
327  return millivolt{static_cast<double>(v)};
328  }
329  // @}
330 
331  // @{
333  constexpr microvolt operator""_uV(long double v)
334  {
335  return microvolt{static_cast<double>(v)};
336  }
337  constexpr microvolt operator""_uV(unsigned long long int v)
338  {
339  return microvolt{static_cast<double>(v)};
340  }
341  // @}
342 
343  // @{
345  constexpr kilovolt operator""_kV(long double v)
346  {
347  return kilovolt{static_cast<double>(v)};
348  }
349  constexpr kilovolt operator""_kV(unsigned long long int v)
350  {
351  return kilovolt{static_cast<double>(v)};
352  }
353  // @}
354 
355  // @{
357  constexpr megavolt operator""_MV(long double v)
358  {
359  return megavolt{static_cast<double>(v)};
360  }
361  constexpr megavolt operator""_MV(unsigned long long int v)
362  {
363  return megavolt{static_cast<double>(v)};
364  }
365  // @}
366 
367  // @{
369  constexpr gigavolt operator""_GV(long double v)
370  {
371  return gigavolt{static_cast<double>(v)};
372  }
373  constexpr gigavolt operator""_GV(unsigned long long int v)
374  {
375  return gigavolt{static_cast<double>(v)};
376  }
377  // @}
378 
379  } // electromagnetism_literals
380 
381 } // namespace util::quantities
382 
383 //------------------------------------------------------------------------------
384 
385 #endif // LARDATAALG_UTILITIES_QUANTITIES_ELECTROMAGNETISM_H
A value measured in the specified unit.
Definition: quantities.h:554
Numeric variable proxies with embedded unit of measurement.
Types of variables with a unit.
Definition: intervals.h:20