From d68808666ebee8243a255dba67d1b3555602f8a6 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sat, 8 Nov 2025 06:42:51 -0500 Subject: [PATCH] docs(docs): rebuilt --- docs/html/annotated.html | 26 +- docs/html/annotated_dup.js | 14 +- docs/html/atomic_species_8h.html | 26 +- docs/html/atomic_species_8h.js | 2 +- docs/html/atomic_species_8h_source.html | 246 +- docs/html/classes.html | 27 +- ..._1composition_1_1_composition-members.html | 106 +- ...ourdst_1_1composition_1_1_composition.html | 2349 ++++++----------- ...sfourdst_1_1composition_1_1_composition.js | 86 +- ...eptions_1_1_composition_error-members.html | 2 +- ...n_1_1exceptions_1_1_composition_error.html | 20 +- ...on_1_1exceptions_1_1_composition_error.png | Bin 4450 -> 2214 bytes ...1_1_invalid_composition_error-members.html | 2 +- ...eptions_1_1_invalid_composition_error.html | 17 +- ...1_1_unregistered_symbol_error-members.html | 2 +- ...eptions_1_1_unregistered_symbol_error.html | 17 +- docs/html/composition_8cpp.html | 21 +- docs/html/composition_8cpp.js | 4 +- docs/html/composition_8cpp_source.html | 1897 +++++-------- docs/html/composition_8h.html | 24 +- docs/html/composition_8h.js | 2 - docs/html/composition_8h_source.html | 543 ++-- .../dir_3c9efac6790a3720e63e1a08c00d11f2.html | 9 +- .../dir_3c9efac6790a3720e63e1a08c00d11f2.js | 1 + .../dir_425afc2e69e55565110382214454a15b.html | 7 +- .../dir_49e56c817e5e54854c35e136979f97ca.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 7 +- .../dir_88aa30610c51652b536406602eb05405.html | 7 +- .../dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html | 7 +- .../dir_cb6fc2f7165eff3b2362b2440dfaea8e.html | 7 +- .../dir_e22a97de167fe22ecd13733f7a34b9f0.html | 9 +- .../dir_e22a97de167fe22ecd13733f7a34b9f0.js | 3 +- .../dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html | 14 +- .../dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.js | 4 +- docs/html/doxygen_crawl.html | 216 +- docs/html/exceptions__composition_8h.html | 39 +- docs/html/exceptions__composition_8h.js | 10 +- .../exceptions__composition_8h_source.html | 126 +- docs/html/files.html | 21 +- docs/html/functions.html | 99 +- docs/html/functions_func.html | 71 +- docs/html/functions_rela.html | 4 +- docs/html/functions_vars.html | 60 +- docs/html/hierarchy.html | 32 +- docs/html/hierarchy.js | 14 +- docs/html/index.html | 96 +- docs/html/mainpage_8md.html | 2 +- docs/html/menudata.js | 16 +- docs/html/namespacefourdst.html | 5 +- docs/html/namespacefourdst_1_1atomic.html | 106 +- docs/html/namespacefourdst_1_1atomic.js | 2 +- .../html/namespacefourdst_1_1composition.html | 290 +- docs/html/namespacefourdst_1_1composition.js | 9 +- ...efourdst_1_1composition_1_1exceptions.html | 28 +- ...acefourdst_1_1composition_1_1exceptions.js | 10 +- docs/html/namespacemembers.html | 2 +- docs/html/namespacemembers_b.html | 3 +- docs/html/namespacemembers_c.html | 4 +- docs/html/namespacemembers_d.html | 2 +- docs/html/namespacemembers_e.html | 2 +- docs/html/namespacemembers_f.html | 2 +- docs/html/namespacemembers_func.html | 2 +- docs/html/namespacemembers_func_b.html | 3 +- docs/html/namespacemembers_func_c.html | 4 +- docs/html/namespacemembers_func_d.html | 2 +- docs/html/namespacemembers_func_e.html | 2 +- docs/html/namespacemembers_func_f.html | 2 +- docs/html/namespacemembers_func_g.html | 2 +- docs/html/namespacemembers_func_h.html | 2 +- docs/html/namespacemembers_func_i.html | 2 +- docs/html/namespacemembers_func_k.html | 2 +- docs/html/namespacemembers_func_l.html | 2 +- docs/html/namespacemembers_func_m.html | 2 +- docs/html/namespacemembers_func_n.html | 2 +- docs/html/namespacemembers_func_o.html | 4 +- docs/html/namespacemembers_func_p.html | 2 +- docs/html/namespacemembers_func_r.html | 2 +- docs/html/namespacemembers_func_s.html | 2 +- docs/html/namespacemembers_func_t.html | 2 +- docs/html/namespacemembers_func_u.html | 2 +- docs/html/namespacemembers_func_v.html | 2 +- docs/html/namespacemembers_func_w.html | 2 +- docs/html/namespacemembers_func_x.html | 2 +- docs/html/namespacemembers_func_y.html | 2 +- docs/html/namespacemembers_func_z.html | 2 +- docs/html/namespacemembers_g.html | 2 +- docs/html/namespacemembers_h.html | 2 +- docs/html/namespacemembers_i.html | 2 +- docs/html/namespacemembers_k.html | 2 +- docs/html/namespacemembers_l.html | 2 +- docs/html/namespacemembers_m.html | 2 +- docs/html/namespacemembers_n.html | 2 +- docs/html/namespacemembers_o.html | 4 +- docs/html/namespacemembers_p.html | 2 +- docs/html/namespacemembers_r.html | 2 +- docs/html/namespacemembers_s.html | 2 +- docs/html/namespacemembers_t.html | 2 +- docs/html/namespacemembers_u.html | 2 +- docs/html/namespacemembers_v.html | 2 +- docs/html/namespacemembers_vars.html | 2 +- docs/html/namespacemembers_w.html | 2 +- docs/html/namespacemembers_x.html | 2 +- docs/html/namespacemembers_y.html | 2 +- docs/html/namespacemembers_z.html | 2 +- docs/html/namespaces.html | 6 +- docs/html/navtreedata.js | 31 +- docs/html/navtreeindex0.js | 424 +-- docs/html/navtreeindex1.js | 122 +- docs/html/navtreeindex10.js | 122 +- docs/html/navtreeindex11.js | 122 +- docs/html/navtreeindex12.js | 120 +- docs/html/navtreeindex13.js | 122 +- docs/html/navtreeindex14.js | 122 +- docs/html/navtreeindex15.js | 112 +- docs/html/navtreeindex2.js | 122 +- docs/html/navtreeindex3.js | 122 +- docs/html/navtreeindex4.js | 122 +- docs/html/navtreeindex5.js | 122 +- docs/html/navtreeindex6.js | 122 +- docs/html/navtreeindex7.js | 122 +- docs/html/navtreeindex8.js | 122 +- docs/html/navtreeindex9.js | 122 +- docs/html/search/all_0.js | 2 +- docs/html/search/all_1.js | 2 +- docs/html/search/all_10.js | 333 ++- docs/html/search/all_11.js | 63 +- docs/html/search/all_12.js | 100 +- docs/html/search/all_13.js | 2 +- docs/html/search/all_14.js | 313 +-- docs/html/search/all_15.js | 354 ++- docs/html/search/all_16.js | 6 +- docs/html/search/all_17.js | 11 +- docs/html/search/all_18.js | 3 +- docs/html/search/all_19.js | 4 +- docs/html/search/all_2.js | 2 +- docs/html/search/all_3.js | 2 +- docs/html/search/all_4.js | 2 +- docs/html/search/all_5.js | 353 +-- docs/html/search/all_6.js | 7 +- docs/html/search/all_7.js | 244 +- docs/html/search/all_8.js | 2 +- docs/html/search/all_9.js | 206 +- docs/html/search/all_a.js | 215 +- docs/html/search/all_b.js | 32 +- docs/html/search/all_c.js | 304 ++- docs/html/search/all_d.js | 96 +- docs/html/search/all_e.js | 2 +- docs/html/search/all_f.js | 123 +- docs/html/search/classes_0.js | 6 +- docs/html/search/classes_1.js | 2 +- docs/html/search/classes_2.js | 2 +- docs/html/search/classes_3.js | 3 +- docs/html/search/classes_4.js | 3 +- docs/html/search/files_0.js | 3 +- docs/html/search/files_1.js | 5 +- docs/html/search/functions_1.js | 3 +- docs/html/search/functions_10.js | 333 ++- docs/html/search/functions_13.js | 3 +- docs/html/search/functions_14.js | 2 +- docs/html/search/functions_2.js | 220 +- docs/html/search/functions_5.js | 133 +- docs/html/search/functions_6.js | 30 +- docs/html/search/functions_7.js | 302 ++- docs/html/search/functions_8.js | 5 +- docs/html/search/functions_b.js | 276 +- docs/html/search/functions_c.js | 3 +- docs/html/search/functions_d.js | 97 +- docs/html/search/functions_f.js | 309 ++- docs/html/search/related_0.js | 2 +- docs/html/search/searchdata.js | 6 +- docs/html/search/variables_2.js | 22 +- docs/html/search/variables_3.js | 38 +- docs/html/search/variables_4.js | 5 +- docs/html/species_8h.html | 22 +- docs/html/species_8h_source.html | 12 +- ...fourdst_1_1atomic_1_1_species-members.html | 4 +- .../structfourdst_1_1atomic_1_1_species.html | 64 +- .../structfourdst_1_1atomic_1_1_species.js | 2 +- ...ion_1_1_canonical_composition-members.html | 2 +- ...composition_1_1_canonical_composition.html | 2 +- ...st_1_1atomic_1_1_species_01_4-members.html | 2 +- ..._01fourdst_1_1atomic_1_1_species_01_4.html | 7 +- docs/latex/annotated.tex | 14 +- docs/latex/atomic_species_8h.tex | 24 +- docs/latex/atomic_species_8h_source.tex | 172 +- ...fourdst_1_1composition_1_1_composition.tex | 2072 ++++++--------- ...on_1_1exceptions_1_1_composition_error.pdf | Bin 7658 -> 7048 bytes ...on_1_1exceptions_1_1_composition_error.tex | 16 +- ...ceptions_1_1_invalid_composition_error.pdf | Bin 6221 -> 6221 bytes ...ceptions_1_1_invalid_composition_error.tex | 18 +- ...ceptions_1_1_unregistered_symbol_error.pdf | Bin 6618 -> 6618 bytes ...ceptions_1_1_unregistered_symbol_error.tex | 18 +- docs/latex/composition_8cpp.tex | 23 +- docs/latex/composition_8cpp_source.tex | 1617 ++++-------- docs/latex/composition_8h.tex | 26 +- docs/latex/composition_8h_source.tex | 389 ++- .../dir_3c9efac6790a3720e63e1a08c00d11f2.tex | 9 + .../dir_425afc2e69e55565110382214454a15b.tex | 7 + .../dir_68267d1309a1af8e8297ef4c3efbcdba.tex | 7 + .../dir_88aa30610c51652b536406602eb05405.tex | 7 + .../dir_c34d5e8363cf0aa3fabc4f3fad3412a4.tex | 7 + .../dir_cb6fc2f7165eff3b2362b2440dfaea8e.tex | 7 + .../dir_e22a97de167fe22ecd13733f7a34b9f0.tex | 9 + .../dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.tex | 13 +- docs/latex/exceptions__composition_8h.tex | 36 +- .../exceptions__composition_8h_source.tex | 74 +- docs/latex/files.tex | 8 +- docs/latex/hierarchy.tex | 16 +- docs/latex/index.tex | 74 +- docs/latex/namespacefourdst.tex | 4 +- docs/latex/namespacefourdst_1_1atomic.tex | 101 +- .../latex/namespacefourdst_1_1composition.tex | 241 +- ...cefourdst_1_1composition_1_1exceptions.tex | 20 +- docs/latex/namespaces.tex | 4 +- docs/latex/refman.tex | 28 +- docs/latex/species_8h.tex | 24 +- docs/latex/species_8h_source.tex | 6 +- .../structfourdst_1_1atomic_1_1_species.tex | 53 +- ...3_01fourdst_1_1atomic_1_1_species_01_4.tex | 4 +- 219 files changed, 8429 insertions(+), 10585 deletions(-) diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 51f8c56..26930cf 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -105,26 +105,18 @@ $(function(){initNavTree('annotated.html',''); initResizable(true); });
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 1234]
- + - + - - - - - - - - - - - + + + + + - - - + diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index 5289d80..fc6937d 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -6,22 +6,14 @@ var annotated_dup = ] ], [ "composition", "namespacefourdst_1_1composition.html", [ [ "exceptions", "namespacefourdst_1_1composition_1_1exceptions.html", [ - [ "CompositionEntryError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_entry_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_entry_error" ], [ "CompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_error" ], - [ "CompositionModeError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_mode_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_mode_error" ], - [ "CompositionNotFinalizedError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_not_finalized_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_not_finalized_error" ], - [ "EntryAlreadyInitializedError", "classfourdst_1_1composition_1_1exceptions_1_1_entry_already_initialized_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_entry_already_initialized_error" ], - [ "FailedToFinalizeCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_failed_to_finalize_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_failed_to_finalize_composition_error" ], [ "InvalidCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error" ], - [ "InvalidMixingMode", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_mixing_mode.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_mixing_mode" ], - [ "InvalidSpeciesSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_species_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_species_symbol_error" ], - [ "InvalidSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_symbol_error" ], + [ "SpeciesError", "classfourdst_1_1composition_1_1exceptions_1_1_species_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_species_error" ], + [ "UnknownSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error" ], [ "UnregisteredSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error" ] ] ], [ "CanonicalComposition", "structfourdst_1_1composition_1_1_canonical_composition.html", "structfourdst_1_1composition_1_1_canonical_composition" ], - [ "Composition", "classfourdst_1_1composition_1_1_composition.html", "classfourdst_1_1composition_1_1_composition" ], - [ "CompositionEntry", "structfourdst_1_1composition_1_1_composition_entry.html", "structfourdst_1_1composition_1_1_composition_entry" ], - [ "GlobalComposition", "structfourdst_1_1composition_1_1_global_composition.html", "structfourdst_1_1composition_1_1_global_composition" ] + [ "Composition", "classfourdst_1_1composition_1_1_composition.html", "classfourdst_1_1composition_1_1_composition" ] ] ] ] ], [ "std", null, [ diff --git a/docs/html/atomic_species_8h.html b/docs/html/atomic_species_8h.html index 942ee5f..a265ac9 100644 --- a/docs/html/atomic_species_8h.html +++ b/docs/html/atomic_species_8h.html @@ -5,7 +5,7 @@ -fourdst::libcomposition: src/composition/include/fourdst/composition/atomicSpecies.h File Reference +fourdst::libcomposition: src/composition/include/fourdst/atomic/atomicSpecies.h File Reference @@ -29,7 +29,7 @@ @@ -108,8 +108,18 @@ $(function(){initNavTree('atomic_species_8h.html',''); initResizable(true); });
#include <string_view>
#include <string>
-#include <iostream>
+#include <optional>
#include <limits>
+
+Include dependency graph for atomicSpecies.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+

Go to the source code of this file.

 Nfourdst
 NatomicContains classes and functions related to atomic data, such as properties of atomic species
 NatomicContains canonical information about atomic species and elements used by 4D-STAR
 CSpeciesRepresents an atomic species (isotope) with its fundamental physical properties
 Ncomposition
 NcompositionUtilities and types for representing and manipulating chemical compositions
 Nexceptions
 CCompositionEntryErrorBase class for exceptions related to individual entries within a composition
 CCompositionErrorBase class for exceptions related to composition objects
 CCompositionModeErrorException thrown due to a conflict in composition modes at the entry level
 CCompositionNotFinalizedErrorException thrown when an operation is attempted on a composition that has not been finalized
 CEntryAlreadyInitializedErrorException thrown when attempting to initialize a composition entry that has already been initialized
 CFailedToFinalizeCompositionErrorException thrown when the finalization process of a composition fails
 CInvalidCompositionErrorException thrown when a composition is in an invalid or inconsistent state
 CInvalidMixingModeException thrown for an invalid or unsupported mixing mode
 CInvalidSpeciesSymbolErrorException thrown for an invalid chemical species symbol in a composition entry
 CInvalidSymbolErrorException thrown when a symbol used in a composition is invalid
 CUnregisteredSymbolErrorException thrown when a symbol is used that has not been registered
 CCompositionErrorBase class for exceptions related to composition objects
 CInvalidCompositionErrorException thrown when a composition is in an invalid or inconsistent state
 CSpeciesErrorBase class for exceptions related to atomic species
 CUnknownSymbolErrorException thrown when an unknown symbol is encountered
 CUnregisteredSymbolErrorException thrown when a symbol is used that has not been registered
 CCanonicalCompositionRepresents the canonical (X, Y, Z) composition of stellar material
 CCompositionManages a collection of chemical species and their abundances
 CCompositionCache
 CCompositionEntryRepresents a single entry (an isotope) within a composition
 CGlobalCompositionRepresents global properties of a finalized composition
 CCompositionCacheCaches computed properties of the composition to avoid redundant calculations
 NstdSTL namespace
 Chash< fourdst::atomic::Species >Specialization of std::hash for fourdst::atomic::Species
 CCompositionAbstractAbstract base class for chemical composition representations
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -125,16 +135,16 @@ Classes - +

Namespaces

namespace  fourdst::atomic
 Contains classes and functions related to atomic data, such as properties of atomic species.
 Contains canonical information about atomic species and elements used by 4D-STAR.
 
namespace  fourdst
 
- - - + + + @@ -153,7 +163,7 @@ Functions diff --git a/docs/html/atomic_species_8h.js b/docs/html/atomic_species_8h.js index 60b72e9..714edd9 100644 --- a/docs/html/atomic_species_8h.js +++ b/docs/html/atomic_species_8h.js @@ -2,7 +2,7 @@ var atomic_species_8h = [ [ "fourdst::atomic::Species", "structfourdst_1_1atomic_1_1_species.html", "structfourdst_1_1atomic_1_1_species" ], [ "std::hash< fourdst::atomic::Species >", "structstd_1_1hash_3_01fourdst_1_1atomic_1_1_species_01_4.html", "structstd_1_1hash_3_01fourdst_1_1atomic_1_1_species_01_4" ], - [ "fourdst::atomic::convert_jpi_to_double", "namespacefourdst_1_1atomic.html#ada037e2130ddb6174ff7934cda49c2ba", null ], + [ "fourdst::atomic::convert_jpi_to_double", "namespacefourdst_1_1atomic.html#ab8b3572582a3f80243ecce021b4782d1", null ], [ "fourdst::atomic::operator!=", "namespacefourdst_1_1atomic.html#a2b6c699988f0748a0627f447863240ad", null ], [ "fourdst::atomic::operator<", "namespacefourdst_1_1atomic.html#a34d001fa83e2bac9f8ebd96285d8821a", null ], [ "fourdst::atomic::operator==", "namespacefourdst_1_1atomic.html#a277fa6e5107f1358e204c807146deeb4", null ], diff --git a/docs/html/atomic_species_8h_source.html b/docs/html/atomic_species_8h_source.html index b3b12b9..d7805ea 100644 --- a/docs/html/atomic_species_8h_source.html +++ b/docs/html/atomic_species_8h_source.html @@ -5,7 +5,7 @@ -fourdst::libcomposition: src/composition/include/fourdst/composition/atomicSpecies.h Source File +fourdst::libcomposition: src/composition/include/fourdst/atomic/atomicSpecies.h Source File @@ -29,7 +29,7 @@ @@ -107,12 +107,12 @@ $(function(){initNavTree('atomic_species_8h_source.html',''); initResizable(true
3
4#include <string_view>
5#include <string>
-
6#include <iostream>
+
6#include <optional>
7#include <limits>
8
9
14namespace fourdst::atomic {
-
20 inline double convert_jpi_to_double(const std::string& jpi_string);
+
20 inline double convert_jpi_to_double(const std::string& jpi_string) noexcept;
21
51 struct Species {
@@ -130,7 +130,7 @@ $(function(){initNavTree('atomic_species_8h_source.html',''); initResizable(true
63 std::string m_decayModes;
64 double m_atomicMass;
-
66 double m_spin = 0.0;
+
66 mutable std::optional<double> m_spin = std::nullopt;
67
@@ -162,119 +162,119 @@ $(function(){initNavTree('atomic_species_8h_source.html',''); initResizable(true
116 m_atomicMass(atomicMass),
-
117 m_atomicMassUnc(atomicMassUnc) {
- -
119 };
+
117 m_atomicMassUnc(atomicMassUnc) {};
-
120
-
- -
127 m_name = species.m_name;
-
128 m_el = species.m_el;
-
129 m_nz = species.m_nz;
-
130 m_n = species.m_n;
-
131 m_z = species.m_z;
-
132 m_a = species.m_a;
-
133 m_bindingEnergy = species.m_bindingEnergy;
-
134 m_betaCode = species.m_betaCode;
-
135 m_betaDecayEnergy = species.m_betaDecayEnergy;
-
136 m_halfLife_s = species.m_halfLife_s;
-
137 m_spinParity = species.m_spinParity;
-
138 m_decayModes = species.m_decayModes;
-
139 m_atomicMass = species.m_atomicMass;
-
140 m_atomicMassUnc = species.m_atomicMassUnc;
- -
142 }
+
118
+
+ +
125 m_name = species.m_name;
+
126 m_el = species.m_el;
+
127 m_nz = species.m_nz;
+
128 m_n = species.m_n;
+
129 m_z = species.m_z;
+
130 m_a = species.m_a;
+
131 m_bindingEnergy = species.m_bindingEnergy;
+
132 m_betaCode = species.m_betaCode;
+
133 m_betaDecayEnergy = species.m_betaDecayEnergy;
+
134 m_halfLife_s = species.m_halfLife_s;
+
135 m_spinParity = species.m_spinParity;
+
136 m_decayModes = species.m_decayModes;
+
137 m_atomicMass = species.m_atomicMass;
+
138 m_atomicMassUnc = species.m_atomicMassUnc;
+
139 }
-
143
-
144
-
-
149 [[nodiscard]] double mass() const {
-
150 return m_atomicMass;
-
151 }
+
140
+
141
+
+
146 [[nodiscard]] double mass() const {
+
147 return m_atomicMass;
+
148 }
-
152
-
-
157 [[nodiscard]] double massUnc() const {
-
158 return m_atomicMassUnc;
-
159 }
+
149
+
+
154 [[nodiscard]] double massUnc() const {
+
155 return m_atomicMassUnc;
+
156 }
-
160
-
-
165 [[nodiscard]] double halfLife() const {
-
166 return m_halfLife_s;
-
167 }
+
157
+
+
162 [[nodiscard]] double halfLife() const {
+
163 return m_halfLife_s;
+
164 }
-
168
-
-
173 [[nodiscard]] std::string_view spinParity() const {
-
174 return m_spinParity;
-
175 }
+
165
+
+
170 [[nodiscard]] std::string_view spinParity() const {
+
171 return m_spinParity;
+
172 }
-
176
-
-
181 [[nodiscard]] std::string_view decayModes() const {
-
182 return m_decayModes;
-
183 }
+
173
+
+
178 [[nodiscard]] std::string_view decayModes() const {
+
179 return m_decayModes;
+
180 }
-
184
-
-
189 [[nodiscard]] double bindingEnergy() const {
-
190 return m_bindingEnergy;
-
191 }
+
181
+
+
186 [[nodiscard]] double bindingEnergy() const {
+
187 return m_bindingEnergy;
+
188 }
-
192
-
-
197 [[nodiscard]] double betaDecayEnergy() const {
-
198 return m_betaDecayEnergy;
-
199 }
+
189
+
+
194 [[nodiscard]] double betaDecayEnergy() const {
+
195 return m_betaDecayEnergy;
+
196 }
-
200
-
-
205 [[nodiscard]] std::string_view betaCode() const {
-
206 return m_betaCode;
-
207 }
+
197
+
+
202 [[nodiscard]] std::string_view betaCode() const {
+
203 return m_betaCode;
+
204 }
-
208
-
-
213 [[nodiscard]] std::string_view name() const {
-
214 return m_name;
-
215 }
+
205
+
+
210 [[nodiscard]] std::string_view name() const {
+
211 return m_name;
+
212 }
-
216
-
-
221 [[nodiscard]] std::string_view el() const {
-
222 return m_el;
-
223 }
+
213
+
+
218 [[nodiscard]] std::string_view el() const {
+
219 return m_el;
+
220 }
-
224
-
-
229 [[nodiscard]] int nz() const {
-
230 return m_nz;
-
231 }
+
221
+
+
226 [[nodiscard]] int nz() const {
+
227 return m_nz;
+
228 }
-
232
-
-
237 [[nodiscard]] int n() const {
-
238 return m_n;
-
239 }
+
229
+
+
234 [[nodiscard]] int n() const {
+
235 return m_n;
+
236 }
-
240
-
-
245 [[nodiscard]] int z() const {
-
246 return m_z;
-
247 }
+
237
+
+
242 [[nodiscard]] int z() const {
+
243 return m_z;
+
244 }
-
248
-
-
253 [[nodiscard]] int a() const {
-
254 return m_a;
-
255 }
+
245
+
+
250 [[nodiscard]] int a() const {
+
251 return m_a;
+
252 }
-
256
-
-
261 [[nodiscard]] double spin() const {
-
262 return m_spin;
+
253
+
+
258 [[nodiscard]] double spin() const {
+
259 if (!m_spin.has_value()) { // The spin calculation is very expensive, and we almost never need it so we only compute it the first time it is requested
+ +
261 }
+
262 return m_spin.value();
263 }
264
@@ -317,7 +317,7 @@ $(function(){initNavTree('atomic_species_8h_source.html',''); initResizable(true
317
-
348 inline double convert_jpi_to_double(const std::string& jpi_string) {
+
348 inline double convert_jpi_to_double(const std::string& jpi_string) noexcept {
349 std::string s = jpi_string;
350
351 if (s.empty()) {
@@ -384,59 +384,59 @@ $(function(){initNavTree('atomic_species_8h_source.html',''); initResizable(true
437}; // namespace std
-
Contains classes and functions related to atomic data, such as properties of atomic species.
+
Contains canonical information about atomic species and elements used by 4D-STAR.
bool operator==(const Species &lhs, const Species &rhs)
Equality operator for Species. Compares based on name.
bool operator>(const Species &lhs, const Species &rhs)
Greater-than operator for Species. Compares based on atomic mass.
bool operator!=(const Species &lhs, const Species &rhs)
Inequality operator for Species. Compares based on name.
bool operator<(const Species &lhs, const Species &rhs)
Less-than operator for Species. Compares based on atomic mass.
static const std::unordered_map< std::string, const Species & > species
Map of species names to their corresponding Species objects.
Definition species.h:3579
-
double convert_jpi_to_double(const std::string &jpi_string)
Converts a spin-parity string (JPI string) to a double-precision floating-point number.
+
double convert_jpi_to_double(const std::string &jpi_string) noexcept
Converts a spin-parity string (JPI string) to a double-precision floating-point number.
Represents an atomic species (isotope) with its fundamental physical properties.
-
double spin() const
Gets the nuclear spin as a numeric value.
+
double spin() const
Gets the nuclear spin as a numeric value.
double m_betaDecayEnergy
Beta decay energy in keV.
-
int z() const
Gets the atomic number (number of protons).
-
std::string_view name() const
Gets the name of the species.
-
std::string_view el() const
Gets the element symbol of the species.
-
double halfLife() const
Gets the half-life of the species.
+
int z() const
Gets the atomic number (number of protons).
+
std::string_view name() const
Gets the name of the species.
+
std::string_view el() const
Gets the element symbol of the species.
+
double halfLife() const
Gets the half-life of the species.
Species(const std::string_view name, const std::string_view el, const int nz, const int n, const int z, const int a, const double bindingEnergy, const std::string_view betaCode, const double betaDecayEnergy, const double halfLife_s, const std::string_view spinParity, const std::string_view decayModes, const double atomicMass, const double atomicMassUnc)
Constructs a Species object with detailed properties.
double m_atomicMassUnc
Uncertainty in the atomic mass.
std::string m_name
Name of the species (e.g., "Fe56").
int m_nz
NZ identifier, typically 1000*Z + A.
std::string m_decayModes
Decay modes as a string.
-
std::string_view betaCode() const
Gets the beta decay code.
+
std::string_view betaCode() const
Gets the beta decay code.
int m_a
Mass number (N + Z).
std::string m_el
Element symbol (e.g., "Fe").
friend bool operator==(const Species &lhs, const Species &rhs)
Equality operator for Species. Compares based on name.
-
double betaDecayEnergy() const
Gets the beta decay energy of the species.
-
Species(const Species &species)
Copy constructor for Species.
+
double betaDecayEnergy() const
Gets the beta decay energy of the species.
+
Species(const Species &species)
Copy constructor for Species.
std::string m_spinParity
Spin and parity as a string (e.g., "1/2-").
int m_n
Number of neutrons.
-
int n() const
Gets the number of neutrons.
-
int nz() const
Gets the NZ identifier of the species.
-
std::string_view decayModes() const
Gets the decay modes as a string.
+
int n() const
Gets the number of neutrons.
+
std::optional< double > m_spin
Nuclear spin as a double, derived from m_spinParity.
+
int nz() const
Gets the NZ identifier of the species.
+
std::string_view decayModes() const
Gets the decay modes as a string.
int m_z
Atomic number (number of protons).
double m_atomicMass
Atomic mass in atomic mass units (u).
friend bool operator>(const Species &lhs, const Species &rhs)
Greater-than operator for Species. Compares based on atomic mass.
std::string m_betaCode
Beta decay code.
-
double bindingEnergy() const
Gets the binding energy of the species.
-
double massUnc() const
Gets the uncertainty in the atomic mass.
+
double bindingEnergy() const
Gets the binding energy of the species.
+
double massUnc() const
Gets the uncertainty in the atomic mass.
double m_bindingEnergy
Binding energy in keV.
friend std::ostream & operator<<(std::ostream &os, const Species &species)
Overloads the stream insertion operator for easy printing of a Species object.
-
int a() const
Gets the mass number.
+
int a() const
Gets the mass number.
friend bool operator!=(const Species &lhs, const Species &rhs)
Inequality operator for Species. Compares based on name.
-
double m_spin
Nuclear spin as a double, derived from m_spinParity.
-
double mass() const
Gets the atomic mass of the species.
+
double mass() const
Gets the atomic mass of the species.
double m_halfLife_s
Half-life in seconds. A value of -1.0 typically indicates stability.
friend bool operator<(const Species &lhs, const Species &rhs)
Less-than operator for Species. Compares based on atomic mass.
-
std::string_view spinParity() const
Gets the spin and parity as a string.
+
std::string_view spinParity() const
Gets the spin and parity as a string.
size_t operator()(const fourdst::atomic::Species &s) const noexcept
Computes the hash for a Species object.
diff --git a/docs/html/classes.html b/docs/html/classes.html index a68f9dc..21a712e 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -29,7 +29,7 @@
@@ -102,32 +102,23 @@ $(function(){initNavTree('classes.html',''); initResizable(true); });
Class Index
diff --git a/docs/html/classfourdst_1_1composition_1_1_composition-members.html b/docs/html/classfourdst_1_1composition_1_1_composition-members.html index b9f2ac8..c5c2034 100644 --- a/docs/html/classfourdst_1_1composition_1_1_composition-members.html +++ b/docs/html/classfourdst_1_1composition_1_1_composition-members.html @@ -29,7 +29,7 @@ @@ -109,71 +109,53 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1_composition.html',''); - - + + + + + + - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + +

Functions

double fourdst::atomic::convert_jpi_to_double (const std::string &jpi_string)
 Converts a spin-parity string (JPI string) to a double-precision floating-point number.
 
double fourdst::atomic::convert_jpi_to_double (const std::string &jpi_string) noexcept
 Converts a spin-parity string (JPI string) to a double-precision floating-point number.
 
bool fourdst::atomic::operator== (const Species &lhs, const Species &rhs)
 Equality operator for Species. Compares based on name.
 
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
begin() constfourdst::composition::Compositioninline
Composition()=defaultfourdst::composition::Composition
Composition(const std::vector< std::string > &symbols)fourdst::composition::Compositionexplicit
Composition(const std::set< std::string > &symbols)fourdst::composition::Compositionexplicit
Composition(const std::vector< std::string > &symbols, const std::vector< double > &fractions, bool massFracMode=true)fourdst::composition::Composition
Composition(const std::vector< atomic::Species > &species)fourdst::composition::Compositionexplicit
Composition(const std::set< std::string > &symbols)fourdst::composition::Compositionexplicit
Composition(const std::set< atomic::Species > &species)fourdst::composition::Compositionexplicit
Composition(const std::vector< std::string > &symbols, const std::vector< double > &molarAbundances)fourdst::composition::Composition
Composition(const std::vector< atomic::Species > &species, const std::vector< double > &molarAbundances)fourdst::composition::Composition
Composition(const std::set< std::string > &symbols, const std::vector< double > &molarAbundances)fourdst::composition::Composition
Composition(const Composition &composition)fourdst::composition::Composition
contains(const atomic::Species &isotope) const overridefourdst::composition::Compositionvirtual
end()fourdst::composition::Compositioninline
end() constfourdst::composition::Compositioninline
finalize(bool norm=false)fourdst::composition::Composition
finalizeMassFracMode(bool norm)fourdst::composition::Compositionprivate
finalizeNumberFracMode(bool norm)fourdst::composition::Compositionprivate
getCanonicalComposition(bool harsh=false) constfourdst::composition::Composition
getComposition(const std::string &symbol) constfourdst::composition::Composition
getComposition(const fourdst::atomic::Species &species) constfourdst::composition::Composition
getComposition() constfourdst::composition::Composition
getElectronAbundance() const overridefourdst::composition::Compositionvirtual
getMassFraction() const overridefourdst::composition::Compositionvirtual
contains(const atomic::Species &species) const noexcept overridefourdst::composition::Compositionvirtual
contains(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
end()fourdst::composition::Compositioninline
end() constfourdst::composition::Compositioninline
getCanonicalComposition() constfourdst::composition::Composition
getElectronAbundance() const noexcept overridefourdst::composition::Compositionvirtual
getLogger()fourdst::composition::Compositioninlineprivatestatic
getMassFraction() const noexcept overridefourdst::composition::Compositionvirtual
getMassFraction(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getMassFraction(const fourdst::atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getMassFractionVector() const overridefourdst::composition::Compositionvirtual
getMeanAtomicNumber() const overridefourdst::composition::Compositionvirtual
getMeanParticleMass() const overridefourdst::composition::Compositionvirtual
getMolarAbundance(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getMolarAbundance(const fourdst::atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getMolarAbundanceVector() const overridefourdst::composition::Compositionvirtual
getNumberFraction(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getNumberFraction(const fourdst::atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getNumberFraction() const overridefourdst::composition::Compositionvirtual
getNumberFractionVector() const overridefourdst::composition::Compositionvirtual
getRegisteredSpecies() const overridefourdst::composition::Compositionvirtual
getRegisteredSymbols() const overridefourdst::composition::Compositionvirtual
getSpeciesAtIndex(size_t index) const overridefourdst::composition::Compositionvirtual
getSpeciesIndex(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getSpeciesIndex(const atomic::Species &species) const overridefourdst::composition::Compositionvirtual
hasSpecies(const fourdst::atomic::Species &species) const overridefourdst::composition::Compositionvirtual
hasSymbol(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
isValidComposition(const std::vector< double > &fractions) constfourdst::composition::Compositionprivate
isValidSymbol(const std::string &symbol)fourdst::composition::Compositionprivatestatic
m_cachefourdst::composition::Compositionmutableprivate
m_compositionsfourdst::composition::Compositionprivate
m_configfourdst::composition::Compositionprivate
m_finalizedfourdst::composition::Compositionprivate
m_loggerfourdst::composition::Compositionprivate
m_logManagerfourdst::composition::Compositionprivate
m_massFracModefourdst::composition::Compositionprivate
m_meanParticleMassfourdst::composition::Compositionprivate
m_registeredSymbolsfourdst::composition::Compositionprivate
m_specificNumberDensityfourdst::composition::Compositionprivate
mix(const Composition &other, double fraction) constfourdst::composition::Composition
operator+(const Composition &other) constfourdst::composition::Composition
getMassFraction(const atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getMassFractionVector() const noexcept overridefourdst::composition::Compositionvirtual
getMeanParticleMass() const noexcept overridefourdst::composition::Compositionvirtual
getMolarAbundance(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getMolarAbundance(const atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getMolarAbundanceVector() const noexcept overridefourdst::composition::Compositionvirtual
getNumberFraction(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getNumberFraction(const atomic::Species &species) const overridefourdst::composition::Compositionvirtual
getNumberFraction() const noexcept overridefourdst::composition::Compositionvirtual
getNumberFractionVector() const noexcept overridefourdst::composition::Compositionvirtual
getRegisteredSpecies() const noexcept overridefourdst::composition::Compositionvirtual
getRegisteredSymbols() const noexcept overridefourdst::composition::Compositionvirtual
getSpeciesAtIndex(size_t index) const overridefourdst::composition::Compositionvirtual
getSpeciesIndex(const std::string &symbol) const overridefourdst::composition::Compositionvirtual
getSpeciesIndex(const atomic::Species &species) const overridefourdst::composition::Compositionvirtual
m_cachefourdst::composition::Compositionmutableprivate
m_molarAbundancesfourdst::composition::Compositionprivate
m_registeredSpeciesfourdst::composition::Compositionprivate
operator<<(std::ostream &os, const Composition &composition)fourdst::composition::Compositionfriend
operator=(Composition const &other)fourdst::composition::Composition
registerSpecies(const fourdst::atomic::Species &species, bool massFracMode=true)fourdst::composition::Composition
registerSpecies(const std::vector< fourdst::atomic::Species > &species, bool massFracMode=true)fourdst::composition::Composition
registerSymbol(const std::string &symbol, bool massFracMode=true)fourdst::composition::Composition
registerSymbol(const std::vector< std::string > &symbols, bool massFracMode=true)fourdst::composition::Composition
setCompositionMode(bool massFracMode)fourdst::composition::Composition
setMassFraction(const std::string &symbol, const double &mass_fraction)fourdst::composition::Composition
setMassFraction(const std::vector< std::string > &symbols, const std::vector< double > &mass_fractions)fourdst::composition::Composition
setMassFraction(const fourdst::atomic::Species &species, const double &mass_fraction)fourdst::composition::Composition
setMassFraction(const std::vector< fourdst::atomic::Species > &species, const std::vector< double > &mass_fractions)fourdst::composition::Composition
setNumberFraction(const std::string &symbol, const double &number_fraction)fourdst::composition::Composition
setNumberFraction(const std::vector< std::string > &symbols, const std::vector< double > &number_fractions)fourdst::composition::Composition
setNumberFraction(const fourdst::atomic::Species &species, const double &number_fraction)fourdst::composition::Composition
setNumberFraction(const std::vector< fourdst::atomic::Species > &species, const std::vector< double > &number_fractions)fourdst::composition::Composition
subset(const std::vector< std::string > &symbols, const std::string &method="norm") constfourdst::composition::Composition
validateComposition(const std::vector< double > &fractions) constfourdst::composition::Compositionprivate
registerSpecies(const atomic::Species &species) noexceptfourdst::composition::Composition
registerSpecies(const std::vector< atomic::Species > &species) noexceptfourdst::composition::Composition
registerSymbol(const std::string &symbol)fourdst::composition::Composition
registerSymbol(const std::vector< std::string > &symbols)fourdst::composition::Composition
setMolarAbundance(const std::string &symbol, const double &molar_abundance)fourdst::composition::Composition
setMolarAbundance(const atomic::Species &species, const double &molar_abundance)fourdst::composition::Composition
setMolarAbundance(const std::vector< std::string > &symbols, const std::vector< double > &molar_abundances)fourdst::composition::Composition
setMolarAbundance(const std::vector< atomic::Species > &species, const std::vector< double > &molar_abundances)fourdst::composition::Composition
setMolarAbundance(const std::set< std::string > &symbols, const std::vector< double > &molar_abundances)fourdst::composition::Composition
setMolarAbundance(const std::set< atomic::Species > &species, const std::vector< double > &molar_abundances)fourdst::composition::Composition
size() const noexcept overridefourdst::composition::Compositionvirtual
~Composition() override=defaultfourdst::composition::Composition
~CompositionAbstract()=defaultCompositionAbstractvirtual
diff --git a/docs/html/classfourdst_1_1composition_1_1_composition.html b/docs/html/classfourdst_1_1composition_1_1_composition.html index e38138e..d569d32 100644 --- a/docs/html/classfourdst_1_1composition_1_1_composition.html +++ b/docs/html/classfourdst_1_1composition_1_1_composition.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -102,7 +102,6 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1_composition.html','');
Classes | Public Member Functions | -Private Member Functions | Static Private Member Functions | Private Attributes | Friends | @@ -118,16 +117,18 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1_composition.html','');
Inheritance diagram for fourdst::composition::Composition:
-
- - -CompositionAbstract - -
+
+
[legend]
+
+Collaboration diagram for fourdst::composition::Composition:
+
+
+
[legend]
+

Classes

struct  CompositionCache
 Caches computed properties of the composition to avoid redundant calculations. More...
 
- - - - + + + + - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -279,73 +262,37 @@ Public Member Functions - - - - + - + - + - +

@@ -138,138 +139,120 @@ Public Member Functions

 ~Composition () override=default
 Default destructor.
 
bool finalize (bool norm=false)
 Finalizes the composition, making it ready for querying.
 
 Composition (const std::vector< std::string > &symbols)
 Constructs a Composition and registers the given symbols.
 Constructs a Composition and registers the given symbols from a vector.
 
 Composition (const std::vector< atomic::Species > &species)
 Constructs a Composition and registers the given species from a vector.
 
 Composition (const std::set< std::string > &symbols)
 Constructs a Composition and registers the given symbols from a set.
 
 Composition (const std::vector< std::string > &symbols, const std::vector< double > &fractions, bool massFracMode=true)
 Constructs and finalizes a Composition with the given symbols and fractions.
 
 Composition (const std::set< atomic::Species > &species)
 Constructs a Composition and registers the given species from a set.
 
 Composition (const std::vector< std::string > &symbols, const std::vector< double > &molarAbundances)
 Constructs a Composition from symbols and their corresponding molar abundances.
 
 Composition (const std::vector< atomic::Species > &species, const std::vector< double > &molarAbundances)
 Constructs a Composition from species and their corresponding molar abundances.
 
 Composition (const std::set< std::string > &symbols, const std::vector< double > &molarAbundances)
 Constructs a Composition from symbols in a set and their corresponding molar abundances.
 
 Composition (const Composition &composition)
 Constructs a Composition from another Composition.
 
Compositionoperator= (Composition const &other)
 Assignment operator.
 
void registerSymbol (const std::string &symbol, bool massFracMode=true)
 Registers a new symbol for inclusion in the composition.
 
void registerSymbol (const std::vector< std::string > &symbols, bool massFracMode=true)
 Registers multiple new symbols.
 
void registerSpecies (const fourdst::atomic::Species &species, bool massFracMode=true)
 Registers a new species by extracting its symbol.
 
void registerSpecies (const std::vector< fourdst::atomic::Species > &species, bool massFracMode=true)
 Registers a vector of new species.
 
std::set< std::string > getRegisteredSymbols () const override
 Gets the registered symbols.
 
std::set< fourdst::atomic::SpeciesgetRegisteredSpecies () const override
 Get a set of all species that are registered in the composition.
 
double setMassFraction (const std::string &symbol, const double &mass_fraction)
 Sets the mass fraction for a given symbol.
 
std::vector< double > setMassFraction (const std::vector< std::string > &symbols, const std::vector< double > &mass_fractions)
 Sets the mass fraction for multiple symbols.
 
double setMassFraction (const fourdst::atomic::Species &species, const double &mass_fraction)
 Sets the mass fraction for a given species.
 
std::vector< double > setMassFraction (const std::vector< fourdst::atomic::Species > &species, const std::vector< double > &mass_fractions)
 Sets the mass fraction for multiple species.
 
double setNumberFraction (const std::string &symbol, const double &number_fraction)
 Sets the number fraction for a given symbol.
 
std::vector< double > setNumberFraction (const std::vector< std::string > &symbols, const std::vector< double > &number_fractions)
 Sets the number fraction for multiple symbols.
 
double setNumberFraction (const fourdst::atomic::Species &species, const double &number_fraction)
 Sets the number fraction for a given species.
 
std::vector< double > setNumberFraction (const std::vector< fourdst::atomic::Species > &species, const std::vector< double > &number_fractions)
 Sets the number fraction for multiple species.
 
Composition mix (const Composition &other, double fraction) const
 Mixes this composition with another to produce a new composition.
 
std::unordered_map< std::string, double > getMassFraction () const override
 Gets the mass fractions of all species in the composition.
 
void registerSymbol (const std::string &symbol)
 Registers a new symbol for inclusion in the composition.
 
void registerSymbol (const std::vector< std::string > &symbols)
 Registers multiple new symbols.
 
void registerSpecies (const atomic::Species &species) noexcept
 Registers a new species by extracting its symbol.
 
void registerSpecies (const std::vector< atomic::Species > &species) noexcept
 Registers a vector of new species.
 
bool contains (const atomic::Species &species) const noexcept override
 Checks if a given species is present in the composition.
 
bool contains (const std::string &symbol) const override
 Checks if a given symbol is present in the composition.
 
size_t size () const noexcept override
 Gets the number of registered species in the composition.
 
void setMolarAbundance (const std::string &symbol, const double &molar_abundance)
 Sets the molar abundance for a given symbol.
 
void setMolarAbundance (const atomic::Species &species, const double &molar_abundance)
 Sets the molar abundance for a given isotope.
 
void setMolarAbundance (const std::vector< std::string > &symbols, const std::vector< double > &molar_abundances)
 Sets the molar abundances for a list of symbols.
 
void setMolarAbundance (const std::vector< atomic::Species > &species, const std::vector< double > &molar_abundances)
 Sets the molar abundances for a list of isotopes.
 
void setMolarAbundance (const std::set< std::string > &symbols, const std::vector< double > &molar_abundances)
 Sets the molar abundances for a set of symbols.
 
void setMolarAbundance (const std::set< atomic::Species > &species, const std::vector< double > &molar_abundances)
 Sets the molar abundances for a set of isotopes.
 
std::set< std::string > getRegisteredSymbols () const noexcept override
 Gets the registered symbols.
 
const std::set< atomic::Species > & getRegisteredSpecies () const noexcept override
 Get a set of all species that are registered in the composition.
 
std::unordered_map< atomic::Species, double > getMassFraction () const noexcept override
 Gets the mass fractions of all species in the composition.
 
double getMassFraction (const std::string &symbol) const override
 Gets the mass fraction for a given symbol.
 Gets the mass fraction for a given symbol. See the overload for species-based lookup for more details on how mass fractions are calculated.
 
double getMassFraction (const fourdst::atomic::Species &species) const override
 Gets the mass fraction for a given isotope.
 
double getMassFraction (const atomic::Species &species) const override
 Gets the mass fraction for a given species.
 
double getNumberFraction (const std::string &symbol) const override
 Gets the number fraction for a given symbol.
 Gets the number fraction for a given symbol. See the overload for species-based lookup for more details on how number fractions are calculated.
 
double getNumberFraction (const fourdst::atomic::Species &species) const override
 Gets the number fraction for a given isotope.
 
std::unordered_map< std::string, double > getNumberFraction () const override
 Gets the number fractions of all species in the composition.
 
double getNumberFraction (const atomic::Species &species) const override
 Gets the number fraction for a given species.
 
std::unordered_map< atomic::Species, double > getNumberFraction () const noexcept override
 Gets the number fractions of all species in the composition.
 
double getMolarAbundance (const std::string &symbol) const override
 Gets the molar abundance (X_i / A_i) for a given symbol.
 Gets the molar abundances of all species in the composition.
 
double getMolarAbundance (const fourdst::atomic::Species &species) const override
 Gets the molar abundance for a given isotope.
 
std::pair< CompositionEntry, GlobalCompositiongetComposition (const std::string &symbol) const
 Gets the composition entry and global composition data for a given symbol.
 
std::pair< CompositionEntry, GlobalCompositiongetComposition (const fourdst::atomic::Species &species) const
 Gets the composition entry and global composition data for a given species.
 
std::pair< std::unordered_map< std::string, CompositionEntry >, GlobalCompositiongetComposition () const
 Gets all composition entries and the global composition data.
 
double getMeanParticleMass () const override
 Compute the mean particle mass of the composition.
 
double getMeanAtomicNumber () const override
 Compute the mean atomic number of the composition.
 
double getElectronAbundance () const override
 Compute the electron abundance of the composition.
 
Composition subset (const std::vector< std::string > &symbols, const std::string &method="norm") const
 Creates a new Composition object containing a subset of species from this one.
 
bool hasSymbol (const std::string &symbol) const override
 Checks if a symbol is registered in the composition.
 
bool hasSpecies (const fourdst::atomic::Species &species) const override
 Checks if a species is registered in the composition.
 
bool contains (const atomic::Species &isotope) const override
 Checks if a given isotope is present in the composition.
 
void setCompositionMode (bool massFracMode)
 Sets the composition mode (mass fraction vs. number fraction).
 
CanonicalComposition getCanonicalComposition (bool harsh=false) const
 Gets the current canonical composition (X, Y, Z).
 
std::vector< double > getMassFractionVector () const override
 Get a uniform vector representation of the mass fraction stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
std::vector< double > getNumberFractionVector () const override
 Get a uniform vector representation of the number fractions stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
std::vector< double > getMolarAbundanceVector () const override
 Get a uniform vector representation of the molar abundances stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
double getMolarAbundance (const atomic::Species &species) const override
 Gets the molar abundance for a given species.
 
double getMeanParticleMass () const noexcept override
 Compute the mean particle mass of the composition.
 
double getElectronAbundance () const noexcept override
 Compute the electron abundance of the composition.
 
CanonicalComposition getCanonicalComposition () const
 Compute the canonical composition (X, Y, Z) of the composition.
 
std::vector< double > getMassFractionVector () const noexcept override
 Get a uniform vector representation of the mass fraction stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
std::vector< double > getNumberFractionVector () const noexcept override
 Get a uniform vector representation of the number fractions stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
std::vector< double > getMolarAbundanceVector () const noexcept override
 Get a uniform vector representation of the molar abundances stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.
 
size_t getSpeciesIndex (const std::string &symbol) const override
 get the index in the sorted vector representation for a given symbol
 
atomic::Species getSpeciesAtIndex (size_t index) const override
 Get the species at a given index in the sorted vector representation.
 
Composition operator+ (const Composition &other) const
 Overloads the + operator to mix two compositions with a 50/50 fraction.
 
auto begin ()
 Returns an iterator to the beginning of the composition map.
 Returns an iterator to the beginning of the molar abundance map.
 
auto begin () const
 Returns a const iterator to the beginning of the composition map.
 Returns a const iterator to the beginning of the molar abundance map.
 
auto end ()
 Returns an iterator to the end of the composition map.
 Returns an iterator to the end of the molar abundance map.
 
auto end () const
 Returns a const iterator to the end of the composition map.
 Returns a const iterator to the end of the molar abundance map.
 
- Public Member Functions inherited from CompositionAbstract
virtual ~CompositionAbstract ()=default
 Virtual destructor.
 
- - - - - - - - - - - - - -

-Private Member Functions

bool isValidComposition (const std::vector< double > &fractions) const
 Checks if the given fractions are valid (sum to ~1.0).
 
void validateComposition (const std::vector< double > &fractions) const
 Validates the given fractions, throwing an exception on failure.
 
bool finalizeMassFracMode (bool norm)
 Finalizes the composition in mass fraction mode.
 
bool finalizeNumberFracMode (bool norm)
 Finalizes the composition in number fraction mode.
 
- - - + + +

Static Private Member Functions

static bool isValidSymbol (const std::string &symbol)
 Checks if the given symbol is valid by checking against the global species database.
 
static quill::Logger * getLogger ()
 Gets the logger instance for the Composition class. This is static to ensure that all composition objects share the same logger instance.
 
- - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -358,50 +305,29 @@ Friends

Private Attributes

config::Config & m_config = config::Config::getInstance()
 
logging::LogManager & m_logManager = logging::LogManager::getInstance()
 
quill::Logger * m_logger = m_logManager.getLogger("log")
 
bool m_finalized = false
 True if the composition is finalized.
 
double m_specificNumberDensity = 0.0
 The specific number density of the composition (\sum_{i} X_i m_i. Where X_i is the number fraction of the ith species and m_i is the mass of the ith species).
 
double m_meanParticleMass = 0.0
 The mean particle mass of the composition (\sum_{i} \frac{n_i}{m_i}. where n_i is the number fraction of the ith species and m_i is the mass of the ith species).
 
bool m_massFracMode = true
 True if mass fraction mode, false if number fraction mode.
 
std::set< std::string > m_registeredSymbols
 The registered symbols.
 
std::unordered_map< std::string, CompositionEntrym_compositions
 The compositions.
 
std::set< atomic::Speciesm_registeredSpecies
 Set of registered species in the composition.
 
std::map< atomic::Species, double > m_molarAbundances
 Map of species to their molar abundances.
 
CompositionCache m_cache
 Cache for computed properties to avoid redundant calculations.
 

Detailed Description

Manages a collection of chemical species and their abundances.

-

This class is a primary interface for defining and manipulating material compositions. It can operate in two modes: mass fraction or number fraction.

-

Key Rules and Workflow:

    -
  1. Registration: Before setting an abundance for a species, its symbol (e.g., "He-4") must be registered using registerSymbol() or registerSpecies(). All registered species must conform to the same abundance mode (mass or number fraction).
  2. -
  3. Setting Abundances: Use setMassFraction() or setNumberFraction() to define the composition.
  4. -
  5. Finalization: Before querying any compositional data (e.g., getMassFraction(), getMeanParticleMass()), the composition must be finalized by calling finalize(). This step validates the composition (abundances sum to ~1.0) and computes global properties.
  6. -
  7. Modification: Any modification to abundances after finalization will un-finalize the composition, requiring another call to finalize() before data can be retrieved again.
  8. -
  9. Construction: A pre-finalized composition can be created by providing symbols and valid, normalized abundances to the constructor.
  10. -
+

This class is a primary interface for defining and manipulating material compositions. In order to use the Composition class a user must first register symbols or species. Symbols are the string representation of a species (i.e. deuterium would be "H-2" whereas Beryllium 7 would be "Be-7") and then set the molar abundances. Species are the data structure fourdst::atomic::Species version. Here Deuterium would be represented by the Species fourdst::atomic::H_2 whereas Beryllium 7 would be fourdst::atomic::Be_7. Once the symbols/species have been registered the user can then set molar abundances.

+

Once the Composition object has been populated the user can query mass fractions, number fractions, electron abundances, mean particle mass, molar abundance, and Canonical (X, Y, Z) composition.

+
Note
This class only accepts molar abundances as input. If you wish to construct a Composition using a vector of mass fractions, those must first be converted to molar abundances. There is a helper function fourdst::composition::buildCompositionFromMassFractions which wll facilitate just that.
Exceptions
- +
Thisclass throws various exceptions from fourdst::composition::exceptions for invalid operations, such as using unregistered symbols, providing invalid abundances, or accessing data from a non-finalized composition.
Thisclass throws various exceptions from fourdst::composition::exceptions for invalid operations, such as using unregistered symbols or providing invalid abundances.
-
Mass Fraction Example:
-
comp.registerSymbol("H-1");
-
comp.registerSymbol("He-4");
-
comp.setMassFraction("H-1", 0.75);
-
comp.setMassFraction("He-4", 0.25);
-
if (comp.finalize()) {
-
double he_mass_frac = comp.getMassFraction("He-4"); // Returns 0.25
-
}
-
void registerSymbol(const std::string &symbol, bool massFracMode=true)
Registers a new symbol for inclusion in the composition.
+
Basic Example:
+
comp.registerSymbol("H-1");
+
comp.registerSymbol("He-4");
+
comp.setMolarAbundance("H-1", 0.75);
+
comp.setMolarAbundance("He-4", 0.25); // Note Molar Abundances do not need to sum to 1
Composition()=default
Default constructor.
-
double setMassFraction(const std::string &symbol, const double &mass_fraction)
Sets the mass fraction for a given symbol.
-
bool finalize(bool norm=false)
Finalizes the composition, making it ready for querying.
-
std::unordered_map< std::string, double > getMassFraction() const override
Gets the mass fractions of all species in the composition.
-
-
Number Fraction Example:
-
comp.registerSymbol("H-1", false); // Register in number fraction mode
-
comp.registerSymbol("He-4", false);
-
comp.setNumberFraction("H-1", 0.9);
-
comp.setNumberFraction("He-4", 0.1);
-
if (comp.finalize()) {
-
double he_num_frac = comp.getNumberFraction("He-4"); // Returns 0.1
-
}
-
double getNumberFraction(const std::string &symbol) const override
Gets the number fraction for a given symbol.
-
double setNumberFraction(const std::string &symbol, const double &number_fraction)
Sets the number fraction for a given symbol.
+
void setMolarAbundance(const std::string &symbol, const double &molar_abundance)
Sets the molar abundance for a given symbol.
+
void registerSymbol(const std::string &symbol)
Registers a new symbol for inclusion in the composition.
-

Definition at line 255 of file composition.h.

+

Definition at line 97 of file composition.h.

Constructor & Destructor Documentation

-

◆ Composition() [1/5]

+

◆ Composition() [1/9]

@@ -424,6 +350,7 @@ Friends

Default constructor.

+

Creates an empty Composition object. No symbols or species are registered initially; however, the user can register symbols or species later using the provided methods.

@@ -455,7 +382,7 @@ Friends
-

◆ Composition() [2/5]

+

◆ Composition() [2/9]

@@ -477,33 +404,71 @@ Friends
-

Constructs a Composition and registers the given symbols.

+

Constructs a Composition and registers the given symbols from a vector.

Parameters
- +
symbolsThe symbols to register. The composition will be in mass fraction mode by default.
symbolsThe symbols to register.
Exceptions
- +
exceptions::InvalidSymbolErrorif any symbol is invalid.
exceptions::UnknownSymbolErrorif any symbol is invalid. Symbols are invalid if they are not registered at compile time in the atomic species database (fourdst/atomic/species.h).
-
Usage Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
+
Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
Composition comp(symbols);
-
comp.setMassFraction("H-1", 0.11);
-
comp.setMassFraction("O-16", 0.89);
-
comp.finalize();
-
Manages a collection of chemical species and their abundances.
+
Manages a collection of chemical species and their abundances.
Definition composition.h:97
-

Definition at line 187 of file composition.cpp.

+

Definition at line 84 of file composition.cpp.

+ +
+
+ +

◆ Composition() [3/9]

+ +
+
+ + + + + +
+ + + + + + + +
fourdst::composition::Composition::Composition (const std::vector< atomic::Species > & species)
+
+explicit
+
+ +

Constructs a Composition and registers the given species from a vector.

+
Parameters
+ + +
speciesThe species to register.
+
+
+
Example:
std::vector<fourdst::atomic::Species> species = {fourdst::atomic::H_1, fourdst::atomic::O_16};
+
Composition comp(species);
+
static const Species H_1("H-1", "H", -1, 0, 1, 1, 0.0, "B-", std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::infinity(), "/2+*", "S=99.9855 78", 1.007825031898, 1.4e-05)
+
static const Species O_16("O-16", "O", 0, 8, 8, 16, 7976.2072, "B-", -15412.184, std::numeric_limits< double >::infinity(), "+", "S=99.757 11", 15.99491461926, 0.00032)
+
+
Note
Because species are strongly typed, this constructor does not need to check if the species is valid. that is to say that the compiler will only allow valid species to be passed in. Therefore, this constructor is marked noexcept and may therefore be slightly more performant than the symbol-based constructor.
+ +

Definition at line 100 of file composition.cpp.

-

◆ Composition() [3/5]

+

◆ Composition() [4/9]

@@ -528,26 +493,65 @@ Friends

Constructs a Composition and registers the given symbols from a set.

Parameters
- +
symbolsThe symbols to register. The composition will be in mass fraction mode by default.
symbolsThe symbols to register.
Exceptions
- +
exceptions::InvalidSymbolErrorif any symbol is invalid.
exceptions::UnknownSymbolErrorif any symbol is invalid. Symbols are invalid if they are not registered at compile time in the atomic species database (fourdst/atomic/species.h).
-
Usage Example:
std::set<std::string> symbols = {"H-1", "O-16"};
+
Example:
std::set<std::string> symbols = {"H-1", "O-16"};
Composition comp(symbols);
-

Definition at line 195 of file composition.cpp.

+

Definition at line 92 of file composition.cpp.

- -

◆ Composition() [4/5]

+ +

◆ Composition() [5/9]

+ +
+
+ + + + + +
+ + + + + + + +
fourdst::composition::Composition::Composition (const std::set< atomic::Species > & species)
+
+explicit
+
+ +

Constructs a Composition and registers the given species from a set.

+
Parameters
+ + +
speciesThe species to register.
+
+
+
Example:
std::set<fourdst::atomic::Species> species = {fourdst::atomic::H_1, fourdst::atomic::O_16};
+
Composition comp(species);
+
+
Note
Because species are strongly typed, this constructor does not need to check if the species is valid. that is to say that the compiler will only allow valid species to be passed in. Therefore, this constructor is marked noexcept and may therefore be slightly more performant than the symbol-based constructor.
+ +

Definition at line 108 of file composition.cpp.

+ +
+
+ +

◆ Composition() [6/9]

@@ -560,44 +564,125 @@ Friends - const std::vector< double > & fractions, - - - - - bool massFracMode = true ) + const std::vector< double > & molarAbundances )
-

Constructs and finalizes a Composition with the given symbols and fractions.

-

This constructor provides a convenient way to create a fully-formed, finalized composition in one step. The provided fractions must be valid and sum to 1.0.

Parameters
+

Constructs a Composition from symbols and their corresponding molar abundances.

+
Parameters
- - - + +
symbolsThe symbols to initialize the composition with.
fractionsThe fractions (mass or number) corresponding to the symbols.
massFracModeTrue if fractions are mass fractions, false if they are number fractions. [Default: true]
symbolsThe symbols to register.
molarAbundancesThe corresponding molar abundances for each symbol.
Exceptions
- - + +
exceptions::InvalidCompositionErrorif the number of symbols and fractions do not match, or if the fractions do not sum to ~1.0.
exceptions::InvalidSymbolErrorif any symbol is invalid.
exceptions::UnknownSymbolErrorif any symbol is invalid. Symbols are invalid if they are not registered at compile time in the atomic species database (fourdst/atomic/species.h).
exceptions::InvalidCompositionErrorif the number of symbols does not match the number of molar abundances.
-
Postcondition
The composition is immediately finalized.
-
Usage Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
-
std::vector<double> mass_fractions = {0.1119, 0.8881};
-
Composition comp(symbols, mass_fractions); // Finalized on construction
-
+
Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
+
std::vector<double> molarAbundances = {1.03, 0.6};
+
Composition comp(symbols, molarAbundances);
+
+
Note
Molar abundances do not need to sum to 1.0, they are an absolute quantity.
-

Definition at line 203 of file composition.cpp.

+

Definition at line 116 of file composition.cpp.

+ +
+
+ +

◆ Composition() [7/9]

+ +
+
+ + + + + + + + + + + +
fourdst::composition::Composition::Composition (const std::vector< atomic::Species > & species,
const std::vector< double > & molarAbundances )
+
+ +

Constructs a Composition from species and their corresponding molar abundances.

+
Parameters
+ + + +
speciesThe species to register.
molarAbundancesThe corresponding molar abundances for each species.
+
+
+
Exceptions
+ + +
exceptions::InvalidCompositionErrorif the number of species does not match the number of molar abundances.
+
+
+
Example:
std::vector<fourdst::atomic::Species> species = {fourdst::atomic::H_1, fourdst::atomic::O_16};
+
std::vector<double> molarAbundances = {1.03, 0.6};
+
Composition comp(species, molarAbundances);
+
+
Note
Molar abundances do not need to sum to 1.0, they are an absolute quantity.
+ +

Definition at line 131 of file composition.cpp.

+ +
+
+ +

◆ Composition() [8/9]

+ +
+
+ + + + + + + + + + + +
fourdst::composition::Composition::Composition (const std::set< std::string > & symbols,
const std::vector< double > & molarAbundances )
+
+ +

Constructs a Composition from symbols in a set and their corresponding molar abundances.

+
Parameters
+ + + +
symbolsThe symbols to register.
molarAbundancesThe corresponding molar abundances for each symbol.
+
+
+
Exceptions
+ + + +
exceptions::UnknownSymbolErrorif any symbol is invalid. Symbols are invalid if they are not registered at compile time in the atomic species database (fourdst/atomic/species.h).
exceptions::InvalidCompositionErrorif the number of symbols does not match the number of molar abundances.
+
+
+
Example:
std::set<std::string> symbols = {"H-1", "O-16"};
+
std::vector<double> molarAbundances = {1.03, 0.6};
+
Composition comp(symbols, molarAbundances);
+
+
Note
Molar abundances do not need to sum to 1.0, they are an absolute quantity.
+ +

Definition at line 146 of file composition.cpp.

-

◆ Composition() [5/5]

+

◆ Composition() [9/9]

@@ -619,7 +704,7 @@ Friends -

Definition at line 234 of file composition.cpp.

+

Definition at line 161 of file composition.cpp.

@@ -647,10 +732,17 @@ Friends
-

Returns an iterator to the beginning of the composition map.

-
Returns
An iterator to the beginning.
+

Returns an iterator to the beginning of the molar abundance map.

+
Returns
An iterator to the beginning.
+
Example:
Composition comp({"H-1", "He-4", "C-12"}, {1.02, 0.56, 0.02});
+
+
for (const auto& [sp, y] : comp) {
+
std::cout << "Species: " << sp << ", Molar Abundance: " << y << std::endl;
+
}
+
+
Note
Because we store molar abundances as a sorted map, keyed by species. And Because the < and > operators for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be seen in order from lightest to heaviest.
-

Definition at line 864 of file composition.h.

+

Definition at line 753 of file composition.h.

@@ -677,15 +769,22 @@ Friends
-

Returns a const iterator to the beginning of the composition map.

-
Returns
A const iterator to the beginning.
+

Returns a const iterator to the beginning of the molar abundance map.

+
Returns
A const iterator to the beginning.
+
Example:
Composition comp({"H-1", "He-4", "C-12"}, {1.02, 0.56, 0.02});
+
+
for (const auto& [sp, y] : comp) {
+
std::cout << "Species: " << sp << ", Molar Abundance: " << y << std::endl;
+
}
+
+
Note
Because we store molar abundances as a sorted map, keyed by species. And Because the < and > operators for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be seen in order from lightest to heaviest.
-

Definition at line 872 of file composition.h.

+

Definition at line 774 of file composition.h.

- -

◆ contains()

+ +

◆ contains() [1/2]

@@ -696,7 +795,45 @@ Friends bool fourdst::composition::Composition::contains ( - const atomic::Species & isotope) + const atomic::Species & species) + const + + + + +nodiscardoverridevirtualnoexcept + + +
+ +

Checks if a given species is present in the composition.

+
Parameters
+ + +
speciesThe isotope to check for.
+
+
+
Returns
True if the species is in the composition, false otherwise.
+ +

Implements CompositionAbstract.

+ +

Definition at line 509 of file composition.cpp.

+ +
+
+ +

◆ contains() [2/2]

+ +
+
+ + +
+ + + + +
bool fourdst::composition::Composition::contains (const std::string & symbol) const
@@ -707,25 +844,24 @@ Friends
-

Checks if a given isotope is present in the composition.

-
Precondition
The composition must be finalized.
+

Checks if a given symbol is present in the composition.

Parameters
- +
isotopeThe isotope to check for.
symbolThe symbol to check for.
-
Returns
True if the isotope is in the composition, false otherwise.
+
Returns
True if the symbol is in the composition, false otherwise.
Exceptions
- +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 1038 of file composition.cpp.

+

Definition at line 515 of file composition.cpp.

@@ -752,10 +888,17 @@ Friends
-

Returns an iterator to the end of the composition map.

-
Returns
An iterator to the end.
+

Returns an iterator to the end of the molar abundance map.

+
Returns
An iterator to the end.
+
Example:
Composition comp({"H-1", "He-4", "C-12"}, {1.02, 0.56, 0.02});
+
+
for (const auto& [sp, y] : comp) {
+
std::cout << "Species: " << sp << ", Molar Abundance: " << y << std::endl;
+
}
+
+
Note
Because we store molar abundances as a sorted map, keyed by species. And Because the < and > operators for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be seen in order from lightest to heaviest.
-

Definition at line 880 of file composition.h.

+

Definition at line 795 of file composition.h.

@@ -782,124 +925,22 @@ Friends
-

Returns a const iterator to the end of the composition map.

-
Returns
A const iterator to the end.
+

Returns a const iterator to the end of the molar abundance map.

+
Returns
A const iterator to the end.
+
Example:
Composition comp({"H-1", "He-4", "C-12"}, {1.02, 0.56, 0.02});
+
+
for (const auto& [sp, y] : comp) {
+
std::cout << "Species: " << sp << ", Molar Abundance: " << y << std::endl;
+
}
+
+
Note
Because we store molar abundances as a sorted map, keyed by species. And Because the < and > operators for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be seen in order from lightest to heaviest.
-

Definition at line 888 of file composition.h.

+

Definition at line 816 of file composition.h.

- -

◆ finalize()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::finalize (bool norm = false)
-
-nodiscard
-
- -

Finalizes the composition, making it ready for querying.

-

This method checks if the sum of all fractions (mass or number) is approximately 1.0. It also computes global properties like mean particle mass. This must be called before any get... method can be used.

Parameters
- - -
normIf true, the composition will be normalized to sum to 1 before validation. [Default: false]
-
-
-
Returns
True if the composition is valid and successfully finalized, false otherwise.
-
Postcondition
If successful, m_finalized is true and global properties are computed.
- -

Definition at line 445 of file composition.cpp.

- -
-
- -

◆ finalizeMassFracMode()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::finalizeMassFracMode (bool norm)
-
-private
-
- -

Finalizes the composition in mass fraction mode.

-
Parameters
- - -
normIf true, the composition will be normalized to sum to 1.
-
-
-
Returns
True if the composition is successfully finalized, false otherwise.
- -

Definition at line 453 of file composition.cpp.

- -
-
- -

◆ finalizeNumberFracMode()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::finalizeNumberFracMode (bool norm)
-
-private
-
- -

Finalizes the composition in number fraction mode.

-
Parameters
- - -
normIf true, the composition will be normalized to sum to 1.
-
-
-
Returns
True if the composition is successfully finalized, false otherwise.
- -

Definition at line 489 of file composition.cpp.

- -
-
- -

◆ getCanonicalComposition()

+ +

◆ getCanonicalComposition()

@@ -910,50 +951,6 @@ Friends CanonicalComposition fourdst::composition::Composition::getCanonicalComposition ( - bool harsh = false) - const - - - - -nodiscard - - -
- -

Gets the current canonical composition (X, Y, Z).

-

Calculates the total mass fractions for H, He, and metals.

Precondition
The composition must be finalized.
-
Parameters
- - -
harshIf true, this will throw an error if 1 - (X + Y) is not equal to the directly summed Z (within a tolerance). If false, it will only log a warning.
-
-
-
Returns
The CanonicalComposition struct.
-
Exceptions
- - - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
std::runtime_errorif harsh is true and the canonical composition is not self-consistent.
-
-
- -

Definition at line 785 of file composition.cpp.

- -
-
- -

◆ getComposition() [1/3]

- -
-
- - -
- - - - @@ -965,110 +962,27 @@ Friends
std::pair< std::unordered_map< std::string, CompositionEntry >, GlobalComposition > fourdst::composition::Composition::getComposition ( ) const
-

Gets all composition entries and the global composition data.

-
Precondition
The composition must be finalized.
-
Returns
A pair containing an unordered map of all CompositionEntries and the GlobalComposition.
+

Compute the canonical composition (X, Y, Z) of the composition.

+

The canonical composition is defined as:

    +
  • X: mass fraction of hydrogen ( $\sum_{i=1}^{7}X_{^{i}H}$)
  • +
  • Y: mass fraction of helium ( $\sum_{i=3}^{10}X_{^{i}He}$)
  • +
  • Z: mass fraction of all other elements (Everything else)
  • +
+

The canonical composition is computed by summing the mass fractions of all registered species in the composition according to their element type.

+
Returns
A CanonicalComposition struct containing the X, Y, and Z values.
Exceptions
- +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::InvalidCompositionErrorif, after constructing the canonical composition, the sum X + Y + Z is not approximately equal to 1.0 (within a tolerance of 1e-16)
-

Definition at line 682 of file composition.cpp.

+

Definition at line 330 of file composition.cpp.

- -

◆ getComposition() [2/3]

- -
-
- - - - - -
- - - - - - - -
std::pair< CompositionEntry, GlobalComposition > fourdst::composition::Composition::getComposition (const fourdst::atomic::Species & species) const
-
-nodiscard
-
- -

Gets the composition entry and global composition data for a given species.

-
Precondition
The composition must be finalized.
-
Parameters
- - -
speciesThe species to get the composition for.
-
-
-
Returns
A pair containing the CompositionEntry and GlobalComposition for the given species.
-
Exceptions
- - - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the species is not in the composition.
-
-
- -

Definition at line 676 of file composition.cpp.

- -
-
- -

◆ getComposition() [3/3]

- -
-
- - - - - -
- - - - - - - -
std::pair< CompositionEntry, GlobalComposition > fourdst::composition::Composition::getComposition (const std::string & symbol) const
-
-nodiscard
-
- -

Gets the composition entry and global composition data for a given symbol.

-
Precondition
The composition must be finalized.
-
Parameters
- - -
symbolThe symbol to get the composition for.
-
-
-
Returns
A pair containing the CompositionEntry and GlobalComposition for the given symbol.
-
Exceptions
- - - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the symbol is not in the composition.
-
-
- -

Definition at line 662 of file composition.cpp.

- -
-
- -

◆ getElectronAbundance()

+ +

◆ getElectronAbundance()

@@ -1085,23 +999,30 @@ Friends
-nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Compute the electron abundance of the composition.

-

Ye is defined as the sum over all species of (Z_i * X_i / A_i), where Z_i is the atomic number, X_i is the mass fraction, and A_i is the atomic mass of species i.

Returns
Ye (electron abundance).
-
Precondition
The composition must be finalized.
+

The electron abundance is calculated using the formula:

+\[Y_e = \sum_i (Y_i \cdot Z_i)
+\] +

+

where:

    +
  • $Y_i$ is the molar abundance of species i.
  • +
  • $Z_i$ is the atomic number (number of protons) of species i.
  • +
+
Returns
Ye (electron abundance).
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 716 of file composition.cpp.

+

Definition at line 321 of file composition.cpp.

- -

◆ getMassFraction() [1/3]

+ +

◆ getLogger()

@@ -1110,7 +1031,37 @@ Friends - + + + + + +
std::unordered_map< std::string, double > fourdst::composition::Composition::getMassFraction static quill::Logger * fourdst::composition::Composition::getLogger ()
+ + +inlinestaticprivate + + +
+ +

Gets the logger instance for the Composition class. This is static to ensure that all composition objects share the same logger instance.

+
Returns
pointer to the logger instance.
+ +

Definition at line 144 of file composition.h.

+ +
+
+ +

◆ getMassFraction() [1/3]

+ +
+
+ + + +nodiscardoverridevirtualnoexcept
+ + + @@ -1118,29 +1069,23 @@ Friends
std::unordered_map< atomic::Species, double > fourdst::composition::Composition::getMassFraction ( ) const
-nodiscardoverridevirtual

Gets the mass fractions of all species in the composition.

-
Precondition
The composition must be finalized.
-
Returns
An unordered map of symbols to their mass fractions.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
+
Returns
An unordered map of symbols to their mass fractions.
+
Note
This method will construct a new unordered map each time it is called.
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 601 of file composition.cpp.

+

Definition at line 251 of file composition.cpp.

- -

◆ getMassFraction() [2/3]

+ +

◆ getMassFraction() [2/3]

@@ -1151,7 +1096,7 @@ Friends double fourdst::composition::Composition::getMassFraction ( - const fourdst::atomic::Species & species) + const atomic::Species & species) const @@ -1162,18 +1107,26 @@ Friends
-

Gets the mass fraction for a given isotope.

-
Precondition
The composition must be finalized.
+

Gets the mass fraction for a given species.

+

The mass fraction X_i for a species is calculated using the formula:

+\[X_i = \frac{(Y_i \cdot A_i)}{\sum_j (Y_j \cdot A_j)}
+\] +

+

where:

    +
  • $Y_i$ is the molar abundance of species i.
  • +
  • $A_i$ is the atomic mass of species i.
  • +
  • The denominator sums over all species j in the composition.
  • +
+

This formula ensures that the mass fractions of all species sum to 1.0.

Parameters
- +
speciesThe isotope to get the mass fraction for.
speciesThe species to get the mass fraction for.
Returns
The mass fraction for the given isotope.
Exceptions
-
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the isotope is not registered in the composition.
@@ -1181,7 +1134,7 @@ Friends

Implements CompositionAbstract.

-

Definition at line 595 of file composition.cpp.

+

Definition at line 235 of file composition.cpp.

@@ -1208,8 +1161,7 @@ Friends
-

Gets the mass fraction for a given symbol.

-
Precondition
The composition must be finalized.
+

Gets the mass fraction for a given symbol. See the overload for species-based lookup for more details on how mass fractions are calculated.

Parameters
@@ -1219,7 +1171,7 @@ Friends
Returns
The mass fraction for the given symbol.
Exceptions
symbolThe symbol to get the mass fraction for.
- +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif the symbol is not in the composition.
@@ -1227,12 +1179,12 @@ Friends

Implements CompositionAbstract.

-

Definition at line 568 of file composition.cpp.

+

Definition at line 227 of file composition.cpp.

- -

◆ getMassFractionVector()

+ +

◆ getMassFractionVector()

@@ -1249,68 +1201,22 @@ Friends -nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Get a uniform vector representation of the mass fraction stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Returns
the vector of mass fractions sorted by species mass (lightest to heaviest).
-
Precondition
The composition must be finalized.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 840 of file composition.cpp.

+

Definition at line 373 of file composition.cpp.

- -

◆ getMeanAtomicNumber()

- -
-
- - - - - -
- - - - - - - -
double fourdst::composition::Composition::getMeanAtomicNumber () const
-
-nodiscardoverridevirtual
-
- -

Compute the mean atomic number of the composition.

-
Precondition
The composition must be finalized.
-
Returns
Mean atomic number <Z>.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
- -

Implements CompositionAbstract.

- -

Definition at line 698 of file composition.cpp.

- -
-
- -

◆ getMeanParticleMass()

+ +

◆ getMeanParticleMass()

@@ -1327,29 +1233,31 @@ Friends -nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Compute the mean particle mass of the composition.

-
Precondition
The composition must be finalized.
+

The mean particle mass is calculated using the formula:

+\[\bar{A} = \frac{\sum_i (Y_i \cdot A_i)}{\sum_j Y_j}
+\] +

+

where:

    +
  • $Y_i$ is the molar abundance of species i.
  • +
  • $A_i$ is the atomic mass of species i.
  • +
  • The sums run over all species i in the composition.
  • +
Returns
Mean particle mass in atomic mass units (g/mol).
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 690 of file composition.cpp.

+

Definition at line 311 of file composition.cpp.

- -

◆ getMolarAbundance() [1/2]

+ +

◆ getMolarAbundance() [1/2]

@@ -1360,7 +1268,7 @@ Friends double fourdst::composition::Composition::getMolarAbundance ( - const fourdst::atomic::Species & species) + const atomic::Species & species) const @@ -1371,26 +1279,25 @@ Friends
-

Gets the molar abundance for a given isotope.

-
Precondition
The composition must be finalized.
+

Gets the molar abundance for a given species.

Parameters
- +
speciesThe isotope to get the molar abundance for.
speciesThe species to get the molar abundance for.
Returns
The molar abundance for the given isotope.
Exceptions
- - +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the isotope is not registered in the composition.
exceptions::UnregisteredSymbolErrorif the isotope is not registered in the composition.
+
Note
These are the most performant quantities to retrieve since they are stored directly in the composition object and require no computation.

Implements CompositionAbstract.

-

Definition at line 656 of file composition.cpp.

+

Definition at line 302 of file composition.cpp.

@@ -1417,31 +1324,25 @@ Friends
-

Gets the molar abundance (X_i / A_i) for a given symbol.

-
Precondition
The composition must be finalized.
-
Parameters
- - -
symbolThe symbol to get the molar abundance for.
-
-
-
Returns
The molar abundance for the given symbol.
+

Gets the molar abundances of all species in the composition.

Exceptions
- - + +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the symbol is not in the composition.
exceptions::UnknownSymbolErrorif any symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif any symbol is not in the composition.
+
Returns
The molar abundance of the symbol.
+
Note
These are the most performant quantities to retrieve since they are stored directly in the composition object and require no computation. This overload is slightly less performant than the species-based overload since it needs to validate the symbol exists in the atomic species database.

Implements CompositionAbstract.

-

Definition at line 641 of file composition.cpp.

+

Definition at line 291 of file composition.cpp.

- -

◆ getMolarAbundanceVector()

+ +

◆ getMolarAbundanceVector()

@@ -1458,29 +1359,22 @@ Friends -nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Get a uniform vector representation of the molar abundances stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Returns
the vector of molar abundances sorted by species mass (lightest to heaviest).
-
Precondition
The composition must be finalized.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 891 of file composition.cpp.

+

Definition at line 416 of file composition.cpp.

- -

◆ getNumberFraction() [1/3]

+ +

◆ getNumberFraction() [1/3]

@@ -1489,7 +1383,7 @@ Friends - + @@ -1497,29 +1391,23 @@ Friends
std::unordered_map< std::string, double > fourdst::composition::Composition::getNumberFraction std::unordered_map< atomic::Species, double > fourdst::composition::Composition::getNumberFraction ( ) const
-nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Gets the number fractions of all species in the composition.

-
Precondition
The composition must be finalized.
-
Returns
An unordered map of symbols to their number fractions.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
+
Returns
An unordered map of symbols to their number fractions.
+
Note
This method will construct a new unordered map each time it is called.
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 633 of file composition.cpp.

+

Definition at line 283 of file composition.cpp.

- -

◆ getNumberFraction() [2/3]

+ +

◆ getNumberFraction() [2/3]

@@ -1530,7 +1418,7 @@ Friends double fourdst::composition::Composition::getNumberFraction ( - const fourdst::atomic::Species & species) + const atomic::Species & species) const @@ -1541,18 +1429,25 @@ Friends
-

Gets the number fraction for a given isotope.

-
Precondition
The composition must be finalized.
+

Gets the number fraction for a given species.

+

The number fraction Y_i for a species is calculated using the formula:

+\[X_i = \frac{Y_i}{\sum_j Y_j}
+\] +

+

where:

    +
  • $Y_i$ is the molar abundance of species i.
  • +
  • The denominator sums over all species j in the composition.
  • +
+

This formula ensures that the number fractions of all species sum to 1.0.

Parameters
- +
speciesThe isotope to get the number fraction for.
speciesThe species to get the number fraction for.
Returns
The number fraction for the given isotope.
Exceptions
-
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the isotope is not registered in the composition.
@@ -1560,7 +1455,7 @@ Friends

Implements CompositionAbstract.

-

Definition at line 627 of file composition.cpp.

+

Definition at line 270 of file composition.cpp.

@@ -1587,8 +1482,7 @@ Friends
-

Gets the number fraction for a given symbol.

-
Precondition
The composition must be finalized.
+

Gets the number fraction for a given symbol. See the overload for species-based lookup for more details on how number fractions are calculated.

Parameters
@@ -1598,7 +1492,7 @@ Friends
Returns
The number fraction for the given symbol.
Exceptions
symbolThe symbol to get the number fraction for.
- +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif the symbol is not in the composition.
@@ -1606,12 +1500,12 @@ Friends

Implements CompositionAbstract.

-

Definition at line 610 of file composition.cpp.

+

Definition at line 260 of file composition.cpp.

- -

◆ getNumberFractionVector()

+ +

◆ getNumberFractionVector()

@@ -1628,29 +1522,22 @@ Friends -nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Get a uniform vector representation of the number fractions stored in the composition object sorted such that the lightest species is at index 0 and the heaviest is at the last index.

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Returns
the vector of number fractions sorted by species mass (lightest to heaviest).
-
Precondition
The composition must be finalized.
-
Exceptions
- - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
-
-
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 866 of file composition.cpp.

+

Definition at line 395 of file composition.cpp.

- -

◆ getRegisteredSpecies()

+ +

◆ getRegisteredSpecies()

@@ -1659,7 +1546,7 @@ Friends - + @@ -1667,22 +1554,23 @@ Friends
std::set< atomic::Species > fourdst::composition::Composition::getRegisteredSpecies const std::set< atomic::Species > & fourdst::composition::Composition::getRegisteredSpecies ( ) const
-nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Get a set of all species that are registered in the composition.

-
Returns
A set of atomic::Species objects registered in the composition.
+
Returns
A set of atomic::Species objects registered in the composition.
+
Note
This will return a constant reference to the internal m_registeredSpecies set, therefore the return value of this method will only be valid as long as the Composition object is valid (i.e. it cannot outlive the Composition object it was called on).
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 313 of file composition.cpp.

+

Definition at line 222 of file composition.cpp.

- -

◆ getRegisteredSymbols()

+ +

◆ getRegisteredSymbols()

@@ -1699,17 +1587,18 @@ Friends -nodiscardoverridevirtual +nodiscardoverridevirtualnoexcept

Gets the registered symbols.

-
Returns
A set of registered symbols.
+
Returns
A set of registered symbols.
+
Note
This method will construct a new set each time it is called. If you need just need access to the registered species, consider using getRegisteredSpecies() instead which returns a constant reference to the internal set.
-

Implements CompositionAbstract.

+

Implements CompositionAbstract.

-

Definition at line 309 of file composition.cpp.

+

Definition at line 214 of file composition.cpp.

@@ -1737,8 +1626,7 @@ Friends

Get the species at a given index in the sorted vector representation.

-

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Precondition
The composition must be finalized.
-
Parameters
+

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Parameters
indexThe index in the sorted vector representation for which to return the species. Must be in [0, N-1] where N is the number of registered species.
@@ -1746,7 +1634,6 @@ Friends
Exceptions
-
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
std::out_of_rangeif the index is out of range.
@@ -1755,7 +1642,7 @@ Friends

Implements CompositionAbstract.

-

Definition at line 993 of file composition.cpp.

+

Definition at line 483 of file composition.cpp.

@@ -1783,18 +1670,14 @@ Friends

get the index in the sorted vector representation for a given symbol

-

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Precondition
The composition must be finalized.
-
-symbol must be registered in the composition
-
Parameters
+

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Parameters
- +
speciesthe species to look up the index for. Note that this is the index species data will be at if you were to call getMolarAbundanceVector(), getMassFractionVector(), or getNumberFractionVector()
speciesthe species to look up the index for. Note that this is the index species data will be at if you were to call getMolarAbundanceVector(), getMassFractionVector(), or getNumberFractionVector()
Exceptions
-
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnregisteredSymbolErrorif the symbol is not registered in the composition
@@ -1803,7 +1686,7 @@ symbol must be registered in the composition

Implements CompositionAbstract.

-

Definition at line 955 of file composition.cpp.

+

Definition at line 449 of file composition.cpp.

@@ -1831,18 +1714,15 @@ symbol must be registered in the composition

get the index in the sorted vector representation for a given symbol

-

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Precondition
The composition must be finalized.
-
-symbol must be registered in the composition
-
Parameters
+

This is primarily useful for external libraries which need to ensure that vector representation uniformity is maintained

Parameters
- +
symbolthe symbol to look up the index for. Note that this is the index species data will be at if you were to call getMolarAbundanceVector(), getMassFractionVector(), or getNumberFractionVector()
symbolthe symbol to look up the index for. Note that this is the index species data will be at if you were to call getMolarAbundanceVector(), getMassFractionVector(), or getNumberFractionVector()
Exceptions
- +
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif the symbol is not registered in the composition
@@ -1851,240 +1731,7 @@ symbol must be registered in the composition

Implements CompositionAbstract.

-

Definition at line 917 of file composition.cpp.

- -
- - -

◆ hasSpecies()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::hasSpecies (const fourdst::atomic::Species & species) const
-
-nodiscardoverridevirtual
-
- -

Checks if a species is registered in the composition.

-
Parameters
- - -
speciesThe species to check.
-
-
-
Returns
True if the species is registered, false otherwise.
- -

Implements CompositionAbstract.

- -

Definition at line 1029 of file composition.cpp.

- -
-
- -

◆ hasSymbol()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::hasSymbol (const std::string & symbol) const
-
-nodiscardoverridevirtual
-
- -

Checks if a symbol is registered in the composition.

-
Parameters
- - -
symbolThe symbol to check.
-
-
-
Returns
True if the symbol is registered, false otherwise.
- -

Implements CompositionAbstract.

- -

Definition at line 1023 of file composition.cpp.

- -
-
- -

◆ isValidComposition()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::isValidComposition (const std::vector< double > & fractions) const
-
-nodiscardprivate
-
- -

Checks if the given fractions are valid (sum to ~1.0).

-
Parameters
- - -
fractionsThe fractions to check.
-
-
-
Returns
True if the fractions are valid, false otherwise.
- -

Definition at line 334 of file composition.cpp.

- -
-
- -

◆ isValidSymbol()

- -
-
- - - - - -
- - - - - - - -
bool fourdst::composition::Composition::isValidSymbol (const std::string & symbol)
-
-staticprivate
-
- -

Checks if the given symbol is valid by checking against the global species database.

-
Parameters
- - -
symbolThe symbol to check.
-
-
-
Returns
True if the symbol is valid, false otherwise.
- -

Definition at line 321 of file composition.cpp.

- -
-
- -

◆ mix()

- -
-
- - - - - -
- - - - - - - - - - - -
Composition fourdst::composition::Composition::mix (const Composition & other,
double fraction ) const
-
-nodiscard
-
- -

Mixes this composition with another to produce a new composition.

-

The mixing is performed linearly on the mass fractions. The formula for each species is: new_X_i = fraction * this_X_i + (1 - fraction) * other_X_i. The resulting composition is automatically finalized.

Parameters
- - - -
otherThe other composition to mix with.
fractionThe mixing fraction. A value of 1.0 means the new composition is 100% this, 0.0 means 100% other.
-
-
-
Returns
A new, finalized Composition object representing the mixture.
-
Precondition
Both this and other compositions must be finalized.
-
Exceptions
- - - -
exceptions::CompositionNotFinalizedErrorif either composition is not finalized.
exceptions::InvalidCompositionErrorif the fraction is not between 0 and 1.
-
-
- -

Definition at line 533 of file composition.cpp.

- -
-
- -

◆ operator+()

- -
-
- - - - - - - -
Composition fourdst::composition::Composition::operator+ (const Composition & other) const
-
- -

Overloads the + operator to mix two compositions with a 50/50 fraction.

-

OVERLOADS.

-

This is a convenience operator that calls mix(other, 0.5).

Parameters
- - -
otherThe other composition to mix with.
-
-
-
Returns
The new, mixed composition.
-
Precondition
Both compositions must be finalized.
-
Exceptions
- - -
Seemix() for exceptions.
-
-
- -

Definition at line 1054 of file composition.cpp.

+

Definition at line 438 of file composition.cpp.

@@ -2112,102 +1759,102 @@ symbol must be registered in the composition
Returns
A reference to this Composition.
-

Definition at line 243 of file composition.cpp.

+

Definition at line 168 of file composition.cpp.

- -

◆ registerSpecies() [1/2]

+ +

◆ registerSpecies() [1/2]

+ + + + + +
- - - - + -
void fourdst::composition::Composition::registerSpecies (const fourdst::atomic::Species & species,
const atomic::Species & species) bool massFracMode = true )
+
+noexcept

Registers a new species by extracting its symbol.

Parameters
-
speciesThe species to register.
massFracModeTrue for mass fraction mode, false for number fraction mode.
-
Exceptions
- - - -
exceptions::InvalidSymbolErrorif the species' symbol is invalid.
exceptions::CompositionModeErrorif the mode conflicts.
-
-
-
Usage Example:
#include "fourdst/composition/species.h" // Assuming species like H1 are defined here
+
Example:
#include "fourdst/composition/species.h"
+
- -
void registerSpecies(const fourdst::atomic::Species &species, bool massFracMode=true)
Registers a new species by extracting its symbol.
-
static const std::unordered_map< std::string, const Species & > species
Map of species names to their corresponding Species objects.
Definition species.h:3579
- -
+ +
void registerSpecies(const atomic::Species &species) noexcept
Registers a new species by extracting its symbol.
+
static const Species C_12("C-12", "C", 0, 6, 6, 12, 7680.1446, "B-", -17338.0681, std::numeric_limits< double >::infinity(), "+", "S=98.94 6", 12.0, 0.0)
+
+
Note
Because species are strongly typed, this method does not need to check if the species is valid. that is to say that the compiler will only allow valid species to be passed in. Therefore, this method is marked noexcept and may therefore be slightly more performant than the symbol-based method.
+
+upon registering a species, its molar abundance is initialized to 0.0.
+
+All species are in the fourdst/atomic/species.h header file. These can be accessed directly through their fully qualified names (e.g., fourdst::atomic::C_12 for Carbon-12). Alternatively, these can also be accessed through a string-indexed map located in fourdst/atomic/species.h called fourdst::atomic::species ( e.g., fourdst::atomic::species.at("C-12") for Carbon-12).
-

Definition at line 293 of file composition.cpp.

+

Definition at line 197 of file composition.cpp.

- -

◆ registerSpecies() [2/2]

+ +

◆ registerSpecies() [2/2]

+ + + + + +
- - - - + -
void fourdst::composition::Composition::registerSpecies (const std::vector< fourdst::atomic::Species > & species,
const std::vector< atomic::Species > & species) bool massFracMode = true )
+
+noexcept

Registers a vector of new species.

Parameters
-
speciesThe vector of species to register.
massFracModeTrue for mass fraction mode, false for number fraction mode.
-
Exceptions
- - - -
exceptions::InvalidSymbolErrorif any species' symbol is invalid.
exceptions::CompositionModeErrorif the mode conflicts.
-
-
-
Usage Example:
+
Example:
#include "fourdst/composition/species.h"
std::vector<fourdst::atomic::Species> my_species = { ... };
-
comp.registerSpecies(my_species, false); // Number fraction mode
-
+
comp.registerSpecies(my_species);
+
+
Note
upon registering a species, its molar abundance is initialized to 0.0. Therefore, registering a vector of species will initialize all their molar abundances to 0.0.
+
+All species are in the fourdst/atomic/species.h header file. These can be accessed directly through their fully qualified names (e.g., fourdst::atomic::C_12 for Carbon-12). Alternatively, these can also be accessed through a string-indexed map located in fourdst/atomic/species.h called fourdst::atomic::species ( e.g., fourdst::atomic::species.at("C-12") for Carbon-12).
-

Definition at line 300 of file composition.cpp.

+

Definition at line 206 of file composition.cpp.

- -

◆ registerSymbol() [1/2]

+ +

◆ registerSymbol() [1/2]

@@ -2215,42 +1862,37 @@ symbol must be registered in the composition void fourdst::composition::Composition::registerSymbol ( - const std::string & symbol, - - - + const std::string & symbol) - bool massFracMode = true )

Registers a new symbol for inclusion in the composition.

-

A symbol must be registered before its abundance can be set. The first registration sets the mode (mass/number fraction) for the entire composition.

Parameters
+

A symbol must be registered before its abundance can be set.

Parameters
-
symbolThe symbol to register (e.g., "Fe-56").
massFracModeTrue for mass fraction mode, false for number fraction mode. This is only effective for the first symbol registered.
Exceptions
- - +
exceptions::InvalidSymbolErrorif the symbol is not in the atomic species database.
exceptions::CompositionModeErrorif attempting to register with a mode that conflicts with the existing mode.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
-
Usage Example:
-
comp.registerSymbol("H-1"); // Now in mass fraction mode
-
comp.registerSymbol("He-4"); // Must also be mass fraction mode
-
+
Example:
+
comp.registerSymbol("H-1");
+
comp.registerSymbol("He-4");
+
+
Note
upon registering a symbol, its molar abundance is initialized to 0.0.
-

Definition at line 255 of file composition.cpp.

+

Definition at line 178 of file composition.cpp.

- -

◆ registerSymbol() [2/2]

+ +

◆ registerSymbol() [2/2]

@@ -2258,12 +1900,8 @@ symbol must be registered in the composition void fourdst::composition::Composition::registerSymbol ( - const std::vector< std::string > & symbols, - - - + const std::vector< std::string > & symbols) - bool massFracMode = true )
@@ -2272,392 +1910,293 @@ symbol must be registered in the composition
Parameters
-
symbolsThe symbols to register.
massFracModeTrue for mass fraction mode, false for number fraction mode.
Exceptions
- - +
exceptions::InvalidSymbolErrorif any symbol is invalid.
exceptions::CompositionModeErrorif the mode conflicts with an already set mode.
exceptions::UnknownSymbolErrorif any symbol is invalid.
-
Usage Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
+
Example:
std::vector<std::string> symbols = {"H-1", "O-16"};
-
comp.registerSymbol(symbols);
-
+
comp.registerSymbol(symbols);
+
+
Note
upon registering a symbol, its molar abundance is initialized to 0.0. Therefore, registering a vector of symbols will initialize all their molar abundances to 0.0.
-

Definition at line 284 of file composition.cpp.

+

Definition at line 189 of file composition.cpp.

- -

◆ setCompositionMode()

+ +

◆ setMolarAbundance() [1/6]

- + - - - -
void fourdst::composition::Composition::setCompositionMode void fourdst::composition::Composition::setMolarAbundance (bool massFracMode)
-
- -

Sets the composition mode (mass fraction vs. number fraction).

-

This function converts all entries in the composition to the specified mode.

Precondition
The composition must be finalized before the mode can be switched.
-
Parameters
- - -
massFracModeTrue to switch to mass fraction mode, false for number fraction mode.
-
-
-
Exceptions
- - - -
exceptions::CompositionNotFinalizedErrorif the composition is not finalized.
std::runtime_errorif the conversion fails for an unknown reason.
-
-
- -

Definition at line 762 of file composition.cpp.

- -
-
- -

◆ setMassFraction() [1/4]

- -
-
- - - - - + - +
double fourdst::composition::Composition::setMassFraction (const fourdst::atomic::Species & species, const atomic::Species & species,
const double & mass_fraction )const double & molar_abundance )
-

Sets the mass fraction for a given species.

+

Sets the molar abundance for a given isotope.

Parameters
- - + +
speciesThe species to set the mass fraction for.
mass_fractionThe mass fraction to set.
speciesThe isotope to set the molar abundance for.
molar_abundanceThe molar abundance to set.
-
Returns
The previous mass fraction that was set for the species.
Exceptions
- - - + +
exceptions::UnregisteredSymbolErrorif the species is not registered.
exceptions::CompositionModeErrorif the composition is in number fraction mode.
exceptions::InvalidCompositionErrorif the mass fraction is not between 0 and 1.
exceptions::UnregisteredSymbolErrorif the isotope is not registered in the composition.
exceptions::InvalidAbundanceErrorif the molar abundance is negative.
+
Example:
#include "fourdst/composition/species.h"
+ +
comp.setMolarAbundance(fourdst::atomic::H_1, 1.0);
+
comp.setMolarAbundance(fourdst::atomic::He_4, 0.5);
+
static const Species He_4("He-4", "He", 0, 2, 2, 4, 7073.9156, "B-", -22898.274, std::numeric_limits< double >::infinity(), "+", "S=99.9998 2", 4.00260325413, 0.00016)
+
+
Note
Since this method does not need to validate the species exists in the database, it will generally be slightly more performant than the symbol-based method.
-

Definition at line 411 of file composition.cpp.

+

Definition at line 541 of file composition.cpp.

- -

◆ setMassFraction() [2/4]

+ +

◆ setMolarAbundance() [2/6]

- + + + + + + + + + +
double fourdst::composition::Composition::setMassFraction void fourdst::composition::Composition::setMolarAbundance (const std::set< atomic::Species > & species,
const std::vector< double > & molar_abundances )
+
+ +

Sets the molar abundances for a set of isotopes.

+
Parameters
+ + + +
speciesThe isotopes to set the molar abundances for.
molar_abundancesThe molar abundances to set.
+
+
+
Exceptions
+ + + +
exceptions::UnregisteredSymbolErrorif any isotope is not registered in the composition.
exceptions::InvalidAbundanceErrorif any molar abundance is negative.
+
+
+
Example:
#include "fourdst/composition/species.h"
+
std::set<fourdst::atomic::Species> species = {fourdst::atomic::H_1, fourdst::atomic::He_4};
+
Composition comp(species);
+
comp.setMolarAbundance(species, {1.0, 0.5});
+
+
Note
Since this method does not need to validate the species exists in the database, it will generally be slightly more performant than the symbol-based method.
+ +

Definition at line 582 of file composition.cpp.

+ +
+
+ +

◆ setMolarAbundance() [3/6]

+ +
+
+ + + + + + + + + + + +
void fourdst::composition::Composition::setMolarAbundance (const std::set< std::string > & symbols,
const std::vector< double > & molar_abundances )
+
+ +

Sets the molar abundances for a set of symbols.

+
Parameters
+ + + +
symbolsThe symbols to set the molar abundances for.
molar_abundancesThe molar abundances to set.
+
+
+
Exceptions
+ + + + +
exceptions::UnknownSymbolErrorif any symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif any symbol is not in the composition.
exceptions::InvalidAbundanceErrorif any molar abundance is negative.
+
+
+
Example:
std::set<std::string> symbols = {"H-1", "He-4"};
+
Composition comp(symbols);
+
comp.setMolarAbundance(symbols, {1.0, 0.5});
+
+ +

Definition at line 573 of file composition.cpp.

+ +
+
+ +

◆ setMolarAbundance() [4/6]

+ +
+
+ + + - +
void fourdst::composition::Composition::setMolarAbundance ( const std::string & symbol,
const double & mass_fraction )const double & molar_abundance )
-

Sets the mass fraction for a given symbol.

+

Sets the molar abundance for a given symbol.

Parameters
- - + +
symbolThe symbol to set the mass fraction for.
mass_fractionThe mass fraction to set (must be in [0, 1]).
symbolThe symbol to set the molar abundance for.
molar_abundanceThe molar abundance to set.
-
Returns
The previous mass fraction that was set for the symbol.
Exceptions
- - - + + +
exceptions::UnregisteredSymbolErrorif the symbol is not registered.
exceptions::CompositionModeErrorif the composition is in number fraction mode.
exceptions::InvalidCompositionErrorif the mass fraction is not between 0 and 1.
exceptions::UnknownSymbolErrorif the symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif the symbol is not in the composition.
exceptions::InvalidAbundanceErrorif the molar abundance is negative.
-
Postcondition
The composition is marked as not finalized.
-
Usage Example:
-
comp.registerSymbol("H-1");
-
comp.setMassFraction("H-1", 0.7);
+
Example:
Composition comp({"H-1", "He-4"});
+
comp.setMolarAbundance("H-1", 1.0);
+
comp.setMolarAbundance("He-4", 0.5);
-

Definition at line 343 of file composition.cpp.

+

Definition at line 529 of file composition.cpp.

- -

◆ setMassFraction() [3/4]

+ +

◆ setMolarAbundance() [5/6]

- + - + - +
std::vector< double > fourdst::composition::Composition::setMassFraction void fourdst::composition::Composition::setMolarAbundance (const std::vector< fourdst::atomic::Species > & species, const std::vector< atomic::Species > & species,
const std::vector< double > & mass_fractions )const std::vector< double > & molar_abundances )
-

Sets the mass fraction for multiple species.

+

Sets the molar abundances for a list of isotopes.

Parameters
- - + +
speciesThe vector of species to set the mass fractions for.
mass_fractionsThe vector of mass fractions corresponding to the species.
speciesThe isotopes to set the molar abundances for.
molar_abundancesThe molar abundances to set.
-
Returns
A vector of the previous mass fractions that were set.
Exceptions
- + +
SeesetMassFraction(const std::vector<std::string>&, const std::vector<double>&) for exceptions.
exceptions::UnregisteredSymbolErrorif any isotope is not registered in the composition.
exceptions::InvalidAbundanceErrorif any molar abundance is negative.
+
Example:
#include "fourdst/composition/species.h"
+ +
comp.setMolarAbundance({fourdst::atomic::H_1, fourdst::atomic::He_4}, {1.0, 0.5});
+
+
Note
Since this method does not need to validate the species exists in the database, it will generally be slightly more performant than the symbol-based method.
-

Definition at line 418 of file composition.cpp.

+

Definition at line 564 of file composition.cpp.

- -

◆ setMassFraction() [4/4]

+ +

◆ setMolarAbundance() [6/6]

- + - +
std::vector< double > fourdst::composition::Composition::setMassFraction void fourdst::composition::Composition::setMolarAbundance ( const std::vector< std::string > & symbols,
const std::vector< double > & mass_fractions )const std::vector< double > & molar_abundances )
-

Sets the mass fraction for multiple symbols.

+

Sets the molar abundances for a list of symbols.

Parameters
- - + +
symbolsThe symbols to set the mass fractions for.
mass_fractionsThe mass fractions corresponding to the symbols.
symbolsThe symbols to set the molar abundances for.
molar_abundancesThe molar abundances to set.
-
Returns
A vector of the previous mass fractions that were set.
Exceptions
- - + + +
exceptions::InvalidCompositionErrorif symbol and fraction counts differ.
SeesetMassFraction(const std::string&, const double&) for other exceptions.
exceptions::UnknownSymbolErrorif any symbol is not in the atomic species database.
exceptions::UnregisteredSymbolErrorif any symbol is not in the composition.
exceptions::InvalidAbundanceErrorif any molar abundance is negative.
-
Postcondition
The composition is marked as not finalized.
+
Example:
Composition comp({"H-1", "He-4"});
+
comp.setMolarAbundance({"H-1", "He-4"}, {1.0, 0.5});
+
-

Definition at line 362 of file composition.cpp.

+

Definition at line 555 of file composition.cpp.

- -

◆ setNumberFraction() [1/4]

- -
-
- - - - - - - - - - - -
double fourdst::composition::Composition::setNumberFraction (const fourdst::atomic::Species & species,
const double & number_fraction )
-
- -

Sets the number fraction for a given species.

-
Parameters
- - - -
speciesThe species to set the number fraction for.
number_fractionThe number fraction to set for the species.
-
-
-
Returns
The previous number fraction that was set for the species.
-
Exceptions
- - - - -
exceptions::UnregisteredSymbolErrorif the species is not registered.
exceptions::CompositionModeErrorif the composition is in mass fraction mode.
exceptions::InvalidCompositionErrorif the number fraction is not between 0 and 1.
-
-
- -

Definition at line 428 of file composition.cpp.

- -
-
- -

◆ setNumberFraction() [2/4]

- -
-
- - - - - - - - - - - -
double fourdst::composition::Composition::setNumberFraction (const std::string & symbol,
const double & number_fraction )
-
- -

Sets the number fraction for a given symbol.

-
Parameters
- - - -
symbolThe symbol to set the number fraction for.
number_fractionThe number fraction to set (must be in [0, 1]).
-
-
-
Returns
The previous number fraction that was set.
-
Exceptions
- - - - -
exceptions::UnregisteredSymbolErrorif the symbol is not registered.
exceptions::CompositionModeErrorif the composition is in mass fraction mode.
exceptions::InvalidCompositionErrorif the number fraction is not between 0 and 1.
-
-
-
Postcondition
The composition is marked as not finalized.
- -

Definition at line 374 of file composition.cpp.

- -
-
- -

◆ setNumberFraction() [3/4]

- -
-
- - - - - - - - - - - -
std::vector< double > fourdst::composition::Composition::setNumberFraction (const std::vector< fourdst::atomic::Species > & species,
const std::vector< double > & number_fractions )
-
- -

Sets the number fraction for multiple species.

-
Parameters
- - - -
speciesThe vector of species to set the number fractions for.
number_fractionsThe vector of number fractions corresponding to the species.
-
-
-
Returns
The vector of the previous number fractions that were set.
-
Exceptions
- - -
SeesetNumberFraction(const std::vector<std::string>&, const std::vector<double>&) for exceptions.
-
-
- -

Definition at line 435 of file composition.cpp.

- -
-
- -

◆ setNumberFraction() [4/4]

- -
-
- - - - - - - - - - - -
std::vector< double > fourdst::composition::Composition::setNumberFraction (const std::vector< std::string > & symbols,
const std::vector< double > & number_fractions )
-
- -

Sets the number fraction for multiple symbols.

-
Parameters
- - - -
symbolsThe symbols to set the number fractions for.
number_fractionsThe number fractions corresponding to the symbols.
-
-
-
Returns
A vector of the previous number fractions that were set.
-
Exceptions
- - - -
exceptions::InvalidCompositionErrorif symbol and fraction counts differ.
SeesetNumberFraction(const std::string&, const double&) for other exceptions.
-
-
- -

Definition at line 396 of file composition.cpp.

- -
-
- -

◆ subset()

+ +

◆ size()

@@ -2666,83 +2205,25 @@ symbol must be registered in the composition - + - - - - - - - -
Composition fourdst::composition::Composition::subset size_t fourdst::composition::Composition::size (const std::vector< std::string > & symbols,
const std::string & method = "norm" ) const
- - -nodiscard - - -
- -

Creates a new Composition object containing a subset of species from this one.

-
Parameters
- - - -
symbolsThe symbols to include in the subset.
methodThe method for handling the abundances of the new subset. Can be "norm" (normalize abundances to sum to 1) or "none" (keep original abundances).
-
-
-
Returns
A new Composition object containing the subset.
-
Exceptions
- - - - -
exceptions::UnregisteredSymbolErrorif any requested symbol is not in the original composition.
exceptions::InvalidMixingModeif an invalid method is provided.
exceptions::FailedToFinalizeCompositionErrorif normalization fails.
-
-
- -

Definition at line 734 of file composition.cpp.

- -
-
- -

◆ validateComposition()

- -
-
- - - +nodiscardoverridevirtualnoexcept
- - - - - +
void fourdst::composition::Composition::validateComposition (const std::vector< double > & fractions)) const
-private
-

Validates the given fractions, throwing an exception on failure.

-
Parameters
- - -
fractionsThe fractions to validate.
-
-
-
Exceptions
- - -
exceptions::InvalidCompositionErrorif the fractions are invalid.
-
-
+

Gets the number of registered species in the composition.

+
Returns
The number of registered species.
-

Definition at line 327 of file composition.cpp.

+

Implements CompositionAbstract.

+ +

Definition at line 525 of file composition.cpp.

@@ -2784,7 +2265,7 @@ symbol must be registered in the composition
Returns
The output stream.
-

Definition at line 1078 of file composition.cpp.

+

Definition at line 593 of file composition.cpp.

@@ -2811,12 +2292,12 @@ symbol must be registered in the composition

Cache for computed properties to avoid redundant calculations.

-

Definition at line 297 of file composition.h.

+

Definition at line 152 of file composition.h.

- -

◆ m_compositions

+ +

◆ m_molarAbundances

@@ -2825,7 +2306,7 @@ symbol must be registered in the composition - +
std::unordered_map<std::string, CompositionEntry> fourdst::composition::Composition::m_compositionsstd::map<atomic::Species, double> fourdst::composition::Composition::m_molarAbundances
@@ -2835,14 +2316,14 @@ symbol must be registered in the composition
-

The compositions.

+

Map of species to their molar abundances.

-

Definition at line 295 of file composition.h.

+

Definition at line 150 of file composition.h.

- -

◆ m_config

+ +

◆ m_registeredSpecies

@@ -2851,7 +2332,7 @@ symbol must be registered in the composition - +
config::Config& fourdst::composition::Composition::m_config = config::Config::getInstance()std::set<atomic::Species> fourdst::composition::Composition::m_registeredSpecies
@@ -2861,185 +2342,9 @@ symbol must be registered in the composition
-

Definition at line 285 of file composition.h.

+

Set of registered species in the composition.

-
-
- -

◆ m_finalized

- -
-
- - - - - -
- - - - -
bool fourdst::composition::Composition::m_finalized = false
-
-private
-
- -

True if the composition is finalized.

- -

Definition at line 289 of file composition.h.

- -
-
- -

◆ m_logger

- -
-
- - - - - -
- - - - -
quill::Logger* fourdst::composition::Composition::m_logger = m_logManager.getLogger("log")
-
-private
-
- -

Definition at line 287 of file composition.h.

- -
-
- -

◆ m_logManager

- -
-
- - - - - -
- - - - -
logging::LogManager& fourdst::composition::Composition::m_logManager = logging::LogManager::getInstance()
-
-private
-
- -

Definition at line 286 of file composition.h.

- -
-
- -

◆ m_massFracMode

- -
-
- - - - - -
- - - - -
bool fourdst::composition::Composition::m_massFracMode = true
-
-private
-
- -

True if mass fraction mode, false if number fraction mode.

- -

Definition at line 292 of file composition.h.

- -
-
- -

◆ m_meanParticleMass

- -
-
- - - - - -
- - - - -
double fourdst::composition::Composition::m_meanParticleMass = 0.0
-
-private
-
- -

The mean particle mass of the composition (\sum_{i} \frac{n_i}{m_i}. where n_i is the number fraction of the ith species and m_i is the mass of the ith species).

- -

Definition at line 291 of file composition.h.

- -
-
- -

◆ m_registeredSymbols

- -
-
- - - - - -
- - - - -
std::set<std::string> fourdst::composition::Composition::m_registeredSymbols
-
-private
-
- -

The registered symbols.

- -

Definition at line 294 of file composition.h.

- -
-
- -

◆ m_specificNumberDensity

- -
-
- - - - - -
- - - - -
double fourdst::composition::Composition::m_specificNumberDensity = 0.0
-
-private
-
- -

The specific number density of the composition (\sum_{i} X_i m_i. Where X_i is the number fraction of the ith species and m_i is the mass of the ith species).

- -

Definition at line 290 of file composition.h.

+

Definition at line 149 of file composition.h.

diff --git a/docs/html/classfourdst_1_1composition_1_1_composition.js b/docs/html/classfourdst_1_1composition_1_1_composition.js index c1cc25e..4a2d202 100644 --- a/docs/html/classfourdst_1_1composition_1_1_composition.js +++ b/docs/html/classfourdst_1_1composition_1_1_composition.js @@ -4,71 +4,53 @@ var classfourdst_1_1composition_1_1_composition = [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a23b83b76ee025f6fc009184ee19bba88", null ], [ "~Composition", "classfourdst_1_1composition_1_1_composition.html#a08c1d1fe9384c5255a6ba40e34b18315", null ], [ "Composition", "classfourdst_1_1composition_1_1_composition.html#ae3cc2099efd7db8eec3d9af2294b75fa", null ], + [ "Composition", "classfourdst_1_1composition_1_1_composition.html#afa95dddfa88a101ad6ce261295a4460c", null ], [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a2d6fbe5c8142b358641bbe7ffde51053", null ], - [ "Composition", "classfourdst_1_1composition_1_1_composition.html#af4d4cc5875cba931a91faee13f55594e", null ], + [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a7d19fb3326e51c8fc8db5e0738e97d95", null ], + [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a0b3c93ce7c9473ac4aa4c9ee04f78051", null ], + [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a7f0798b3f1191561b38f336406acf62a", null ], + [ "Composition", "classfourdst_1_1composition_1_1_composition.html#ad6cdb28598267743f236d053cd5a62ae", null ], [ "Composition", "classfourdst_1_1composition_1_1_composition.html#a21369a80378d4c90438a34f0e4a275ca", null ], [ "begin", "classfourdst_1_1composition_1_1_composition.html#ab1701644ff1c83c220dc04eb58d1621b", null ], [ "begin", "classfourdst_1_1composition_1_1_composition.html#adf41a833e8b704daf4f581fca5c8cb9b", null ], - [ "contains", "classfourdst_1_1composition_1_1_composition.html#a7efe2cd3a69b743bf2086941b6dfd965", null ], + [ "contains", "classfourdst_1_1composition_1_1_composition.html#a194f715788e7921bd611579440de2ecd", null ], + [ "contains", "classfourdst_1_1composition_1_1_composition.html#ac3bfb56a2587215a59894e76d4867ede", null ], [ "end", "classfourdst_1_1composition_1_1_composition.html#adeaf6f1213e78cb1fe8a8317f0a8adc2", null ], [ "end", "classfourdst_1_1composition_1_1_composition.html#aed2f5676f8f742199f01e4d1e9664bdd", null ], - [ "finalize", "classfourdst_1_1composition_1_1_composition.html#a72d063a74a9d2197065884a2cea57a14", null ], - [ "finalizeMassFracMode", "classfourdst_1_1composition_1_1_composition.html#a869dbae3db9d09c57b2df56a813a55fb", null ], - [ "finalizeNumberFracMode", "classfourdst_1_1composition_1_1_composition.html#a461ab4e9cb5975cf865db5f16f03ddfe", null ], - [ "getCanonicalComposition", "classfourdst_1_1composition_1_1_composition.html#ac75dbc8377556c835455991c7c7fe206", null ], - [ "getComposition", "classfourdst_1_1composition_1_1_composition.html#a1138c86f7ccd39594601c2ec63ad89e9", null ], - [ "getComposition", "classfourdst_1_1composition_1_1_composition.html#afe5f1086027044c84ff35a366b2e8e2d", null ], - [ "getComposition", "classfourdst_1_1composition_1_1_composition.html#a092d3536b04167ea2e6e3a3b1446c377", null ], - [ "getElectronAbundance", "classfourdst_1_1composition_1_1_composition.html#a62dcfcf8f824d6af7903a9a9c3d5721e", null ], - [ "getMassFraction", "classfourdst_1_1composition_1_1_composition.html#aae07019ab6e02394e6ea353e0b98a417", null ], - [ "getMassFraction", "classfourdst_1_1composition_1_1_composition.html#aeae9d6d3f742cd8b59b58abcb228a44d", null ], + [ "getCanonicalComposition", "classfourdst_1_1composition_1_1_composition.html#aac5b214a3d1278e127422224cb9cee50", null ], + [ "getElectronAbundance", "classfourdst_1_1composition_1_1_composition.html#a90fc71d1fe03017ee4c7a1cac69d24fb", null ], + [ "getLogger", "classfourdst_1_1composition_1_1_composition.html#a46a706f9e4c06a45b45ae3dffdde5e9e", null ], + [ "getMassFraction", "classfourdst_1_1composition_1_1_composition.html#a9ea2b673341fdc67afeb0f0517a54c8c", null ], + [ "getMassFraction", "classfourdst_1_1composition_1_1_composition.html#ae8fe4e7158f8317bf29b5cd0c65a9524", null ], [ "getMassFraction", "classfourdst_1_1composition_1_1_composition.html#ae5d8d21632fca2b35b0898f2b205cd10", null ], - [ "getMassFractionVector", "classfourdst_1_1composition_1_1_composition.html#a85169b763138ab72047e43e07af978fb", null ], - [ "getMeanAtomicNumber", "classfourdst_1_1composition_1_1_composition.html#af7dd8f7d69727acfacf1bf58c4083a27", null ], - [ "getMeanParticleMass", "classfourdst_1_1composition_1_1_composition.html#a796386824d1358527fed7c6b537935d8", null ], - [ "getMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#a28c70279d36826e0e1026da3fa892ffc", null ], + [ "getMassFractionVector", "classfourdst_1_1composition_1_1_composition.html#af4f44aaf8b7e0d63872a70b5e2131369", null ], + [ "getMeanParticleMass", "classfourdst_1_1composition_1_1_composition.html#afbbb5e51ad5ae5c0fa6bc0094195aecd", null ], + [ "getMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#a78a43e9e77a9c1b0f27c50b9feb52449", null ], [ "getMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#add67a92d73e3a57a2bbdb52bc9ca3bfe", null ], - [ "getMolarAbundanceVector", "classfourdst_1_1composition_1_1_composition.html#abed665c07c42b40682da453576621399", null ], - [ "getNumberFraction", "classfourdst_1_1composition_1_1_composition.html#ae46fb8c3020dadd69080a7acd2054ea1", null ], - [ "getNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a178d7393ee8b5d496925dcd901c03d23", null ], + [ "getMolarAbundanceVector", "classfourdst_1_1composition_1_1_composition.html#abcb391f5fca2b636127e48e681e4c3ee", null ], + [ "getNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a1f87ed64a1be9a6091c852131d24e476", null ], + [ "getNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a1aa79993925f16ba3c30a376aa39161b", null ], [ "getNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a34f71d4d8f0297c576fd62fabd490305", null ], - [ "getNumberFractionVector", "classfourdst_1_1composition_1_1_composition.html#a49d2eba540f28324c6b7145a5b6cabfd", null ], - [ "getRegisteredSpecies", "classfourdst_1_1composition_1_1_composition.html#af61ebe73a8b5926eb23037bb078fa87a", null ], - [ "getRegisteredSymbols", "classfourdst_1_1composition_1_1_composition.html#a3f10f38878ba4be121d6d77a8b1f4d7a", null ], + [ "getNumberFractionVector", "classfourdst_1_1composition_1_1_composition.html#ae4f72972cf4d1ff422d0790080e11473", null ], + [ "getRegisteredSpecies", "classfourdst_1_1composition_1_1_composition.html#a33db253ca50431b5166d43412ff18f71", null ], + [ "getRegisteredSymbols", "classfourdst_1_1composition_1_1_composition.html#a3ae885c28580ae15be8c16614bef3b0e", null ], [ "getSpeciesAtIndex", "classfourdst_1_1composition_1_1_composition.html#ae4f854ded38f5e6fcd157a74a57cbf0c", null ], [ "getSpeciesIndex", "classfourdst_1_1composition_1_1_composition.html#a3d220b42fa06d7d3a43944ee2b8f6a5f", null ], [ "getSpeciesIndex", "classfourdst_1_1composition_1_1_composition.html#a0d94f62402bb90b5d12679faeaa8c5d7", null ], - [ "hasSpecies", "classfourdst_1_1composition_1_1_composition.html#a55dfadad6cf5fb249356edad1733a813", null ], - [ "hasSymbol", "classfourdst_1_1composition_1_1_composition.html#ac01ae1967c266d8187bc6e104c8a0d19", null ], - [ "isValidComposition", "classfourdst_1_1composition_1_1_composition.html#addf03ba8b988970d341884d487aa94d5", null ], - [ "isValidSymbol", "classfourdst_1_1composition_1_1_composition.html#a8fdac26e6298008aaeaa5b15f7fe244f", null ], - [ "mix", "classfourdst_1_1composition_1_1_composition.html#a3aead72892606725a4149a5f65bd31ec", null ], - [ "operator+", "classfourdst_1_1composition_1_1_composition.html#a24a3bdeb8e8e55b54ecdee6dcb0d9561", null ], [ "operator=", "classfourdst_1_1composition_1_1_composition.html#a4ec1e23cfecef764cb831171fed62fc2", null ], - [ "registerSpecies", "classfourdst_1_1composition_1_1_composition.html#a4ce00f73cc133bb1bac2b030b93ab480", null ], - [ "registerSpecies", "classfourdst_1_1composition_1_1_composition.html#a057f2bf2e86bcc3c649c0ddf18cf3826", null ], - [ "registerSymbol", "classfourdst_1_1composition_1_1_composition.html#a1bc2e64f87c12befdc2bc767e7405661", null ], - [ "registerSymbol", "classfourdst_1_1composition_1_1_composition.html#a9b422156600823276a9606bfa07ad4db", null ], - [ "setCompositionMode", "classfourdst_1_1composition_1_1_composition.html#a0af981ed1074b26c237cf6cf35f82c9e", null ], - [ "setMassFraction", "classfourdst_1_1composition_1_1_composition.html#aa6c94269a5d16349c98860f3015b734a", null ], - [ "setMassFraction", "classfourdst_1_1composition_1_1_composition.html#a493224656aa3ade68389250720ef09af", null ], - [ "setMassFraction", "classfourdst_1_1composition_1_1_composition.html#abbae020d46c74708a7974c1ca755bb62", null ], - [ "setMassFraction", "classfourdst_1_1composition_1_1_composition.html#a66ce1012c12b0a83629eb09d451b68e3", null ], - [ "setNumberFraction", "classfourdst_1_1composition_1_1_composition.html#aaa822bb48a948d101fef759ffbefe31b", null ], - [ "setNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a7d4d748f3ee25e68751fb143717ed080", null ], - [ "setNumberFraction", "classfourdst_1_1composition_1_1_composition.html#adc068778a1ef33cad67f5ca028b49bb8", null ], - [ "setNumberFraction", "classfourdst_1_1composition_1_1_composition.html#a48014a0a725ebd91ad1193c063b5b26f", null ], - [ "subset", "classfourdst_1_1composition_1_1_composition.html#a17635cd21744c7cf86cb1eb75152c816", null ], - [ "validateComposition", "classfourdst_1_1composition_1_1_composition.html#a86982685c34db4a8f079ddafc25c594e", null ], + [ "registerSpecies", "classfourdst_1_1composition_1_1_composition.html#a392a34c19f45d6c936cc7030e6cfaf3f", null ], + [ "registerSpecies", "classfourdst_1_1composition_1_1_composition.html#a2846f4ea0d6075ecdaf4334741a54750", null ], + [ "registerSymbol", "classfourdst_1_1composition_1_1_composition.html#a3ab4dcda0bfd1a35b169bcc57fe66725", null ], + [ "registerSymbol", "classfourdst_1_1composition_1_1_composition.html#a156d1198ef47deed9689949f271969e2", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#ac386709ef1e872fa558b8e30fc8b4c44", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#ad7af2f8f3050969a6c5b9a9ef5fead64", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#a49b06737a50df9c25a234499a1431388", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#a262d7133035d4e6f45daa81827abf5e7", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#ae908cda3a994292e2eb767fa476b666b", null ], + [ "setMolarAbundance", "classfourdst_1_1composition_1_1_composition.html#a6baa22b92a78fd43d10d4941f30c8ac2", null ], + [ "size", "classfourdst_1_1composition_1_1_composition.html#a9d177d36b728442bcbd8cb66712c7c75", null ], [ "operator<<", "classfourdst_1_1composition_1_1_composition.html#a36c2525d21cd932065bb2bb30bc57fb4", null ], [ "m_cache", "classfourdst_1_1composition_1_1_composition.html#a02cd9d9608da082a200fdfa86d14bf5d", null ], - [ "m_compositions", "classfourdst_1_1composition_1_1_composition.html#aa7f2753b10e85ae3bbf0c3d600a973db", null ], - [ "m_config", "classfourdst_1_1composition_1_1_composition.html#a1f96b2c567364368ea5ee6f0826f3091", null ], - [ "m_finalized", "classfourdst_1_1composition_1_1_composition.html#aa00cbc0933d8a22bb900ac21a338e5ac", null ], - [ "m_logger", "classfourdst_1_1composition_1_1_composition.html#ab6c66f35e1fb05dd24aacaf90e115c5e", null ], - [ "m_logManager", "classfourdst_1_1composition_1_1_composition.html#a40b2128948f01630cd2968488b450ce5", null ], - [ "m_massFracMode", "classfourdst_1_1composition_1_1_composition.html#a671f1ee8be00f4ff8c1d94fabb382380", null ], - [ "m_meanParticleMass", "classfourdst_1_1composition_1_1_composition.html#a4a36c8d22ce61023e7bea1d9417577d4", null ], - [ "m_registeredSymbols", "classfourdst_1_1composition_1_1_composition.html#a39bfcb7d81d723cbd9d021abd533b4d6", null ], - [ "m_specificNumberDensity", "classfourdst_1_1composition_1_1_composition.html#addae4484da7d5072ab66a721dbe04ced", null ] + [ "m_molarAbundances", "classfourdst_1_1composition_1_1_composition.html#aa05a640e0ea80142682bf4ee30a93c7f", null ], + [ "m_registeredSpecies", "classfourdst_1_1composition_1_1_composition.html#a452b0affb86dc971a96c80d01f4fcb2b", null ] ]; \ No newline at end of file diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error-members.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error-members.html index c67f2e3..a6bf256 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error-members.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error-members.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html index da196ea..02e606a 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -114,17 +114,13 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1exceptions_1_1_composit
Inheritance diagram for fourdst::composition::exceptions::CompositionError:
-
- - -fourdst::composition::exceptions::CompositionNotFinalizedError -fourdst::composition::exceptions::FailedToFinalizeCompositionError -fourdst::composition::exceptions::InvalidCompositionError -fourdst::composition::exceptions::InvalidMixingMode -fourdst::composition::exceptions::InvalidSymbolError -fourdst::composition::exceptions::UnregisteredSymbolError - -
+
+
[legend]
+
+Collaboration diagram for fourdst::composition::exceptions::CompositionError:
+
+
+
[legend]
diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.png b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_composition_error.png index 215612695000a40ed73b4598162eef3fe2ea8cd5..ba99ff11efe1337dbdb00e627f3f44d8e99763eb 100644 GIT binary patch literal 2214 zcmc(hX;c$g7RM_fE`T7dv|?t8S@7Bh3c=F{faf2Fy;e~V0Ic7K$NkxthL|jwth>wkLZ>L)?}n;* zDEHSJuD3pdwBRxeSS-O!2 z0peN+wl;m*%2*kVfA~5%<@%9@h5D03MzB6ak~&W7!PyyL(;Ovm*GN)oGP%3%TIpq* ztHVFL%RUf)XOgArFEts?O+$I}+MUkVd@K8Az5^o=*6|+%5*f|E*bYWNvj(4> zmtWf5WrpRyBtUUu6dz;m1aN2pWgi^zEMUVVLyu9qYG%yFdYFCK)W`IgJvL}x?D|8 z)Y%I(wu`h(7%Sv^y%IQz&wvR1mQ4Zvfc9RX&$tE9XHelJ?NE&k1Q7pkw!9{n;Py2; zFAxz5IQ_%I!UKmxa?q}J91;$9YR`p6H*}JwTJyxnBrn{UCX=($~&SrH1pzpe_R9rx(H!L^D24+ar-J~eq8qkwD z%fu*X1WLDyXQF#rtcTIreN)&`wj$<&QMrT4i8(|*>}5-!Lv`?qgSN0 z`)`-lh)w^5^6wA4cPxff^BWuX-l)TEGiC*q692C(!n8FMW>L9~Qv*NSLb`%$CmU%O zpWIs5@!&goW3TdR&~^8*$WuRV@isEzUC~rG6k#U{qjtxZ%;RKjxdd6m^s|Am-xGXf zl?^>v;UFTe#ZCk@$(ZRlmWT^MZ)$h(%(ap#NVq#iRGp^>%tzzFDch0!6Gh1Pkw35k zBC16dZ8<74Ckx}r9Wy0iF0Wzu% zbqw{+Q%y&m z{zJ@$G_|Isxg>wYJTvXD|K|Nailc6*pYjOjbQp-m&TTNDh^O`%QYXrOY1JV7;v>SV zj{WCCU}gv5^I~o2dK;K{6F{LG3ao9>@Q$d}*np-HK4Z^Zb=+pKj_k0_zzo<6aHH{v zC3(Nr!8R+M(PWa|qbr6O5{7%?3M(Sk8$3C9e5btM^T|Qw z6@1P$%lh&jKTT*Axe# zk2}SJFB@BZK*7-AacjI6idxbofg6RtI+txj%y=c6Wj;6aN}u}BUKO>$`#NgKCW~VJ z?y=HAkQQAUd{(?HVuATXsuVrJ+l0Zt7|)th%!E*QjAEU{iccwE(@gwqOp#f>lG|NN zSPt|iAvmYOjOBZ8E?ROCL%^dW_Y~$_nCul=a_{wyT_h@QB{HLV4R+ql`H^bH4Jx;T zcz9+hCDYrTI!I@2RVG%EUMPhL+@9&Fuh_TpTNOoLijn=!Yao8M(@cL;$Y$*2aRFTS z&Z38G-}sWv2!U65yTdZam){s*r%+vi43R^~aIut5=(B38N$_p}RPL^avcd|}!xBDdpx{2z!z4fUOdPhispBwcQs57;BFl}WM?TCy^Z~l4! zFEf)-F(dhzz(fXvT&Bn%K*kQsKhS$7?-`LTOnBPaJ*Q2hu>|9%#;ozp z1c?KFDYbxS8Ik|io(=%-xhf)S`JN2G#d|?h845qX6(nJ#o;t Hp?~`qiYX;z literal 4450 zcmd^Dc~Dd57DubrS^>4Mf})8#ZJ{7qK@dn)5UB!g0mG^WM2dh05J(8I`YI|*tW;1# zh>D6{49FTFBta>mG(cnvOCW#FOmu1VQ}c+F?+RI4LuEv|d1`1#_+i?H+p&VvFDWa0c7+R}g)+n~itv(*b` z=-^`s4>Qh_BfncbL$?nKX|jHrtn$pV8QOY>gAvzZ#Q3^(Gjw7bS;kA3@u2Cuzn`Wu zUw1LhCCK8X!J@bIVJfcG(v=$Kus>3l^R~X46bI}&u4w~NkWyD5ONm+2FaL$&LN%3B zQe3HfLpseX(PFH#wx)(7WErv}MnHxNrDO@6OhD3PwvQIgo1vrtPu4=BkuLq$8ax46*=OjJ$d~fuzMA2XmwI23d3O%# z5>+VFGfK=ey^pUvbQf2m_4|dfQfUbW6Y@MHpG=_eFr*`w!Jto3RX!-eF>5=7thnZ8 z%G*&tS+}UngV4b}klC>+_JWuMdU-_COJ#N>lMtX8bX>)D-a$=;YNND~)0$BKmdrVb zX|R3o&2ZfFIc@1Pnf?CzGB#rUY~I&N{iaH4np$p!d(FM)u}ZRLaW7jI;)nfqPRQ02 z#2TNcd^wxn`KNqbXRBiIRqS8e`ailHb1;x>A4s-YGS{97X8YpJm>TVAfQ;8i#%r{v zIaA+^sjtzVLGfm%;>{rM+p|p{`I|n{S|iD3%p!z*IKN!CQ!vq+DzjqhQ{>`M?txXv zc+-g!#@RN}#dtI3gz5VNW$O31l2XGa1RiT~^89R~oYN(AE8>i%jU<>ce}3PL$oTW= z9B+0T4N_W4UlXPFQwtwY-d76oVyJm+C!-X?jmQbg6Yyyxei_ugDg0n`OY~dm@x%y8 z%;@Q_2&zi`p18RZ@56Yg>biU6d?i;u=qM#bL=N^yG|y@bq$QXqN*HYgW+uX_35I2| z7nDG?tuE6?wm+F0O7sFgBQ3vysqfFDT8EX&&nZR@v3blhgc6Zr`~e|dj~M-Gq-y`r z>H`=fd2OvYCf+Q#akkb^Z0l?r_iJWvGuX7d(@P^7Y81+4IT%wD6 z=Z@rtS`%?JXtn-NR-?$=Z0cU|r-ca?BDVXK!!_JO5+z$4LbwnVA4KbqY^We2Emzf^ zL8gMWV6fxeT&<>io&S#1Jp5tLT;d5(;!M+`QJ zLJ#Hic#UByM_qL+N^Jr`9L?`>w2y;{u!Ti+W8~nxZ+f{&?#?>+HI9-YgA)r}4R|(X4k1expB|8*1|0Ih~re{*%k?{$9;H zIN@H%zd8&*nTNl*_=HZ?{JtB;8VBT?GRurb2X00Cw5w) z`&Vv_^_}qCX0)OCNwybl#lNqaZX|4`wS6#K)14;4;Hy0`wvfR>N>=NPj_ z8##W6WdCI2WIqJxR~=vCYem!EKHt?}az5xoQ6~ zOSU@%m+VLAz~Nw=KW4{Q?1ndO^s_t$uUU`yn4NT70Egp$?LG9d-Dw!T?hD9pxL4>z zcR8pW8fnR=xxzb!80;X^N5H`6w)!mjPd(ku<{`akZlD`C^$1+jnPnWyU)nWTXnL38 z71v|a{#^m=#t^O#)#KBU)OQRXUNKTip>*CB0|36gz)8{VD@`aQVuu|r6wl8D=-p|? zs?iOTU6b_N61nRhc+h}0!g{0;_iZZPL+NbAy0zF=(4U21_$y<2+tq1Oz>1T(9mA>g zcf<{s*XVM3QIYjpCOF0@pJo%*(5SL2fx}59L4=9zmP9B{E}l%7%mUv2?&Wa--W2Xa zsvg3t#?*3Q0^LTsD|e#daP+HD)MfC-dLQ=dI~l4#y@{eG@xwgNeXn?&_900Zwu7$D zRfjhyUd344P0=Nki+#NDB5F%v>v$fcXUsVw)`Z}o&AxaKEyVXql|$n4j@FnPBs4mh0>*-Bq<&# zSkqu_JftM&(~N)WG!&6|BA-_|b*)R<+ausj&C#$pb(}qFqI)1Rgtr_3Y^A-%X=rGx zZJpuTpcOlV>!F2jD+R`G8(I#^M(SFf_Q9!7xD?8LV*WE%w}Ap4(3GQcqq>G8Trz|n zNK5Lt0D^mz9tUoh*6NOvkj#OH-X^hzx?Pvkq`GeeH62^0bJ>gHnvaxPdU+PO2MuJ` zfIuAR3_rERw@}W#^@XVcu@^18f^}Pov%IbhRooik<*WdHJjzI`*e>44t(3Iwjpng$ zxiW6lqBdU&%!{G(i3+NB>o(K0V!WYb5ZsSY>!N1!CL=Gbzp-0{G6iMU)o{-glGI}f zCp*KN9BH09?A2vMSuk4Tg&%^6ZPW%O+cTKEB`xB9^fn>GsuL{LVkAq|Q&oy{X&h%CF|$!DZ$mYzSB%7opO zDA%6#S1Mcl`4FklRNalUN;Xnk%7b0dE!x7Jz5I!O6Q(Zvf&m@gFv=mB|iTPAuU}MDDR-DZprO&aPiuYVKHpx7n1M>-#gfxKhIVXL7mXRjD-du^Q&vo~D z>ITNg++|4m8i01nC-ZUs#$qo|k@|8VG#yslqJ7>ItRd~L!QFKIvXkbu>OUCU3Sh}Y z8O7~|PSzpL+|OvXk2~*7&x0I4wZPYTNEBJXV%%d1Q}IQ>zyT0aw!``G%k*u$UDFex zIWMvg`(}IfvNTz6@ABoeH4Uog^WI^3*AUPxwP%J(zqH-jveu zO9jb$lYB>R$EYb2Bm3bA;G_g2S@KIr-;dk-M2o1alvQ@#)&uID#9k@mF#xE?6E?fU z!<%SW<(uOG5YuAAwFBqV_J!bZXDj-xBxMs#vQX$*D~DPo~g(F94YP#jjA zDq|2TqK~Q*yj2J*7VP?o#|RQyrgmd>N2wK=K=5$-Ww|owwE*?DAh!F3hcqecUbE56 z*W-s3eXuv;(`L<$II%z#Auv{db?MG&>_CUw=i6AmVk{ddsl)3G$tc${Sb}EAl}|%j z*(I0U<)7+d&aKRI7|F!l0FC<|RTDGh(8qb!ec4ZeZ~9uc0KkT+eY5GqrStFh&3|{< zfopjME7usGi_ig&sU^Lx>J%c`Pv>K<{$$aE3d8(uWGnFB5G_Z0XS=LDCocU9IVwAF diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error-members.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error-members.html index 722fb02..70d68af 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error-members.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error-members.html @@ -29,7 +29,7 @@ diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html index 73db1c1..ba136ae 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html @@ -29,7 +29,7 @@ @@ -113,12 +113,13 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1exceptions_1_1_invalid_
Inheritance diagram for fourdst::composition::exceptions::InvalidCompositionError:
-
- - -fourdst::composition::exceptions::CompositionError - -
+
+
[legend]
+
+Collaboration diagram for fourdst::composition::exceptions::InvalidCompositionError:
+
+
+
[legend]

Public Member Functions

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -143,7 +144,7 @@ Additional Inherited Members

Detailed Description

Exception thrown when a composition is in an invalid or inconsistent state.

-

Definition at line 82 of file exceptions_composition.h.

+

Definition at line 41 of file exceptions_composition.h.

Member Function Documentation

◆ CompositionError()

diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error-members.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error-members.html index a707ead..8901fd4 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error-members.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error-members.html @@ -29,7 +29,7 @@ diff --git a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html index 364e39a..9c9ff32 100644 --- a/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html +++ b/docs/html/classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html @@ -29,7 +29,7 @@ @@ -113,12 +113,13 @@ $(function(){initNavTree('classfourdst_1_1composition_1_1exceptions_1_1_unregist
Inheritance diagram for fourdst::composition::exceptions::UnregisteredSymbolError:
-
- - -fourdst::composition::exceptions::CompositionError - -
+
+
[legend]
+
+Collaboration diagram for fourdst::composition::exceptions::UnregisteredSymbolError:
+
+
+
[legend]

Private Member Functions

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -144,7 +145,7 @@ Additional Inherited Members

Exception thrown when a symbol is used that has not been registered.

This typically occurs when a chemical species is used that is not known to the system.

-

Definition at line 111 of file exceptions_composition.h.

+

Definition at line 51 of file exceptions_composition.h.

Member Function Documentation

◆ CompositionError()

diff --git a/docs/html/composition_8cpp.html b/docs/html/composition_8cpp.html index 3c8a7ca..1164752 100644 --- a/docs/html/composition_8cpp.html +++ b/docs/html/composition_8cpp.html @@ -29,7 +29,7 @@ @@ -109,15 +109,20 @@ $(function(){initNavTree('composition_8cpp.html',''); initResizable(true); }); #include <stdexcept>
#include <unordered_map>
#include <vector>
-#include <array>
#include <ranges>
#include <algorithm>
+#include <set>
+#include <string>
#include <utility>
-#include "fourdst/composition/atomicSpecies.h"
-#include "fourdst/composition/species.h"
+#include "fourdst/atomic/atomicSpecies.h"
+#include "fourdst/atomic/species.h"
#include "fourdst/composition/composition.h"
-#include <numeric>
#include "fourdst/composition/exceptions/exceptions_composition.h"
+
+Include dependency graph for composition.cpp:
+
+
+

Go to the source code of this file.

Private Member Functions

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -126,15 +131,13 @@ Namespaces +
namespace  fourdst
 
namespace  fourdst::composition
 Utilities and types for representing and manipulating chemical compositions.
 
- - - - +

Functions

std::ostream & fourdst::composition::operator<< (std::ostream &os, const GlobalComposition &comp)
 
std::ostream & fourdst::composition::operator<< (std::ostream &os, const CompositionEntry &entry)
 
std::ostream & fourdst::composition::operator<< (std::ostream &os, const Composition &composition)
 OVERLOADS.
 
diff --git a/docs/html/composition_8cpp.js b/docs/html/composition_8cpp.js index 4add36f..7f01977 100644 --- a/docs/html/composition_8cpp.js +++ b/docs/html/composition_8cpp.js @@ -1,6 +1,4 @@ var composition_8cpp = [ - [ "fourdst::composition::operator<<", "namespacefourdst_1_1composition.html#a5e8ccc2bd9e91eebcd3ef5fe470163a1", null ], - [ "fourdst::composition::operator<<", "namespacefourdst_1_1composition.html#a676f771864958c4db4ed2a82cc0e85dd", null ], - [ "fourdst::composition::operator<<", "namespacefourdst_1_1composition.html#a8468dde1b148c0583b8a9f85b8d0ce9a", null ] + [ "fourdst::composition::operator<<", "namespacefourdst_1_1composition.html#a5e8ccc2bd9e91eebcd3ef5fe470163a1", null ] ]; \ No newline at end of file diff --git a/docs/html/composition_8cpp_source.html b/docs/html/composition_8cpp_source.html index 42a4c7c..85f73a3 100644 --- a/docs/html/composition_8cpp_source.html +++ b/docs/html/composition_8cpp_source.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -127,1303 +127,730 @@ $(function(){initNavTree('composition_8cpp_source.html',''); initResizable(true)
23#include <stdexcept>
24#include <unordered_map>
25#include <vector>
-
26#include <array>
-
27#include <ranges>
-
28#include <algorithm>
-
29
+
26#include <ranges>
+
27#include <algorithm>
+
28#include <set>
+
29#include <string>
30
-
31#include <utility>
-
32
- - - -
36
-
37#include <numeric>
-
38
- -
40
-
41namespace {
-
42 template<typename A, typename B>
-
43 std::vector<A> sortVectorBy(
-
44 std::vector<A> toSort,
-
45 const std::vector<B>& by
-
46 ) {
-
47 std::vector<std::size_t> indices(by.size());
-
48 for (size_t i = 0; i < indices.size(); i++) {
-
49 indices[i] = i;
-
50 }
-
51
-
52 std::ranges::sort(indices, [&](size_t a, size_t b) {
-
53 return by[a] < by[b];
-
54 });
-
55
-
56 std::vector<A> sorted;
-
57 sorted.reserve(indices.size());
-
58
-
59 for (const auto idx: indices) {
-
60 sorted.push_back(toSort[idx]);
-
61 }
-
62
-
63 return sorted;
-
64 }
-
65}
-
66
-
67namespace fourdst::composition {
-
68
-
- -
70 m_symbol("H-1"),
-
71 m_isotope(fourdst::atomic::species.at("H-1")),
-
72 m_initialized(false) {}
-
-
73
-
- -
75 const std::string& symbol,
-
76 const bool massFracMode
-
77 ) :
- -
79 m_isotope(atomic::species.at(symbol)),
-
80 m_massFracMode(massFracMode) {
- -
82 }
-
-
83
- -
85
-
-
86 void CompositionEntry::setSpecies(const std::string& symbol) {
-
87 if (m_initialized) {
-
88 throw exceptions::EntryAlreadyInitializedError("Composition entry is already initialized.");
+
31
+
32#include <utility>
+
33
+ + + +
37
+ +
39
+
40namespace {
+
41 template<typename A, typename B>
+
42 std::vector<A> sortVectorBy(
+
43 std::vector<A> toSort,
+
44 const std::vector<B>& by
+
45 ) {
+
46 std::vector<std::size_t> indices(by.size());
+
47 for (size_t i = 0; i < indices.size(); i++) {
+
48 indices[i] = i;
+
49 }
+
50
+
51 std::ranges::sort(indices, [&](size_t a, size_t b) {
+
52 return by[a] < by[b];
+
53 });
+
54
+
55 std::vector<A> sorted;
+
56 sorted.reserve(indices.size());
+
57
+
58 for (const auto idx: indices) {
+
59 sorted.push_back(toSort[idx]);
+
60 }
+
61
+
62 return sorted;
+
63 }
+
64
+
65 std::optional<fourdst::atomic::Species> getSpecies(const std::string& symbol) {
+
66 if (!fourdst::atomic::species.contains(symbol)) {
+
67 return std::nullopt;
+
68 }
+
69 return fourdst::atomic::species.at(symbol);
+
70 }
+
71
+
72 void throw_unknown_symbol(quill::Logger* logger, const std::string& symbol) {
+
73 LOG_ERROR(logger, "Symbol {} is not a valid species symbol (not in the species database)", symbol);
+
74 throw fourdst::composition::exceptions::UnknownSymbolError("Symbol " + symbol + " is not a valid species symbol (not in the species database)");
+
75 }
+
76
+
77 void throw_unregistered_symbol(quill::Logger* logger, const std::string& symbol) {
+
78 LOG_ERROR(logger, "Symbol {} is not registered in the composition.", symbol);
+
79 throw fourdst::composition::exceptions::UnregisteredSymbolError("Symbol " + symbol + " is not registered in the composition.");
+
80 }
+
81}
+
82
+
83namespace fourdst::composition {
+
+ +
85 const std::vector<std::string>& symbols
+
86 ) {
+
87 for (const auto& symbol : symbols) {
+
88 registerSymbol(symbol);
89 }
-
90 if (!fourdst::atomic::species.contains(symbol)) {
-
91 throw exceptions::InvalidSpeciesSymbolError("Invalid symbol.");
-
92 }
- - -
95 m_initialized = true;
-
96 }
+
90 }
-
97
-
-
98 std::string CompositionEntry::symbol() const {
-
99 return m_symbol;
-
100 }
+
91
+
+ +
93 const std::set<std::string>& symbols
+
94 ) {
+
95 for (const auto& symbol : symbols) {
+
96 registerSymbol(symbol);
+
97 }
+
98 }
-
101
-
- -
103 if (!m_massFracMode) {
-
104 throw exceptions::CompositionModeError("Composition entry is in number fraction mode.");
+
99
+
+ +
101 const std::vector<atomic::Species> &species
+
102 ) {
+
103 for (const auto& s : species) {
+
105 }
-
106 // X_i = (moles_i / mass_total) * (mass_i / moles_i) = m_molesPerMass * A_i
-
107 return m_molesPerMass * m_isotope.mass();
-
108 }
+
106 }
-
109
-
- -
111 if (m_massFracMode) {
-
112 throw exceptions::CompositionModeError("Composition entry is in mass fraction mode.");
+
107
+
+ +
109 const std::set<atomic::Species> &species
+
110 ) {
+
111 for (const auto& s : species) {
+
113 }
-
114 // In number fraction mode, the value is cached during the mode switch.
- -
116 }
+
114 }
-
117
-
- -
119 const double totalMolesPerMass
-
120 ) const {
-
121 // n_i = (moles_i / mass_total) / (moles_total / mass_total)
-
122 if (totalMolesPerMass == 0.0) return 0.0;
-
123 return m_molesPerMass / totalMolesPerMass;
-
124 }
+
115
+
+ +
117 const std::vector<std::string>& symbols,
+
118 const std::vector<double>& molarAbundances
+
119 ) {
+
120 if (symbols.size() != molarAbundances.size()) {
+
121 LOG_CRITICAL(getLogger(), "The number of symbols and molarAbundances must be equal (got {} symbols and {} molarAbundances).", symbols.size(), molarAbundances.size());
+
122 throw exceptions::InvalidCompositionError("The number of symbols and fractions must be equal. Got " + std::to_string(symbols.size()) + " symbols and " + std::to_string(molarAbundances.size()) + " fractions.");
+
123 }
+
124
+
125 for (const auto &[symbol, y] : std::views::zip(symbols, molarAbundances)) {
+
126 registerSymbol(symbol);
+
127 setMolarAbundance(symbol, y);
+
128 }
+
129 }
-
125
-
- -
127 return m_molesPerMass;
-
128 }
+
130
+
+ +
132 const std::vector<atomic::Species> &species,
+
133 const std::vector<double> &molarAbundances
+
134 ) {
+
135 if (species.size() != molarAbundances.size()) {
+
136 LOG_CRITICAL(getLogger(), "The number of species and molarAbundances must be equal (got {} species and {} molarAbundances).", species.size(), molarAbundances.size());
+
137 throw exceptions::InvalidCompositionError("The number of species and fractions must be equal. Got " + std::to_string(species.size()) + " species and " + std::to_string(molarAbundances.size()) + " fractions.");
+
138 }
+
139
+
140 for (const auto& [s, y] : std::views::zip(species, molarAbundances)) {
+ +
142 setMolarAbundance(s, y);
+
143 }
+
144 }
-
129
-
- -
131 return m_isotope;
-
132 }
-
-
133
-
- -
135 const double mass_fraction
-
136 ) {
-
137 if (!m_massFracMode) {
-
138 throw exceptions::CompositionModeError("Composition entry is in number fraction mode.");
-
139 }
-
140 // Set the invariant from the given mass fraction
-
141 if (m_isotope.mass() == 0.0) {
-
142 m_molesPerMass = 0.0;
-
143 } else {
- -
145 }
-
146 }
-
-
147
-
- -
149 const double number_fraction
-
150 ) {
-
151 if (m_massFracMode) {
-
152 throw exceptions::CompositionModeError("Composition entry is in mass fraction mode.");
+
145
+
+ +
147 const std::set<std::string> &symbols,
+
148 const std::vector<double> &molarAbundances
+
149 ) {
+
150 if (symbols.size() != molarAbundances.size()) {
+
151 LOG_CRITICAL(getLogger(), "The number of symbols and molarAbundances must be equal (got {} symbols and {} molarAbundances).", symbols.size(), molarAbundances.size());
+
152 throw exceptions::InvalidCompositionError("The number of symbols and fractions must be equal. Got " + std::to_string(symbols.size()) + " symbols and " + std::to_string(molarAbundances.size()) + " fractions.");
153 }
-
154 // In number fraction mode, we only cache the value. The invariant
-
155 // m_molesPerMass cannot be calculated until finalize() provides global context.
- -
157 }
+
154
+
155 for (const auto& [symbol, y] : std::views::zip(sortVectorBy<std::string>(std::vector<std::string>(symbols.begin(), symbols.end()), molarAbundances), molarAbundances)) {
+
156 registerSymbol(symbol);
+
157 setMolarAbundance(symbol, y);
+
158 }
+
159 }
-
158
-
- -
160 [[maybe_unused]] const double meanMolarMass
-
161 ) {
-
162 if (m_massFracMode) {
-
163 return false;
-
164 }
-
165 m_massFracMode = true;
-
166 // The invariant m_molesPerMass does not change when switching mode.
-
167 // The cached number fraction is now stale, but that's okay.
-
168 return true;
-
169 }
+
160
+
+ + +
163 ) {
+
164 m_registeredSpecies = composition.m_registeredSpecies;
+
165 m_molarAbundances = composition.m_molarAbundances;
+
166 }
-
170
-
- -
172 const double totalMolesPerMass
-
173 ) {
-
174 if (!m_massFracMode) {
-
175 return false;
-
176 }
-
177 m_massFracMode = false;
-
178 // Calculate and cache the number fraction for the new mode.
-
179 m_cachedNumberFraction = number_fraction(totalMolesPerMass);
-
180 return true;
-
181 }
+
167
+
+ +
169 const Composition &other
+
170 ) {
+
171 if (this != &other) {
+ + +
174 }
+
175 return *this;
+
176 }
-
182
-
- -
184 return m_massFracMode;
-
185 }
+
177
+
+ +
179 const std::string& symbol
+
180 ) {
+
181 const auto result = getSpecies(symbol);
+
182 if (!result) {
+
183 throw_unknown_symbol(getLogger(), symbol);
+
184 }
+
185
+
186 registerSpecies(result.value());
+
187 }
-
186
-
- -
188 const std::vector<std::string>& symbols
-
189 ) {
-
190 for (const auto& symbol : symbols) {
-
191 registerSymbol(symbol);
-
192 }
-
193 }
+
188
+
+ +
190 const std::vector<std::string>& symbols
+
191 ) {
+
192 for (const auto& symbol : symbols) {
+
193 registerSymbol(symbol);
+
194 }
+
195 }
-
194
-
- -
196 const std::set<std::string>& symbols
-
197 ) {
-
198 for (const auto& symbol : symbols) {
-
199 registerSymbol(symbol);
-
200 }
-
201 }
+
196
+
+ +
198 const atomic::Species &species
+
199 ) noexcept {
+
200 m_registeredSpecies.insert(species);
+
201 if (!m_molarAbundances.contains(species)) {
+
202 m_molarAbundances.emplace(species, 0.0);
+
203 }
+
204 }
-
202
-
- -
204 const std::vector<std::string>& symbols,
-
205 const std::vector<double>& fractions,
-
206 const bool massFracMode
-
207 ) : m_massFracMode(massFracMode) {
-
208 if (symbols.size() != fractions.size()) {
-
209 LOG_CRITICAL(m_logger, "The number of symbols and fractions must be equal (got {} symbols and {} fractions).", symbols.size(), fractions.size());
-
210 throw exceptions::InvalidCompositionError("The number of symbols and fractions must be equal. Got " + std::to_string(symbols.size()) + " symbols and " + std::to_string(fractions.size()) + " fractions.");
+
205
+
+ +
207 const std::vector<atomic::Species> &species
+
208 ) noexcept {
+
209 for (const auto& s : species) {
+
211 }
-
212
-
213 validateComposition(fractions);
-
214
-
215 for (const auto &symbol : symbols) {
- -
217 }
-
218
-
219 for (size_t i = 0; i < symbols.size(); ++i) {
-
220 if (m_massFracMode) {
-
221 setMassFraction(symbols[i], fractions[i]);
-
222 } else {
-
223 setNumberFraction(symbols[i], fractions[i]);
-
224 }
-
225 }
-
226 if (const bool didFinalize = finalize(); !didFinalize) {
-
227 std::string msg = "Failed to finalize composition on construction. ";
-
228 msg += "Construction of a composition object requires that the sum of the fractions vector be 1.\n";
-
229 LOG_CRITICAL(m_logger, "{}", msg);
- +
212 }
+
+
213
+
+
214 std::set<std::string> Composition::getRegisteredSymbols() const noexcept {
+
215 std::set<std::string> symbols;
+
216 for (const auto& species : m_registeredSpecies) {
+
217 symbols.insert(std::string(species.name()));
+
218 }
+
219 return symbols;
+
220 }
+
+
221
+
+
222 const std::set<atomic::Species> &Composition::getRegisteredSpecies() const noexcept {
+
223 return m_registeredSpecies;
+
224 }
+
+
225
+
226
+
+
227 double Composition::getMassFraction(const std::string& symbol) const {
+
228 const auto species = getSpecies(symbol);
+
229 if (!species) {
+
230 throw_unknown_symbol(getLogger(), symbol);
231 }
-
232 }
+
232 return getMassFraction(species.value());
+
233 }
-
233
-
- -
235 m_finalized = composition.m_finalized;
-
236 m_specificNumberDensity = composition.m_specificNumberDensity;
-
237 m_meanParticleMass = composition.m_meanParticleMass;
-
238 m_massFracMode = composition.m_massFracMode;
-
239 m_registeredSymbols = composition.m_registeredSymbols;
-
240 m_compositions = composition.m_compositions;
-
241 }
+
234
+
+ +
236 const atomic::Species &species
+
237 ) const {
+
238 if (!m_molarAbundances.contains(species)) {
+
239 throw_unregistered_symbol(getLogger(), std::string(species.name()));
+
240 }
+
241 std::map<atomic::Species, double> raw_mass;
+
242 double totalMass = 0;
+
243 for (const auto& [sp, y] : m_molarAbundances) {
+
244 const double contrib = y * sp.mass();
+
245 totalMass += contrib;
+
246 raw_mass.emplace(sp, contrib);
+
247 }
+
248 return raw_mass.at(species) / totalMass;
+
249 }
-
242
-
- -
244 if (this != &other) {
-
245 m_finalized = other.m_finalized;
- - - - - -
251 }
-
252 return *this;
-
253 }
+
250
+
+
251 std::unordered_map<atomic::Species, double> Composition::getMassFraction() const noexcept {
+
252 std::unordered_map<atomic::Species, double> mass_fractions;
+
253 for (const auto &species: m_molarAbundances | std::views::keys) {
+
254 mass_fractions.emplace(species, getMassFraction(species));
+
255 }
+
256 return mass_fractions;
+
257 }
-
254
-
- -
256 const std::string& symbol,
-
257 const bool massFracMode
-
258 ) {
-
259 if (!isValidSymbol(symbol)) {
-
260 LOG_ERROR(m_logger, "Invalid symbol: {}", symbol);
-
261 throw exceptions::InvalidSymbolError("Invalid symbol: " + symbol);
-
262 }
-
263
-
264 if (m_registeredSymbols.empty()) {
-
265 m_massFracMode = massFracMode;
-
266 } else {
-
267 if (m_massFracMode != massFracMode) {
-
268 LOG_ERROR(m_logger, "Composition is in {} fraction mode. Cannot register symbol ({}) in {} fraction mode.", m_massFracMode ? "mass" : "number", symbol, massFracMode ? "mass" : "number");
-
269 throw exceptions::CompositionModeError("Composition mode mismatch.");
-
270 }
-
271 }
-
272
-
273 if (m_registeredSymbols.contains(symbol)) {
-
274 LOG_WARNING(m_logger, "Symbol {} is already registered.", symbol);
-
275 return;
-
276 }
-
277
-
278 m_registeredSymbols.insert(symbol);
- -
280 m_finalized = false;
-
281 LOG_TRACE_L3(m_logger, "Registered symbol: {}", symbol);
-
282 }
+
258
+
259
+
+ +
261 const std::string& symbol
+
262 ) const {
+
263 const auto species = getSpecies(symbol);
+
264 if (!species) {
+
265 throw_unknown_symbol(getLogger(), symbol);
+
266 }
+
267 return getNumberFraction(species.value());
+
268 }
-
283
-
- -
285 const std::vector<std::string>& symbols,
-
286 const bool massFracMode
-
287 ) {
-
288 for (const auto& symbol : symbols) {
-
289 registerSymbol(symbol, massFracMode);
-
290 }
-
291 }
+
269
+
+ +
271 const atomic::Species &species
+
272 ) const {
+
273 if (!m_molarAbundances.contains(species)) {
+
274 throw_unregistered_symbol(getLogger(), std::string(species.name()));
+
275 }
+
276 double total_moles_per_gram = 0.0;
+
277 for (const auto &y: m_molarAbundances | std::views::values) {
+
278 total_moles_per_gram += y;
+
279 }
+
280 return m_molarAbundances.at(species) / total_moles_per_gram;
+
281 }
-
292
-
- -
294 const atomic::Species &species,
-
295 const bool massFracMode
-
296 ) {
-
297 registerSymbol(std::string(species.name()), massFracMode);
-
298 }
+
282
+
+
283 std::unordered_map<atomic::Species, double> Composition::getNumberFraction() const noexcept {
+
284 std::unordered_map<atomic::Species, double> number_fractions;
+
285 for (const auto &species: m_molarAbundances | std::views::keys) {
+
286 number_fractions.emplace(species, getNumberFraction(species));
+
287 }
+
288 return number_fractions;
+
289 }
+
290
+
+ +
292 const std::string &symbol
+
293 ) const {
+
294 const auto species = getSpecies(symbol);
+
295 if (!species) {
+
296 throw_unknown_symbol(getLogger(), symbol);
+
297 }
+
298 return getMolarAbundance(species.value());
299
-
- -
301 const std::vector<atomic::Species> &species,
-
302 const bool massFracMode
-
303 ) {
-
304 for (const auto& s : species) {
-
305 registerSpecies(s, massFracMode);
-
306 }
-
307 }
+
300 }
-
308
-
-
309 std::set<std::string> Composition::getRegisteredSymbols() const {
-
310 return m_registeredSymbols;
-
311 }
+
301
+
+ +
303 const atomic::Species &species
+
304 ) const {
+
305 if (!m_molarAbundances.contains(species)) {
+
306 throw_unregistered_symbol(getLogger(), std::string(species.name()));
+
307 }
+
308 return m_molarAbundances.at(species);
+
309 }
-
312
-
-
313 std::set<atomic::Species> Composition::getRegisteredSpecies() const {
-
314 std::set<atomic::Species> result;
-
315 for (const auto& entry : m_compositions | std::views::values) {
-
316 result.insert(entry.isotope());
-
317 }
-
318 return result;
+
310
+
+
311 double Composition::getMeanParticleMass() const noexcept {
+
312 std::vector<double> X = getMassFractionVector();
+
313 double sum = 0.0;
+
314 for (const auto& [species, x] : std::views::zip(m_registeredSpecies, X)) {
+
315 sum += x/species.mass();
+
316 }
+
317
+
318 return 1.0 / sum;
319 }
320
- -
322 const std::string& symbol
-
323 ) {
-
324 return atomic::species.contains(symbol);
-
325 }
-
-
326
-
-
327 void Composition::validateComposition(const std::vector<double>& fractions) const {
-
328 if (!isValidComposition(fractions)) {
-
329 LOG_ERROR(m_logger, "Invalid composition.");
-
330 throw exceptions::InvalidCompositionError("Invalid composition.");
-
331 }
-
332 }
+
321 double Composition::getElectronAbundance() const noexcept {
+
322 double Ye = 0.0;
+
323 for (const auto& [species, y] : m_molarAbundances) {
+
324 Ye += species.z() * y;
+
325 }
+
326 return Ye;
+
327 }
+
328
+
329
+
+ +
331 ) const {
+
332 using namespace fourdst::atomic;
333
-
-
334 bool Composition::isValidComposition(const std::vector<double>& fractions) const {
-
335 const double sum = std::accumulate(fractions.begin(), fractions.end(), 0.0);
-
336 if (sum < 0.999999 || sum > 1.000001) {
-
337 LOG_ERROR(m_logger, "The sum of fractions must be equal to 1 (expected 1, got {}).", sum);
-
338 return false;
-
339 }
-
340 return true;
-
341 }
+
334 if (m_cache.canonicalComp.has_value()) {
+
335 return m_cache.canonicalComp.value(); // Short circuit if we have cached the canonical composition
+
336 }
+
337 CanonicalComposition canonicalComposition;
+
338 const std::set<Species> canonicalH = {H_1, H_2, H_3, H_4, H_5, H_6, H_7};
+
339 const std::set<Species> canonicalHe = {He_3, He_4, He_5, He_6, He_7, He_8, He_9, He_10};
+
340
+
341 for (const auto& symbol : canonicalH) {
+
342 if (contains(symbol)) {
+
343 canonicalComposition.X += getMassFraction(symbol);
+
344 }
+
345 }
+
346 for (const auto& symbol : canonicalHe) {
+
347 if (contains(symbol)) {
+
348 canonicalComposition.Y += getMassFraction(symbol);
+
349 }
+
350 }
+
351
+
352 for (const auto& species : m_molarAbundances | std::views::keys) {
+
353 const bool isHIsotope = canonicalH.contains(species);
+
354 const bool isHeIsotope = canonicalHe.contains(species);
+
355
+
356 if (isHIsotope || isHeIsotope) {
+
357 continue; // Skip canonical H and He symbols
+
358 }
+
359
+
360 canonicalComposition.Z += getMassFraction(species);
+
361 }
+
362
+
363 // ReSharper disable once CppTooWideScopeInitStatement
+
364 const double Z = 1.0 - (canonicalComposition.X + canonicalComposition.Y);
+
365 if (std::abs(Z - canonicalComposition.Z) > 1e-16) {
+
366 LOG_ERROR(getLogger(), "Validation composition Z (X-Y = {}) is different than canonical composition Z ({}) (∑a_i where a_i != H/He).", Z, canonicalComposition.Z);
+
367 throw exceptions::InvalidCompositionError("Validation composition Z (X-Y = " + std::to_string(Z) + ") is different than canonical composition Z (" + std::to_string(canonicalComposition.Z) + ") (∑a_i where a_i != H/He).");
+
368 }
+
369 m_cache.canonicalComp = canonicalComposition;
+
370 return canonicalComposition;
+
371 }
-
342
-
-
343 double Composition::setMassFraction(const std::string& symbol, const double& mass_fraction) {
-
344 if (!m_registeredSymbols.contains(symbol)) {
-
345 LOG_ERROR(m_logger, "Symbol {} is not registered.", symbol);
-
346 throw exceptions::UnregisteredSymbolError("Symbol (" + symbol + ") is not registered.");
-
347 }
-
348 if (!m_massFracMode) {
-
349 LOG_ERROR(m_logger, "Composition is in number fraction mode.");
-
350 throw exceptions::CompositionModeError("Composition is in number fraction mode.");
-
351 }
-
352 if (mass_fraction < 0.0 || mass_fraction > 1.0) {
-
353 LOG_ERROR(m_logger, "Mass fraction must be between 0 and 1 for symbol {}. Currently it is {}.", symbol, mass_fraction);
-
354 throw exceptions::InvalidCompositionError("Mass fraction must be between 0 and 1.");
-
355 }
-
356 m_finalized = false;
-
357 const double old_mass_fraction = m_compositions.at(symbol).mass_fraction();
-
358 m_compositions.at(symbol).setMassFraction(mass_fraction);
-
359 return old_mass_fraction;
-
360 }
-
-
361
-
-
362 std::vector<double> Composition::setMassFraction(const std::vector<std::string>& symbols, const std::vector<double>& mass_fractions) {
-
363 if (symbols.size() != mass_fractions.size()) {
-
364 throw exceptions::InvalidCompositionError("The number of symbols and mass fractions must be equal.");
-
365 }
-
366 std::vector<double> old_mass_fractions;
-
367 old_mass_fractions.reserve(symbols.size());
-
368 for (size_t i = 0; i < symbols.size(); ++i) {
-
369 old_mass_fractions.push_back(setMassFraction(symbols[i], mass_fractions[i]));
-
370 }
-
371 return old_mass_fractions;
-
372 }
-
-
373
-
- -
375 const std::string& symbol,
-
376 const double& number_fraction
-
377 ) {
-
378 if (!m_registeredSymbols.contains(symbol)) {
-
379 LOG_ERROR(m_logger, "Symbol {} is not registered.", symbol);
-
380 throw exceptions::UnregisteredSymbolError("Symbol (" + symbol + ") is not registered.");
-
381 }
-
382 if (m_massFracMode) {
-
383 LOG_ERROR(m_logger, "Composition is in mass fraction mode.");
-
384 throw exceptions::CompositionModeError("Composition is in mass fraction mode.");
-
385 }
-
386 if (number_fraction < 0.0 || number_fraction > 1.0) {
-
387 LOG_ERROR(m_logger, "Number fraction must be between 0 and 1 for symbol {}. Currently it is {}.", symbol, number_fraction);
-
388 throw exceptions::InvalidCompositionError("Number fraction must be between 0 and 1.");
-
389 }
-
390 m_finalized = false;
-
391 const double old_number_fraction = m_compositions.at(symbol).number_fraction();
-
392 m_compositions.at(symbol).setNumberFraction(number_fraction);
-
393 return old_number_fraction;
-
394 }
-
-
395
-
- -
397 const std::vector<std::string>& symbols,
-
398 const std::vector<double>& number_fractions
-
399 ) {
-
400 if (symbols.size() != number_fractions.size()) {
-
401 throw exceptions::InvalidCompositionError("The number of symbols and number fractions must be equal.");
-
402 }
-
403 std::vector<double> old_number_fractions;
-
404 old_number_fractions.reserve(symbols.size());
-
405 for (size_t i = 0; i < symbols.size(); ++i) {
-
406 old_number_fractions.push_back(setNumberFraction(symbols[i], number_fractions[i]));
-
407 }
-
408 return old_number_fractions;
-
409 }
+
372
+
+
373 std::vector<double> Composition::getMassFractionVector() const noexcept {
+
374 if (m_cache.massFractions.has_value()) {
+
375 return m_cache.massFractions.value(); // Short circuit if we have cached the mass fractions
+
376 }
+
377
+
378 std::vector<double> massFractionVector;
+
379 std::vector<double> speciesMass;
+
380
+
381 massFractionVector.reserve(m_molarAbundances.size());
+
382 speciesMass.reserve(m_molarAbundances.size());
+
383
+
384 for (const auto &species: m_molarAbundances | std::views::keys) {
+
385 massFractionVector.push_back(getMassFraction(species));
+
386 speciesMass.push_back(species.mass());
+
387 }
+
388
+
389 std::vector<double> massFractions = sortVectorBy(massFractionVector, speciesMass);
+
390 m_cache.massFractions = massFractions; // Cache the result
+
391 return massFractions;
+
392
+
393 }
+
394
+
+
395 std::vector<double> Composition::getNumberFractionVector() const noexcept {
+
396 if (m_cache.numberFractions.has_value()) {
+
397 return m_cache.numberFractions.value(); // Short circuit if we have cached the number fractions
+
398 }
+
399
+
400 std::vector<double> numberFractionVector;
+
401 std::vector<double> speciesMass;
+
402
+
403 numberFractionVector.reserve(m_molarAbundances.size());
+
404 speciesMass.reserve(m_molarAbundances.size());
+
405
+
406 for (const auto &species: m_molarAbundances | std::views::keys) {
+
407 numberFractionVector.push_back(getNumberFraction(species));
+
408 speciesMass.push_back(species.mass());
+
409 }
410
-
- -
412 const atomic::Species &species,
-
413 const double &mass_fraction
-
414 ) {
-
415 return setMassFraction(std::string(species.name()), mass_fraction);
-
416 }
+
411 std::vector<double> numberFractions = sortVectorBy(numberFractionVector, speciesMass);
+
412 m_cache.numberFractions = numberFractions; // Cache the result
+
413 return numberFractions;
+
414 }
-
417
-
-
418 std::vector<double> Composition::setMassFraction(
-
419 const std::vector<atomic::Species> &species,
-
420 const std::vector<double> &mass_fractions
-
421 ) {
-
422 std::vector<std::string> symbols;
-
423 symbols.reserve(species.size());
-
424 for(const auto& s : species) symbols.emplace_back(s.name());
-
425 return setMassFraction(symbols, mass_fractions);
-
426 }
+
415
+
+
416 std::vector<double> Composition::getMolarAbundanceVector() const noexcept {
+
417 if (m_cache.molarAbundances.has_value()) {
+
418 return m_cache.molarAbundances.value(); // Short circuit if we have cached the molar abundances
+
419 }
+
420
+
421 std::vector<double> molarAbundanceVector;
+
422 std::vector<double> speciesMass;
+
423
+
424 molarAbundanceVector.reserve(m_molarAbundances.size());
+
425 speciesMass.reserve(m_molarAbundances.size());
+
426
+
427 for (const auto &[species, y]: m_molarAbundances) {
+
428 molarAbundanceVector.push_back(y);
+
429 speciesMass.push_back(species.mass());
+
430 }
+
431
+
432 std::vector<double> molarAbundances = sortVectorBy(molarAbundanceVector, speciesMass);
+
433 m_cache.molarAbundances = molarAbundances; // Cache the result
+
434 return molarAbundances;
+
435
+
436 }
-
427
-
- -
429 const atomic::Species &species,
-
430 const double &number_fraction
-
431 ) {
-
432 return setNumberFraction(std::string(species.name()), number_fraction);
-
433 }
+
437
+
+ +
439 const std::string &symbol
+
440 ) const {
+
441 const auto species = getSpecies(symbol);
+
442 if (!species) {
+
443 throw_unknown_symbol(getLogger(), symbol);
+
444 }
+
445
+
446 return getSpeciesIndex(species.value());
+
447 }
-
434
-
- -
436 const std::vector<atomic::Species> &species,
-
437 const std::vector<double> &number_fractions
-
438 ) {
-
439 std::vector<std::string> symbols;
-
440 symbols.reserve(species.size());
-
441 for(const auto& s : species) symbols.push_back(std::string(s.name()));
-
442 return setNumberFraction(symbols, number_fractions);
-
443 }
+
448
+
+ + +
451 ) const {
+
452 if (!m_registeredSpecies.contains(species)) {
+
453 LOG_ERROR(getLogger(), "Species {} is not in the composition.", species.name());
+
454 throw exceptions::UnregisteredSymbolError("Species " + std::string(species.name()) + " is not in the composition.");
+
455 }
+
456 if (m_cache.sortedSpecies.has_value()) {
+
457 return std::distance(
+
458 m_cache.sortedSpecies->begin(),
+
459 std::ranges::find(
+
460 m_cache.sortedSpecies.value().begin(),
+
461 m_cache.sortedSpecies.value().end(),
+
462 species
+
463 )
+
464 );
+
465 }
+
466
+
467 std::vector<atomic::Species> speciesVector;
+
468 std::vector<double> speciesMass;
+
469
+
470 speciesVector.reserve(m_molarAbundances.size());
+
471 speciesMass.reserve(m_molarAbundances.size());
+
472
+
473 for (const auto &s: m_registeredSpecies) {
+
474 speciesVector.emplace_back(s);
+
475 speciesMass.push_back(s.mass());
+
476 }
+
477
+
478 std::vector<atomic::Species> sortedSpecies = sortVectorBy(speciesVector, speciesMass);
+
479 m_cache.sortedSpecies = sortedSpecies;
+
480 return std::distance(sortedSpecies.begin(), std::ranges::find(sortedSpecies, species));
+
481 }
-
444
-
-
445 bool Composition::finalize(const bool norm) {
- -
447 m_meanParticleMass = 0.0;
- -
449 m_cache.clear();
-
450 return m_finalized;
-
451 }
-
-
452
-
-
453 bool Composition::finalizeMassFracMode(const bool norm) {
-
454 std::vector<double> mass_fractions;
-
455 mass_fractions.reserve(m_compositions.size());
-
456 for (const auto &entry: m_compositions | std::views::values) {
-
457 mass_fractions.push_back(entry.mass_fraction());
-
458 }
-
459
-
460 double sum = std::accumulate(mass_fractions.begin(), mass_fractions.end(), 0.0);
-
461 if (norm && sum > 0) {
-
462 for (auto& [symbol, entry] : m_compositions) {
-
463 setMassFraction(symbol, entry.mass_fraction() / sum);
-
464 }
-
465 // Recalculate fractions vector after normalization for validation
-
466 mass_fractions.clear();
-
467 for (const auto &entry: m_compositions | std::views::values) {
-
468 mass_fractions.push_back(entry.mass_fraction());
-
469 }
-
470 }
-
471
-
472 try {
-
473 validateComposition(mass_fractions);
-
474 } catch ([[maybe_unused]] const exceptions::InvalidCompositionError& e) {
-
475 LOG_ERROR(m_logger, "Composition is invalid after mass frac finalization (Total mass {}).", sum);
-
476 return false;
-
477 }
-
478
-
479 for (const auto &entry: m_compositions | std::views::values) {
-
480 m_specificNumberDensity += entry.rel_abundance(); // rel_abundance is now consistently moles/mass
-
481 }
482
-
483 if (m_specificNumberDensity > 0) {
- -
485 }
-
486 return true;
-
487 }
-
-
488
-
- -
490 std::vector<double> number_fractions;
-
491 number_fractions.reserve(m_compositions.size());
-
492 for (const auto &entry: m_compositions | std::views::values) {
-
493 number_fractions.push_back(entry.number_fraction());
-
494 }
+
+ +
484 const size_t index
+
485 ) const {
+
486 if (m_cache.sortedSpecies.has_value()) {
+
487 return m_cache.sortedSpecies.value().at(index);
+
488 }
+
489
+
490 std::vector<atomic::Species> speciesVector;
+
491 std::vector<double> speciesMass;
+
492
+
493 speciesVector.reserve(m_molarAbundances.size());
+
494 speciesMass.reserve(m_molarAbundances.size());
495
-
496 double sum = std::accumulate(number_fractions.begin(), number_fractions.end(), 0.0);
-
497 if (norm && sum > 0) {
-
498 for (auto& [symbol, entry] : m_compositions) {
-
499 setNumberFraction(symbol, entry.number_fraction() / sum);
-
500 }
-
501 // Recalculate fractions vector after normalization for validation
-
502 number_fractions.clear();
-
503 for (const auto &entry: m_compositions | std::views::values) {
-
504 number_fractions.push_back(entry.number_fraction());
-
505 }
-
506 }
-
507
-
508 try {
-
509 validateComposition(number_fractions);
-
510 } catch ([[maybe_unused]] const exceptions::InvalidCompositionError& e) {
-
511 LOG_ERROR(m_logger, "Composition is invalid after number frac finalization (Total number frac {}).", sum);
-
512 return false;
-
513 }
+
496 for (const auto &species: m_registeredSpecies) {
+
497 speciesVector.emplace_back(species);
+
498 speciesMass.push_back(species.mass());
+
499 }
+
500
+
501 std::vector<atomic::Species> sortedSymbols = sortVectorBy(speciesVector, speciesMass);
+
502 if (index >= sortedSymbols.size()) {
+
503 LOG_ERROR(getLogger(), "Index {} is out of range for composition of size {}.", index, sortedSymbols.size());
+
504 throw std::out_of_range("Index " + std::to_string(index) + " is out of range for composition of size " + std::to_string(sortedSymbols.size()) + ".");
+
505 }
+
506 return sortedSymbols.at(index);
+
507 }
+
+
508
+
+ + +
511 ) const noexcept {
+
512 return m_registeredSpecies.contains(species);
+
513 }
+
514
-
515 // Calculate mean particle mass <A> = sum(n_i * A_i)
-
516 for (const auto &entry: m_compositions | std::views::values) {
-
517 m_meanParticleMass += entry.number_fraction() * entry.isotope().mass();
-
518 }
-
519
-
520 for (auto &entry: m_compositions | std::views::values) {
-
521 const double X_i = (m_meanParticleMass > 0) ? (entry.number_fraction() * entry.isotope().mass() / m_meanParticleMass) : 0.0;
-
522 entry.m_massFracMode = true;
-
523 entry.setMassFraction(X_i);
-
524 entry.m_massFracMode = false;
-
525 }
-
526
-
527 if (m_meanParticleMass > 0) {
- -
529 }
-
530 return true;
-
531 }
+
+ +
516 const std::string &symbol
+
517 ) const {
+
518 const auto species = getSpecies(symbol);
+
519 if (!species) {
+
520 throw_unknown_symbol(getLogger(), symbol);
+
521 }
+
522 return contains(species.value());
+
523 }
+
+
524
+
+
525 size_t Composition::size() const noexcept {
+
526 return m_registeredSpecies.size();
+
527 }
+
+
528
+
+ +
530 const std::string &symbol,
+
531 const double &molar_abundance
+
532 ) {
+
533 const auto species = getSpecies(symbol);
+
534 if (!species) {
+
535 throw_unknown_symbol(getLogger(), symbol);
+
536 }
+
537
+
538 setMolarAbundance(species.value(), molar_abundance);
+
539 }
+
+
540
+
+ + +
543 const double &molar_abundance
+
544 ) {
+
545 if (!m_registeredSpecies.contains(species)) {
+
546 throw_unregistered_symbol(getLogger(), std::string(species.name()));
+
547 }
+
548 if (molar_abundance < 0.0) {
+
549 LOG_ERROR(getLogger(), "Molar abundance must be non-negative for symbol {}. Currently it is {}.", species.name(), molar_abundance);
+
550 throw exceptions::InvalidCompositionError("Molar abundance must be non-negative, got " + std::to_string(molar_abundance) + " for symbol " + std::string(species.name()) + ".");
+
551 }
+
552 m_molarAbundances.at(species) = molar_abundance;
+
553 }
-
532
-
-
533 Composition Composition::mix(const Composition& other, const double fraction) const {
-
534 if (!m_finalized || !other.m_finalized) {
-
535 LOG_ERROR(m_logger, "Compositions have not both been finalized. Hint: Consider running .finalize() on both compositions before mixing.");
-
536 throw exceptions::CompositionNotFinalizedError("Compositions have not been finalized (Hint: Consider running .finalize() on both compositions before mixing).");
-
537 }
-
538
-
539 if (fraction < 0.0 || fraction > 1.0) {
-
540 LOG_ERROR(m_logger, "Mixing fraction must be between 0 and 1. Currently it is {}.", fraction);
-
541 throw exceptions::InvalidCompositionError("Mixing fraction must be between 0 and 1. Currently it is " + std::to_string(fraction) + ".");
-
542 }
-
543
-
544 std::set<std::string> mixedSymbols = other.getRegisteredSymbols();
-
545 // Get the union of the two sets of symbols to ensure all species are included in the new composition.
-
546 mixedSymbols.insert(m_registeredSymbols.begin(), m_registeredSymbols.end());
-
547
-
548 Composition mixedComposition(mixedSymbols);
-
549 for (const auto& symbol : mixedSymbols) {
-
550 double otherMassFrac = 0.0;
-
551
-
552 const double thisMassFrac = hasSymbol(symbol) ? getMassFraction(symbol) : 0.0;
-
553 otherMassFrac = other.hasSymbol(symbol) ? other.getMassFraction(symbol) : 0.0;
554
-
555 // The mixing formula is a linear interpolation of mass fractions.
-
556 double massFraction = fraction * thisMassFrac + otherMassFrac * (1-fraction);
-
557 mixedComposition.setMassFraction(symbol, massFraction);
-
558 }
-
559 if (const bool didFinalize = mixedComposition.finalize(); !didFinalize) {
-
560 std::string msg = "Failed to finalize mixed composition. ";
-
561 msg += "This likely indicates an issue with the input compositions not summing to 1.\n";
-
562 LOG_CRITICAL(m_logger, "{}", msg);
- -
564 }
-
565 return mixedComposition;
-
566 }
+
+ +
556 const std::vector<std::string> &symbols,
+
557 const std::vector<double> &molar_abundances
+
558 ) {
+
559 for (const auto& [symbol, y] : std::views::zip(symbols, molar_abundances)) {
+
560 setMolarAbundance(symbol, y);
+
561 }
+
562 }
-
567
-
-
568 double Composition::getMassFraction(const std::string& symbol) const {
-
569 if (!m_finalized) {
-
570 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
571 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
572 }
-
573 if (!m_compositions.contains(symbol)) {
-
574 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
575 std::string currentSymbols;
-
576 size_t count = 0;
-
577 for (const auto& sym : m_compositions | std::views::keys) {
-
578 currentSymbols += sym;
-
579 if (count < m_compositions.size() - 2) {
-
580 currentSymbols += ", ";
-
581 } else if (count == m_compositions.size() - 2) {
-
582 currentSymbols += ", and ";
-
583 }
-
584 count++;
-
585 }
-
586 throw exceptions::UnregisteredSymbolError("Symbol(" + symbol + ") is not in the current composition. Current composition has symbols: " + currentSymbols + ".");
-
587 }
-
588 if (m_massFracMode) {
-
589 return m_compositions.at(symbol).mass_fraction();
-
590 }
-
591
-
592 return m_compositions.at(symbol).mass_fraction();
-
593 }
+
563
+
+ +
565 const std::vector<atomic::Species> &species,
+
566 const std::vector<double> &molar_abundances
+
567 ) {
+
568 for (const auto& [s, y] : std::views::zip(species, molar_abundances)) {
+
569 setMolarAbundance(s, y);
+
570 }
+
571 }
-
594
-
- -
596 const atomic::Species &species
-
597 ) const {
-
598 return getMassFraction(std::string(species.name()));
-
599 }
+
572
+
+ +
574 const std::set<std::string> &symbols,
+
575 const std::vector<double> &molar_abundances
+
576 ) {
+
577 for (const auto& [symbol, y] : std::views::zip(symbols, molar_abundances)) {
+
578 setMolarAbundance(symbol, y);
+
579 }
+
580 }
-
600
-
-
601 std::unordered_map<std::string, double> Composition::getMassFraction() const {
-
602 std::unordered_map<std::string, double> mass_fractions;
-
603 for (const auto &symbol: m_compositions | std::views::keys) {
-
604 mass_fractions[symbol] = getMassFraction(symbol);
+
581
+
+ +
583 const std::set<atomic::Species> &species,
+
584 const std::vector<double> &molar_abundances
+
585 ) {
+
586 for (const auto& [s, y] : std::views::zip(species, molar_abundances)) {
+
587 setMolarAbundance(s, y);
+
588 }
+
589 }
+
+
590
+
592
+
+
593 std::ostream& operator<<(
+
594 std::ostream& os,
+ +
596 ) {
+
597 os << "Composition(Mass Fractions => [";
+
598 size_t count = 0;
+
599 for (const auto &species : composition.m_registeredSpecies) {
+
600 os << species << ": " << composition.getMassFraction(species);
+
601 if (count < composition.size() - 1) {
+
602 os << ", ";
+
603 }
+
604 count++;
605 }
-
606 return mass_fractions;
-
607 }
+
606 os << "])";
+
607 return os;
+
608 }
-
608
609
-
- -
611 const std::string& symbol
-
612 ) const {
-
613 if (!m_finalized) {
-
614 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
615 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
616 }
-
617 if (!m_compositions.contains(symbol)) {
-
618 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
619 throw exceptions::CompositionNotFinalizedError("Symbol " + symbol + " is not in the composition.");
-
620 }
-
621 if (!m_massFracMode) {
-
622 return m_compositions.at(symbol).number_fraction();
-
623 }
-
624 return m_compositions.at(symbol).number_fraction(m_specificNumberDensity);
-
625 }
-
-
626
-
- -
628 const atomic::Species &species
-
629 ) const {
-
630 return getNumberFraction(std::string(species.name()));
-
631 }
-
-
632
-
-
633 std::unordered_map<std::string, double> Composition::getNumberFraction() const {
-
634 std::unordered_map<std::string, double> number_fractions;
-
635 for (const auto &symbol: m_compositions | std::views::keys) {
-
636 number_fractions[symbol] = getNumberFraction(symbol);
-
637 }
-
638 return number_fractions;
-
639 }
-
-
640
-
- -
642 const std::string &symbol
-
643 ) const {
-
644 if (!m_finalized) {
-
645 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
646 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
647 }
-
648 if (!m_compositions.contains(symbol)) {
-
649 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
650 throw exceptions::UnregisteredSymbolError("Symbol " + symbol + " is not in the composition.");
-
651 }
-
652 return getMassFraction(symbol) / m_compositions.at(symbol).isotope().mass();
-
653
-
654 }
-
-
655
-
- -
657 const atomic::Species &species
-
658 ) const {
-
659 return getMolarAbundance(std::string(species.name()));
-
660 }
-
-
661
-
-
662 std::pair<CompositionEntry, GlobalComposition> Composition::getComposition(
-
663 const std::string& symbol
-
664 ) const {
-
665 if (!m_finalized) {
-
666 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
667 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
668 }
-
669 if (!m_compositions.contains(symbol)) {
-
670 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
671 throw exceptions::UnregisteredSymbolError("Symbol " + symbol + " is not in the composition.");
-
672 }
- -
674 }
-
-
675
-
-
676 std::pair<CompositionEntry, GlobalComposition> Composition::getComposition(
-
677 const atomic::Species &species
-
678 ) const {
-
679 return getComposition(std::string(species.name()));
-
680 }
-
-
681
-
-
682 std::pair<std::unordered_map<std::string, CompositionEntry>, GlobalComposition> Composition::getComposition() const {
-
683 if (!m_finalized) {
-
684 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
685 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
686 }
- -
688 }
-
-
689
-
- -
691 if (!m_finalized) {
-
692 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
693 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
694 }
-
695 return m_meanParticleMass;
-
696 }
-
-
697
-
- -
699 if (!m_finalized) {
-
700 LOG_ERROR(m_logger, "Composition must be finalized before getting the mean atomic mass number. Hint: Consider running .finalize().");
-
701 throw exceptions::CompositionNotFinalizedError("Composition not finalized. Cannot retrieve mean atomic mass number. Hint: Consider running .finalize().");
-
702 }
-
703
-
704 double zSum = 0.0;
-
705
-
706 for (const auto &val: m_compositions | std::views::values) {
-
707 // Sum of (X_i * Z_i / A_i)
-
708 zSum += (val.mass_fraction() * val.m_isotope.z())/val.m_isotope.a();
-
709 }
-
710
-
711 // <Z> = <A> * sum(X_i * Z_i / A_i)
-
712 const double mean_A = m_meanParticleMass * zSum;
-
713 return mean_A;
-
714 }
-
-
715
-
- -
717 if (!m_finalized) {
-
718 LOG_ERROR(m_logger, "Composition must be finalized before getting the electron abundance. Hint: Consider running .finalize().");
-
719 throw exceptions::CompositionNotFinalizedError("Composition not finalized. Cannot retrieve electron abundance. Hint: Consider running .finalize().");
-
720 }
-
721
-
722 if (m_cache.Ye.has_value()) {
-
723 return m_cache.Ye.value();
-
724 }
-
725
-
726 double Ye = 0.0;
-
727 for (const auto &val: m_compositions | std::views::values) {
-
728 Ye += (val.mass_fraction() * val.m_isotope.z())/val.m_isotope.a();
-
729 }
-
730 m_cache.Ye = Ye;
-
731 return Ye;
-
732 }
-
-
733
-
- -
735 const std::vector<std::string>& symbols,
-
736 const std::string& method
-
737 ) const {
-
738 if (const std::array<std::string, 2> methods = {"norm", "none"}; std::ranges::find(methods, method) == methods.end()) {
-
739 const std::string errorMessage = "Invalid method: " + method + ". Valid methods are 'norm' and 'none'.";
-
740 LOG_ERROR(m_logger, "Invalid method: {}. Valid methods are norm and none.", method);
-
741 throw exceptions::InvalidMixingMode(errorMessage);
-
742 }
-
743
-
744 Composition subsetComposition;
-
745 for (const auto& symbol : symbols) {
-
746 if (!m_compositions.contains(symbol)) {
-
747 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
748 throw exceptions::UnregisteredSymbolError("Symbol " + symbol + " is not in the composition.");
-
749 }
-
750 subsetComposition.registerSymbol(symbol);
-
751 subsetComposition.setMassFraction(symbol, m_compositions.at(symbol).mass_fraction());
-
752 }
-
753 if (method == "norm") {
-
754 if (const bool isNorm = subsetComposition.finalize(true); !isNorm) {
-
755 LOG_ERROR(m_logger, "Subset composition is invalid. (Unable to finalize with normalization).");
-
756 throw exceptions::FailedToFinalizeCompositionError("Subset composition is invalid. (Unable to finalize with normalization).");
-
757 }
-
758 }
-
759 return subsetComposition;
-
760 }
-
-
761
-
- -
763 const bool massFracMode
-
764 ) {
-
765 if (!m_finalized) {
-
766 LOG_ERROR(m_logger, "Composition has not been finalized. Mode cannot be set unless composition is finalized. Hint: Consider running .finalize().");
-
767 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Mode cannot be set unless composition is finalized. Hint: Consider running .finalize().");
-
768 }
-
769
-
770 bool okay;
-
771 for (auto &entry: m_compositions | std::views::values) {
-
772 if (massFracMode) {
-
773 okay = entry.setMassFracMode(m_meanParticleMass);
-
774 } else {
-
775 okay = entry.setNumberFracMode(m_specificNumberDensity);
-
776 }
-
777 if (!okay) {
-
778 LOG_ERROR(m_logger, "Composition mode could not be set due to some unknown error.");
-
779 throw std::runtime_error("Composition mode could not be set due to an unknown error.");
-
780 }
-
781 }
-
782 m_massFracMode = massFracMode;
-
783 }
-
-
784
-
- -
786 const bool harsh
-
787 ) const {
-
788 if (!m_finalized) {
-
789 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
790 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
791 }
-
792 if (m_cache.canonicalComp.has_value()) {
-
793 return m_cache.canonicalComp.value(); // Short circuit if we have cached the canonical composition
-
794 }
-
795 CanonicalComposition canonicalComposition;
-
796 const std::array<std::string, 7> canonicalH = {
-
797 "H-1", "H-2", "H-3", "H-4", "H-5", "H-6", "H-7"
-
798 };
-
799 const std::array<std::string, 8> canonicalHe = {
-
800 "He-3", "He-4", "He-5", "He-6", "He-7", "He-8", "He-9", "He-10"
-
801 };
-
802 for (const auto& symbol : canonicalH) {
-
803 if (hasSymbol(symbol)) {
-
804 canonicalComposition.X += getMassFraction(symbol);
-
805 }
-
806 }
-
807 for (const auto& symbol : canonicalHe) {
-
808 if (hasSymbol(symbol)) {
-
809 canonicalComposition.Y += getMassFraction(symbol);
-
810 }
-
811 }
-
812
-
813 for (const auto& symbol : getRegisteredSymbols()) {
-
814 const bool isHSymbol = std::ranges::find(canonicalH, symbol) != std::end(canonicalH);
-
815 // ReSharper disable once CppTooWideScopeInitStatement
-
816 const bool isHeSymbol = std::ranges::find(canonicalHe, symbol) != std::end(canonicalHe);
-
817
-
818 if (isHSymbol || isHeSymbol) {
-
819 continue; // Skip canonical H and He symbols
-
820 }
-
821
-
822 canonicalComposition.Z += getMassFraction(symbol);
-
823 }
-
824
-
825 // ReSharper disable once CppTooWideScopeInitStatement
-
826 const double Z = 1.0 - (canonicalComposition.X + canonicalComposition.Y);
-
827 if (std::abs(Z - canonicalComposition.Z) > 1e-6) {
-
828 if (!harsh) {
-
829 LOG_WARNING(m_logger, "Validation composition Z (X-Y = {}) is different than canonical composition Z ({}) (∑a_i where a_i != H/He).", Z, canonicalComposition.Z);
-
830 }
-
831 else {
-
832 LOG_ERROR(m_logger, "Validation composition Z (X-Y = {}) is different than canonical composition Z ({}) (∑a_i where a_i != H/He).", Z, canonicalComposition.Z);
-
833 throw std::runtime_error("Validation composition Z (X-Y = " + std::to_string(Z) + ") is different than canonical composition Z (" + std::to_string(canonicalComposition.Z) + ") (∑a_i where a_i != H/He).");
-
834 }
-
835 }
-
836 m_cache.canonicalComp = canonicalComposition;
-
837 return canonicalComposition;
-
838 }
-
-
839
-
-
840 std::vector<double> Composition::getMassFractionVector() const {
-
841 if (!m_finalized) {
-
842 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
843 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
844 }
-
845 if (m_cache.massFractions.has_value()) {
-
846 return m_cache.massFractions.value(); // Short circuit if we have cached the mass fractions
-
847 }
-
848
-
849 std::vector<double> massFractionVector;
-
850 std::vector<double> speciesMass;
-
851
-
852 massFractionVector.reserve(m_compositions.size());
-
853 speciesMass.reserve(m_compositions.size());
-
854
-
855 for (const auto &entry: m_compositions | std::views::values) {
-
856 massFractionVector.push_back(entry.mass_fraction());
-
857 speciesMass.push_back(entry.isotope().mass());
-
858 }
-
859
-
860 std::vector<double> massFractions = sortVectorBy(massFractionVector, speciesMass);
-
861 m_cache.massFractions = massFractions; // Cache the result
-
862 return massFractions;
-
863
-
864 }
-
-
865
-
-
866 std::vector<double> Composition::getNumberFractionVector() const {
-
867 if (!m_finalized) {
-
868 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
869 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
870 }
-
871 if (m_cache.numberFractions.has_value()) {
-
872 return m_cache.numberFractions.value(); // Short circuit if we have cached the number fractions
-
873 }
-
874
-
875 std::vector<double> numberFractionVector;
-
876 std::vector<double> speciesMass;
-
877
-
878 numberFractionVector.reserve(m_compositions.size());
-
879 speciesMass.reserve(m_compositions.size());
-
880
-
881 for (const auto &entry: m_compositions | std::views::values) {
-
882 numberFractionVector.push_back(entry.number_fraction());
-
883 speciesMass.push_back(entry.isotope().mass());
-
884 }
-
885
-
886 std::vector<double> numberFractions = sortVectorBy(numberFractionVector, speciesMass);
-
887 m_cache.numberFractions = numberFractions; // Cache the result
-
888 return numberFractions;
-
889 }
-
-
890
-
-
891 std::vector<double> Composition::getMolarAbundanceVector() const {
-
892 if (!m_finalized) {
-
893 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
894 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
895 }
-
896 if (m_cache.molarAbundances.has_value()) {
-
897 return m_cache.molarAbundances.value(); // Short circuit if we have cached the molar abundances
-
898 }
-
899
-
900 std::vector<double> molarAbundanceVector;
-
901 std::vector<double> speciesMass;
-
902
-
903 molarAbundanceVector.reserve(m_compositions.size());
-
904 speciesMass.reserve(m_compositions.size());
-
905
-
906 for (const auto &entry: m_compositions | std::views::values) {
-
907 molarAbundanceVector.push_back(getMolarAbundance(entry.isotope()));
-
908 speciesMass.push_back(entry.isotope().mass());
-
909 }
-
910
-
911 std::vector<double> molarAbundances = sortVectorBy(molarAbundanceVector, speciesMass);
-
912 m_cache.molarAbundances = molarAbundances; // Cache the result
-
913 return molarAbundances;
-
914
-
915 }
-
-
916
-
- -
918 const std::string &symbol
-
919 ) const {
-
920 if (!m_finalized) {
-
921 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
922 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
923 }
-
924 if (!m_compositions.contains(symbol)) {
-
925 LOG_ERROR(m_logger, "Symbol {} is not in the composition.", symbol);
-
926 throw exceptions::UnregisteredSymbolError("Symbol " + symbol + " is not in the composition.");
-
927 }
-
928 if (m_cache.sortedSymbols.has_value()) {
-
929 return std::distance(
-
930 m_cache.sortedSymbols->begin(),
-
931 std::ranges::find(
-
932 m_cache.sortedSymbols.value().begin(),
-
933 m_cache.sortedSymbols.value().end(),
-
934 symbol
-
935 )
-
936 );
-
937 }
-
938
-
939 std::vector<std::string> symbols;
-
940 std::vector<double> speciesMass;
-
941
-
942 symbols.reserve(m_compositions.size());
-
943 speciesMass.reserve(m_compositions.size());
-
944
-
945 for (const auto &entry: m_compositions | std::views::values) {
-
946 symbols.emplace_back(entry.isotope().name());
-
947 speciesMass.push_back(entry.isotope().mass());
-
948 }
-
949
-
950 std::vector<std::string> sortedSymbols = sortVectorBy(symbols, speciesMass);
-
951 m_cache.sortedSymbols = sortedSymbols;
-
952 return std::distance(sortedSymbols.begin(), std::ranges::find(sortedSymbols, symbol));
-
953 }
-
-
954
-
- -
956 const atomic::Species &species
-
957 ) const {
-
958 if (!m_finalized) {
-
959 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
960 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
961 }
-
962 if (!m_compositions.contains(static_cast<std::string>(species.name()))) {
-
963 LOG_ERROR(m_logger, "Species {} is not in the composition.", species.name());
-
964 throw exceptions::UnregisteredSymbolError("Species " + std::string(species.name()) + " is not in the composition.");
-
965 }
-
966 if (m_cache.sortedSpecies.has_value()) {
-
967 return std::distance(
-
968 m_cache.sortedSpecies->begin(),
-
969 std::ranges::find(
-
970 m_cache.sortedSpecies.value().begin(),
-
971 m_cache.sortedSpecies.value().end(),
-
972 species
-
973 )
-
974 );
-
975 }
-
976
-
977 std::vector<atomic::Species> speciesVector;
-
978 std::vector<double> speciesMass;
-
979
-
980 speciesVector.reserve(m_compositions.size());
-
981 speciesMass.reserve(m_compositions.size());
-
982
-
983 for (const auto &entry: m_compositions | std::views::values) {
-
984 speciesVector.emplace_back(entry.isotope());
-
985 speciesMass.push_back(entry.isotope().mass());
-
986 }
-
987
-
988 std::vector<atomic::Species> sortedSpecies = sortVectorBy(speciesVector, speciesMass);
-
989 m_cache.sortedSpecies = sortedSpecies;
-
990 return std::distance(sortedSpecies.begin(), std::ranges::find(sortedSpecies, species));
-
991 }
-
-
992
-
- -
994 size_t index
-
995 ) const {
-
996 if (!m_finalized) {
-
997 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
998 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
999 }
-
1000 if (index >= m_compositions.size()) {
-
1001 LOG_ERROR(m_logger, "Index {} is out of bounds for composition of size {}.", index, m_compositions.size());
-
1002 throw std::out_of_range("Index " + std::to_string(index) + " is out of bounds for composition of size " + std::to_string(m_compositions.size()) + ".");
-
1003 }
-
1004 if (m_cache.sortedSpecies.has_value()) {
-
1005 return m_cache.sortedSpecies.value().at(index);
-
1006 }
-
1007
-
1008 std::vector<atomic::Species> speciesVector;
-
1009 std::vector<double> speciesMass;
-
1010
-
1011 speciesVector.reserve(m_compositions.size());
-
1012 speciesMass.reserve(m_compositions.size());
-
1013
-
1014 for (const auto &entry: m_compositions | std::views::values) {
-
1015 speciesVector.emplace_back(entry.isotope());
-
1016 speciesMass.push_back(entry.isotope().mass());
-
1017 }
-
1018
-
1019 std::vector<atomic::Species> sortedSymbols = sortVectorBy(speciesVector, speciesMass);
-
1020 return sortedSymbols.at(index);
-
1021 }
-
-
1022
-
- -
1024 const std::string& symbol
-
1025 ) const {
-
1026 return m_compositions.contains(symbol);
-
1027 }
-
-
1028
-
- -
1030 for (const auto &entry: m_compositions | std::views::values) {
-
1031 if (entry.isotope() == species) {
-
1032 return true;
-
1033 }
-
1034 }
-
1035 return false;
-
1036 }
-
-
1037
-
- -
1039 const atomic::Species &isotope
-
1040 ) const {
-
1041 // Check if the isotope's symbol is in the composition
-
1042 if (!m_finalized) {
-
1043 LOG_ERROR(m_logger, "Composition has not been finalized. Hint: Consider running .finalize().");
-
1044 throw exceptions::CompositionNotFinalizedError("Composition has not been finalized. Hint: Consider running .finalize().");
-
1045 }
-
1046 if (const auto symbol = static_cast<std::string>(isotope.name()); m_compositions.contains(symbol)) {
-
1047 return true;
-
1048 }
-
1049 return false;
-
1050 }
-
-
1051
-
1053
-
- -
1055 const Composition& other
-
1056 ) const {
-
1057 return mix(other, 0.5);
-
1058 }
-
-
1059
-
-
1060 std::ostream& operator<<(
-
1061 std::ostream& os,
-
1062 const GlobalComposition& comp
-
1063 ) {
-
1064 os << "Global Composition: \n";
-
1065 os << "\tSpecific Number Density: " << comp.specificNumberDensity << "\n";
-
1066 os << "\tMean Particle Mass: " << comp.meanParticleMass << "\n";
-
1067 return os;
-
1068 }
-
-
1069
-
-
1070 std::ostream& operator<<(
-
1071 std::ostream& os,
-
1072 const CompositionEntry& entry
-
1073 ) {
-
1074 os << "<" << entry.m_symbol << " : m_frac = " << entry.mass_fraction() << ">";
-
1075 return os;
-
1076 }
-
-
1077
-
-
1078 std::ostream& operator<<(
-
1079 std::ostream& os,
- -
1081 ) {
-
1082 os << "Composition(finalized: " << (composition.m_finalized ? "true" : "false") << ", " ;
-
1083 size_t count = 0;
-
1084 for (const auto &entry: composition.m_compositions | std::views::values) {
-
1085 os << entry;
-
1086 if (count < composition.m_compositions.size() - 1) {
-
1087 os << ", ";
-
1088 }
-
1089 count++;
-
1090 }
-
1091 os << ")";
-
1092 return os;
-
1093 }
-
-
1094
-
1095} // namespace fourdst::composition
+
610} // namespace fourdst::composition
-
CompositionCache m_cache
Cache for computed properties to avoid redundant calculations.
-
void setCompositionMode(bool massFracMode)
Sets the composition mode (mass fraction vs. number fraction).
-
size_t getSpeciesIndex(const std::string &symbol) const override
get the index in the sorted vector representation for a given symbol
-
std::pair< std::unordered_map< std::string, CompositionEntry >, GlobalComposition > getComposition() const
Gets all composition entries and the global composition data.
-
Composition subset(const std::vector< std::string > &symbols, const std::string &method="norm") const
Creates a new Composition object containing a subset of species from this one.
-
void registerSymbol(const std::string &symbol, bool massFracMode=true)
Registers a new symbol for inclusion in the composition.
+
CompositionCache m_cache
Cache for computed properties to avoid redundant calculations.
+
size_t getSpeciesIndex(const std::string &symbol) const override
get the index in the sorted vector representation for a given symbol
+
bool contains(const atomic::Species &species) const noexcept override
Checks if a given species is present in the composition.
+
std::unordered_map< atomic::Species, double > getNumberFraction() const noexcept override
Gets the number fractions of all species in the composition.
Composition()=default
Default constructor.
-
Composition operator+(const Composition &other) const
Overloads the + operator to mix two compositions with a 50/50 fraction.
-
std::set< std::string > m_registeredSymbols
The registered symbols.
-
Composition mix(const Composition &other, double fraction) const
Mixes this composition with another to produce a new composition.
-
std::set< std::string > getRegisteredSymbols() const override
Gets the registered symbols.
-
bool finalizeNumberFracMode(bool norm)
Finalizes the composition in number fraction mode.
-
double setMassFraction(const std::string &symbol, const double &mass_fraction)
Sets the mass fraction for a given symbol.
-
std::vector< double > getNumberFractionVector() const override
Get a uniform vector representation of the number fractions stored in the composition object sorted s...
-
double m_meanParticleMass
The mean particle mass of the composition (\sum_{i} \frac{n_i}{m_i}. where n_i is the number fraction...
-
void registerSpecies(const fourdst::atomic::Species &species, bool massFracMode=true)
Registers a new species by extracting its symbol.
-
Composition & operator=(Composition const &other)
Assignment operator.
-
bool hasSpecies(const fourdst::atomic::Species &species) const override
Checks if a species is registered in the composition.
-
double getElectronAbundance() const override
Compute the electron abundance of the composition.
-
bool m_massFracMode
True if mass fraction mode, false if number fraction mode.
-
bool finalize(bool norm=false)
Finalizes the composition, making it ready for querying.
-
double getMeanParticleMass() const override
Compute the mean particle mass of the composition.
-
double setNumberFraction(const std::string &symbol, const double &number_fraction)
Sets the number fraction for a given symbol.
-
bool contains(const atomic::Species &isotope) const override
Checks if a given isotope is present in the composition.
-
std::vector< double > getMassFractionVector() const override
Get a uniform vector representation of the mass fraction stored in the composition object sorted such...
-
void validateComposition(const std::vector< double > &fractions) const
Validates the given fractions, throwing an exception on failure.
-
bool finalizeMassFracMode(bool norm)
Finalizes the composition in mass fraction mode.
-
static bool isValidSymbol(const std::string &symbol)
Checks if the given symbol is valid by checking against the global species database.
-
bool m_finalized
True if the composition is finalized.
-
std::unordered_map< std::string, CompositionEntry > m_compositions
The compositions.
-
std::unordered_map< std::string, double > getMassFraction() const override
Gets the mass fractions of all species in the composition.
- -
std::vector< double > getMolarAbundanceVector() const override
Get a uniform vector representation of the molar abundances stored in the composition object sorted s...
-
bool hasSymbol(const std::string &symbol) const override
Checks if a symbol is registered in the composition.
-
CanonicalComposition getCanonicalComposition(bool harsh=false) const
Gets the current canonical composition (X, Y, Z).
-
double getMolarAbundance(const std::string &symbol) const override
Gets the molar abundance (X_i / A_i) for a given symbol.
-
double m_specificNumberDensity
The specific number density of the composition (\sum_{i} X_i m_i. Where X_i is the number fraction of...
-
bool isValidComposition(const std::vector< double > &fractions) const
Checks if the given fractions are valid (sum to ~1.0).
-
std::unordered_map< std::string, double > getNumberFraction() const override
Gets the number fractions of all species in the composition.
-
atomic::Species getSpeciesAtIndex(size_t index) const override
Get the species at a given index in the sorted vector representation.
-
std::set< fourdst::atomic::Species > getRegisteredSpecies() const override
Get a set of all species that are registered in the composition.
-
double getMeanAtomicNumber() const override
Compute the mean atomic number of the composition.
-
Exception thrown due to a conflict in composition modes at the entry level.
-
Exception thrown when an operation is attempted on a composition that has not been finalized.
-
Exception thrown when attempting to initialize a composition entry that has already been initialized.
-
Exception thrown when the finalization process of a composition fails.
-
Exception thrown when a composition is in an invalid or inconsistent state.
-
Exception thrown for an invalid or unsupported mixing mode.
-
Exception thrown for an invalid chemical species symbol in a composition entry.
-
Exception thrown when a symbol used in a composition is invalid.
-
Exception thrown when a symbol is used that has not been registered.
+
void setMolarAbundance(const std::string &symbol, const double &molar_abundance)
Sets the molar abundance for a given symbol.
+
const std::set< atomic::Species > & getRegisteredSpecies() const noexcept override
Get a set of all species that are registered in the composition.
+
void registerSpecies(const atomic::Species &species) noexcept
Registers a new species by extracting its symbol.
+
void registerSymbol(const std::string &symbol)
Registers a new symbol for inclusion in the composition.
+
std::set< std::string > getRegisteredSymbols() const noexcept override
Gets the registered symbols.
+
std::set< atomic::Species > m_registeredSpecies
Set of registered species in the composition.
+
static quill::Logger * getLogger()
Gets the logger instance for the Composition class. This is static to ensure that all composition obj...
+
Composition & operator=(Composition const &other)
Assignment operator.
+
double getElectronAbundance() const noexcept override
Compute the electron abundance of the composition.
+
size_t size() const noexcept override
Gets the number of registered species in the composition.
+
std::unordered_map< atomic::Species, double > getMassFraction() const noexcept override
Gets the mass fractions of all species in the composition.
+
std::map< atomic::Species, double > m_molarAbundances
Map of species to their molar abundances.
+
CanonicalComposition getCanonicalComposition() const
Compute the canonical composition (X, Y, Z) of the composition.
+
std::vector< double > getMolarAbundanceVector() const noexcept override
Get a uniform vector representation of the molar abundances stored in the composition object sorted s...
+
double getMolarAbundance(const std::string &symbol) const override
Gets the molar abundances of all species in the composition.
+
std::vector< double > getNumberFractionVector() const noexcept override
Get a uniform vector representation of the number fractions stored in the composition object sorted s...
+
atomic::Species getSpeciesAtIndex(size_t index) const override
Get the species at a given index in the sorted vector representation.
+
std::vector< double > getMassFractionVector() const noexcept override
Get a uniform vector representation of the mass fraction stored in the composition object sorted such...
+
double getMeanParticleMass() const noexcept override
Compute the mean particle mass of the composition.
+
Exception thrown when a composition is in an invalid or inconsistent state.
+
Exception thrown when an unknown symbol is encountered.
+
Exception thrown when a symbol is used that has not been registered.
-
Contains classes and functions related to atomic data, such as properties of atomic species.
+
Contains canonical information about atomic species and elements used by 4D-STAR.
+
static const Species H_7("H-7", "H", 5, 6, 1, 7, 940.0, "B-", 23062.0, 652.0, "/2+#", "n ?", 7.052749, 1078.0)
+
static const Species H_2("H-2", "H", 0, 1, 1, 2, 1112.2831, "B-", std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::infinity(), "+*", "S=0.0145 78", 2.014101777844, 1.5e-05)
+
static const Species H_6("H-6", "H", 4, 5, 1, 6, 961.6395, "B-", 24283.6294, 294.0, "-#", "?;3n ?", 6.044955437, 272.816)
+
static const Species He_10("He-10", "He", 6, 8, 2, 10, 2995.134, "B-", 16144.5191, 260.0, "+", "n=100", 10.052815306, 99.676)
+
static const Species He_9("He-9", "He", 5, 7, 2, 9, 3349.038, "B-", 15980.9213, 2.5, "/2(+)", "=100", 9.043946414, 50.259)
static const std::unordered_map< std::string, const Species & > species
Map of species names to their corresponding Species objects.
Definition species.h:3579
- -
std::ostream & operator<<(std::ostream &os, const GlobalComposition &comp)
- +
static const Species He_8("He-8", "He", 4, 6, 2, 8, 3924.521, "B-", 10663.8784, 119.5, "+", "-=100;B-n=16 1;B-t=0.9 1", 8.033934388, 0.095)
+
static const Species He_3("He-3", "He", -1, 1, 2, 3, 2572.68044, "B-", -13736.0, std::numeric_limits< double >::infinity(), "/2+*", "S=0.0002 2", 3.01602932197, 6e-05)
+
static const Species H_1("H-1", "H", -1, 0, 1, 1, 0.0, "B-", std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::infinity(), "/2+*", "S=99.9855 78", 1.007825031898, 1.4e-05)
+
static const Species H_5("H-5", "H", 3, 4, 1, 5, 1336.3592, "B-", 21661.2131, 86.0, "1/2+)", "n=100", 5.035311492, 96.02)
+
static const Species He_7("He-7", "He", 3, 5, 2, 7, 4123.0578, "B-", 11166.0229, 2.51, "3/2)-", "=100", 7.027990652, 8.115)
+
static const Species He_4("He-4", "He", 0, 2, 2, 4, 7073.9156, "B-", -22898.274, std::numeric_limits< double >::infinity(), "+", "S=99.9998 2", 4.00260325413, 0.00016)
+
static const Species He_5("He-5", "He", 1, 3, 2, 5, 5512.1325, "B-", -447.6529, 602.0, "/2-", "=100", 5.012057224, 21.47)
+
static const Species H_3("H-3", "H", 1, 2, 1, 3, 2827.2654, "B-", 18.59202, 388789632.0, "/2+*", "-=100", 3.01604928132, 8e-05)
+
static const Species He_6("He-6", "He", 2, 4, 2, 6, 4878.5199, "B-", 3505.2147, 806.92, "+", "-=100;B-d=0.000278 18", 6.018885889, 0.057)
+
static const Species H_4("H-4", "H", 2, 3, 1, 4, 1720.4491, "B-", 22196.2131, 139.0, "-", "=100", 4.026431867, 107.354)
+
Utilities and types for representing and manipulating chemical compositions.
+
std::ostream & operator<<(std::ostream &os, const Composition &composition)
OVERLOADS.
Represents an atomic species (isotope) with its fundamental physical properties.
-
std::string_view name() const
Gets the name of the species.
+
std::string_view name() const
Gets the name of the species.
Represents the canonical (X, Y, Z) composition of stellar material.
Definition composition.h:44
double Y
Mass fraction of Helium.
Definition composition.h:46
double X
Mass fraction of Hydrogen.
Definition composition.h:45
double Z
Mass fraction of Metals.
Definition composition.h:47
-
Represents a single entry (an isotope) within a composition.
Definition composition.h:84
-
bool setNumberFracMode(double totalMolesPerMass)
Switches the mode to number fraction mode.
-
bool getMassFracMode() const
Gets the mode of the composition entry.
-
CompositionEntry()
Default constructor. Initializes a default entry (H-1), but in an uninitialized state.
-
bool m_massFracMode
The mode of the composition entry. True if mass fraction, false if number fraction.
Definition composition.h:87
-
double number_fraction() const
Gets the number fraction of the species.
-
bool m_initialized
True if the composition entry has been initialized with a valid species.
Definition composition.h:96
-
double m_cachedNumberFraction
Cached number fraction for conversions when in mass fraction mode.
Definition composition.h:93
-
bool setMassFracMode(double meanMolarMass)
Switches the mode to mass fraction mode.
-
void setMassFraction(double mass_fraction)
Sets the mass fraction of the species.
-
std::string symbol() const
Gets the chemical symbol of the species.
-
void setSpecies(const std::string &symbol)
Sets the species for the composition entry. This can only be done once.
-
double mass_fraction() const
Gets the mass fraction of the species.
-
atomic::Species m_isotope
The atomic::Species object containing detailed isotope data.
Definition composition.h:86
-
void setNumberFraction(double number_fraction)
Sets the number fraction of the species.
-
double rel_abundance() const
Gets the relative abundance of the species.
-
std::string m_symbol
The chemical symbol of the species (e.g., "H-1", "Fe-56").
Definition composition.h:85
-
double m_molesPerMass
Definition composition.h:92
-
atomic::Species isotope() const
Gets the isotope data for the species.
-
Represents global properties of a finalized composition.
Definition composition.h:70
-
double specificNumberDensity
The specific number density (moles per unit mass, sum of X_i/M_i), where X_i is mass fraction and M_i...
Definition composition.h:71
-
double meanParticleMass
The mean mass per particle (inverse of specific number density). Units: g/mol.
Definition composition.h:72
diff --git a/docs/html/composition_8h.html b/docs/html/composition_8h.html index b1e8132..3ddbe92 100644 --- a/docs/html/composition_8h.html +++ b/docs/html/composition_8h.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -108,11 +108,21 @@ $(function(){initNavTree('composition_8h.html',''); initResizable(true); });
#include <string>
#include <unordered_map>
#include <set>
-#include <utility>
+#include <optional>
#include "fourdst/config/config.h"
#include "fourdst/logging/logging.h"
#include "fourdst/composition/composition_abstract.h"
-#include "fourdst/composition/atomicSpecies.h"
+#include "fourdst/atomic/atomicSpecies.h"
+
+Include dependency graph for composition.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+

Go to the source code of this file.

@@ -121,16 +131,11 @@ Classes - - - - - - +
struct  fourdst::composition::CanonicalComposition
 Represents the canonical (X, Y, Z) composition of stellar material. More...
 
struct  fourdst::composition::GlobalComposition
 Represents global properties of a finalized composition. More...
 
struct  fourdst::composition::CompositionEntry
 Represents a single entry (an isotope) within a composition. More...
 
class  fourdst::composition::Composition
 Manages a collection of chemical species and their abundances. More...
 
struct  fourdst::composition::Composition::CompositionCache
 Caches computed properties of the composition to avoid redundant calculations. More...
 
+

@@ -138,6 +143,7 @@ Namespaces

namespace  fourdst
 
namespace  fourdst::composition
 Utilities and types for representing and manipulating chemical compositions.
 
diff --git a/docs/html/composition_8h.js b/docs/html/composition_8h.js index 90fc9e4..3acd432 100644 --- a/docs/html/composition_8h.js +++ b/docs/html/composition_8h.js @@ -1,8 +1,6 @@ var composition_8h = [ [ "fourdst::composition::CanonicalComposition", "structfourdst_1_1composition_1_1_canonical_composition.html", "structfourdst_1_1composition_1_1_canonical_composition" ], - [ "fourdst::composition::GlobalComposition", "structfourdst_1_1composition_1_1_global_composition.html", "structfourdst_1_1composition_1_1_global_composition" ], - [ "fourdst::composition::CompositionEntry", "structfourdst_1_1composition_1_1_composition_entry.html", "structfourdst_1_1composition_1_1_composition_entry" ], [ "fourdst::composition::Composition", "classfourdst_1_1composition_1_1_composition.html", "classfourdst_1_1composition_1_1_composition" ], [ "fourdst::composition::Composition::CompositionCache", "structfourdst_1_1composition_1_1_composition_1_1_composition_cache.html", "structfourdst_1_1composition_1_1_composition_1_1_composition_cache" ] ]; \ No newline at end of file diff --git a/docs/html/composition_8h_source.html b/docs/html/composition_8h_source.html index d0d21fd..8c443a1 100644 --- a/docs/html/composition_8h_source.html +++ b/docs/html/composition_8h_source.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -128,15 +128,14 @@ $(function(){initNavTree('composition_8h_source.html',''); initResizable(true);
24#include <unordered_map>
25#include <set>
26
-
27#include <utility>
+
27#include <optional>
28
29#include "fourdst/config/config.h"
30#include "fourdst/logging/logging.h"
- +
33
-
- +
34namespace fourdst::composition {
45 double X = 0.0;
@@ -155,358 +154,240 @@ $(function(){initNavTree('composition_8h_source.html',''); initResizable(true);
62 };
63
-
- - - -
73
-
74 // Overload the output stream operator for GlobalComposition
-
75 friend std::ostream& operator<<(std::ostream& os, const GlobalComposition& comp);
-
76 };
+
96 // ReSharper disable once CppClassCanBeFinal
+
+ +
98 private:
+
+ +
107 std::optional<CanonicalComposition> canonicalComp;
+
108 std::optional<std::vector<double>> massFractions;
+
109 std::optional<std::vector<double>> numberFractions;
+
110 std::optional<std::vector<double>> molarAbundances;
+
111 std::optional<std::vector<atomic::Species>> sortedSpecies;
+
112 std::optional<std::vector<std::string>> sortedSymbols;
+
113 std::optional<double> Ye;
+
114
+
+
118 void clear() {
+
119 canonicalComp = std::nullopt;
+
120 massFractions = std::nullopt;
+
121 numberFractions = std::nullopt;
+
122 molarAbundances = std::nullopt;
+
123 sortedSymbols = std::nullopt;
+
124 sortedSpecies = std::nullopt;
+
125 Ye = std::nullopt;
+
126 }
-
77
-
- -
85 std::string m_symbol;
- -
87 bool m_massFracMode = true;
-
88
-
89 double m_massFraction = 0.0;
-
90 double m_numberFraction = 0.0;
-
91 double m_relAbundance = 0.0;
-
92 double m_molesPerMass = 0.0;
- -
94
-
95
-
96 bool m_initialized = false;
-
97
- -
102
-
114 explicit CompositionEntry(const std::string& symbol, bool massFracMode=true);
-
115
- -
121
-
128 void setSpecies(const std::string& symbol);
-
129
-
134 [[nodiscard]] std::string symbol() const;
-
135
-
142 [[nodiscard]] double mass_fraction() const;
-
143
-
150 [[nodiscard]] double number_fraction() const;
-
151
-
157 [[nodiscard]] double number_fraction(double totalMolesPerMass) const;
-
158
-
163 [[nodiscard]] double rel_abundance() const;
-
164
-
169 [[nodiscard]] atomic::Species isotope() const;
-
170
-
175 [[nodiscard]] bool getMassFracMode() const;
-
176
-
183 void setMassFraction(double mass_fraction);
-
184
- -
192
-
198 bool setMassFracMode(double meanMolarMass);
-
199
-
205 bool setNumberFracMode(double totalMolesPerMass);
-
206
-
213 friend std::ostream& operator<<(std::ostream& os, const CompositionEntry& entry);
-
214 };
+
127
+
+
132 [[nodiscard]] bool is_clear() const {
+
133 return !canonicalComp.has_value() && !massFractions.has_value() &&
+
134 !numberFractions.has_value() && !molarAbundances.has_value() && !sortedSymbols.has_value() &&
+
135 !Ye.has_value() && !sortedSpecies.has_value();
+
136 }
-
215
-
- -
256 private:
-
- -
258 std::optional<GlobalComposition> globalComp;
-
259 std::optional<CanonicalComposition> canonicalComp;
-
260 std::optional<std::vector<double>> massFractions;
-
261 std::optional<std::vector<double>> numberFractions;
-
262 std::optional<std::vector<double>> molarAbundances;
-
263 std::optional<std::vector<atomic::Species>> sortedSpecies;
-
264 std::optional<std::vector<std::string>> sortedSymbols;
-
265 std::optional<double> Ye;
-
266
-
-
267 void clear() {
-
268 globalComp = std::nullopt;
-
269 canonicalComp = std::nullopt;
-
270 massFractions = std::nullopt;
-
271 numberFractions = std::nullopt;
-
272 molarAbundances = std::nullopt;
-
273 sortedSymbols = std::nullopt;
-
274 sortedSpecies = std::nullopt;
-
275 Ye = std::nullopt;
-
276 }
+
137 };
-
277
-
-
278 [[nodiscard]] bool is_clear() const {
-
279 return !globalComp.has_value() && !canonicalComp.has_value() && !massFractions.has_value() &&
-
280 !numberFractions.has_value() && !molarAbundances.has_value() && !sortedSymbols.has_value() &&
-
281 !Ye.has_value() && !sortedSpecies.has_value();
-
282 }
+
138 private:
+
+
144 static quill::Logger* getLogger() {
+
145 static quill::Logger* logger = logging::LogManager::getInstance().getLogger("log");
+
146 return logger;
+
147 }
-
283 };
-
-
284 private:
-
285 config::Config& m_config = config::Config::getInstance();
-
286 logging::LogManager& m_logManager = logging::LogManager::getInstance();
-
287 quill::Logger* m_logger = m_logManager.getLogger("log");
-
288
-
289 bool m_finalized = false;
- -
291 double m_meanParticleMass = 0.0;
-
292 bool m_massFracMode = true;
-
293
-
294 std::set<std::string> m_registeredSymbols;
-
295 std::unordered_map<std::string, CompositionEntry> m_compositions;
-
296
- -
298
+
148
+
149 std::set<atomic::Species> m_registeredSpecies;
+
150 std::map<atomic::Species, double> m_molarAbundances;
+
151
+ +
153
+
154 public:
+
160 Composition() = default;
+
161
+
165 ~Composition() override = default;
+
166
+
177 explicit Composition(const std::vector<std::string>& symbols);
+
178
+
192 explicit Composition(const std::vector<atomic::Species>& species);
+
193
+
204 explicit Composition(const std::set<std::string>& symbols);
+
205
+
219 explicit Composition(const std::set<atomic::Species>& species);
+
220
+
236 Composition(const std::vector<std::string>& symbols, const std::vector<double>& molarAbundances);
+
237
+
252 Composition(const std::vector<atomic::Species>& species, const std::vector<double>& molarAbundances);
+
253
+
269 Composition(const std::set<std::string>& symbols, const std::vector<double>& molarAbundances);
+
270
+ +
276
+
282 Composition& operator=(Composition const& other);
+
283
+
298 void registerSymbol(const std::string& symbol);
299
-
305 static bool isValidSymbol(const std::string& symbol);
-
306
-
312 [[nodiscard]] bool isValidComposition(const std::vector<double>& fractions) const;
-
313
-
319 void validateComposition(const std::vector<double>& fractions) const;
-
320
-
326 bool finalizeMassFracMode(bool norm);
-
327
-
333 bool finalizeNumberFracMode(bool norm);
-
334
-
335 public:
-
339 Composition() = default;
+
314 void registerSymbol(const std::vector<std::string>& symbols);
+
315
+
338 void registerSpecies(const atomic::Species& species) noexcept;
+
339
340
-
344 ~Composition() override = default;
-
345
-
355 [[nodiscard]] bool finalize(bool norm=false);
-
356
-
370 explicit Composition(const std::vector<std::string>& symbols);
-
371
-
382 explicit Composition(const std::set<std::string>& symbols);
-
383
-
401 Composition(const std::vector<std::string>& symbols, const std::vector<double>& fractions, bool massFracMode=true);
-
402
- -
408
-
414 Composition& operator=(Composition const& other);
-
415
-
430 void registerSymbol(const std::string& symbol, bool massFracMode=true);
-
431
-
445 void registerSymbol(const std::vector<std::string>& symbols, bool massFracMode=true);
-
446
-
460 void registerSpecies(const fourdst::atomic::Species& species, bool massFracMode=true);
-
461
-
462
-
477 void registerSpecies(const std::vector<fourdst::atomic::Species>& species, bool massFracMode=true);
-
478
-
479
-
484 [[nodiscard]] std::set<std::string> getRegisteredSymbols() const override;
-
485
-
490 [[nodiscard]] std::set<fourdst::atomic::Species> getRegisteredSpecies() const override;
+
360 void registerSpecies(const std::vector<atomic::Species>& species) noexcept;
+
361
+
367 [[nodiscard]] bool contains(const atomic::Species& species) const noexcept override;
+
368
+
375 [[nodiscard]] bool contains(const std::string& symbol) const override;
+
376
+
381 [[nodiscard]] size_t size() const noexcept override;
+
382
+ +
400 const std::string& symbol,
+
401 const double& molar_abundance
+
402 );
+
403
+ +
424 const atomic::Species& species,
+
425 const double& molar_abundance
+
426 );
+
427
+ +
444 const std::vector<std::string>& symbols,
+
445 const std::vector<double>& molar_abundances
+
446 );
+
447
+ +
467 const std::vector<atomic::Species>& species,
+
468 const std::vector<double>& molar_abundances
+
469 );
+
470
+ +
488 const std::set<std::string>& symbols,
+
489 const std::vector<double>& molar_abundances
+
490 );
491
-
508 double setMassFraction(const std::string& symbol, const double& mass_fraction);
-
509
-
519 std::vector<double> setMassFraction(const std::vector<std::string>& symbols, const std::vector<double>& mass_fractions);
-
520
-
530 double setMassFraction(const fourdst::atomic::Species& species, const double& mass_fraction);
-
531
-
539 std::vector<double> setMassFraction(const std::vector<fourdst::atomic::Species>& species, const std::vector<double>& mass_fractions);
-
540
-
551 double setNumberFraction(const std::string& symbol, const double& number_fraction);
-
552
-
561 std::vector<double> setNumberFraction(const std::vector<std::string>& symbols, const std::vector<double>& number_fractions);
-
562
-
572 double setNumberFraction(const fourdst::atomic::Species& species, const double& number_fraction);
-
573
-
581 std::vector<double> setNumberFraction(const std::vector<fourdst::atomic::Species>& species, const std::vector<double>& number_fractions);
+ +
512 const std::set<atomic::Species>& species,
+
513 const std::vector<double>& molar_abundances
+
514 );
+
515
+
524 [[nodiscard]] std::set<std::string> getRegisteredSymbols() const noexcept override;
+
525
+
534 [[nodiscard]] const std::set<atomic::Species> &getRegisteredSpecies() const noexcept override;
+
535
+
542 [[nodiscard]] std::unordered_map<atomic::Species, double> getMassFraction() const noexcept override;
+
543
+
552 [[nodiscard]] double getMassFraction(const std::string& symbol) const override;
+
553
+
571 [[nodiscard]] double getMassFraction(const atomic::Species& species) const override;
+
572
+
581 [[nodiscard]] double getNumberFraction(const std::string& symbol) const override;
582
-
595 [[nodiscard]] Composition mix(const Composition& other, double fraction) const;
-
596
-
603 [[nodiscard]] std::unordered_map<std::string, double> getMassFraction() const override;
-
604
-
613 [[nodiscard]] double getMassFraction(const std::string& symbol) const override;
-
614
-
623 [[nodiscard]] double getMassFraction(const fourdst::atomic::Species& species) const override;
-
624
-
633 [[nodiscard]] double getNumberFraction(const std::string& symbol) const override;
-
634
-
643 [[nodiscard]] double getNumberFraction(const fourdst::atomic::Species& species) const override;
-
644
-
651 [[nodiscard]] std::unordered_map<std::string, double> getNumberFraction() const override;
-
652
-
661 [[nodiscard]] double getMolarAbundance(const std::string& symbol) const override;
+
599 [[nodiscard]] double getNumberFraction(const atomic::Species& species) const override;
+
600
+
607 [[nodiscard]] std::unordered_map<atomic::Species, double> getNumberFraction() const noexcept override;
+
608
+
619 [[nodiscard]] double getMolarAbundance(const std::string& symbol) const override;
+
620
+
630 [[nodiscard]] double getMolarAbundance(const atomic::Species& species) const override;
+
631
+
645 [[nodiscard]] double getMeanParticleMass() const noexcept override;
+
646
+
660 [[nodiscard]] double getElectronAbundance() const noexcept override;
+
661
662
-
671 [[nodiscard]] double getMolarAbundance(const fourdst::atomic::Species& species) const override;
-
672
-
681 [[nodiscard]] std::pair<CompositionEntry, GlobalComposition> getComposition(const std::string& symbol) const;
-
682
-
691 [[nodiscard]] std::pair<CompositionEntry, GlobalComposition> getComposition(const fourdst::atomic::Species& species) const;
+
677 [[nodiscard]] CanonicalComposition getCanonicalComposition() const;
+
678
+
684 [[nodiscard]] std::vector<double> getMassFractionVector() const noexcept override;
+
685
+
691 [[nodiscard]] std::vector<double> getNumberFractionVector() const noexcept override;
692
-
699 [[nodiscard]] std::pair<std::unordered_map<std::string, CompositionEntry>, GlobalComposition> getComposition() const;
-
700
-
707 [[nodiscard]] double getMeanParticleMass() const override;
-
708
-
715 [[nodiscard]] double getMeanAtomicNumber() const override;
-
716
-
723 [[nodiscard]] double getElectronAbundance() const override;
-
724
-
734 [[nodiscard]] Composition subset(const std::vector<std::string>& symbols, const std::string& method="norm") const;
+
698 [[nodiscard]] std::vector<double> getMolarAbundanceVector() const noexcept override;
+
699
+
708 [[nodiscard]] size_t getSpeciesIndex(const std::string& symbol) const override;
+
709
+
717 [[nodiscard]] size_t getSpeciesIndex(const atomic::Species& species) const override;
+
718
+
726 [[nodiscard]] atomic::Species getSpeciesAtIndex(size_t index) const override;
+
727
+
734 friend std::ostream& operator<<(std::ostream& os, const Composition& composition);
735
-
741 [[nodiscard]] bool hasSymbol(const std::string& symbol) const override;
-
742
-
748 [[nodiscard]] bool hasSpecies(const fourdst::atomic::Species &species) const override;
-
749
-
757 [[nodiscard]] bool contains(const atomic::Species& isotope) const override;
-
758
-
767 void setCompositionMode(bool massFracMode);
-
768
-
778 [[nodiscard]] CanonicalComposition getCanonicalComposition(bool harsh=false) const;
-
779
-
787 [[nodiscard]] std::vector<double> getMassFractionVector() const override;
-
788
-
796 [[nodiscard]] std::vector<double> getNumberFractionVector() const override;
-
797
-
805 [[nodiscard]] std::vector<double> getMolarAbundanceVector() const override;
-
806
-
817 [[nodiscard]] size_t getSpeciesIndex(const std::string& symbol) const override;
-
818
-
829 [[nodiscard]] size_t getSpeciesIndex(const atomic::Species& species) const override;
-
830
-
840 [[nodiscard]] atomic::Species getSpeciesAtIndex(size_t index) const override;
-
841
-
848 friend std::ostream& operator<<(std::ostream& os, const Composition& composition);
-
849
-
858 Composition operator+(const Composition& other) const;
-
859
-
-
864 auto begin() {
-
865 return m_compositions.begin();
-
866 }
+
+
753 auto begin() {
+
754 return m_molarAbundances.begin();
+
755 }
-
867
-
-
872 [[nodiscard]] auto begin() const {
-
873 return m_compositions.cbegin();
-
874 }
+
756
+
+
774 [[nodiscard]] auto begin() const {
+
775 return m_molarAbundances.cbegin();
+
776 }
-
875
-
-
880 auto end() {
-
881 return m_compositions.end();
-
882 }
+
777
+
+
795 auto end() {
+
796 return m_molarAbundances.end();
+
797 }
-
883
-
-
888 [[nodiscard]] auto end() const {
-
889 return m_compositions.cend();
-
890 }
+
798
+
+
816 [[nodiscard]] auto end() const {
+
817 return m_molarAbundances.cend();
+
818 }
-
891
-
892 };
-
-
893}; // namespace fourdst::composition
+
819
+
820 };
+
821}; // namespace fourdst::composition
-
Abstract base class for chemical composition representations.
-
CompositionCache m_cache
Cache for computed properties to avoid redundant calculations.
+
Abstract base class for chemical composition representations.
+
CompositionCache m_cache
Cache for computed properties to avoid redundant calculations.
~Composition() override=default
Default destructor.
-
void setCompositionMode(bool massFracMode)
Sets the composition mode (mass fraction vs. number fraction).
-
size_t getSpeciesIndex(const std::string &symbol) const override
get the index in the sorted vector representation for a given symbol
-
std::pair< std::unordered_map< std::string, CompositionEntry >, GlobalComposition > getComposition() const
Gets all composition entries and the global composition data.
-
Composition subset(const std::vector< std::string > &symbols, const std::string &method="norm") const
Creates a new Composition object containing a subset of species from this one.
-
void registerSymbol(const std::string &symbol, bool massFracMode=true)
Registers a new symbol for inclusion in the composition.
- +
size_t getSpeciesIndex(const std::string &symbol) const override
get the index in the sorted vector representation for a given symbol
+
bool contains(const atomic::Species &species) const noexcept override
Checks if a given species is present in the composition.
Composition()=default
Default constructor.
-
Composition operator+(const Composition &other) const
Overloads the + operator to mix two compositions with a 50/50 fraction.
-
friend std::ostream & operator<<(std::ostream &os, const Composition &composition)
Overloaded output stream operator for Composition.
-
std::set< std::string > m_registeredSymbols
The registered symbols.
-
Composition mix(const Composition &other, double fraction) const
Mixes this composition with another to produce a new composition.
-
std::set< std::string > getRegisteredSymbols() const override
Gets the registered symbols.
-
logging::LogManager & m_logManager
-
bool finalizeNumberFracMode(bool norm)
Finalizes the composition in number fraction mode.
-
double setMassFraction(const std::string &symbol, const double &mass_fraction)
Sets the mass fraction for a given symbol.
-
std::vector< double > getNumberFractionVector() const override
Get a uniform vector representation of the number fractions stored in the composition object sorted s...
-
double m_meanParticleMass
The mean particle mass of the composition (\sum_{i} \frac{n_i}{m_i}. where n_i is the number fraction...
-
void registerSpecies(const fourdst::atomic::Species &species, bool massFracMode=true)
Registers a new species by extracting its symbol.
-
Composition & operator=(Composition const &other)
Assignment operator.
-
bool hasSpecies(const fourdst::atomic::Species &species) const override
Checks if a species is registered in the composition.
-
double getElectronAbundance() const override
Compute the electron abundance of the composition.
-
bool m_massFracMode
True if mass fraction mode, false if number fraction mode.
-
bool finalize(bool norm=false)
Finalizes the composition, making it ready for querying.
-
double getMeanParticleMass() const override
Compute the mean particle mass of the composition.
-
double setNumberFraction(const std::string &symbol, const double &number_fraction)
Sets the number fraction for a given symbol.
-
bool contains(const atomic::Species &isotope) const override
Checks if a given isotope is present in the composition.
-
std::vector< double > getMassFractionVector() const override
Get a uniform vector representation of the mass fraction stored in the composition object sorted such...
-
void validateComposition(const std::vector< double > &fractions) const
Validates the given fractions, throwing an exception on failure.
-
bool finalizeMassFracMode(bool norm)
Finalizes the composition in mass fraction mode.
-
static bool isValidSymbol(const std::string &symbol)
Checks if the given symbol is valid by checking against the global species database.
-
bool m_finalized
True if the composition is finalized.
-
std::unordered_map< std::string, CompositionEntry > m_compositions
The compositions.
-
std::unordered_map< std::string, double > getMassFraction() const override
Gets the mass fractions of all species in the composition.
-
auto begin()
Returns an iterator to the beginning of the composition map.
- -
std::vector< double > getMolarAbundanceVector() const override
Get a uniform vector representation of the molar abundances stored in the composition object sorted s...
-
bool hasSymbol(const std::string &symbol) const override
Checks if a symbol is registered in the composition.
-
CanonicalComposition getCanonicalComposition(bool harsh=false) const
Gets the current canonical composition (X, Y, Z).
-
double getMolarAbundance(const std::string &symbol) const override
Gets the molar abundance (X_i / A_i) for a given symbol.
-
double m_specificNumberDensity
The specific number density of the composition (\sum_{i} X_i m_i. Where X_i is the number fraction of...
-
bool isValidComposition(const std::vector< double > &fractions) const
Checks if the given fractions are valid (sum to ~1.0).
-
auto end()
Returns an iterator to the end of the composition map.
-
auto begin() const
Returns a const iterator to the beginning of the composition map.
-
std::unordered_map< std::string, double > getNumberFraction() const override
Gets the number fractions of all species in the composition.
-
atomic::Species getSpeciesAtIndex(size_t index) const override
Get the species at a given index in the sorted vector representation.
-
auto end() const
Returns a const iterator to the end of the composition map.
-
std::set< fourdst::atomic::Species > getRegisteredSpecies() const override
Get a set of all species that are registered in the composition.
-
double getMeanAtomicNumber() const override
Compute the mean atomic number of the composition.
+
void setMolarAbundance(const std::string &symbol, const double &molar_abundance)
Sets the molar abundance for a given symbol.
+
const std::set< atomic::Species > & getRegisteredSpecies() const noexcept override
Get a set of all species that are registered in the composition.
+
double getNumberFraction(const std::string &symbol) const override
Gets the number fraction for a given symbol. See the overload for species-based lookup for more detai...
+
void registerSpecies(const atomic::Species &species) noexcept
Registers a new species by extracting its symbol.
+
void registerSymbol(const std::string &symbol)
Registers a new symbol for inclusion in the composition.
+
std::set< std::string > getRegisteredSymbols() const noexcept override
Gets the registered symbols.
+
std::set< atomic::Species > m_registeredSpecies
Set of registered species in the composition.
+
static quill::Logger * getLogger()
Gets the logger instance for the Composition class. This is static to ensure that all composition obj...
+
Composition & operator=(Composition const &other)
Assignment operator.
+
double getElectronAbundance() const noexcept override
Compute the electron abundance of the composition.
+
size_t size() const noexcept override
Gets the number of registered species in the composition.
+
std::unordered_map< atomic::Species, double > getMassFraction() const noexcept override
Gets the mass fractions of all species in the composition.
+
std::map< atomic::Species, double > m_molarAbundances
Map of species to their molar abundances.
+
CanonicalComposition getCanonicalComposition() const
Compute the canonical composition (X, Y, Z) of the composition.
+
auto begin()
Returns an iterator to the beginning of the molar abundance map.
+
std::vector< double > getMolarAbundanceVector() const noexcept override
Get a uniform vector representation of the molar abundances stored in the composition object sorted s...
+
double getMolarAbundance(const std::string &symbol) const override
Gets the molar abundances of all species in the composition.
+
auto end()
Returns an iterator to the end of the molar abundance map.
+
auto begin() const
Returns a const iterator to the beginning of the molar abundance map.
+
std::vector< double > getNumberFractionVector() const noexcept override
Get a uniform vector representation of the number fractions stored in the composition object sorted s...
+
atomic::Species getSpeciesAtIndex(size_t index) const override
Get the species at a given index in the sorted vector representation.
+
auto end() const
Returns a const iterator to the end of the molar abundance map.
+
std::vector< double > getMassFractionVector() const noexcept override
Get a uniform vector representation of the mass fraction stored in the composition object sorted such...
+
double getMeanParticleMass() const noexcept override
Compute the mean particle mass of the composition.
- +
Contains canonical information about atomic species and elements used by 4D-STAR.
+
Utilities and types for representing and manipulating chemical compositions.
Represents an atomic species (isotope) with its fundamental physical properties.
Represents the canonical (X, Y, Z) composition of stellar material.
Definition composition.h:44
friend std::ostream & operator<<(std::ostream &os, const CanonicalComposition &composition)
Overloads the stream insertion operator for easy printing.
Definition composition.h:55
double Y
Mass fraction of Helium.
Definition composition.h:46
double X
Mass fraction of Hydrogen.
Definition composition.h:45
double Z
Mass fraction of Metals.
Definition composition.h:47
- -
std::optional< std::vector< atomic::Species > > sortedSpecies
Cached vector of sorted species (by mass).
-
std::optional< std::vector< double > > numberFractions
Cached vector of number fractions.
-
std::optional< CanonicalComposition > canonicalComp
Cached canonical composition data.
-
std::optional< GlobalComposition > globalComp
Cached global composition data.
-
std::optional< std::vector< double > > molarAbundances
Cached vector of molar abundances.
-
std::optional< std::vector< std::string > > sortedSymbols
Cached vector of sorted species (by mass).
- -
std::optional< std::vector< double > > massFractions
Cached vector of mass fractions.
-
std::optional< double > Ye
Cached electron abundance.
- -
bool setNumberFracMode(double totalMolesPerMass)
Switches the mode to number fraction mode.
-
double m_relAbundance
The relative abundance, used internally for conversions. For mass fraction mode, this is X_i / A_i; f...
Definition composition.h:91
-
bool getMassFracMode() const
Gets the mode of the composition entry.
-
CompositionEntry()
Default constructor. Initializes a default entry (H-1), but in an uninitialized state.
-
bool m_massFracMode
The mode of the composition entry. True if mass fraction, false if number fraction.
Definition composition.h:87
-
double m_numberFraction
The number fraction (mole fraction) of the species. Valid only if m_massFracMode is false.
Definition composition.h:90
-
double number_fraction() const
Gets the number fraction of the species.
-
CompositionEntry(const CompositionEntry &entry)
Copy constructor.
-
bool m_initialized
True if the composition entry has been initialized with a valid species.
Definition composition.h:96
-
double m_cachedNumberFraction
Cached number fraction for conversions when in mass fraction mode.
Definition composition.h:93
-
bool setMassFracMode(double meanMolarMass)
Switches the mode to mass fraction mode.
-
void setMassFraction(double mass_fraction)
Sets the mass fraction of the species.
-
std::string symbol() const
Gets the chemical symbol of the species.
-
void setSpecies(const std::string &symbol)
Sets the species for the composition entry. This can only be done once.
-
double mass_fraction() const
Gets the mass fraction of the species.
-
atomic::Species m_isotope
The atomic::Species object containing detailed isotope data.
Definition composition.h:86
-
void setNumberFraction(double number_fraction)
Sets the number fraction of the species.
-
double rel_abundance() const
Gets the relative abundance of the species.
-
std::string m_symbol
The chemical symbol of the species (e.g., "H-1", "Fe-56").
Definition composition.h:85
-
double m_molesPerMass
Definition composition.h:92
-
double m_massFraction
The mass fraction of the species. Valid only if m_massFracMode is true.
Definition composition.h:89
-
friend std::ostream & operator<<(std::ostream &os, const CompositionEntry &entry)
Overloaded output stream operator for CompositionEntry.
-
atomic::Species isotope() const
Gets the isotope data for the species.
-
Represents global properties of a finalized composition.
Definition composition.h:70
-
double specificNumberDensity
The specific number density (moles per unit mass, sum of X_i/M_i), where X_i is mass fraction and M_i...
Definition composition.h:71
-
friend std::ostream & operator<<(std::ostream &os, const GlobalComposition &comp)
-
double meanParticleMass
The mean mass per particle (inverse of specific number density). Units: g/mol.
Definition composition.h:72
+
Caches computed properties of the composition to avoid redundant calculations.
+
std::optional< std::vector< atomic::Species > > sortedSpecies
Cached vector of sorted species (by mass).
+
std::optional< std::vector< double > > numberFractions
Cached vector of number fractions.
+
std::optional< CanonicalComposition > canonicalComp
Cached canonical composition data.
+
std::optional< std::vector< double > > molarAbundances
Cached vector of molar abundances.
+
std::optional< std::vector< std::string > > sortedSymbols
Cached vector of sorted species (by mass).
+ +
std::optional< std::vector< double > > massFractions
Cached vector of mass fractions.
+
std::optional< double > Ye
Cached electron abundance.
+
bool is_clear() const
Checks if the cache is clear (i.e., all cached values are empty).
diff --git a/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.html b/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.html index da364cc..fd85044 100644 --- a/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.html +++ b/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -102,9 +102,16 @@ $(function(){initNavTree('dir_3c9efac6790a3720e63e1a08c00d11f2.html',''); initRe
fourdst Directory Reference
+
+Directory dependency graph for fourdst:
+
+
+
+ +

Directories

 atomic
 
 composition
 
diff --git a/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.js b/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.js index 4fe6ff5..3a48b24 100644 --- a/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.js +++ b/docs/html/dir_3c9efac6790a3720e63e1a08c00d11f2.js @@ -1,4 +1,5 @@ var dir_3c9efac6790a3720e63e1a08c00d11f2 = [ + [ "atomic", "dir_22f8ab1532b3f549185d596a293d3842.html", "dir_22f8ab1532b3f549185d596a293d3842" ], [ "composition", "dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html", "dir_f0fdd83dd0cb4aa6fd6a832374ae4f05" ] ]; \ No newline at end of file diff --git a/docs/html/dir_425afc2e69e55565110382214454a15b.html b/docs/html/dir_425afc2e69e55565110382214454a15b.html index 38863ec..6475b54 100644 --- a/docs/html/dir_425afc2e69e55565110382214454a15b.html +++ b/docs/html/dir_425afc2e69e55565110382214454a15b.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -102,6 +102,11 @@ $(function(){initNavTree('dir_425afc2e69e55565110382214454a15b.html',''); initRe
composition Directory Reference
+
+Directory dependency graph for composition:
+
+
+
diff --git a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html index b066848..d616c10 100644 --- a/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html +++ b/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html @@ -29,7 +29,7 @@ diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 8c38bc4..cb89acd 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -29,7 +29,7 @@ @@ -102,6 +102,11 @@ $(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html',''); initRe
src Directory Reference
+
+Directory dependency graph for src:
+
+
+

Directories

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
diff --git a/docs/html/dir_88aa30610c51652b536406602eb05405.html b/docs/html/dir_88aa30610c51652b536406602eb05405.html index 73ccf11..e475727 100644 --- a/docs/html/dir_88aa30610c51652b536406602eb05405.html +++ b/docs/html/dir_88aa30610c51652b536406602eb05405.html @@ -29,7 +29,7 @@ @@ -102,6 +102,11 @@ $(function(){initNavTree('dir_88aa30610c51652b536406602eb05405.html',''); initRe
exceptions Directory Reference
+
+Directory dependency graph for exceptions:
+
+
+

Directories

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
diff --git a/docs/html/dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html b/docs/html/dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html index c034bff..132b6eb 100644 --- a/docs/html/dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html +++ b/docs/html/dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html @@ -29,7 +29,7 @@ @@ -102,6 +102,11 @@ $(function(){initNavTree('dir_c34d5e8363cf0aa3fabc4f3fad3412a4.html',''); initRe
static Directory Reference
+
+Directory dependency graph for static:
+
+
+
diff --git a/docs/html/dir_cb6fc2f7165eff3b2362b2440dfaea8e.html b/docs/html/dir_cb6fc2f7165eff3b2362b2440dfaea8e.html index 1f06d7f..24dfaf6 100644 --- a/docs/html/dir_cb6fc2f7165eff3b2362b2440dfaea8e.html +++ b/docs/html/dir_cb6fc2f7165eff3b2362b2440dfaea8e.html @@ -29,7 +29,7 @@ @@ -102,6 +102,11 @@ $(function(){initNavTree('dir_cb6fc2f7165eff3b2362b2440dfaea8e.html',''); initRe
include Directory Reference
+
+Directory dependency graph for include:
+
+
+

Files

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
diff --git a/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.html b/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.html index c8523ed..0be530d 100644 --- a/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.html +++ b/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.html @@ -29,7 +29,7 @@ @@ -102,11 +102,18 @@ $(function(){initNavTree('dir_e22a97de167fe22ecd13733f7a34b9f0.html',''); initRe
lib Directory Reference
+
+Directory dependency graph for lib:
+
+
+

Directories

-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
+ +

Files

 composition.cpp
 
 utils.cpp
 
diff --git a/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.js b/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.js index 1d72c21..ff5f45b 100644 --- a/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.js +++ b/docs/html/dir_e22a97de167fe22ecd13733f7a34b9f0.js @@ -1,4 +1,5 @@ var dir_e22a97de167fe22ecd13733f7a34b9f0 = [ - [ "composition.cpp", "composition_8cpp.html", "composition_8cpp" ] + [ "composition.cpp", "composition_8cpp.html", "composition_8cpp" ], + [ "utils.cpp", "utils_8cpp.html", "utils_8cpp" ] ]; \ No newline at end of file diff --git a/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html b/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html index becd824..c47ae16 100644 --- a/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html +++ b/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -102,6 +102,11 @@ $(function(){initNavTree('dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.html',''); initRe
composition Directory Reference
+
+Directory dependency graph for composition:
+
+
+
@@ -110,16 +115,11 @@ Directories

Directories

- - - - - - +

Files

 atomicSpecies.h
 
 composition.h
 
 composition_abstract.h
 
 elements.h
 Provides mappings between atomic numbers and element symbols for the periodic table.
 
 species.h
 utils.h
 
diff --git a/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.js b/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.js index 5a39099..f1083bf 100644 --- a/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.js +++ b/docs/html/dir_f0fdd83dd0cb4aa6fd6a832374ae4f05.js @@ -1,9 +1,7 @@ var dir_f0fdd83dd0cb4aa6fd6a832374ae4f05 = [ [ "exceptions", "dir_88aa30610c51652b536406602eb05405.html", "dir_88aa30610c51652b536406602eb05405" ], - [ "atomicSpecies.h", "atomic_species_8h.html", "atomic_species_8h" ], [ "composition.h", "composition_8h.html", "composition_8h" ], [ "composition_abstract.h", "composition__abstract_8h.html", "composition__abstract_8h" ], - [ "elements.h", "elements_8h.html", "elements_8h" ], - [ "species.h", "species_8h.html", "species_8h" ] + [ "utils.h", "utils_8h.html", "utils_8h" ] ]; \ No newline at end of file diff --git a/docs/html/doxygen_crawl.html b/docs/html/doxygen_crawl.html index 8765cd1..ad370b1 100644 --- a/docs/html/doxygen_crawl.html +++ b/docs/html/doxygen_crawl.html @@ -9,149 +9,117 @@ + - + - - - - + - - + + - - - + + + + - - - + + + + - - - + - - - - - + + + + - - + + + - - + + + - - - - - - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - + - + + - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + @@ -171,24 +139,26 @@ + - - + - - - - - - - + + + + + + + + + @@ -2755,6 +2725,7 @@ + @@ -3210,7 +3181,6 @@ - @@ -3763,9 +3733,10 @@ + + - - + @@ -3842,6 +3813,7 @@ + @@ -3854,7 +3826,6 @@ - @@ -3870,47 +3841,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/docs/html/exceptions__composition_8h.html b/docs/html/exceptions__composition_8h.html index d3364ce..61a78ff 100644 --- a/docs/html/exceptions__composition_8h.html +++ b/docs/html/exceptions__composition_8h.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -107,6 +107,16 @@ $(function(){initNavTree('exceptions__composition_8h.html',''); initResizable(tr
#include <exception>
#include <string>
+
+Include dependency graph for exceptions_composition.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+

Go to the source code of this file.

@@ -115,35 +125,17 @@ Classes - - - - - - - - - - - - - - + + - - - - - - - - + +
class  fourdst::composition::exceptions::CompositionError
 Base class for exceptions related to composition objects. More...
 
class  fourdst::composition::exceptions::CompositionEntryError
 Base class for exceptions related to individual entries within a composition. More...
 
class  fourdst::composition::exceptions::CompositionNotFinalizedError
 Exception thrown when an operation is attempted on a composition that has not been finalized. More...
 
class  fourdst::composition::exceptions::InvalidCompositionError
 Exception thrown when a composition is in an invalid or inconsistent state. More...
 
class  fourdst::composition::exceptions::InvalidMixingMode
 Exception thrown for an invalid or unsupported mixing mode. More...
 
class  fourdst::composition::exceptions::InvalidSymbolError
 Exception thrown when a symbol used in a composition is invalid. More...
 
class  fourdst::composition::exceptions::UnregisteredSymbolError
 Exception thrown when a symbol is used that has not been registered. More...
 
class  fourdst::composition::exceptions::FailedToFinalizeCompositionError
 Exception thrown when the finalization process of a composition fails. More...
class  fourdst::composition::exceptions::SpeciesError
 Base class for exceptions related to atomic species. More...
 
class  fourdst::composition::exceptions::InvalidSpeciesSymbolError
 Exception thrown for an invalid chemical species symbol in a composition entry. More...
 
class  fourdst::composition::exceptions::EntryAlreadyInitializedError
 Exception thrown when attempting to initialize a composition entry that has already been initialized. More...
 
class  fourdst::composition::exceptions::CompositionModeError
 Exception thrown due to a conflict in composition modes at the entry level. More...
class  fourdst::composition::exceptions::UnknownSymbolError
 Exception thrown when an unknown symbol is encountered. More...
 
+ diff --git a/docs/html/exceptions__composition_8h.js b/docs/html/exceptions__composition_8h.js index 06b841f..3429455 100644 --- a/docs/html/exceptions__composition_8h.js +++ b/docs/html/exceptions__composition_8h.js @@ -1,14 +1,8 @@ var exceptions__composition_8h = [ [ "fourdst::composition::exceptions::CompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_error" ], - [ "fourdst::composition::exceptions::CompositionEntryError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_entry_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_entry_error" ], - [ "fourdst::composition::exceptions::CompositionNotFinalizedError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_not_finalized_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_not_finalized_error" ], [ "fourdst::composition::exceptions::InvalidCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error" ], - [ "fourdst::composition::exceptions::InvalidMixingMode", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_mixing_mode.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_mixing_mode" ], - [ "fourdst::composition::exceptions::InvalidSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_symbol_error" ], [ "fourdst::composition::exceptions::UnregisteredSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error" ], - [ "fourdst::composition::exceptions::FailedToFinalizeCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_failed_to_finalize_composition_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_failed_to_finalize_composition_error" ], - [ "fourdst::composition::exceptions::InvalidSpeciesSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_species_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_species_symbol_error" ], - [ "fourdst::composition::exceptions::EntryAlreadyInitializedError", "classfourdst_1_1composition_1_1exceptions_1_1_entry_already_initialized_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_entry_already_initialized_error" ], - [ "fourdst::composition::exceptions::CompositionModeError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_mode_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_composition_mode_error" ] + [ "fourdst::composition::exceptions::SpeciesError", "classfourdst_1_1composition_1_1exceptions_1_1_species_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_species_error" ], + [ "fourdst::composition::exceptions::UnknownSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error.html", "classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error" ] ]; \ No newline at end of file diff --git a/docs/html/exceptions__composition_8h_source.html b/docs/html/exceptions__composition_8h_source.html index 91fe274..41663d1 100644 --- a/docs/html/exceptions__composition_8h_source.html +++ b/docs/html/exceptions__composition_8h_source.html @@ -29,7 +29,7 @@ @@ -127,103 +127,55 @@ $(function(){initNavTree('exceptions__composition_8h_source.html',''); initResiz
35 };
36
-
-
44 class CompositionEntryError : public std::exception {
-
45 protected:
-
49 std::string m_message;
-
50 public:
-
-
55 explicit CompositionEntryError(const std::string& message)
-
56 : m_message(std::move(message)) {}
+ -
57
-
-
62 const char* what() const noexcept override {
-
63 return m_message.c_str();
-
64 }
+
44
+ -
65 };
+
54
+
+
59 class SpeciesError : public std::exception {
+
60 protected:
+
61 std::string m_message;
+
62 public:
+
+
63 explicit SpeciesError(const std::string& message)
+
64 : m_message(std::move(message)) {}
-
66
-
- - -
76 };
+
65
+
+
66 const char* what() const noexcept override {
+
67 return m_message.c_str();
+
68 }
-
77
-
- - -
84 };
+
69 };
-
85
-
-
93 class InvalidMixingMode final : public CompositionError {
- -
95 };
+
70
+
+
77 class UnknownSymbolError final : public SpeciesError {
+ +
79 };
-
96
-
- - -
103 };
+
80
+
81}
-
104
-
- - -
113 };
-
-
114
- -
122
- -
130
- -
138
- -
148
-
149}
-
-
std::string m_message
The error message.
-
const char * what() const noexcept override
Returns the error message.
-
CompositionEntryError(const std::string &message)
Constructs a CompositionEntryError with an error message.
const char * what() const noexcept override
Returns the error message.
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown due to a conflict in composition modes at the entry level.
-
CompositionEntryError(const std::string &message)
Constructs a CompositionEntryError with an error message.
-
Exception thrown when an operation is attempted on a composition that has not been finalized.
-
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown when attempting to initialize a composition entry that has already been initialized.
-
CompositionEntryError(const std::string &message)
Constructs a CompositionEntryError with an error message.
-
Exception thrown when the finalization process of a composition fails.
-
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown when a composition is in an invalid or inconsistent state.
+
Exception thrown when a composition is in an invalid or inconsistent state.
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown for an invalid or unsupported mixing mode.
-
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown for an invalid chemical species symbol in a composition entry.
-
CompositionEntryError(const std::string &message)
Constructs a CompositionEntryError with an error message.
-
Exception thrown when a symbol used in a composition is invalid.
-
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
-
Exception thrown when a symbol is used that has not been registered.
+ +
const char * what() const noexcept override
+ +
Exception thrown when an unknown symbol is encountered.
+ +
Exception thrown when a symbol is used that has not been registered.
CompositionError(const std::string &message)
Constructs a CompositionError with an error message.
diff --git a/docs/html/files.html b/docs/html/files.html index 85d297d..a783ff3 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -29,7 +29,7 @@
@@ -110,16 +110,19 @@ $(function(){initNavTree('files.html',''); initResizable(true); }); - - - - - - - - + + + + + + + + + + +

@@ -151,6 +143,7 @@ Namespaces

namespace  fourdst
 
namespace  fourdst::composition
 Utilities and types for representing and manipulating chemical compositions.
 
namespace  fourdst::composition::exceptions
 
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
-
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
  composition
  include
  fourdst
  composition
  exceptions
 exceptions_composition.h
 atomicSpecies.h
 composition.h
 composition_abstract.h
 elements.hProvides mappings between atomic numbers and element symbols for the periodic table
 species.h
  atomic
 atomicSpecies.h
 elements.hProvides mappings between atomic numbers and element symbols for the periodic table
 species.h
  composition
  exceptions
 exceptions_composition.h
 composition.h
 composition_abstract.h
 utils.h
  lib
 composition.cpp
 utils.cpp
diff --git a/docs/html/functions.html b/docs/html/functions.html index 47a888f..5d0576e 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -29,7 +29,7 @@ -
fourdst::libcomposition v1.9.0 +
fourdst::libcomposition v2.0.0
Robust atomic species information library
@@ -118,10 +118,8 @@ $(function(){initNavTree('functions.html',''); initResizable(true); });
  • canonicalComp : fourdst::composition::Composition::CompositionCache
  • clear() : fourdst::composition::Composition::CompositionCache
  • Composition() : fourdst::composition::Composition
  • -
  • CompositionEntry() : fourdst::composition::CompositionEntry
  • -
  • CompositionEntryError() : fourdst::composition::exceptions::CompositionEntryError, fourdst::composition::exceptions::CompositionModeError, fourdst::composition::exceptions::EntryAlreadyInitializedError, fourdst::composition::exceptions::InvalidSpeciesSymbolError
  • -
  • CompositionError() : fourdst::composition::exceptions::CompositionError, fourdst::composition::exceptions::CompositionNotFinalizedError, fourdst::composition::exceptions::FailedToFinalizeCompositionError, fourdst::composition::exceptions::InvalidCompositionError, fourdst::composition::exceptions::InvalidMixingMode, fourdst::composition::exceptions::InvalidSymbolError, fourdst::composition::exceptions::UnregisteredSymbolError
  • -
  • contains() : CompositionAbstract, fourdst::composition::Composition
  • +
  • CompositionError() : fourdst::composition::exceptions::CompositionError, fourdst::composition::exceptions::InvalidCompositionError, fourdst::composition::exceptions::UnregisteredSymbolError
  • +
  • contains() : CompositionAbstract, fourdst::composition::Composition
  • @@ -136,46 +134,31 @@ $(function(){initNavTree('functions.html',''); initResizable(true); }); -

    - f -

    - -

    - g -

    - h -

    - i -

    @@ -187,39 +170,21 @@ $(function(){initNavTree('functions.html',''); initResizable(true); });
  • m_betaDecayEnergy : fourdst::atomic::Species
  • m_bindingEnergy : fourdst::atomic::Species
  • m_cache : fourdst::composition::Composition
  • -
  • m_cachedNumberFraction : fourdst::composition::CompositionEntry
  • -
  • m_compositions : fourdst::composition::Composition
  • -
  • m_config : fourdst::composition::Composition
  • m_decayModes : fourdst::atomic::Species
  • m_el : fourdst::atomic::Species
  • -
  • m_finalized : fourdst::composition::Composition
  • m_halfLife_s : fourdst::atomic::Species
  • -
  • m_initialized : fourdst::composition::CompositionEntry
  • -
  • m_isotope : fourdst::composition::CompositionEntry
  • -
  • m_logger : fourdst::composition::Composition
  • -
  • m_logManager : fourdst::composition::Composition
  • -
  • m_massFracMode : fourdst::composition::Composition, fourdst::composition::CompositionEntry
  • -
  • m_massFraction : fourdst::composition::CompositionEntry
  • -
  • m_meanParticleMass : fourdst::composition::Composition
  • -
  • m_message : fourdst::composition::exceptions::CompositionEntryError, fourdst::composition::exceptions::CompositionError
  • -
  • m_molesPerMass : fourdst::composition::CompositionEntry
  • +
  • m_message : fourdst::composition::exceptions::CompositionError, fourdst::composition::exceptions::SpeciesError
  • +
  • m_molarAbundances : fourdst::composition::Composition
  • m_n : fourdst::atomic::Species
  • m_name : fourdst::atomic::Species
  • -
  • m_numberFraction : fourdst::composition::CompositionEntry
  • m_nz : fourdst::atomic::Species
  • -
  • m_registeredSymbols : fourdst::composition::Composition
  • -
  • m_relAbundance : fourdst::composition::CompositionEntry
  • -
  • m_specificNumberDensity : fourdst::composition::Composition
  • -
  • m_spin : fourdst::atomic::Species
  • +
  • m_registeredSpecies : fourdst::composition::Composition
  • +
  • m_spin : fourdst::atomic::Species
  • m_spinParity : fourdst::atomic::Species
  • -
  • m_symbol : fourdst::composition::CompositionEntry
  • m_z : fourdst::atomic::Species
  • mass() : fourdst::atomic::Species
  • -
  • mass_fraction() : fourdst::composition::CompositionEntry
  • massFractions : fourdst::composition::Composition::CompositionCache
  • massUnc() : fourdst::atomic::Species
  • -
  • meanParticleMass : fourdst::composition::GlobalComposition
  • -
  • mix() : fourdst::composition::Composition
  • molarAbundances : fourdst::composition::Composition::CompositionCache
  • @@ -227,7 +192,6 @@ $(function(){initNavTree('functions.html',''); initResizable(true); });

    - n -

    @@ -236,9 +200,8 @@ $(function(){initNavTree('functions.html',''); initResizable(true); });

    - o -

    -

    - f -

    - -

    - g -

    @@ -164,71 +153,51 @@ $(function(){initNavTree('functions_func.html',''); initResizable(true); });

    - h -

    - i -

    - m -

    - n -

    - o -

    - r -

    - s -

    - - -

    - v -

    - w -

    diff --git a/docs/html/functions_rela.html b/docs/html/functions_rela.html index f103997..349311d 100644 --- a/docs/html/functions_rela.html +++ b/docs/html/functions_rela.html @@ -29,7 +29,7 @@ -
    fourdst::libcomposition v1.9.0 +
    fourdst::libcomposition v2.0.0
    Robust atomic species information library
    @@ -102,7 +102,7 @@ $(function(){initNavTree('functions_rela.html',''); initResizable(true); });
    Here is a list of all related symbols with links to the classes they belong to:
    diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 5ed1101..0048c19 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -29,7 +29,7 @@ -
    fourdst::libcomposition v1.9.0 +
    fourdst::libcomposition v2.0.0
    Robust atomic species information library
    @@ -99,19 +99,8 @@ $(function(){initNavTree('functions_vars.html',''); initResizable(true); });
    -
    Here is a list of all variables with links to the classes they belong to:
    - -

    - c -

    diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index fb80eeb..12948ce 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -29,7 +29,7 @@ -
    fourdst::libcomposition v1.9.0 +
    fourdst::libcomposition v2.0.0
    Robust atomic species information library
    @@ -102,28 +102,22 @@ $(function(){initNavTree('hierarchy.html',''); initResizable(true); });
    Class Hierarchy
    -
    This inheritance list is sorted roughly, but not completely, alphabetically:
    +
    +

    Go to the graphical class hierarchy

    +This inheritance list is sorted roughly, but not completely, alphabetically:
    [detail level 123]
    - - - - - - - - - - - - - - - - - + + + + + + + + +
     Cfourdst::composition::CanonicalCompositionRepresents the canonical (X, Y, Z) composition of stellar material
     CCompositionAbstractAbstract base class for chemical composition representations
     Cfourdst::composition::CompositionManages a collection of chemical species and their abundances
     Cfourdst::composition::Composition::CompositionCache
     Cfourdst::composition::CompositionEntryRepresents a single entry (an isotope) within a composition
     Cstd::exceptionSTL class
     Cfourdst::composition::exceptions::CompositionEntryErrorBase class for exceptions related to individual entries within a composition
     Cfourdst::composition::exceptions::CompositionModeErrorException thrown due to a conflict in composition modes at the entry level
     Cfourdst::composition::exceptions::EntryAlreadyInitializedErrorException thrown when attempting to initialize a composition entry that has already been initialized
     Cfourdst::composition::exceptions::InvalidSpeciesSymbolErrorException thrown for an invalid chemical species symbol in a composition entry
     Cfourdst::composition::exceptions::CompositionErrorBase class for exceptions related to composition objects
     Cfourdst::composition::exceptions::CompositionNotFinalizedErrorException thrown when an operation is attempted on a composition that has not been finalized
     Cfourdst::composition::exceptions::FailedToFinalizeCompositionErrorException thrown when the finalization process of a composition fails
     Cfourdst::composition::exceptions::InvalidCompositionErrorException thrown when a composition is in an invalid or inconsistent state
     Cfourdst::composition::exceptions::InvalidMixingModeException thrown for an invalid or unsupported mixing mode
     Cfourdst::composition::exceptions::InvalidSymbolErrorException thrown when a symbol used in a composition is invalid
     Cfourdst::composition::exceptions::UnregisteredSymbolErrorException thrown when a symbol is used that has not been registered
     Cfourdst::composition::GlobalCompositionRepresents global properties of a finalized composition
     Cstd::hash< fourdst::atomic::Species >Specialization of std::hash for fourdst::atomic::Species
     Cfourdst::atomic::SpeciesRepresents an atomic species (isotope) with its fundamental physical properties
     Cfourdst::composition::Composition::CompositionCacheCaches computed properties of the composition to avoid redundant calculations
     Cstd::exceptionSTL class
     Cfourdst::composition::exceptions::CompositionErrorBase class for exceptions related to composition objects
     Cfourdst::composition::exceptions::InvalidCompositionErrorException thrown when a composition is in an invalid or inconsistent state
     Cfourdst::composition::exceptions::UnregisteredSymbolErrorException thrown when a symbol is used that has not been registered
     Cfourdst::composition::exceptions::SpeciesErrorBase class for exceptions related to atomic species
     Cfourdst::composition::exceptions::UnknownSymbolErrorException thrown when an unknown symbol is encountered
     Cstd::hash< fourdst::atomic::Species >Specialization of std::hash for fourdst::atomic::Species
     Cfourdst::atomic::SpeciesRepresents an atomic species (isotope) with its fundamental physical properties
    diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js index 9c995b9..a684315 100644 --- a/docs/html/hierarchy.js +++ b/docs/html/hierarchy.js @@ -5,23 +5,15 @@ var hierarchy = [ "fourdst::composition::Composition", "classfourdst_1_1composition_1_1_composition.html", null ] ] ], [ "fourdst::composition::Composition::CompositionCache", "structfourdst_1_1composition_1_1_composition_1_1_composition_cache.html", null ], - [ "fourdst::composition::CompositionEntry", "structfourdst_1_1composition_1_1_composition_entry.html", null ], [ "std::exception", null, [ - [ "fourdst::composition::exceptions::CompositionEntryError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_entry_error.html", [ - [ "fourdst::composition::exceptions::CompositionModeError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_mode_error.html", null ], - [ "fourdst::composition::exceptions::EntryAlreadyInitializedError", "classfourdst_1_1composition_1_1exceptions_1_1_entry_already_initialized_error.html", null ], - [ "fourdst::composition::exceptions::InvalidSpeciesSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_species_symbol_error.html", null ] - ] ], [ "fourdst::composition::exceptions::CompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_error.html", [ - [ "fourdst::composition::exceptions::CompositionNotFinalizedError", "classfourdst_1_1composition_1_1exceptions_1_1_composition_not_finalized_error.html", null ], - [ "fourdst::composition::exceptions::FailedToFinalizeCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_failed_to_finalize_composition_error.html", null ], [ "fourdst::composition::exceptions::InvalidCompositionError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_composition_error.html", null ], - [ "fourdst::composition::exceptions::InvalidMixingMode", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_mixing_mode.html", null ], - [ "fourdst::composition::exceptions::InvalidSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_invalid_symbol_error.html", null ], [ "fourdst::composition::exceptions::UnregisteredSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unregistered_symbol_error.html", null ] + ] ], + [ "fourdst::composition::exceptions::SpeciesError", "classfourdst_1_1composition_1_1exceptions_1_1_species_error.html", [ + [ "fourdst::composition::exceptions::UnknownSymbolError", "classfourdst_1_1composition_1_1exceptions_1_1_unknown_symbol_error.html", null ] ] ] ] ], - [ "fourdst::composition::GlobalComposition", "structfourdst_1_1composition_1_1_global_composition.html", null ], [ "std::hash< fourdst::atomic::Species >", "structstd_1_1hash_3_01fourdst_1_1atomic_1_1_species_01_4.html", null ], [ "fourdst::atomic::Species", "structfourdst_1_1atomic_1_1_species.html", null ] ]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html index ae8eb6f..0a6b9e8 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -29,7 +29,7 @@ -
    fourdst::libcomposition v1.9.0 +
    fourdst::libcomposition v2.0.0
    Robust atomic species information library
    @@ -105,7 +105,7 @@ $(function(){initNavTree('index.html',''); initResizable(true); });

    Introduction

    libcomposition is a modern C++23 library designed for the creation, manipulation, and analysis of chemical compositions, with a focus on astrophysical applications. It provides a robust and user-friendly interface for handling material compositions defined by mass or number fractions.

    -

    +

    Key Features

    • Dual-Mode Operation: Natively supports compositions defined by mass fraction or number fraction.
    • @@ -118,7 +118,7 @@ Key Features

      Installation

      libcomposition uses the Meson build system. A C++23 compatible compiler is required.

      -

      +

      Build Steps

      Setup the build directory:

      The first step is to use meson to set up an out of source build. Note that this means that you can have multiple builds configured and cleanly seperated!

      @@ -129,7 +129,7 @@ Build Steps

    Install the library:

    This will also install a pkg-config file!

    sudo meson install -C builddir
    -

    +

    Build Options

    You can enable the generation of a pkg-config file during the setup step, which simplifies linking the library in other projects. by default this is true; it can be useful to disable this when using some build system orgestrator (such as meson-python).

    # Enable pkg-config file generation
    @@ -137,7 +137,7 @@ Build Options

    Usage

    -

    +

    Linking with pkg-config

    If you installed libcomposition with the pkg-config option enabled, you can get the necessary compiler and linker flags easily:

    # Get compiler flags (include paths)
    @@ -146,9 +146,9 @@ Linking with pkg-config
    # Get linker flags (library paths and names)
    pkg-config --libs fourdst_composition

    Example compilation command:

    g++ my_app.cpp $(pkg-config --cflags --libs fourdst_composition) -o my_app
    -

    +

    C++ Usage Examples

    -

    +

    1. Basic Mass Fraction Composition

    The most common use case is defining a composition by mass fractions (X, Y, Z).

    #include <iostream>
    @@ -159,32 +159,30 @@ C++ Usage Examples
    // 2. Register the symbols you want to use
    -
    comp.registerSymbol("H-1");
    -
    comp.registerSymbol("He-4");
    +
    comp.registerSymbol("H-1");
    +
    comp.registerSymbol("He-4");
    // 3. Set their mass fractions
    -
    comp.setMassFraction("H-1", 0.75);
    -
    comp.setMassFraction("He-4", 0.25);
    +
    comp.setMassFraction("H-1", 0.75);
    +
    comp.setMassFraction("He-4", 0.25);
    // 4. Finalize the composition to validate it and compute global properties
    -
    if (comp.finalize()) {
    +
    if (comp.finalize()) {
    std::cout << "Composition finalized successfully!" << std::endl;
    -
    std::cout << "H-1 Mass Fraction: " << comp.getMassFraction("H-1") << std::endl;
    -
    std::cout << "Mean Particle Mass: " << comp.getMeanParticleMass() << " g/mol" << std::endl;
    +
    std::cout << "H-1 Mass Fraction: " << comp.getMassFraction("H-1") << std::endl;
    +
    std::cout << "Mean Particle Mass: " << comp.getMeanParticleMass() << " g/mol" << std::endl;
    } else {
    std::cerr << "Failed to finalize composition." << std::endl;
    }
    return 0;
    }
    -
    Manages a collection of chemical species and their abundances.
    -
    void registerSymbol(const std::string &symbol, bool massFracMode=true)
    Registers a new symbol for inclusion in the composition.
    -
    double setMassFraction(const std::string &symbol, const double &mass_fraction)
    Sets the mass fraction for a given symbol.
    -
    bool finalize(bool norm=false)
    Finalizes the composition, making it ready for querying.
    -
    double getMeanParticleMass() const override
    Compute the mean particle mass of the composition.
    -
    std::unordered_map< std::string, double > getMassFraction() const override
    Gets the mass fractions of all species in the composition.
    +
    Manages a collection of chemical species and their abundances.
    Definition composition.h:97
    +
    void registerSymbol(const std::string &symbol)
    Registers a new symbol for inclusion in the composition.
    +
    std::unordered_map< atomic::Species, double > getMassFraction() const noexcept override
    Gets the mass fractions of all species in the composition.
    +
    double getMeanParticleMass() const noexcept override
    Compute the mean particle mass of the composition.
    -

    +

    2. Number Fraction Composition and Mode Switching

    The library can also work with number (mole) fractions and switch between modes.

    @@ -194,31 +192,29 @@ C++ Usage Examples
    // Register symbols in number fraction mode
    -
    comp.registerSymbol("H-1", false); // massFracMode = false
    -
    comp.registerSymbol("He-4", false);
    +
    comp.registerSymbol("H-1", false); // massFracMode = false
    +
    comp.registerSymbol("He-4", false);
    -
    comp.setNumberFraction("H-1", 0.9);
    -
    comp.setNumberFraction("He-4", 0.1);
    +
    comp.setNumberFraction("H-1", 0.9);
    +
    comp.setNumberFraction("He-4", 0.1);
    -
    if (comp.finalize()) {
    +
    if (comp.finalize()) {
    // We can get number fractions directly
    std::cout << "He-4 Number Fraction: " << comp.getNumberFraction("He-4") << std::endl;
    // Or get the equivalent mass fraction
    -
    std::cout << "He-4 Mass Fraction: " << comp.getMassFraction("He-4") << std::endl;
    +
    std::cout << "He-4 Mass Fraction: " << comp.getMassFraction("He-4") << std::endl;
    // Switch the entire composition to mass fraction mode
    -
    comp.setCompositionMode(true); // true for mass fraction mode
    +
    comp.setCompositionMode(true); // true for mass fraction mode
    // Now, getting the mass fraction is a direct lookup
    -
    std::cout << "He-4 Mass Fraction (after mode switch): " << comp.getMassFraction("He-4") << std::endl;
    +
    std::cout << "He-4 Mass Fraction (after mode switch): " << comp.getMassFraction("He-4") << std::endl;
    }
    }
    -
    void setCompositionMode(bool massFracMode)
    Sets the composition mode (mass fraction vs. number fraction).
    -
    double getNumberFraction(const std::string &symbol) const override
    Gets the number fraction for a given symbol.
    -
    double setNumberFraction(const std::string &symbol, const double &number_fraction)
    Sets the number fraction for a given symbol.
    +
    double getNumberFraction(const std::string &symbol) const override
    Gets the number fraction for a given symbol. See the overload for species-based lookup for more detai...
    -

    +

    3. Mixing Two Compositions

    You can easily mix two compositions. The library handles the union of all species.

    @@ -235,13 +231,12 @@ C++ Usage Examples
    // Mix them with a 75/25 ratio using the mix() method
    // 0.75 of comp1, 0.25 of comp2
    -
    fourdst::composition::Composition mixed2 = comp1.mix(comp2, 0.75);
    +
    fourdst::composition::Composition mixed2 = comp1.mix(comp2, 0.75);
    -
    std::cout << "50/50 Mix H-1: " << mixed.getMassFraction("H-1") << std::endl; // -> 0.5
    -
    std::cout << "75/25 Mix H-1: " << mixed2.getMassFraction("H-1") << std::endl; // -> 0.75
    +
    std::cout << "50/50 Mix H-1: " << mixed.getMassFraction("H-1") << std::endl; // -> 0.5
    +
    std::cout << "75/25 Mix H-1: " << mixed2.getMassFraction("H-1") << std::endl; // -> 0.75
    }
    -
    Composition mix(const Composition &other, double fraction) const
    Mixes this composition with another to produce a new composition.
    -

    +

    4. Error Handling

    The library uses exceptions to report errors. Always wrap calls in a try-catch block for robust code.

    @@ -249,31 +244,30 @@ C++ Usage Examples
    void error_example() {
    -
    comp.registerSymbol("H-1");
    -
    comp.setMassFraction("H-1", 1.0);
    +
    comp.registerSymbol("H-1");
    +
    comp.setMassFraction("H-1", 1.0);
    try {
    // This will throw, because the composition is not finalized yet.
    -
    double mass = comp.getMassFraction("H-1");
    - -
    std::cerr << "Caught expected error: " << e.what() << std::endl;
    +
    double mass = comp.getMassFraction("H-1");
    +
    } catch (const fourdst::composition::exceptions::CompositionNotFinalizedError& e) {
    +
    std::cerr << "Caught expected error: " << e.what() << std::endl;
    }
    try {
    // This will throw, because "Li-6" was never registered.
    -
    comp.setMassFraction("Li-6", 0.1);
    +
    comp.setMassFraction("Li-6", 0.1);
    std::cerr << "Caught expected error: " << e.what() << std::endl;
    }
    }
    const char * what() const noexcept override
    Returns the error message.
    -
    Exception thrown when an operation is attempted on a composition that has not been finalized.
    -
    Exception thrown when a symbol is used that has not been registered.
    -

    +
    Exception thrown when a symbol is used that has not been registered.
    +

    5. Accessing Atomic Data

    You can directly access the static database of all known species.

    -
    #include "fourdst/composition/species.h" // Provides static instances like H_1
    -
    #include "fourdst/composition/atomicSpecies.h" // Provides the main 'species' map
    +
    #include "fourdst/composition/species.h" // Provides static instances like H_1
    +
    #include "fourdst/composition/atomicSpecies.h" // Provides the main 'species' map
    void data_example() {
    // Access via the map
    @@ -284,16 +278,14 @@ C++ Usage Examples
    std::cout << "H-1 spin: " << fourdst::atomic::H_1.spin() << std::endl;
    std::cout << "F-18 half-life: " << fourdst::atomic::F_18.halfLife() << " s" << std::endl;
    }
    -
    static const Species F_18("F-18", "F", 0, 9, 9, 18, 7631.6383, "B-", -4444.5049, 6584.04, "+", "+=100", 18.000937324, 0.497)
    static const std::unordered_map< std::string, const Species & > species
    Map of species names to their corresponding Species objects.
    Definition species.h:3579
    static const Species H_1("H-1", "H", -1, 0, 1, 1, 0.0, "B-", std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::infinity(), "/2+*", "S=99.9855 78", 1.007825031898, 1.4e-05)
    -

    Testing

    libcomposition is tested using the GoogleTest framework. The test suite provides high coverage of the library's functionality.

    -

    +

    Test Coverage Includes: