diff --git a/src/coreComponents/physicsSolvers/SolverStatistics.cpp b/src/coreComponents/physicsSolvers/SolverStatistics.cpp index 4324bc684ef..5c4ca42e0b2 100644 --- a/src/coreComponents/physicsSolvers/SolverStatistics.cpp +++ b/src/coreComponents/physicsSolvers/SolverStatistics.cpp @@ -20,6 +20,7 @@ #include "SolverStatistics.hpp" #include "fileIO/Outputs/OutputBase.hpp" +#include "common/MpiWrapper.hpp" namespace geos { @@ -156,18 +157,21 @@ void IterationsStatistics::writeIterationStatsToTable() m_setupTime, m_solveTime ); - if( !m_CSVOutputOpened ) + if( MpiWrapper::commRank() == 0 ) { - m_logStream.open( m_iterationsFilename ); - m_iterationCSVFormatter = std::make_unique< TableCSVFormatter >( m_iterationCSVLayout ); - m_logStream << m_iterationCSVFormatter->headerToString( ); - m_CSVOutputOpened = true; + if( !m_CSVOutputOpened ) + { + m_logStream.open( m_iterationsFilename ); + m_iterationCSVFormatter = std::make_unique< TableCSVFormatter >( m_iterationCSVLayout ); + m_logStream << m_iterationCSVFormatter->headerToString( ); + m_CSVOutputOpened = true; + } + + m_logStream << m_iterationCSVFormatter->dataToString( m_iterationData ); + m_logStream.flush(); } - m_logStream << m_iterationCSVFormatter->dataToString( m_iterationData ); - m_logStream.flush(); m_iterationData.clear(); - resetSolverLinearTime(); } @@ -228,23 +232,27 @@ void ConvergenceStatistics::writeConvergenceStatsToTable() m_convergenceData.addRow( residualsNormCells ); - if( !m_CSVOutputOpened ) + if( MpiWrapper::commRank() == 0 ) { - string_array header = {"Cycle number", "time_n (s)", "dt (s)", "iteration"}; - for( auto const & residual : m_residuals ) + if( !m_CSVOutputOpened ) { - header.emplace_back( residual.first ); + string_array header = {"Cycle number", "time_n (s)", "dt (s)", "iteration"}; + for( auto const & residual : m_residuals ) + { + header.emplace_back( residual.first ); + } + m_convergenceLayout.addColumns( header ); + + m_logStream.open( m_convergenceFilename ); + m_convergenceFormatter = std::make_unique< TableCSVFormatter >( m_convergenceLayout ); + m_logStream << m_convergenceFormatter->headerToString( ); + m_CSVOutputOpened = true; } - m_convergenceLayout.addColumns( header ); - m_logStream.open( m_convergenceFilename ); - m_convergenceFormatter = std::make_unique< TableCSVFormatter >( m_convergenceLayout ); - m_logStream << m_convergenceFormatter->headerToString( ); - m_CSVOutputOpened = true; + m_logStream << m_convergenceFormatter->dataToString( m_convergenceData ); + m_logStream.flush(); } - m_logStream << m_convergenceFormatter->dataToString( m_convergenceData ); - m_logStream.flush(); m_convergenceData.clear(); } diff --git a/src/coreComponents/physicsSolvers/multiphysics/CoupledSolver.hpp b/src/coreComponents/physicsSolvers/multiphysics/CoupledSolver.hpp index c5cddf6acd1..c2cec6baf68 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/CoupledSolver.hpp +++ b/src/coreComponents/physicsSolvers/multiphysics/CoupledSolver.hpp @@ -576,6 +576,7 @@ class CoupledSolver : public PhysicsSolverBase forEachArgInTuple( m_solvers, [&]( auto & solver, auto ) { solver->getIterationStats().iterateTimeStepStatistics(); + solver->getIterationStats().writeIterationStatsToTable(); } ); // get out of the time loop break; @@ -592,6 +593,7 @@ class CoupledSolver : public PhysicsSolverBase forEachArgInTuple( m_solvers, [&]( auto & solver, auto ) { solver->getIterationStats().updateTimeStepCut(); + solver->getIterationStats().writeIterationStatsToTable(); } ); } }