.. _program_listing_file_src_tracks_TrackCommons.hpp: Program Listing for File TrackCommons.hpp ========================================= |exhale_lsh| :ref:`Return to documentation for file ` (``src/tracks/TrackCommons.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef TRACKCOMMONS_HPP #define TRACKCOMMONS_HPP #include #include #include #include #include #include namespace tracks { enum class FieldIdx : std::uint8_t { mass, mdot, logL, logTe, hSurf, heSurf, cSurf, nSurf, oSurf, nTrackQty }; constexpr std::array(FieldIdx::nTrackQty)> fieldStr{ "mass", "mdot", "log_L", "log_Teff", "h_surf", "he_surf", "c_surf", "n_surf", "o_surf" }; inline static const std::string defaultRegistry = // NOLINT(bugprone-throwing-static-initialization,cert-err58-cpp) -- built from fixed string literals, so the (theoretically throwing) path conversion can never actually throw here (std::filesystem::path("data") / std::filesystem::path("tracks") / std::filesystem::path("tracks.toml")); inline constexpr double defaultVVcrit = 0.0; inline constexpr double defaultAFe = 0.0; inline constexpr std::array surfaceAbundanceIdx = { FieldIdx::hSurf, FieldIdx::heSurf, FieldIdx::cSurf, FieldIdx::nSurf, FieldIdx::oSurf }; inline void renormalizeSurfaceAbundances(std::array(FieldIdx::nTrackQty)>& props) { double sum = 0.0; for (const auto f : surfaceAbundanceIdx) { sum += props.at(static_cast(f)); } if (!(sum > 1.0)) { return; } // also leaves a NaN sum alone, for downstream checks to catch for (const auto f : surfaceAbundanceIdx) { props.at(static_cast(f)) /= sum; } } } // namespace tracks #endif // TRACKCOMMONS_HPP