diff --git a/src/composition/include/fourdst/composition/io/StandardAbundancesBinary.h b/src/composition/include/fourdst/composition/io/StandardAbundancesBinary.h index a3d5844..ac4c05f 100644 --- a/src/composition/include/fourdst/composition/io/StandardAbundancesBinary.h +++ b/src/composition/include/fourdst/composition/io/StandardAbundancesBinary.h @@ -7,7 +7,7 @@ const unsigned char StandardAbundances[] = { 0x6e, 0x63, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x69, 0x73, 0x6f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x5d, 0x0a, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x20, 0x4f, 0x4e, 0x3a, 0x20, 0x32, 0x30, 0x32, 0x36, 0x2d, - 0x30, 0x35, 0x2d, 0x32, 0x32, 0x0a, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x53, 0x45, 0x43, 0x54, + 0x30, 0x36, 0x2d, 0x30, 0x34, 0x0a, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x53, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x61, 0x62, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x0a, 0x09, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x44, 0x20, 0x5b, 0x27, 0x41, 0x47, 0x38, 0x39, 0x27, 0x2c, 0x20, 0x27, 0x47, 0x4e, 0x39, 0x33, 0x27, 0x2c, 0x20, 0x27, diff --git a/src/composition/include/fourdst/composition/io/standard_compositions.h b/src/composition/include/fourdst/composition/io/standard_compositions.h index 9ff094c..38fc77e 100644 --- a/src/composition/include/fourdst/composition/io/standard_compositions.h +++ b/src/composition/include/fourdst/composition/io/standard_compositions.h @@ -32,8 +32,8 @@ namespace fourdst::composition::io { GS98, L03, AGS05, - AGS09, - A09_Pryzbilla, + AGSS09, + A09_Przybilla, MB22_photospheric, AAG21_photospheric, L09 @@ -50,8 +50,8 @@ namespace fourdst::composition::io { {SolarCompositions::GS98, "GS98"}, {SolarCompositions::L03, "L03"}, {SolarCompositions::AGS05, "AGS05"}, - {SolarCompositions::AGS09, "AGS09"}, - {SolarCompositions::A09_Pryzbilla, "A09_Pryzbilla"}, + {SolarCompositions::AGSS09, "AGSS09"}, + {SolarCompositions::A09_Przybilla, "A09_Przybilla"}, {SolarCompositions::MB22_photospheric, "MB22_photospheric"}, {SolarCompositions::AAG21_photospheric, "AAG21_photospheric"}, {SolarCompositions::L09, "L09"} diff --git a/src/composition/lib/io/standard_compositions.cpp b/src/composition/lib/io/standard_compositions.cpp index 2ce2d11..c69881d 100644 --- a/src/composition/lib/io/standard_compositions.cpp +++ b/src/composition/lib/io/standard_compositions.cpp @@ -262,14 +262,14 @@ namespace fourdst::composition { isotopes = parser.parse_isotopic_percentage(data,isotopic_percentage_scheme); std::string name; - std::vector species; + std::vector species; + // construct name of the isotopes for all elements for (const auto [E,A] : std::ranges::views::zip(isotopes.elements, isotopes.mass_numbers)){ if (std::ranges::contains(compositions.elements,E)) { name = std::format("{}-{}",E,A); - // std::println("{}", name); - auto SpeciesObject = fourdst::atomic::species.at(name); + auto SpeciesObject = atomic::species.at(name); species.push_back(SpeciesObject); // std::println("Species: {} has mass: {}", SpeciesObject.name(), SpeciesObject.mass()); } @@ -299,35 +299,32 @@ namespace fourdst::composition { if (compositions.requires_atomic_weight){ // get isotope with max abundance for each metal - // and store the corresponding mass - std::vector element_atomic_weight; - size_t i = 0; - while (i < isotopes.atomic_numbers.size()) { - size_t Z = isotopes.atomic_numbers[i]; - if (Z<=2) { - ++i; - continue; - } - double max_iso = isotopes.percentages[i]; - size_t loc = i; - size_t j = i ; + // and store the corresponding mass number + auto element_atomic_weight = [&isotopes]() { + std::unordered_map> elem_info; - if (std::ranges::contains(compositions.elements,isotopes.elements[i])) { - while (jmax_iso) { - loc = j; - } - ++j; + for (const auto& [iso, prcnt, a] : std::views::zip(isotopes.elements, isotopes.percentages, isotopes.mass_numbers)) { + if (iso == "H" || iso == "He") { + continue; + } + if (elem_info.contains(iso) && elem_info.at(iso).first <= prcnt) { + elem_info[iso] = std::make_pair(prcnt, a); + } else if (! elem_info.contains(iso)) { + elem_info[iso] = std::make_pair(prcnt, a); } - element_atomic_weight.push_back(species[loc].mass()); } - i=j; - } - for(size_t i=0;i < compositions.abundances.size();++i){ - metal_fractions.emplace(compositions.elements[i], element_atomic_weight[i]*compositions.abundances[i]); - // std::println("metal_fractions: {}", metal_fractions); - } + return elem_info; + }(); + for (const auto [E,A] : std::ranges::views::zip(compositions.elements, compositions.abundances)) { + // std::println("element: {}", E); + auto name = std::format("{}-{}",E,element_atomic_weight.at(E).second); + // std::println("{}", name); + auto SpeciesObject = atomic::species.at(name); + double weight = SpeciesObject.mass(); + metal_fractions.emplace(E,A*weight); + // std::println("End"); + } } else { for (const auto [E,A] : std::ranges::views::zip(compositions.elements, compositions.abundances)) { metal_fractions.emplace(E,A); @@ -370,7 +367,7 @@ namespace fourdst::composition { } } - std::println("ztotal: {}, zsum:{}", ztotal, zsum); + // std::println("ztotal: {}, zsum:{}", ztotal, zsum); //Renormalize if (zsum > 0.0) { for (size_t i = 0; i < massFracs.size();++i) { diff --git a/tests/composition/compositionTest.cpp b/tests/composition/compositionTest.cpp index b63f69a..ffd74ee 100644 --- a/tests/composition/compositionTest.cpp +++ b/tests/composition/compositionTest.cpp @@ -492,9 +492,9 @@ TEST_F(compositionTest, standardSolarCompositions) { io::SolarCompositions::AG89, io::SolarCompositions::GS98, io::SolarCompositions::L03, - io::SolarCompositions::A09_Pryzbilla, + io::SolarCompositions::A09_Przybilla, io::SolarCompositions::AGS05, - io::SolarCompositions::AGS09, + io::SolarCompositions::AGSS09, io::SolarCompositions::AAG21_photospheric, io::SolarCompositions::MB22_photospheric, io::SolarCompositions::L09 @@ -511,6 +511,7 @@ TEST_F(compositionTest, standardSolarCompositions) { std::string string_comp = io::SolarCompositions_to_string_map.at(comp); std::string string_iso = io::IsotopicPercentages_to_string_map.at(iso); + // std::println("Testing: {} with {}", string_comp, string_iso); EXPECT_NO_THROW(get_composition_record(comp, iso, 0.02, 0.28)); EXPECT_NO_THROW(get_composition_record(string_comp, string_iso, 0.02, 0.28)); }