Program Listing for File TrackCommons.hpp
↰ Return to documentation for file (src/tracks/TrackCommons.hpp)
#ifndef TRACKCOMMONS_HPP
#define TRACKCOMMONS_HPP
#include <array>
#include <cstddef>
#include <cstdint>
#include <filesystem>
#include <string>
#include <string_view>
namespace tracks
{
enum class FieldIdx : std::uint8_t
{
mass,
mdot,
logL,
logTe,
hSurf,
heSurf,
cSurf,
nSurf,
oSurf,
nTrackQty
};
constexpr std::array<std::string_view,
static_cast<size_t>(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<FieldIdx, 5> surfaceAbundanceIdx = {
FieldIdx::hSurf, FieldIdx::heSurf, FieldIdx::cSurf, FieldIdx::nSurf, FieldIdx::oSurf };
inline void renormalizeSurfaceAbundances(std::array<double, static_cast<std::size_t>(FieldIdx::nTrackQty)>& props)
{
double sum = 0.0;
for (const auto f : surfaceAbundanceIdx) { sum += props.at(static_cast<std::size_t>(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<std::size_t>(f)) /= sum; }
}
} // namespace tracks
#endif // TRACKCOMMONS_HPP