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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user