15 std::vector<double>
const& Y,
22 std::size_t maxNameLen = std::string_view(
"Species").size();
23 for (
const auto &key: timescales | std::views::keys) {
24 std::string_view name = key.name();
25 maxNameLen = std::max(maxNameLen, name.size());
29 constexpr int timescaleWidth = 12;
31 std::ostringstream ss;
32 ss <<
"== Timescales (s) ==\n";
35 ss << std::left << std::setw(static_cast<int>(maxNameLen) + 2) <<
"Species"
36 << std::right << std::setw(timescaleWidth) <<
"Timescale (s)" <<
"\n";
39 ss << std::string(static_cast<int>(maxNameLen) + 2 + timescaleWidth,
'=') <<
"\n";
41 ss << std::scientific;
44 for (
auto const& [species, timescale] : timescales) {
45 const std::string_view name = species.name();
46 ss << std::left << std::setw(static_cast<int>(maxNameLen) + 2) << name;
48 if (std::isinf(timescale)) {
49 ss << std::right << std::setw(timescaleWidth) <<
"inf" <<
"\n";
51 ss << std::right << std::setw(timescaleWidth)
52 << std::scientific << std::setprecision(3) << timescale <<
"\n";
57 ss << std::string(static_cast<int>(maxNameLen) + 2 + timescaleWidth,
'=') <<
"\n";
virtual std::unordered_map< fourdst::atomic::Species, double > getSpeciesTimescales(const std::vector< double > &Y, double T9, double rho) const =0
Compute timescales for all species in the network.
std::string formatNuclearTimescaleLogString(const DynamicEngine &engine, const std::vector< double > &Y, const double T9, const double rho)
Formats a map of nuclear species timescales into a human-readable string.