added: ability to use a fixed time level in FieldFunctions
This commit is contained in:
parent
c5c43beca2
commit
02de121ca3
@ -50,6 +50,7 @@ FieldFuncHDF5::FieldFuncHDF5 (const std::string& fName)
|
|||||||
{
|
{
|
||||||
lastLevel = 0;
|
lastLevel = 0;
|
||||||
lastTime = 0.0;
|
lastTime = 0.0;
|
||||||
|
hasMultipleLevels = true;
|
||||||
#ifdef HAS_HDF5
|
#ifdef HAS_HDF5
|
||||||
pAdm = new ProcessAdm();
|
pAdm = new ProcessAdm();
|
||||||
hdf5 = new HDF5Reader(fName,*pAdm);
|
hdf5 = new HDF5Reader(fName,*pAdm);
|
||||||
@ -69,6 +70,7 @@ FieldFuncHDF5::~FieldFuncHDF5 ()
|
|||||||
|
|
||||||
int FieldFuncHDF5::findClosestLevel (double time) const
|
int FieldFuncHDF5::findClosestLevel (double time) const
|
||||||
{
|
{
|
||||||
|
if (!hasMultipleLevels) return lastLevel;
|
||||||
if (time == lastTime) return lastLevel;
|
if (time == lastTime) return lastLevel;
|
||||||
#ifdef HAS_HDF5
|
#ifdef HAS_HDF5
|
||||||
double t;
|
double t;
|
||||||
@ -102,6 +104,11 @@ bool FieldFuncHDF5::load (const std::vector<std::string>& fieldNames,
|
|||||||
{
|
{
|
||||||
size_t nOK = 0;
|
size_t nOK = 0;
|
||||||
size_t nPatches = 0;
|
size_t nPatches = 0;
|
||||||
|
if (level & FIXED_LEVEL) {
|
||||||
|
hasMultipleLevels = false;
|
||||||
|
level = level & ~FIXED_LEVEL;
|
||||||
|
lastLevel = level;
|
||||||
|
}
|
||||||
#ifdef HAS_HDF5
|
#ifdef HAS_HDF5
|
||||||
bool mixedField = basisName.find('-') == std::string::npos;
|
bool mixedField = basisName.find('-') == std::string::npos;
|
||||||
std::stringstream str;
|
std::stringstream str;
|
||||||
@ -246,6 +253,8 @@ FieldFunction::FieldFunction (const std::string& fileName,
|
|||||||
{
|
{
|
||||||
if (level >= 0)
|
if (level >= 0)
|
||||||
this->load({fieldName},basisName,level,true);
|
this->load({fieldName},basisName,level,true);
|
||||||
|
if (!hasMultipleLevels)
|
||||||
|
currentLevel = lastLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -331,6 +340,8 @@ FieldsFuncBase::FieldsFuncBase (const std::string& fileName,
|
|||||||
{
|
{
|
||||||
if (level >= 0)
|
if (level >= 0)
|
||||||
this->load(fName,basisName,level);
|
this->load(fName,basisName,level);
|
||||||
|
if (!hasMultipleLevels)
|
||||||
|
currentLevel = lastLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,9 @@ class ProcessAdm;
|
|||||||
|
|
||||||
class FieldFuncBase
|
class FieldFuncBase
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
static constexpr int FIXED_LEVEL = 1 << 24; //!< Bit flag in level for using fixed
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \brief Default constructor.
|
//! \brief Default constructor.
|
||||||
FieldFuncBase() : pidx(0), npch(0) {}
|
FieldFuncBase() : pidx(0), npch(0) {}
|
||||||
@ -87,11 +90,13 @@ protected:
|
|||||||
//! \brief Clears the field container.
|
//! \brief Clears the field container.
|
||||||
virtual void clearField() = 0;
|
virtual void clearField() = 0;
|
||||||
|
|
||||||
|
bool hasMultipleLevels; //!< True if we have multiple time levels
|
||||||
|
mutable int lastLevel; //!< The last time level read from
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HDF5Reader* hdf5; //!< The HDF5-file containing the field data
|
HDF5Reader* hdf5; //!< The HDF5-file containing the field data
|
||||||
ProcessAdm* pAdm; //!< Process administrator for the HDF5-file reader
|
ProcessAdm* pAdm; //!< Process administrator for the HDF5-file reader
|
||||||
|
|
||||||
mutable int lastLevel; //!< The last time level read from
|
|
||||||
mutable double lastTime; //!< The time of \a lastLevel
|
mutable double lastTime; //!< The time of \a lastLevel
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user