From 64248c0752eb92da84f8733f4fcf6dcd980344a1 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Sun, 23 Feb 2020 17:40:18 +0100 Subject: [PATCH] Total energy example added --- example/CMakeLists.txt | 1 + example/total_energy.cpp | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 example/total_energy.cpp diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index acab5452..3dbfb34b 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -28,6 +28,7 @@ endfunction() add_example(avg_velocity) add_example(hello_units) add_example(measurement) +add_example(total_energy) add_example(unknown_dimension) add_example(box_example) add_example(capacitor_time_curve) diff --git a/example/total_energy.cpp b/example/total_energy.cpp new file mode 100644 index 00000000..79fab5cd --- /dev/null +++ b/example/total_energy.cpp @@ -0,0 +1,74 @@ +// The MIT License (MIT) +// +// Copyright (c) 2018 Mateusz Pusz +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include +#include +#include +#include +#include +#include + +namespace { + +using namespace units; + +Energy auto total_energy(Momentum auto p, Mass auto m, Velocity auto c) +{ + return sqrt(pow<2>(p * c) + pow<2>(m * pow<2>(c))); +} + +void example() +{ + using namespace si; + + const Momentum auto p = 4.q_GeV / speed_of_light; + const momentum p_si = p; + const Mass auto m = 3.q_GeV / pow<2>(speed_of_light); + const mass m_si = m; + const Velocity auto c = speed_of_light; + const Energy auto E = total_energy(p, m, c); + const energy E_si = total_energy(p_si, m_si, c); + + std::cout << "p = " << p << "\n" + << "p_si = " << p_si << "\n" + << "m = " << m << "\n" + << "m_si = " << m_si << "\n" + << "c = " << c << "\n" + << "E = " << E << "\n" + << "E_si = " << E_si << "\n" + << "E_GeV = " << quantity_cast(E_si) << "\n"; +} + +} // namespace + +int main() +{ + try { + example(); + } + catch (const std::exception& ex) { + std::cerr << "Unhandled std exception caught: " << ex.what() << '\n'; + } + catch (...) { + std::cerr << "Unhandled unknown exception caught\n"; + } +}