56 const std::weak_ptr<EquationSystem> &pEquation,
const ParamMap &pParams)
60 auto it = pParams.find(
"SampleFrequency");
61 if (it == pParams.end())
72 it = pParams.find(
"OriginalOrMaxOrMin");
73 if (it == pParams.end())
79 std::string sOptionType = it->second.c_str();
80 if (boost::iequals(sOptionType,
"maximum") ||
81 boost::iequals(sOptionType,
"max"))
85 else if (boost::iequals(sOptionType,
"minumun") ||
86 boost::iequals(sOptionType,
"min"))
90 else if (boost::iequals(sOptionType,
"original"))
96 WARNINGL0(
false,
"Detailed filter type is not found, use original");
103 it = pParams.find(
"BodyFittedCoordinateFile");
105 "Missing parameter 'BodyFittedCoordinateFile'.");
107 if (it->second.find_last_of(
'.') != std::string::npos)
114 std::stringstream outname;
115 outname << it->second <<
".fld";
138 const int npoints = pFields[0]->GetTotPoints();
176 std::vector<LibUtilities::FieldDefinitionsSharedPtr> fieldDef;
177 std::vector<std::vector<NekDouble>> fieldData;
188 for (
int k = 0; k <
m_bfsVars.size(); ++k)
193 for (
int i = 0; i < fieldData.size(); ++i)
195 pFields[0]->ExtractDataToCoeffs(fieldDef[i], fieldData[i],
204 pFields[0]->BwdTrans(tmp_coeffs,
m_bfcsDir[ii][jj]);
225 for (
int n = 0; n < 3; ++n)
240 if (pFields[0]->GetWaveSpace())
253 for (
int n = 0; n < 3; ++n)
255 pFields[0]->BwdTrans(
m_outFields[shift_thermal[n]],
257 if (pFields[0]->GetWaveSpace())
259 pFields[0]->HomogeneousBwdTrans(npoints,
268 ASSERTL0(
false,
"Restart file is expectd. It can be generated by \
269 FieldConvert in serial. For example: \
270 FieldConvert -m bodyFittedVelocity:bnd=0:bfcOut=1 \
271 mesh.xml session.xml baseflow.fld bfvFile.fld");
282 std::vector<std::string> varNames =
283 pFields[0]->GetSession()->GetVariables();
284 if (boost::iequals(varNames[0],
"u") && boost::iequals(varNames[1],
"v"))
289 else if (boost::iequals(varNames[0],
"rho") &&
290 boost::iequals(varNames[1],
"rhou"))
297 WARNINGL0(
false,
"Problem type is not claear. Please check");
318 ASSERTL0(
false,
"Unsupported dimension");
352 pFields[0]->BwdTrans(fieldcoeffs[shift_vel + n],
354 if (pFields[0]->GetWaveSpace())
356 pFields[0]->HomogeneousBwdTrans(pFields[0]->GetNpoints(),
363 int npoints = pFields[0]->GetTotPoints();
387 for (
int i = 0; i < length; ++i)
398 for (
int i = 0; i < length; ++i)
427 for (
int n = 0; n < 3; ++n)
429 pFields[0]->BwdTrans(fieldcoeffs[shift_thermal[n]],
431 if (pFields[0]->GetWaveSpace())
433 pFields[0]->HomogeneousBwdTrans(pFields[0]->GetNpoints(),
440 for (
int n = 0; n < 3; ++n)
447 for (
int i = 0; i < length; ++i)
460 for (
int i = 0; i < length; ++i)
478 for (
int n = 0; n < 3; ++n)
#define ASSERTL0(condition, msg)
#define WARNINGL0(condition, msg)
NekDouble Evaluate() const
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
static FilterSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
Creates an instance of this class.
std::vector< Array< OneD, NekDouble > > m_outFieldsVels
void v_ProcessSample(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, const NekDouble &time) override
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_bfcsDir
ProblemType m_problemType
NekDouble v_GetScale() override
std::vector< Array< OneD, NekDouble > > m_curFieldsVels
SOLVER_UTILS_EXPORT FilterBodyFittedVelocity(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
SOLVER_UTILS_EXPORT ~FilterBodyFittedVelocity() override
std::vector< Array< OneD, NekDouble > > m_curFieldsThermalVars
void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
std::vector< std::string > m_bfsVars
static std::string className
Name of the class.
std::vector< Array< OneD, NekDouble > > m_curFieldsVels_Car
void v_FillVariablesName(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields) override
std::vector< Array< OneD, NekDouble > > m_outFieldsThermalVars
std::string m_bodyFittedCooriateFile
unsigned int m_nAddFields
void v_PrepareOutput(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
std::string m_restartFile
unsigned int m_sampleFrequency
std::vector< std::string > m_variables
unsigned int m_numSamples
virtual SOLVER_UTILS_EXPORT void v_FillVariablesName(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields)
LibUtilities::FieldMetaDataMap m_fieldMetaData
std::vector< Array< OneD, NekDouble > > m_outFields
SOLVER_UTILS_EXPORT void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
LibUtilities::SessionReaderSharedPtr m_session
std::map< std::string, std::string > ParamMap
std::shared_ptr< FieldIO > FieldIOSharedPtr
std::map< std::string, std::string > FieldMetaDataMap
std::shared_ptr< SessionReader > SessionReaderSharedPtr
FilterFactory & GetFilterFactory()
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Zero(int n, T *x, const int incx)
Zero vector.