From 9f50193d6205379438b1e26da38a5b778d7873b2 Mon Sep 17 00:00:00 2001 From: dkachuma Date: Tue, 7 Apr 2026 12:31:50 -0500 Subject: [PATCH 1/4] Fix MPI sync --- .../fluidFlow/SourceFluxStatistics.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp index 26f734efd64..450b0ea6df9 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp @@ -139,6 +139,14 @@ void SourceFluxStatsAggregator::registerDataOnMesh( Group & meshBodies ) } ); } } ); + + if( m_writeCSV > 0 && MpiWrapper::commRank() == 0 ) + { + std::ofstream outputFile( m_csvFilename ); + TableCSVFormatter const tableStatFormatter( m_csvLayout ); + outputFile << tableStatFormatter.headerToString(); + outputFile.close(); + } } void SourceFluxStatsAggregator::gatherStatsForLog( bool logLevelActive, @@ -215,9 +223,9 @@ void SourceFluxStatsAggregator::outputStatsToCSV( TableData & csvData ) { if( m_writeCSV > 0 && MpiWrapper::commRank() == 0 ) { - std::ofstream outputFile( m_csvFilename ); + std::ofstream outputFile( m_csvFilename, std::ios::app ); TableCSVFormatter const tableStatFormatter( m_csvLayout ); - outputFile << tableStatFormatter.toString( csvData ); + outputFile << tableStatFormatter.dataToString( csvData ); outputFile.close(); csvData.clear(); } @@ -241,19 +249,20 @@ bool SourceFluxStatsAggregator::execute( real64 const GEOS_UNUSED_PARAM( time_n { TableData logData; TableData csvData; - meshLevelStats.stats() = StatData(); + meshLevelStats.stats().reset(); forAllFluxStatsWrappers( meshLevel, [&] ( MeshLevel &, WrappedStats & fluxStats ) { - fluxStats.stats() = StatData(); + fluxStats.stats().reset(); forAllRegionStatsWrappers( meshLevel, fluxStats.getFluxName(), [&] ( ElementRegionBase & region, WrappedStats & regionStats ) { - regionStats.stats() = StatData(); + regionStats.stats().reset(); forAllSubRegionStatsWrappers( region, regionStats.getFluxName(), [&] ( ElementSubRegionBase &, WrappedStats & subRegionStats ) { + subRegionStats.stats().reset(); subRegionStats.finalizePeriod(); regionStats.stats().combine( subRegionStats.stats() ); } ); From 07de379efeb6da9ead88709032d2fd22df1e394d Mon Sep 17 00:00:00 2001 From: dkachuma Date: Wed, 13 May 2026 13:42:48 -0500 Subject: [PATCH 2/4] Sync times --- .../fluidFlow/SourceFluxStatistics.cpp | 15 ++++++++++----- .../fluidFlow/SourceFluxStatistics.hpp | 12 ++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp index 450b0ea6df9..f5e918d2e02 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp @@ -231,7 +231,7 @@ void SourceFluxStatsAggregator::outputStatsToCSV( TableData & csvData ) } } -bool SourceFluxStatsAggregator::execute( real64 const GEOS_UNUSED_PARAM( time_n ), +bool SourceFluxStatsAggregator::execute( real64 const GEOS_UNUSED_PARAM ( time_n ), real64 const GEOS_UNUSED_PARAM( dt ), integer const GEOS_UNUSED_PARAM( cycleNumber ), integer const GEOS_UNUSED_PARAM( eventCounter ), @@ -264,16 +264,16 @@ bool SourceFluxStatsAggregator::execute( real64 const GEOS_UNUSED_PARAM( time_n { subRegionStats.stats().reset(); subRegionStats.finalizePeriod(); - regionStats.stats().combine( subRegionStats.stats() ); + regionStats.combine( subRegionStats ); } ); - fluxStats.stats().combine( regionStats.stats() ); + fluxStats.combine( regionStats ); gatherStatsForLog( regionsStatsOn, fluxStats.getFluxName(), region.getName(), logData, regionStats ); gatherStatsForCSV( fluxStats.getFluxName(), region.getName(), csvData, regionStats ); } ); - meshLevelStats.stats().combine( fluxStats.stats() ); + meshLevelStats.combine( fluxStats ); gatherStatsForLog( fluxesStatsOn, fluxStats.getFluxName(), allRegionsStr, logData, fluxStats ); @@ -379,7 +379,7 @@ void SourceFluxStatsAggregator::WrappedStats::finalizePeriod() // produce the period stats of this rank m_stats.m_elementCount = m_periodStats.m_elementCount; - m_statsPeriodStart = m_periodStats.m_periodStart; + m_statsPeriodStart = MpiWrapper::max( m_periodStats.m_periodStart ); m_statsPeriodDT = m_periodStats.m_timeStepDeltaTime + m_periodStats.m_periodPendingDeltaTime; real64 const timeDivisor = m_statsPeriodDT > 0.0 ? 1.0 / m_statsPeriodDT : 0.0; @@ -396,6 +396,11 @@ void SourceFluxStatsAggregator::WrappedStats::finalizePeriod() // start a new timestep m_periodStats.reset(); } +void SourceFluxStatsAggregator::WrappedStats::combine( WrappedStats const & other ) +{ + stats().combine( other.stats() ); + m_statsPeriodStart = LvArray::math::max( m_statsPeriodStart, other.m_statsPeriodStart ); +} void SourceFluxStatsAggregator::WrappedStats::PeriodStats::allocate( integer phaseCount ) { if( m_timeStepMass.size() < phaseCount ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.hpp b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.hpp index b777cd3ba07..5b015e22232 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.hpp @@ -112,6 +112,14 @@ class SourceFluxStatsAggregator final : public FieldStatisticsBase< FlowSolverBa */ void finalizePeriod(); + /** + * @brief Aggregate the statistics of the instance with those of another one. + * @details Combines the statistics from the other object into this one and also advances the period + * start if the other object has a later time recorded. + * @param other the other WrappedStats object. + */ + void combine( WrappedStats const & other ); + /** * @return the reference to the wrapped stats data collected over the last period (one timestep or more), computed by finalizePeriod() */ @@ -151,7 +159,7 @@ class SourceFluxStatsAggregator final : public FieldStatisticsBase< FlowSolverBa /// stats data collected over the last period (one timestep or more), computed by finalizePeriod() StatData m_stats; /// the start time of the wrapped stats period (in s) - real64 m_statsPeriodStart; + real64 m_statsPeriodStart{-LvArray::NumericLimits< real64 >::max}; /// the duration of the wrapped stats period (in s) real64 m_statsPeriodDT; @@ -169,7 +177,7 @@ class SourceFluxStatsAggregator final : public FieldStatisticsBase< FlowSolverBa /// time that the current timestep is simulating. real64 m_timeStepDeltaTime = 0.0; /// start time of the current period. - real64 m_periodStart = 0.0; + real64 m_periodStart = -LvArray::NumericLimits< real64 >::max; /// delta time from all previous time-step of the current period. real64 m_periodPendingDeltaTime = 0.0; /// number of cell elements targeted by this instance From b9f8ba43c07cfddf5cd6aefc57244a8731d5496e Mon Sep 17 00:00:00 2001 From: dkachuma Date: Wed, 13 May 2026 13:47:48 -0500 Subject: [PATCH 3/4] Trivial change --- .../physicsSolvers/fluidFlow/SourceFluxStatistics.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp index f5e918d2e02..ef69d0ae326 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp @@ -372,6 +372,7 @@ void SourceFluxStatsAggregator::WrappedStats::gatherTimeStepStats( real64 const m_periodStats.m_timeStepMass = producedMass; } } + void SourceFluxStatsAggregator::WrappedStats::finalizePeriod() { // init phase data memory allocation if needed From e68749d6435e209d2e35618b4ac96d0b8f6effd2 Mon Sep 17 00:00:00 2001 From: dkachuma Date: Wed, 13 May 2026 13:47:56 -0500 Subject: [PATCH 4/4] Trivial change --- .../physicsSolvers/fluidFlow/SourceFluxStatistics.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp index ef69d0ae326..f5e918d2e02 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SourceFluxStatistics.cpp @@ -372,7 +372,6 @@ void SourceFluxStatsAggregator::WrappedStats::gatherTimeStepStats( real64 const m_periodStats.m_timeStepMass = producedMass; } } - void SourceFluxStatsAggregator::WrappedStats::finalizePeriod() { // init phase data memory allocation if needed