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:
akva 2011-09-16 12:14:47 +00:00 committed by Knut Morten Okstad
parent 7ef6c5f42d
commit 861a43db7d
6 changed files with 36 additions and 7 deletions

View File

@ -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++;

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
};