diff --git a/src/Utility/DataExporter.C b/src/Utility/DataExporter.C index 4d86abb5..fd3681d1 100644 --- a/src/Utility/DataExporter.C +++ b/src/Utility/DataExporter.C @@ -73,19 +73,6 @@ bool DataExporter::registerField (const std::string& name, } -bool DataExporter::registerWriter (DataWriter* writer, bool info, bool data) -{ - m_writers.push_back(writer); - - if (info) - m_infoReader = writer; - if (data) - m_dataReader = writer; - - return true; -} - - bool DataExporter::setFieldValue (const std::string& name, const void* data, const void* data2, @@ -107,50 +94,45 @@ bool DataExporter::setFieldValue (const std::string& name, bool DataExporter::dumpTimeLevel (const TimeStep* tp, bool geometryUpdated) { - // ignore multiple calls for the same time step - if (tp && tp->step == m_last_step) - return true; + if (tp) { + if (tp->step == m_last_step) + return true; // ignore multiple calls for the same time step + else if (tp->step % m_ndump > 0) + return true; // write only every m_ndump step - bool writeData = !tp || tp->step % m_ndump == 0; - - if (!writeData) - return true; + m_last_step = tp->step; + } PROFILE1("DataExporter::dumpTimeLevel"); - if (tp) - m_last_step = tp->step; - if (m_level == -1) m_level = this->getWritersTimeLevel()+1; - std::map::iterator it; for (DataWriter* writer : m_writers) { writer->openFile(m_level); - for (it = m_entry.begin(); it != m_entry.end(); ++it) { - if (!it->second.data) + for (const DataEntry& it : m_entry) { + if (!it.second.data) return false; - switch (it->second.field) { + switch (it.second.field) { case INTVECTOR: case VECTOR: - writer->writeVector(m_level,*it); + writer->writeVector(m_level,it); break; case SIM: - if (writeData) - writer->writeSIM(m_level,*it,geometryUpdated,it->second.prefix); + writer->writeSIM(m_level,it,geometryUpdated,it.second.prefix); break; case NODALFORCES: - writer->writeNodalForces(m_level,*it); + writer->writeNodalForces(m_level,it); break; case KNOTSPAN: - writer->writeKnotspan(m_level,*it,it->second.prefix); + writer->writeKnotspan(m_level,it,it.second.prefix); break; case BASIS: - writer->writeBasis(m_level,*it,it->second.prefix); + writer->writeBasis(m_level,it,it.second.prefix); break; default: std::cerr <<" ** DataExporter: Invalid field type registered " - << it->second.field <<", skipping"<< std::endl; + << it.second.field <<", skipping"<< std::endl; break; } } @@ -162,9 +144,9 @@ bool DataExporter::dumpTimeLevel (const TimeStep* tp, bool geometryUpdated) m_level++; // disable fields marked as once - for (it = m_entry.begin(); it != m_entry.end(); ++it) - if (abs(it->second.results) & ONCE) - it->second.enabled = false; + for (std::pair& it : m_entry) + if (abs(it.second.results) & ONCE) + it.second.enabled = false; return true; } @@ -225,8 +207,9 @@ void DataExporter::OnControl(const TiXmlElement* context) std::string DataExporter::getName() const { - if (!m_writers.empty()) - return m_writers.front()->getName().substr(0,m_writers.front()->getName().rfind('.')); + if (m_writers.empty()) + return ""; - return ""; + const std::string& name = m_writers.front()->getName(); + return name.substr(0,name.rfind('.')); } diff --git a/src/Utility/DataExporter.h b/src/Utility/DataExporter.h index 2684ff39..7a6df108 100644 --- a/src/Utility/DataExporter.h +++ b/src/Utility/DataExporter.h @@ -16,7 +16,6 @@ #include "ControlFIFO.h" #include -#include #include #include @@ -80,12 +79,14 @@ public: //! \param[in] dynWriters If \e true, delete the writers on destruction //! \param[in] ndump Interval between dumps DataExporter(bool dynWriters = false, int ndump=1) : - m_delete(dynWriters), m_level(-1), m_ndump(ndump), - m_last_step(-1), m_infoReader(0), m_dataReader(0) {} + m_delete(dynWriters), m_level(-1), m_ndump(ndump), m_last_step(-1) {} //! \brief The destructor deletes the writers if \a dynWriters was \e true. virtual ~DataExporter(); + //! \brief Adds the data \a writer to the list of registered writers. + void registerWriter(DataWriter* writer) { m_writers.push_back(writer); } + //! \brief Registers an entry for storage. //! \param[in] name Name of entry //! \param[in] description Description of entry @@ -98,12 +99,6 @@ public: FieldType field, int results = PRIMARY, const std::string& prefix = "", int ncmps = 0); - //! \brief Registers a data writer. - //! \param[in] writer A pointer to the data writer we want registered - //! \param info If \e true, set as default info reader - //! \param reader If \e true, set as default data reader - bool registerWriter(DataWriter* writer, bool info=false, bool reader=false); - //! \brief Sets the data values for a registered field. //! \param[in] name Name the field is registered with //! \param[in] data The value to set the field to @@ -135,10 +130,10 @@ public: //! \brief Returns context name for callback for external controller. virtual std::string GetContext() const { return "datawriter"; } - //! \brief Return name from data writer + //! \brief Returns name from (first) data writer. std::string getName() const; - //! \brief Returns visualization data stride + //! \brief Returns the data dump stride. int getStride() const { return m_ndump; } protected: @@ -154,9 +149,6 @@ protected: int m_level; //!< Current time level int m_ndump; //!< Time level stride for dumping int m_last_step; //!< Last time step we dumped for - - DataWriter* m_infoReader; //!< DataWriter to read data information from - DataWriter* m_dataReader; //!< DataWriter to read numerical data from }; //! \brief Convenience type