fixed: HDF5Writer::readSIM now works with mixed SIMs as well

git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@1032 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
akva
2011-06-01 15:52:11 +00:00
committed by Knut Morten Okstad
parent 774001219d
commit 63d14d2ace
3 changed files with 30 additions and 13 deletions

View File

@@ -98,7 +98,8 @@ bool DataExporter::dumpTimeLevel()
}
bool DataExporter::loadTimeLevel (int level, DataWriter* input)
bool DataExporter::loadTimeLevel (int level, DataWriter* info,
DataWriter* input)
{
if (!input)
if (m_writers.empty())
@@ -106,14 +107,21 @@ bool DataExporter::loadTimeLevel (int level, DataWriter* input)
else
input = m_writers.front();
if (level == -1)
if ((m_level = input->getLastTimeLevel()) < 0)
if (!info)
if (m_writers.empty())
return false;
else
level = m_level;
info = m_writers.front();
int level2=level;
if (level == -1)
if ((m_level = info->getLastTimeLevel()) < 0)
return false;
else
level2 = m_level;
bool ok = true;
input->openFile(level);
input->openFile(level2);
std::map<std::string,FileEntry>::iterator it;
for (it = m_entry.begin(); it != m_entry.end() && ok; ++it)
if (!it->second.data)
@@ -121,10 +129,10 @@ bool DataExporter::loadTimeLevel (int level, DataWriter* input)
else switch (it->second.field)
{
case VECTOR:
ok = input->readVector(level,*it);
ok = input->readVector(level2,*it);
break;
case SIM:
ok = input->readSIM(level,*it);
ok = input->readSIM(level2,*it);
break;
default:
ok = false;
@@ -132,9 +140,11 @@ bool DataExporter::loadTimeLevel (int level, DataWriter* input)
<< it->second.field << std::endl;
break;
}
input->closeFile(level);
m_level++;
input->closeFile(level2);
// if we load the last time level, we want to advance
// if we load a specified time level, we do not want to advance
if (level == -1)
m_level++;
return ok;
}

View File

@@ -48,7 +48,10 @@ class DataExporter
bool dumpTimeLevel();
//! \brief Loads last time level with first registered writer by default.
bool loadTimeLevel(int level=-1, DataWriter* input=NULL);
//! param[in] level Time level to load, defaults to last time level
//! param[in] info The datawriter to read the info from (e.g. the XML writer)
//! 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:

View File

@@ -180,6 +180,7 @@ bool HDF5Writer::readSIM (int level, const DataEntry& entry)
SIMbase* sim = static_cast<SIMbase*>(entry.second.data);
Vector* sol = static_cast<Vector*>(entry.second.data2);
if (!sol) return false;
const Integrand* prob = sim->getProblem();
for (int i = 0; i < sim->getNoPatches() && ok; ++i) {
std::stringstream str;
@@ -190,9 +191,12 @@ bool HDF5Writer::readSIM (int level, const DataEntry& entry)
int loc = sim->getLocalPatchIndex(i+1);
if (loc > 0) {
double* tmp = NULL; int siz = 0;
readArray(group2,entry.first,siz,tmp);
if (prob->mixedFormulation())
readArray(group2,entry.first,siz,tmp);
else
readArray(group2,prob->getField1Name(11),siz,tmp);
ok = sim->injectPatchSolution(*sol,Vector(tmp,siz),
loc-1,entry.second.size);
loc-1);
delete[] tmp;
}
H5Gclose(group2);