14namespace sequoia::physics
16 template<physical_unit T>
19 template<physical_unit T>
20 requires std::is_same_v<typename T::validator_type, std::identity>
21 || std::is_same_v<typename T::validator_type, maths::half_line_validator>
25 template<physical_unit T>
28 template<physical_unit T>
32namespace sequoia::maths
34 template<physics::physical_unit T>
35 requires physics::is_invertible_unit_v<T>
38 using validator_type = T::validator_type;
48 template<physics::physical_unit T>
49 requires (!physics::is_invertible_unit_v<T>)
52 using validator_type = void;
56namespace sequoia::physics
58 using namespace maths;
72 template<
class T,
class... Us>
75 using type = reduced_validator_t<T, reduced_validator_t<Us...>>;
85 template<physical_unit... Ts>
88 using validator_type = reduced_validator_t<
typename Ts::validator_type...>;
101 template<convex_space... Ts>
102 requires (free_module<Ts> || ...)
107 using commutative_ring_type = commutative_ring_type_of_t<direct_product_t>;
108 constexpr static std::size_t dimension{std::ranges::max({dimension_of<Ts>...})};
109 using is_free_module = std::true_type;
112 template<convex_space... Ts>
113 requires (!affine_space<Ts> && ...)
119 using is_convex_space = std::true_type;
122 template<physical_unit T, physical_unit U>
146 template<convex_space T, convex_space U>
152 template<convex_space... Ts, convex_space U>
158 template<convex_space T, convex_space... Us>
164 template<convex_space... Ts, convex_space... Us>
170 template<std::
size_t D>
176 constexpr static std::size_t dimension{1};
179 template<std::
size_t D>
183 constexpr static std::size_t dimension{D};
188 constexpr static std::size_t dimension{2};
193 constexpr static std::size_t dimension{3};
197 template<free_module FreeModule,
class Unit,
class Convention>
200 using free_module_type = FreeModule;
201 using unit_type = Unit;
202 using convention_type = Convention;
208 using type = std::identity;
212 requires (!std::is_same_v<T, std::identity>)
215 using type = std::identity;
224 template<convex_space ValueSpace, physical_unit Unit,
class Convention>
228 template<convex_space ValueSpace, physical_unit Unit>
229 inline constexpr bool has_distinguished_origin{
230 free_module<ValueSpace>
231 || (!affine_space<ValueSpace> && defines_half_line_v<typename Unit::validator_type>)
234 template<convex_space ValueSpace, physical_unit Unit,
class Origin>
235 inline constexpr bool has_consistent_origin{
236 ( has_distinguished_origin<ValueSpace, Unit> && std::is_same_v<Origin, distinguished_origin>)
237 || (!has_distinguished_origin<ValueSpace, Unit> && !std::is_same_v<Origin, distinguished_origin>)
240 template<convex_space ValueSpace, val
idator_for<ValueSpace> Val
idator>
241 inline constexpr bool has_consistent_validator{
242 !affine_space<ValueSpace> || std::is_same_v<Validator, std::identity>
245 template<convex_space ValueSpace, physical_unit Unit>
246 inline constexpr bool has_consistent_unit{
247 !is_dual_v<Unit> || vector_space<ValueSpace> || (!affine_space<ValueSpace> && is_invertible_unit_v<dual_of_t<Unit>>)
250 template<convex_space ValueSpace, physical_unit Unit,
class Convention,
class Origin, val
idator_for<ValueSpace> Val
idator>
251 requires has_consistent_unit<ValueSpace, Unit>
252 && has_consistent_validator<ValueSpace, Validator>
253 && has_consistent_origin<ValueSpace, Unit, Origin>
254 class physical_value;
256 template<physical_unit Unit>
259 template<affine_space T>
262 template<convex_space ValueSpace, physical_unit Unit>
265 template<convex_space ValueSpace, physical_unit Unit>
266 requires (!has_distinguished_origin<ValueSpace, Unit>) && (!affine_space<ValueSpace>)
272 template<convex_space ValueSpace, physical_unit Unit>
275 template<convex_space ValueSpace, physical_unit Unit>
276 requires has_distinguished_origin<ValueSpace, Unit>
282 template<convex_space ValueSpace, physical_unit Unit>
283 requires (!has_distinguished_origin<ValueSpace, Unit> && affine_space<ValueSpace>)
284 struct to_origin_type<ValueSpace, Unit>
286 using type = implicit_affine_origin<ValueSpace>;
289 template<convex_space ValueSpace, physical_unit Unit,
class Convention,
class Origin,
class Val
idator>
290 using to_coordinates_base_type
293 to_displacement_basis_t<ValueSpace, Unit, Convention>,
296 physical_value<free_module_type_of_t<ValueSpace>, Unit, Convention, distinguished_origin, std::identity>>;
298 template<convex_space T>
299 inline constexpr bool has_base_space_v{
300 requires {
typename T::base_space; }
303 template<convex_space T>
309 template<convex_space T>
310 using to_base_space_t = to_base_space<T>::type;
312 template<convex_space T>
313 requires has_base_space_v<T>
316 using type = T::base_space;
319 template<convex_space T>
325 template<convex_space T>
326 requires has_base_space_v<T>
332 template<convex_space... Ts>
335 using sorted_direct_product_t = meta::stable_sort_t<direct_product<to_base_space_t<Ts>...>, meta::type_comparator>;
336 using type = impl::to_composite_space_t<reduction<impl::reduce_t<impl::count_and_combine_t<sorted_direct_product_t>>>>;
339 template<convex_space T, convex_space U>
340 inline constexpr bool have_compatible_base_spaces_v{
341 has_base_space_v<T> && has_base_space_v<U> && (free_module_type_of_t<T>::dimension == free_module_type_of_t<U>::dimension) &&
requires {
342 typename std::common_type<typename T::base_space, typename U::base_space>::type;
346 template<convex_space T, convex_space U>
349 template<convex_space T, convex_space U>
352 template<convex_space T>
355 using type = free_module_type_of_t<T>;
358 template<convex_space T, convex_space U>
359 requires (!std::is_same_v<T, U>) && have_compatible_base_spaces_v<T, U>
362 using type = free_module_type_of_t<std::common_type_t<typename T::base_space, typename U::base_space>>;
365 template<
class T,
class U>
368 template<
class T,
class U>
372 convex_space LHSValueSpace,
physical_unit LHSUnit,
class LHSConvention,
class LHSValidator,
373 convex_space RHSValueSpace,
physical_unit RHSUnit,
class RHSConvention,
class RHSValidator
375 requires std::common_with<LHSConvention, RHSConvention>
381 impl::to_composite_space_t<reduction_t<direct_product<LHSValueSpace, RHSValueSpace>>>,
382 impl::to_composite_space_t<reduction_t<direct_product<LHSUnit, RHSUnit>>>,
383 std::common_type_t<LHSConvention, RHSConvention>,
385 reduced_validator_t<LHSValidator, RHSValidator>
390 convex_space LHSValueSpace,
physical_unit LHSUnit,
class LHSConvention,
class LHSValidator,
391 convex_space RHSValueSpace,
physical_unit RHSUnit,
class RHSConvention,
class RHSValidator
393 requires std::common_with<LHSConvention, RHSConvention>
394 && ( std::is_same_v<euclidean_vector_space<1, commutative_ring_type_of_t<LHSValueSpace>>, LHSValueSpace>
395 || std::is_same_v<euclidean_half_space<commutative_ring_type_of_t<LHSValueSpace>>, LHSValueSpace>)
403 std::common_type_t<LHSConvention, RHSConvention>,
405 reduced_validator_t<LHSValidator, RHSValidator>
410 convex_space LHSValueSpace, physical_unit LHSUnit,
class LHSConvention,
class LHSValidator,
411 convex_space RHSValueSpace, physical_unit RHSUnit,
class RHSConvention,
class RHSValidator
413 requires std::common_with<LHSConvention, RHSConvention>
414 && ( std::is_same_v<euclidean_vector_space<1, commutative_ring_type_of_t<RHSValueSpace>>, RHSValueSpace>
415 || std::is_same_v<euclidean_half_space<commutative_ring_type_of_t<RHSValueSpace>>, RHSValueSpace>)
416 struct physical_value_product<physical_value<LHSValueSpace, LHSUnit, LHSConvention, distinguished_origin, LHSValidator>,
417 physical_value<RHSValueSpace, RHSUnit, RHSConvention, distinguished_origin, RHSValidator>>
423 std::common_type_t<LHSConvention, RHSConvention>,
424 distinguished_origin,
425 reduced_validator_t<LHSValidator, RHSValidator>
430 convex_space ValueSpace,
432 class Convention = canonical_convention<free_module_type_of_t<ValueSpace>::dimension>,
433 class Origin = to_origin_type_t<ValueSpace, Unit>,
434 validator_for<ValueSpace> Validator =
typename Unit::validator_type
436 requires has_consistent_unit<ValueSpace, Unit>
437 && has_consistent_validator<ValueSpace, Validator>
438 && has_consistent_origin<ValueSpace, Unit, Origin>
443 using space_type = ValueSpace;
444 using units_type = Unit;
445 using convention_type = Convention;
446 using origin_type = Origin;
447 using displacement_space_type = free_module_type_of_t<ValueSpace>;
448 using intrinsic_validator_type = Unit::validator_type;
449 using validator_type = Validator;
450 using ring_type = commutative_ring_type_of_t<ValueSpace>;
451 using value_type = ring_type;
452 using displacement_type = coordinates_type::displacement_coordinates_type;
454 constexpr static std::size_t dimension{displacement_space_type::dimension};
455 constexpr static std::size_t D{dimension};
457 constexpr static bool is_intrinsically_absolute{
458 (D == 1) && !affine_space<space_type> && defines_half_line_v<intrinsic_validator_type>
461 constexpr static bool is_effectively_absolute{is_intrinsically_absolute && std::is_same_v<Validator, intrinsic_validator_type>};
462 constexpr static bool has_identity_validator{coordinates_type::has_identity_validator};
464 template<convex_space RHSValueSpace,
class RHSUnit,
class RHSConvention,
class RHSOrigin,
class RHSVal
idator>
465 constexpr static bool is_composable_with{
466 std::common_with<convention_type, RHSConvention>
467 && (is_intrinsically_absolute || vector_space<space_type>)
471 template<convex_space RHSValueSpace,
class RHSUnit,
class RHSConvention,
class RHSOrigin,
class RHSVal
idator>
472 constexpr static bool is_multipicable_with{
473 std::common_with<convention_type, RHSConvention>
474 && is_composable_with<RHSValueSpace, RHSUnit, RHSConvention, RHSOrigin, RHSValidator>
478 template<convex_space RHSValueSpace,
class RHSUnit,
class RHSConvention,
class RHSOrigin,
class RHSVal
idator>
479 constexpr static bool is_divisible_with{
480 weak_field<ring_type>
481 && weak_field<commutative_ring_type_of_t<RHSValueSpace>>
482 && std::common_with<convention_type, RHSConvention>
483 && is_composable_with<RHSValueSpace, RHSUnit, RHSConvention, RHSOrigin, RHSValidator>
489 constexpr physical_value(value_type val, units_type)
requires (D == 1)
493 constexpr physical_value(std::span<const value_type, D> val, units_type)
497 constexpr physical_value operator-()
const requires is_effectively_absolute =
delete;
505 using coordinates_type::operator+=;
507 template<convex_space OtherValueSpace>
508 requires is_intrinsically_absolute && (std::is_base_of_v<ValueSpace, OtherValueSpace>)
511 this->apply_to_each_element(other.values(), [](value_type& lhs, value_type rhs){ lhs += rhs; });
515 template<convex_space OtherValueSpace>
516 requires (!std::is_same_v<ValueSpace, OtherValueSpace>) && have_compatible_base_spaces_v<ValueSpace, OtherValueSpace>
520 using physical_value_t
522 return physical_value_t{lhs.values(), units_type{}} += rhs;
526 constexpr physical_value operator-()
const noexcept(has_identity_validator)
527 requires (!is_effectively_absolute)
529 return physical_value{utilities::to_array(this->values(), [](value_type t) {
return -t; }), units_type{}};
532 template<
class OtherValueSpace>
533 requires (!std::is_same_v<OtherValueSpace, displacement_space_type>)
534 && (std::is_same_v<ValueSpace, OtherValueSpace> || have_compatible_base_spaces_v<ValueSpace, OtherValueSpace>)
537 noexcept(has_identity_validator)
539 using disp_space_t = to_displacement_space_t<ValueSpace, OtherValueSpace>;
540 using disp_t = to_coordinates_base_type<disp_space_t, Unit, convention_type, Origin, Validator>::displacement_coordinates_type;
541 return[&] <std::size_t... Is>(std::index_sequence<Is...>) {
542 return disp_t{std::array{(lhs.values()[Is] - rhs.values()[Is])...}, units_type{}};
543 }(std::make_index_sequence<D>{});
546 template<convex_space RHSValueSpace, physical_unit RHSUnit,
class RHSConvention,
class RHSOrigin,
class RHSVal
idator>
547 requires is_multipicable_with<RHSValueSpace, RHSUnit, RHSConvention, RHSOrigin, RHSValidator>
552 using physical_value_t
553 = physical_value_product_t<
558 using derived_units_type = physical_value_t::units_type;
559 return physical_value_t{lhs.value() * rhs.value(), derived_units_type{}};
562 template<convex_space RHSValueSpace,
class RHSUnit,
class RHSConvention,
class RHSOrigin,
class RHSVal
idator>
563 requires is_divisible_with<RHSValueSpace, RHSUnit, RHSConvention, RHSOrigin, RHSValidator>
568 using physical_value_t
569 = physical_value_product_t<
573 using derived_units_type = physical_value_t::units_type;
574 if constexpr(dimension == 1)
576 return physical_value_t{lhs.value() / rhs.value(), derived_units_type{}};
580 return[&] <std::size_t... Is>(std::index_sequence<Is...>) {
581 return physical_value_t{std::array{(lhs.values()[Is] / rhs.value())...}, derived_units_type{}};
582 }(std::make_index_sequence<D>{});
586 [[nodiscard]]
friend constexpr auto operator/(value_type value,
const physical_value& rhs)
587 requires ((D == 1) && (is_intrinsically_absolute || vector_space<ValueSpace>))
590 using derived_units_type = physical_value_t::units_type;
591 return physical_value_t{value / rhs.value(), derived_units_type{}};
595 template<
class LoweredValueSpace,
class OtherUnit>
598 requires std::same_as<to_base_space_t<ValueSpace>, to_base_space_t<LoweredValueSpace>>
601 if constexpr(dimension == 1)
603 return physical_value_t{this->value(), OtherUnit{}};
607 return [
this] <std::size_t... Is>(std::index_sequence<Is...>) {
608 return physical_value_t{std::array{this->values()[Is]...}, OtherUnit{}};
609 }(std::make_index_sequence<D>{});
614 namespace sets::classical
616 template<
class Arena>
619 using arena_type = Arena;
622 template<
class Arena>
625 using arena_type = Arena;
628 template<
class Arena>
631 using arena_type = Arena;
634 template<
class Arena>
637 using arena_type = Arena;
640 template<
class Arena>
643 using arena_type = Arena;
646 template<
class Arena>
649 using arena_type = Arena;
652 template<
class Arena>
655 using arena_type = Arena;
658 template<
class Arena>
661 using arena_type = Arena;
664 template<
class PhysicalValueSet>
667 using physical_value_set_type = PhysicalValueSet;
671 template<
class Space>
674 constexpr static std::size_t dimension{Space::dimension};
676 using commutative_ring_type = Space::representation_type;
677 using is_free_module = std::true_type;
680 template<
class PhysicalValueSet, arithmetic Rep, std::
size_t D,
class Derived>
683 constexpr static std::size_t dimension{D};
684 using set_type = PhysicalValueSet;
685 using representation_type = Rep;
687 using is_convex_space = std::true_type;
690 template<
class PhysicalValueSet, arithmetic Rep, std::
size_t D,
class Derived>
693 constexpr static std::size_t dimension{D};
694 using set_type = PhysicalValueSet;
695 using representation_type = Rep;
697 using is_affine_space = std::true_type;
700 template<
class PhysicalValueSet, arithmetic Rep, std::
size_t D,
class Derived>
703 constexpr static std::size_t dimension{D};
704 using set_type = PhysicalValueSet;
705 using representation_type = Rep;
706 using field_type = Rep;
707 using is_vector_space = std::true_type;
710 template<std::
floating_po
int Rep,
class Arena>
717 template<std::
floating_po
int Rep,
class Arena>
724 template<std::
floating_po
int Rep,
class Arena>
731 template<std::
floating_po
int Rep,
class Arena>
737 template<arithmetic Rep,
class Arena>
744 template<arithmetic Rep,
class Arena>
749 template<arithmetic Rep,
class Arena>
754 template<arithmetic Rep,
class Arena>
759 template<arithmetic Rep,
class Arena>
763 template<std::
size_t D, arithmetic Rep,
class Arena>
769 template<physical_unit U>
770 inline constexpr bool has_symbol_v{
772 { U::symbol } -> std::convertible_to<std::string_view>; }
781 using validator_type = std::identity;
782 constexpr static std::string_view symbol{
"A"};
788 constexpr static std::string_view symbol{
"kg"};
794 constexpr static std::string_view symbol{
"m"};
800 constexpr static std::string_view symbol{
"s"};
806 constexpr static std::string_view symbol{
"K"};
811 using validator_type = std::identity;
812 constexpr static std::string_view symbol{
"C"};
817 using validator_type = std::identity;
818 constexpr static std::string_view symbol{
"rad"};
826 template<std::
floating_po
int T>
828 constexpr T operator()(
const T val)
const
830 if(val < T(-273.15))
throw std::domain_error{std::format(
"Value {} less than -273.15", val)};
837 constexpr static std::string_view symbol{
"degC"};
840 inline constexpr ampere_t ampere{};
841 inline constexpr kilogram_t kilogram{};
842 inline constexpr metre_t metre{};
843 inline constexpr second_t second{};
844 inline constexpr kelvin_t kelvin{};
845 inline constexpr coulomb_t coulomb{};
846 inline constexpr radian_t radian{};
848 inline constexpr celsius_t celsius{};
851 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
852 using mass = physical_value<mass_space<T, Arena>, units::kilogram_t>;
854 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
855 using length = physical_value<length_space<T, Arena>, units::metre_t>;
857 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
858 using time_interval = physical_value<time_interval_space<T, Arena>, units::second_t>;
860 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
861 using temperature = physical_value<temperature_space<T, Arena>, units::kelvin_t>;
863 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
864 using electrical_current = physical_value<electrical_current_space<T, Arena>, units::ampere_t>;
866 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
867 using angle = physical_value<angular_space<T, Arena>, units::radian_t>;
869 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
870 using width = physical_value<width_space<T, Arena>, units::metre_t>;
872 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
873 using height = physical_value<height_space<T, Arena>, units::metre_t>;
876 std::floating_point T,
877 class Arena=implicit_common_arena,
878 class Origin=implicit_affine_origin<time_space<T, Arena>>
880 using time = physical_value<time_space<T, Arena>, units::second_t, canonical_convention<1>, Origin, std::identity>;
884 std::floating_point T,
885 class Arena = implicit_common_arena,
886 class Convention = canonical_convention<D>,
887 class Origin = implicit_affine_origin<position_space<D, T, Arena>>
889 using position = physical_value<position_space<D, T, Arena>, units::metre_t, Convention, Origin, std::identity>;
892 template<vector_space ValueSpace, physical_unit Unit,
class Convention,
class Origin, val
idator_for<ValueSpace> Val
idator>
893 requires (dimension_of<ValueSpace> == 1)
895 constexpr physical_value<ValueSpace, Unit, Convention, Origin, Validator> abs(physical_value<ValueSpace, Unit, Convention, Origin, Validator> q)
897 return {std::abs(q.value()), Unit{}};
900 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
902 constexpr T sin(physical_value<angular_space<T, Arena>, si::units::radian_t> theta)
904 return std::sin(theta.value());
907 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
909 constexpr T cos(physical_value<angular_space<T, Arena>, si::units::radian_t> theta)
911 return std::cos(theta.value());
914 template<std::
floating_po
int T,
class Arena=implicit_common_arena>
916 constexpr T tan(physical_value<angular_space<T, Arena>, si::units::radian_t> theta)
918 return std::tan(theta.value());
921 template<
class Arena=implicit_common_arena, std::
floating_po
int T>
923 constexpr physical_value<angular_space<T, Arena>, si::units::radian_t> asin(T x)
925 return {std::asin(x), si::units::radian};
928 template<
class Arena=implicit_common_arena, std::
floating_po
int T>
930 constexpr physical_value<angular_space<T, Arena>, si::units::radian_t> acos(T x)
932 return {std::acos(x), si::units::radian};
935 template<
class Arena=implicit_common_arena, std::
floating_po
int T>
937 constexpr physical_value<angular_space<T, Arena>, si::units::radian_t> atan(T x)
939 return {std::atan(x), si::units::radian};
943 convex_space ValueSpace,
945 validator_for<ValueSpace> Validator=
typename Unit::validator_type
947 requires has_consistent_validator<ValueSpace, Validator>
948 using quantity = physical_value<ValueSpace, Unit, canonical_convention<1>, to_origin_type_t<ValueSpace, Unit>, Validator>;
956struct std::formatter<sequoia::physics::quantity<ValueSpace, Unit, Validator>>
958 constexpr auto parse(
auto& ctx)
965 if constexpr(sequoia::physics::has_symbol_v<Unit>)
966 return std::format_to(ctx.out(),
"{} {}", q.value(), Unit::symbol);
968 return std::format_to(ctx.out(),
"{}", q.value());
Class designed for inheritance by concerete coordinate types.
Definition: Spaces.hpp:1076
Definition: PhysicalValues.hpp:440
concept for convex spaces
Definition: Spaces.hpp:517
concept to check if a validator is compatible with a convex space.
Definition: Spaces.hpp:676
Definition: PhysicalValuesDetails.hpp:33
Definition: Spaces.hpp:774
Definition: Spaces.hpp:763
Type to indicate a distinguished origin, relevant for free modules.
Definition: Spaces.hpp:1010
Specialization for units, such as degrees Celsius, for which the corresponding quantity cannot be inv...
Definition: PhysicalValues.hpp:37
Primary class template for defining duals.
Definition: Spaces.hpp:896
A validator the the half line.
Definition: Spaces.hpp:703
Definition: PhysicalValues.hpp:733
Definition: PhysicalValues.hpp:673
Definition: PhysicalValues.hpp:171
Definition: PhysicalValues.hpp:99
Definition: PhysicalValues.hpp:87
Definition: PhysicalValues.hpp:727
Definition: PhysicalValues.hpp:751
Definition: PhysicalValues.hpp:260
Definition: PhysicalValues.hpp:767
Definition: PhysicalValues.hpp:17
Definition: PhysicalValues.hpp:192
Definition: PhysicalValues.hpp:740
Definition: PhysicalValues.hpp:713
Definition: PhysicalValues.hpp:79
Definition: PhysicalValues.hpp:692
Definition: PhysicalValues.hpp:682
Definition: PhysicalValues.hpp:199
Definition: PhysicalValues.hpp:366
Definition: PhysicalValues.hpp:702
Definition: PhysicalValues.hpp:765
Definition: PhysicalValues.hpp:61
Definition: PhysicalValues.hpp:93
Definition: PhysicalValues.hpp:660
Definition: PhysicalValues.hpp:666
Definition: PhysicalValues.hpp:630
Definition: PhysicalValues.hpp:654
Definition: PhysicalValues.hpp:618
Definition: PhysicalValues.hpp:648
Definition: PhysicalValues.hpp:624
Definition: PhysicalValues.hpp:642
Definition: PhysicalValues.hpp:636
Definition: PhysicalValues.hpp:780
Definition: PhysicalValues.hpp:825
Definition: PhysicalValues.hpp:823
Definition: PhysicalValues.hpp:810
Definition: PhysicalValues.hpp:804
Definition: PhysicalValues.hpp:786
Definition: PhysicalValues.hpp:792
Definition: PhysicalValues.hpp:816
Definition: PhysicalValues.hpp:798
Definition: PhysicalValues.hpp:720
Definition: PhysicalValues.hpp:757
Definition: PhysicalValues.hpp:761
Definition: PhysicalValues.hpp:305
Definition: PhysicalValues.hpp:347
Definition: PhysicalValues.hpp:263
Definition: PhysicalValues.hpp:257
Definition: PhysicalValues.hpp:746
Definition: PhysicalValues.hpp:187