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