diff --git a/src/systems/si/include/units/si/constants.h b/src/systems/si/include/units/si/constants.h index c9bda269..947604f4 100644 --- a/src/systems/si/include/units/si/constants.h +++ b/src/systems/si/include/units/si/constants.h @@ -33,48 +33,39 @@ namespace units::si { namespace si2019 { // clang-format off -inline constexpr struct mag_planck : decltype(mag * mag_power<10, -34>) {} mag_planck; -inline constexpr struct mag_speed_of_light : decltype(mag<299'792'458>) {} mag_speed_of_light; +inline constexpr struct hyperfine_structure_transition_frequency_of_cs_unit : + constant_unit * hertz> {} hyperfine_structure_transition_frequency_of_cs_unit; +inline constexpr struct speed_of_light_in_vacuum_unit : + constant_unit<"c", mag<299'792'458> * metre / second> {} speed_of_light_in_vacuum_unit; +inline constexpr struct planck_constant_unit : + constant_unit<"h", mag * mag_power<10, -34> * joule * second> {} planck_constant_unit; +inline constexpr struct elementary_charge_unit : + constant_unit<"e", mag * mag_power<10, -19> * coulomb> {} elementary_charge_unit; +inline constexpr struct boltzmann_constant_unit : + constant_unit<"k", mag * mag_power<10, -23> * joule / kelvin> {} boltzmann_constant_unit; +inline constexpr struct avogadro_constant_unit : + constant_unit<"NA", mag * mag_power<10, 23> * (1 / mole)> {} avogadro_constant_unit; +inline constexpr struct luminous_efficacy_unit : + constant_unit<"Kcd", mag<683> * lumen / watt> {} luminous_efficacy_unit; // clang-format on -template -inline constexpr auto planck_constant = Rep{1} * (mag_planck * isq::energy[joule] * isq::time[second]); - -template -inline constexpr auto speed_of_light = Rep{1} * isq::speed[mag_speed_of_light * metre / second]; - -// template -// inline constexpr auto planck_constant = energy(6.62607015e-34) * time(1); - -// template -// inline constexpr auto elementary_charge = electric_charge(1.602176634e-19); - -// template -// inline constexpr auto boltzmann_constant = energy(1.380649e-23) / thermodynamic_temperature(1); - -// template -// inline constexpr auto avogadro_constant = Rep(6.02214076e23) / amount_of_substance(1); - -// template -// inline constexpr auto speed_of_light = speed(299'792'458); - -// template -// inline constexpr auto hyperfine_structure_transition_frequency = frequency(Rep{9'192'631'770}); - -// template -// inline constexpr auto luminous_efficacy = luminous_flux(683) / power(1); - -// template -// inline constexpr auto standard_gravity = acceleration(9.80665); +inline constexpr auto hyperfine_structure_transition_frequency_of_cs = + isq::frequency[hyperfine_structure_transition_frequency_of_cs_unit]; +inline constexpr auto speed_of_light_in_vacuum = isq::speed[speed_of_light_in_vacuum_unit]; +inline constexpr auto planck_constant = isq::action[planck_constant_unit]; +// TODO uncomment the below when all the ISQ is provided +// inline constexpr auto elementary_charge = isq::electric_charge[elementary_charge_unit]; +// inline constexpr auto boltzmann_constant = isq::heat_capacity[boltzmann_constant_unit]; +inline constexpr auto avogadro_constant = (1 / isq::amount_of_substance)[avogadro_constant_unit]; +// inline constexpr auto luminous_efficacy = isq::luminous_efficacy_of_radiation[luminous_efficacy_unit]; } // namespace si2019 // clang-format off -inline constexpr struct mag_standard_gravity : decltype(mag) {} mag_standard_gravity; +inline constexpr struct standard_gravity_unit : + constant_unit<"g", mag * metre / square> {} standard_gravity_unit; // clang-format on -template -inline constexpr auto standard_gravity = Rep{1} * isq::acceleration[mag_standard_gravity * metre / square]; +inline constexpr auto standard_gravity = isq::acceleration[standard_gravity_unit]; } // namespace units::si