diff --git a/corsika/framework/units/quantity.hpp b/corsika/framework/units/quantity.hpp index 1ebd98015c757bfe451b838f89eea5995d22688e..f64090299da8462f6b651bd22f89559f33885606 100644 --- a/corsika/framework/units/quantity.hpp +++ b/corsika/framework/units/quantity.hpp @@ -763,6 +763,8 @@ namespace phys { // The standard SI prefixes. + constexpr long double quetta = 1e+30L; + constexpr long double ronna = 1e+27L; constexpr long double yotta = 1e+24L; constexpr long double zetta = 1e+21L; constexpr long double exa = 1e+18L; @@ -783,6 +785,8 @@ namespace phys { constexpr long double atto = 1e-18L; constexpr long double zepto = 1e-21L; constexpr long double yocto = 1e-24L; + constexpr long double ronto = 1e-27L; + constexpr long double quecto = 1e-30L; // Binary prefixes, pending adoption. @@ -938,6 +942,8 @@ namespace phys { } #define QUANTITY_DEFINE_SCALING_LITERALS(pfx, dim, fact) \ + QUANTITY_DEFINE_SCALING_LITERAL(Q##pfx, dim, fact* quetta) \ + QUANTITY_DEFINE_SCALING_LITERAL(R##pfx, dim, fact* ronna) \ QUANTITY_DEFINE_SCALING_LITERAL(Y##pfx, dim, fact* yotta) \ QUANTITY_DEFINE_SCALING_LITERAL(Z##pfx, dim, fact* zetta) \ QUANTITY_DEFINE_SCALING_LITERAL(E##pfx, dim, fact* exa) \ @@ -958,7 +964,9 @@ namespace phys { QUANTITY_DEFINE_SCALING_LITERAL(f##pfx, dim, fact* femto) \ QUANTITY_DEFINE_SCALING_LITERAL(a##pfx, dim, fact* atto) \ QUANTITY_DEFINE_SCALING_LITERAL(z##pfx, dim, fact* zepto) \ - QUANTITY_DEFINE_SCALING_LITERAL(y##pfx, dim, fact* yocto) + QUANTITY_DEFINE_SCALING_LITERAL(y##pfx, dim, fact* yocto) \ + QUANTITY_DEFINE_SCALING_LITERAL(r##pfx, dim, fact* ronto) \ + QUANTITY_DEFINE_SCALING_LITERAL(q##pfx, dim, fact* quecto) #define QUANTITY_DEFINE_LITERALS(pfx, dim) QUANTITY_DEFINE_SCALING_LITERALS(pfx, dim, 1) diff --git a/corsika/framework/units/quantity_io.hpp b/corsika/framework/units/quantity_io.hpp index db32e911b85e64feacb7df6428db5e8e30de60d5..2bed082953ea8cb5ee7f6f3014f40898ce59ab9f 100644 --- a/corsika/framework/units/quantity_io.hpp +++ b/corsika/framework/units/quantity_io.hpp @@ -81,6 +81,10 @@ inline Rep prefix( std::string const prefix_ ) { "da", deka }, { "d", deci }, { "c", centi }, + { "r", ronto }, + { "q", quecto }, + { "R", ronna }, + { "Q", quetta }, }; auto pos = table.find( prefix_ ); diff --git a/tests/framework/testUnits.cpp b/tests/framework/testUnits.cpp index 5c90aa9cd6ad65500a13a178d7dd6b0e52355006..2938f4bb671ca9caf5843c54428b40d9e9a0ce62 100644 --- a/tests/framework/testUnits.cpp +++ b/tests/framework/testUnits.cpp @@ -57,6 +57,8 @@ TEST_CASE("PhysicalUnits", "[Units]") { CHECK(1_mol / 1_amol == Approx(1e18)); CHECK(1_K / 1_zK == Approx(1e21)); CHECK(1_K / 1_yK == Approx(1e24)); + CHECK(1_V / 1_rV == Approx(1e27)); + CHECK(1_V / 1_qV == Approx(1e30)); CHECK(1_b / 1_mb == Approx(1e3)); CHECK(1_A / 1_hA == Approx(1e-2)); @@ -68,6 +70,8 @@ TEST_CASE("PhysicalUnits", "[Units]") { CHECK(1_A / 1_EA == Approx(1e-18)); CHECK(1_K / 1_ZK == Approx(1e-21)); CHECK(1_mol / 1_Ymol == Approx(1e-24)); + CHECK(1_V / 1_RV == Approx(1e-27)); + CHECK(1_V / 1_QV == Approx(1e-30)); CHECK(std::min(1_A, 2_A) == 1_A); }