diff --git a/library/SolverUtils/Filters/FilterHistoryPoints.cpp b/library/SolverUtils/Filters/FilterHistoryPoints.cpp index b4ce9e495ef4a4e4795fdfbf3918f7323b96f382..6a48b90fe31e1901418dcffc95618e73c1b85b2c 100644 --- a/library/SolverUtils/Filters/FilterHistoryPoints.cpp +++ b/library/SolverUtils/Filters/FilterHistoryPoints.cpp @@ -658,10 +658,10 @@ void FilterHistoryPoints::v_Update(const ArrayAllReduce(data, LibUtilities::ReduceSum); - WriteData(vComm->GetRank(), data, numFields, time); + v_WriteData(vComm->GetRank(), data, numFields, time); } -void FilterHistoryPoints::WriteData(const int &rank, const Array &data, const int &numFields, const NekDouble &time) +void FilterHistoryPoints::v_WriteData(const int &rank, const Array &data, const int &numFields, const NekDouble &time) { // Only the root process writes out history data if (rank == 0) diff --git a/library/SolverUtils/Filters/FilterHistoryPoints.h b/library/SolverUtils/Filters/FilterHistoryPoints.h index ef8a508026517819d3280c284e1be545b5074d92..6b26d490ea63cf66a03a89da92d46a5436a6faac 100644 --- a/library/SolverUtils/Filters/FilterHistoryPoints.h +++ b/library/SolverUtils/Filters/FilterHistoryPoints.h @@ -79,7 +79,8 @@ class FilterHistoryPoints : public Filter const NekDouble &time); SOLVER_UTILS_EXPORT virtual bool v_IsTimeDependent(); bool GetPoint(Array gloCoord, int I); - void WriteData(const int &rank, const Array &data, + SOLVER_UTILS_EXPORT virtual void v_WriteData(const int &rank, + const Array &data, const int &numFields, const NekDouble &time); SpatialDomains::PointGeomVector m_historyPoints; diff --git a/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.cpp b/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.cpp index 8f673f10568119b97ab7e2f721524ade9e9a6be7..3a654e5001875254317998d8a77b23745d794de8 100644 --- a/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.cpp +++ b/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.cpp @@ -32,6 +32,7 @@ // /////////////////////////////////////////////////////////////////////////////// +#include #include #include #include @@ -133,9 +134,10 @@ void FilterCellHistoryPoints::v_Update( // Exchange history data // This could be improved to reduce communication but works for now vComm->AllReduce(data, LibUtilities::ReduceSum); + v_WriteData(vComm->GetRank(), data, numFields, time); // Only the root process writes out history data - if (vComm->GetRank() == 0) +/* if (vComm->GetRank() == 0) { // Write data values point by point @@ -150,6 +152,88 @@ void FilterCellHistoryPoints::v_Update( } m_outputStream << endl; } + }*/ +} + +void FilterCellHistoryPoints::v_WriteData(const int &rank, const Array &data, const int &numFields, const NekDouble &time) +{ + // Only the root process writes out history data + if (rank == 0) + { + Array gloCoord(3,0.0); + if ( !m_outputOneFile || m_index == 1) + { + std::stringstream vOutputFilename; + if (m_outputOneFile) + { + vOutputFilename << m_outputFile << ".his"; + } + else + { + vOutputFilename << m_outputFile << "_" << m_outputIndex << ".his"; + } + ++m_outputIndex; + if (m_adaptive) + { + m_outputStream.open(vOutputFilename.str().c_str(), ofstream::app); + } + else + { + m_outputStream.open(vOutputFilename.str().c_str()); + } + //m_outputStream << "# History data for variables (:"; + + //for (int i = 0; i < numFields; ++i) + //{ + // m_outputStream << m_session->GetVariable(i) <<","; + //} + + if(m_isHomogeneous1D) + { + m_outputStream << ") at points:" << endl; + } + else + { + m_outputStream << ") at points:" << endl; + } + + for (int i = 0; i < m_historyPoints.size(); ++i) + { + m_historyPoints[i]->GetCoords( gloCoord[0], + gloCoord[1], + gloCoord[2]); + + m_outputStream << "# " << boost::format("%6.0f") % i; + m_outputStream << " " << boost::format("%15.9e") % gloCoord[0]; + m_outputStream << " " << boost::format("%15.9e") % gloCoord[1]; + m_outputStream << " " << boost::format("%15.9e") % gloCoord[2]; + m_outputStream << endl; + } + + if(m_isHomogeneous1D) + { + if (m_waveSpace) + { + m_outputStream << "# (in Wavespace)" << endl; + } + } + } + + // Write data values point by point + for (int k = 0; k < m_historyPoints.size(); ++k) + { + m_outputStream << boost::format("%15.9e") % time; + for (int j = 0; j < numFields; ++j) + { + m_outputStream << " " << boost::format("%15.9e") % data[k*numFields+j]; + } + m_outputStream << endl; + } + + if ( !m_outputOneFile) + { + m_outputStream.close();; + } } } diff --git a/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.h b/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.h index 29a02b9ced6453b546ea1eb1ee8dbecc43097c35..33a169e57ce5950a1ed01993e8edaa04d784f580 100644 --- a/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.h +++ b/solvers/CardiacEPSolver/Filters/FilterCellHistoryPoints.h @@ -76,6 +76,9 @@ class FilterCellHistoryPoints : public SolverUtils::FilterHistoryPoints virtual void v_Update( const Array &pFields, const NekDouble &time); + virtual void v_WriteData(const int &rank, + const Array &data, + const int &numFields, const NekDouble &time); CellModelSharedPtr m_cell;