From 9034acb7af04c7576b1bcbce220b5e2674dc5f82 Mon Sep 17 00:00:00 2001 From: LudwigBoess Date: Fri, 6 Mar 2026 21:44:17 +0000 Subject: [PATCH 1/2] added option to output stats at higher precision --- src/output/stats.cpp | 12 ++++++++---- src/output/stats.h | 36 ++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/output/stats.cpp b/src/output/stats.cpp index 3cd77bfd7..1d1038d5f 100644 --- a/src/output/stats.cpp +++ b/src/output/stats.cpp @@ -79,17 +79,21 @@ namespace stats { void Writer::writeHeader() { CallOnce( - [](auto& fname, auto& stat_writers) { + [this](auto& fname, auto& stat_writers) { std::fstream StatsOut(fname, std::fstream::out | std::fstream::app); - StatsOut << std::setw(14) << "step" << "," << std::setw(14) << "time" + StatsOut << std::setw(io_precision + 8) + << "step" + << "," + << std::setw(io_precision + 8) + << "time" << ","; for (const auto& stat : stat_writers) { if (stat.is_vector()) { for (auto i { 0u }; i < stat.comp.size(); ++i) { - StatsOut << std::setw(14) << stat.name(i) << ","; + StatsOut << std::setw(io_precision + 8) << stat.name(i) << ","; } } else { - StatsOut << std::setw(14) << stat.name() << ","; + StatsOut << std::setw(io_precision + 8) << stat.name() << ","; } } StatsOut << std::endl; diff --git a/src/output/stats.h b/src/output/stats.h index e91616699..68ea6960f 100644 --- a/src/output/stats.h +++ b/src/output/stats.h @@ -151,6 +151,11 @@ namespace stats { tools::Tracker m_tracker; public: +#if defined(SINGLE_PRECISION) + const int io_precision = 9; +#else + const int io_precision = 18; +#endif Writer() {} ~Writer() = default; @@ -185,14 +190,29 @@ namespace stats { (void)communicate; tot_value = value; #endif - CallOnce( - [](auto&& fname, auto&& value) { - std::fstream StatsOut(fname, std::fstream::out | std::fstream::app); - StatsOut << std::setw(14) << value << ","; - StatsOut.close(); - }, - m_fname, - tot_value); + + if constexpr (std::is_floating_point_v) { + CallOnce( + [this](auto&& fname, auto&& value) { + std::fstream StatsOut(fname, std::fstream::out | std::fstream::app); + StatsOut << std::setw(io_precision + 8) + << std::setprecision(io_precision) + << value + << ","; + StatsOut.close(); + }, + m_fname, + tot_value); + } else { + CallOnce( + [this](auto&& fname, auto&& value) { + std::fstream StatsOut(fname, std::fstream::out | std::fstream::app); + StatsOut << std::setw(io_precision + 8) << value << ","; + StatsOut.close(); + }, + m_fname, + tot_value); + } } void endWriting(); From 38a42f843ff8ce8095140c08c1832948b299ea84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludwig=20B=C3=B6ss?= Date: Mon, 9 Mar 2026 12:12:34 -0500 Subject: [PATCH 2/2] use fixed `io_precision` for single and double precision --- src/output/stats.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/output/stats.h b/src/output/stats.h index 68ea6960f..b687e4107 100644 --- a/src/output/stats.h +++ b/src/output/stats.h @@ -151,11 +151,8 @@ namespace stats { tools::Tracker m_tracker; public: -#if defined(SINGLE_PRECISION) - const int io_precision = 9; -#else const int io_precision = 18; -#endif + Writer() {} ~Writer() = default;