added: restart simulation at correct time level
git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@1144 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
parent
7ef6c5f42d
commit
861a43db7d
@ -96,7 +96,7 @@ bool DataExporter::dumpTimeLevel(SIMparameters* tp)
|
||||
}
|
||||
}
|
||||
if (tp)
|
||||
(*it2)->writeTimeInfo(m_level,*tp);
|
||||
(*it2)->writeTimeInfo(m_level,m_order,m_ndump,*tp);
|
||||
(*it2)->closeFile(m_level);
|
||||
}
|
||||
m_level++;
|
||||
|
@ -60,7 +60,6 @@ class DataExporter
|
||||
//! param[in] input The datawriter to read the data from (e.g. the HDF5 writer)
|
||||
bool loadTimeLevel(int level=-1, DataWriter* info=NULL, DataWriter* input=NULL);
|
||||
int getTimeLevel();
|
||||
|
||||
protected:
|
||||
int getWritersTimeLevel() const;
|
||||
|
||||
@ -93,7 +92,8 @@ public:
|
||||
virtual void writeSIM(int level, const DataEntry& entry) = 0;
|
||||
virtual bool readSIM(int level, const DataEntry& entry) = 0;
|
||||
|
||||
virtual bool writeTimeInfo(int level, SIMparameters& tp) = 0;
|
||||
virtual bool writeTimeInfo(int level, int order, int interval,
|
||||
SIMparameters& tp) = 0;
|
||||
|
||||
protected:
|
||||
std::string m_name; //!< File name
|
||||
|
@ -387,7 +387,8 @@ bool HDF5Writer::checkGroupExistence(int parent, const char* path)
|
||||
|
||||
// TODO: implement for variable timesteps
|
||||
// (named time series to allow different timelevels for different fields)
|
||||
bool HDF5Writer::writeTimeInfo(int level, SIMparameters& tp)
|
||||
bool HDF5Writer::writeTimeInfo(int level, int order, int interval,
|
||||
SIMparameters& tp)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -23,7 +23,8 @@ public:
|
||||
virtual bool readVector(int level, const DataEntry& entry);
|
||||
virtual void writeSIM(int level, const DataEntry& entry);
|
||||
virtual bool readSIM(int level, const DataEntry& entry);
|
||||
virtual bool writeTimeInfo(int level, SIMparameters& tp);
|
||||
virtual bool writeTimeInfo(int level, int order, int interval,
|
||||
SIMparameters& tp);
|
||||
|
||||
bool readField(int level, const std::string& name,
|
||||
Vector& vec, SIMbase* sim, int components);
|
||||
|
@ -15,6 +15,7 @@ XMLWriter::XMLWriter(const std::string& name) : DataWriter(name+".xml")
|
||||
m_doc = NULL;
|
||||
m_node = NULL;
|
||||
m_dt = 0;
|
||||
m_order = m_interval = 1;
|
||||
}
|
||||
|
||||
|
||||
@ -59,6 +60,8 @@ void XMLWriter::closeFile(int level, bool close)
|
||||
TiXmlElement element3("timestep");
|
||||
sprintf(temp,"%f",m_dt);
|
||||
element3.SetAttribute("constant","1");
|
||||
element3.SetAttribute("order",m_order);
|
||||
element3.SetAttribute("interval",m_interval);
|
||||
pNewNode = m_node->InsertEndChild(element3);
|
||||
TiXmlText value2(temp);
|
||||
pNewNode->InsertEndChild(value2);
|
||||
@ -175,8 +178,21 @@ void XMLWriter::addField (const std::string& name,
|
||||
m_node->InsertEndChild(element);
|
||||
}
|
||||
|
||||
bool XMLWriter::writeTimeInfo(int level, SIMparameters& tp)
|
||||
bool XMLWriter::writeTimeInfo(int level, int order, int interval,
|
||||
SIMparameters& tp)
|
||||
{
|
||||
m_dt = tp.time.dt;
|
||||
m_order = order;
|
||||
m_interval = interval;
|
||||
return true;
|
||||
}
|
||||
|
||||
int XMLWriter::realTimeLevel(int filelevel) const
|
||||
{
|
||||
return realTimeLevel(filelevel,m_order,m_interval);
|
||||
}
|
||||
|
||||
int XMLWriter::realTimeLevel(int filelevel, int order, int interval) const
|
||||
{
|
||||
return filelevel/order*interval+1;
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ public:
|
||||
int patches;
|
||||
int components;
|
||||
double timestep;
|
||||
int order;
|
||||
int interval;
|
||||
std::string type;
|
||||
};
|
||||
|
||||
@ -27,6 +29,12 @@ public:
|
||||
|
||||
virtual int getLastTimeLevel();
|
||||
|
||||
//! \brief Calculate the real time level, taking order and ndump into account
|
||||
int realTimeLevel(int filelevel) const;
|
||||
|
||||
//! \brief Calculate the real time level, taking order and ndump into account
|
||||
int realTimeLevel(int filelevel, int order, int interval) const;
|
||||
|
||||
void readInfo();
|
||||
const std::vector<Entry>& getEntries() const { return m_entry; }
|
||||
|
||||
@ -37,7 +45,8 @@ public:
|
||||
virtual bool readVector(int level, const DataEntry& entry);
|
||||
virtual void writeSIM(int level, const DataEntry& entry);
|
||||
virtual bool readSIM(int level, const DataEntry& entry);
|
||||
virtual bool writeTimeInfo(int level, SIMparameters& tp);
|
||||
virtual bool writeTimeInfo(int level, int order, int interval,
|
||||
SIMparameters& tp);
|
||||
|
||||
protected:
|
||||
void addField(const std::string& name, const std::string& description,
|
||||
@ -49,4 +58,6 @@ protected:
|
||||
TiXmlDocument* m_doc;
|
||||
TiXmlNode* m_node;
|
||||
double m_dt;
|
||||
int m_order;
|
||||
int m_interval;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user