272 lines
7.0 KiB
C++
272 lines
7.0 KiB
C++
#include "postSimulationFieldsDataBase.hpp"
|
|
#include "vocabs.hpp"
|
|
|
|
namespace pFlow
|
|
{
|
|
|
|
bool pointFieldGetType
|
|
(
|
|
const word& objectType,
|
|
word& fieldType,
|
|
word& fieldSpace
|
|
);
|
|
|
|
}
|
|
|
|
bool pFlow::postSimulationFieldsDataBase::pointFieldNameExists(const word& name) const
|
|
{
|
|
if(currentFileFields_.contains(name)) return true;
|
|
if(time().lookupObjectName(name)) return true;
|
|
return false;
|
|
}
|
|
|
|
bool pFlow::postSimulationFieldsDataBase::loadPointFieldToTime(const word &name)
|
|
{
|
|
if(time().lookupObjectName(name)) return true;
|
|
if(auto [iter, success]=currentFileFields_.findIf(name); success)
|
|
{
|
|
if(iter->second == "real")
|
|
{
|
|
allPointFields_.push_back
|
|
(
|
|
makeUnique<pointField_H<real>>
|
|
(
|
|
objectFile
|
|
(
|
|
name,
|
|
allValidFolders_.folder(),
|
|
objectFile::READ_ALWAYS,
|
|
objectFile::WRITE_NEVER
|
|
),
|
|
pStructPtr_(),
|
|
0.0
|
|
)
|
|
);
|
|
}
|
|
else if(iter->second=="realx3")
|
|
{
|
|
allPointFields_.push_back
|
|
(
|
|
makeUnique<pointField_H<realx3>>
|
|
(
|
|
objectFile
|
|
(
|
|
name,
|
|
allValidFolders_.folder(),
|
|
objectFile::READ_ALWAYS,
|
|
objectFile::WRITE_NEVER
|
|
),
|
|
pStructPtr_(),
|
|
0.0
|
|
)
|
|
);
|
|
}
|
|
else if(iter->second=="realx4")
|
|
{
|
|
allPointFields_.push_back
|
|
(
|
|
makeUnique<pointField_H<realx4>>
|
|
(
|
|
objectFile
|
|
(
|
|
name,
|
|
allValidFolders_.folder(),
|
|
objectFile::READ_ALWAYS,
|
|
objectFile::WRITE_NEVER
|
|
),
|
|
pStructPtr_(),
|
|
0.0
|
|
)
|
|
);
|
|
}
|
|
else if(iter->second == "uint32")
|
|
{
|
|
allPointFields_.push_back
|
|
(
|
|
makeUnique<pointField_H<uint32>>
|
|
(
|
|
objectFile
|
|
(
|
|
name,
|
|
allValidFolders_.folder(),
|
|
objectFile::READ_ALWAYS,
|
|
objectFile::WRITE_NEVER
|
|
),
|
|
pStructPtr_(),
|
|
0u
|
|
)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Field "<<name<<" has an invalid type: "
|
|
<< iter->second<<endl;
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Filed "<<name<<" not found in the current time folder: "
|
|
<< allValidFolders_.folder()<<endl;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool pFlow::postSimulationFieldsDataBase::loadPointStructureToTime()
|
|
{
|
|
if(!pStructPtr_)
|
|
{
|
|
// create pointStructure
|
|
pStructPtr_ = makeUnique<pointStructure>(control_, 0.0005);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
const pFlow::shape &pFlow::postSimulationFieldsDataBase::getShape() const
|
|
{
|
|
if(!shapePtr_)
|
|
{
|
|
word shapeType = shapeTypeName();
|
|
if(shapeType.empty())
|
|
{
|
|
fatalErrorInFunction
|
|
<< "shapeType is not set in the postprocess dictionary"<<endl;
|
|
fatalExit;
|
|
}
|
|
propertyPtr_ = makeUnique<property>(pFlow::propertyFile__, control_.caseSetup().path());
|
|
shapePtr_ = shape::create(shapeType, pFlow::shapeFile__, &control_.caseSetup(), propertyPtr_());
|
|
}
|
|
return shapePtr_();
|
|
}
|
|
|
|
pFlow::word pFlow::postSimulationFieldsDataBase::getPointFieldType(const word &name) const
|
|
{
|
|
if(auto [iter, success]=currentFileFields_.findIf(name); success)
|
|
{
|
|
return iter->second;
|
|
}
|
|
else
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Field "<<name<<" not found in the current time folder: "
|
|
<< allValidFolders_.folder()<<endl;
|
|
fatalExit;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
bool pFlow::postSimulationFieldsDataBase::setToCurrentFolder()
|
|
{
|
|
allPointFields_.clear();
|
|
pStructPtr_.reset(nullptr);
|
|
|
|
|
|
if( !allValidFolders_.containsPointStructure(allValidFolders_.folder()) )
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Folder "<<allValidFolders_.folder()
|
|
<<" does not contain a valid point structure file."<<endl;
|
|
return false;
|
|
}
|
|
|
|
time().setTime(allValidFolders_.currentTime());
|
|
|
|
loadPointStructureToTime();
|
|
|
|
auto files = allValidFolders_.currentFolderFiles();
|
|
|
|
currentFileFields_.clear();
|
|
|
|
word type, space;
|
|
for(auto& [name, objectType]: files)
|
|
{
|
|
if(pointFieldGetType(objectType, type, space))
|
|
{
|
|
if(name == pointStructureFile__) continue;
|
|
currentFileFields_.insertIf(name, type);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
pFlow::postSimulationFieldsDataBase::postSimulationFieldsDataBase
|
|
(
|
|
systemControl &control,
|
|
const dictionary& postDict,
|
|
bool inSimulation,
|
|
timeValue startTime
|
|
)
|
|
:
|
|
fieldsDataBase(control, postDict, inSimulation, startTime),
|
|
control_(control),
|
|
allValidFolders_(control, true)
|
|
{
|
|
if(allValidFolders_.empty())
|
|
{
|
|
fatalErrorInFunction
|
|
<< "No time folders found in the path: " << control.path()
|
|
<< " or no time folder with valid file content found in the path."
|
|
<< endl;
|
|
fatalExit;
|
|
}
|
|
if( ! allValidFolders_.setTime(startTime))
|
|
{
|
|
fatalErrorInFunction
|
|
<<"The start time: "
|
|
<< startTime<<" for postprocessing is not valid."<<endl
|
|
<<" valid range is ["<< allValidFolders_.startTime()
|
|
<<","<<allValidFolders_.endTime()<<"]"<<endl;
|
|
fatalExit;
|
|
}
|
|
|
|
if(!setToCurrentFolder())
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Error in setting the current folder to: "
|
|
<< allValidFolders_.folder()<<endl;
|
|
fatalExit;
|
|
}
|
|
}
|
|
|
|
const pFlow::pointStructure& pFlow::postSimulationFieldsDataBase::pStruct()const
|
|
{
|
|
return pStructPtr_();
|
|
}
|
|
|
|
pFlow::timeValue pFlow::postSimulationFieldsDataBase::getNextTimeFolder() const
|
|
{
|
|
return allValidFolders_.nextTime();
|
|
}
|
|
|
|
pFlow::timeValue pFlow::postSimulationFieldsDataBase::setToNextTimeFolder()
|
|
{
|
|
timeValue nextTime = allValidFolders_.nextTime();
|
|
if(nextTime < 0.0) return nextTime;
|
|
|
|
allValidFolders_++;
|
|
|
|
if(!setToCurrentFolder())
|
|
{
|
|
fatalErrorInFunction
|
|
<<"Error in setting the current folder to the next time folder."<<endl;
|
|
fatalExit;
|
|
return -1;
|
|
}
|
|
|
|
return nextTime;
|
|
}
|
|
|
|
pFlow::timeValue pFlow::postSimulationFieldsDataBase::skipNextTimeFolder()
|
|
{
|
|
timeValue nextTime = allValidFolders_.nextTime();
|
|
if(nextTime < 0.0) return nextTime;
|
|
|
|
allValidFolders_++;
|
|
return nextTime;
|
|
}
|