Simplification in DataExporter

- remove unused members
- use range-based for loops
- remove unnecessary if inside the writer loop
This commit is contained in:
Arne Morten Kvarving
2021-04-28 08:50:04 +02:00
committed by Knut Morten Okstad
parent ff9b50f033
commit e2fb65447a
2 changed files with 29 additions and 54 deletions

View File

@@ -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<std::string,FileEntry>::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<const std::string,FileEntry>& 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('.'));
}

View File

@@ -16,7 +16,6 @@
#include "ControlFIFO.h"
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -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