Skip to content

Commit

Permalink
Uncertain constants (LLNL#248)
Browse files Browse the repository at this point in the history
* add a few tests and add some uncertain constants for scientific constants with known uncertainty.

* update documents on physical units for uncertain measurements, add a few tests, add scoville units

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
phlptp and pre-commit-ci[bot] authored Nov 22, 2022
1 parent 261236f commit 3d87eb6
Show file tree
Hide file tree
Showing 8 changed files with 1,112 additions and 1,041 deletions.
2 changes: 2 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,5 @@ ignore:
- 'examples'
- 'test'
- 'FuzzTargets'
- 'webserver'
- 'converter'
18 changes: 17 additions & 1 deletion docs/user-guide/Physical_constants.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Values are taken from `NIST 2018 CODATA <https://physics.nist.gov/cuu/Constants/
- Avogadros constant (2019 redefinition) - `Na`
- Luminous efficiency - `kcd`
- Permittivity of free space - `eps0`
- Permeability of free space - `u0`
- Permeability of free space - `mu0`
- Gas Constant - `R`
- Stephan Boltzmann constant -`s`
- Hubble constant 69.8 km/s/Mpc - `H0`
Expand Down Expand Up @@ -64,3 +64,19 @@ The last two are used in several other units and some conversions so it seemed b
From Strings
-----------------
All constants listed here are available for conversion from strings by wrapping in brackets For example the luminous efficiency would be converted to a unit by using `[kcd]` The planck constants are available as `[planck::XXXXX]` or `planckXXXXXX and the atomic constants are available as `[atomic::XXXX]`

Uncertainties
------------------
Certain physical constants have uncertainties associated with them and have an additional `uncertain_measurement` associated with them see :ref:`uncertain_measurments`.
These can be found in the `units::constants::uncertain` namespace and include:

- Gravitational constant - `G`
- Permittivity of free space - `eps0`
- Permeability of free space - `u0`
- Hubble constant 69.8 km/s/Mpc - `H0`
- Mass of an electron - `me`
- Mass of a proton - `mp`
- Atomic mass constant - `mu`
- Rydberg constant - `Rinf`

*NOTE: A few of the uncertain constants have more precision than supported in uncertain_measurments but were included for completeness*
4 changes: 4 additions & 0 deletions test/test_uncertain_measurements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,10 @@ TEST(uncertainStrings, from_string_concise)
EXPECT_FLOAT_EQ(um6.value(), 4.56323e-12F);
EXPECT_EQ(um6.uncertainty(), 0.00045e-12F);
EXPECT_EQ(um6.units(), kg);

auto um7 = uncertain_measurement_from_string("9.1093837015(28)x10-31 kg");
EXPECT_EQ(um7, constants::uncertain::me);
EXPECT_DOUBLE_EQ(um7.uncertainty(), constants::uncertain::me.uncertainty());
}
TEST(uncertainStrings, to_string)
{
Expand Down
2 changes: 2 additions & 0 deletions test/test_unit_strings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,8 @@ TEST(unitStrings, watthours)
{
EXPECT_EQ(to_string(precise::A * precise::s), "C");
EXPECT_EQ(to_string(precise::W * precise::hr), "Wh");
EXPECT_EQ(to_string(precise::W * precise::hr * precise::iflag), "Wh*flag");
EXPECT_EQ(to_string(precise::W * precise::hr * precise::m), "Wh*m");
EXPECT_EQ(to_string(precise::kilo * precise::W * precise::h), "kWh");
EXPECT_EQ(to_string(precise::mega * precise::W * precise::h), "MWh");
EXPECT_EQ(to_string(precise::giga * precise::W * precise::h), "GWh");
Expand Down
1 change: 1 addition & 0 deletions units/commodities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ namespace commodities {
{Hahnemann, "Hahnemann"},
{Korsakov, "Korsakov"},
{creatinine, "creatinine"},
{capsaicin, "capsaicin"},
{protein, "protein"},

{pixel, "pixel"},
Expand Down
2 changes: 2 additions & 0 deletions units/unit_definitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ namespace commodities {

// emmissions

// food
capsaicin = 623452,
};
} // namespace commodities

Expand Down
34 changes: 34 additions & 0 deletions units/units.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2153,6 +2153,40 @@ namespace constants {
1.054571817e-34,
precise::J* precise::s};
} // namespace atomic

/// constants with uncertainties attached
namespace uncertain {
constexpr uncertain_measurement mu{
measurement_cast(constants::mu),
0.5e-36};
constexpr uncertain_measurement me{
measurement_cast(constants::me),
2.8e-40};
constexpr uncertain_measurement mp{
measurement_cast(constants::mp),
0.51e-36};
constexpr uncertain_measurement mn{
measurement_cast(constants::mn),
0.95e-36};
constexpr uncertain_measurement alpha{
measurement_cast(constants::alpha),
1.1e-12};
constexpr uncertain_measurement G{
measurement_cast(constants::G),
1.5e-15};
constexpr uncertain_measurement Rinf{
measurement_cast(constants::Rinf),
0.000021};
constexpr uncertain_measurement eps0{
measurement_cast(constants::eps0),
1.3e-21};
constexpr uncertain_measurement mu0{
measurement_cast(constants::mu0),
0.19e-15};
constexpr uncertain_measurement H0{
measurement_cast(constants::H0),
1.7};
} // namespace uncertain
} // namespace constants

#ifdef ENABLE_UNIT_TESTING
Expand Down
Loading

0 comments on commit 3d87eb6

Please sign in to comment.