68 const std::weak_ptr<SolverUtils::EquationSystem> &pEquation,
69 const std::map<std::string, std::string> &pParams)
73 auto it = pParams.find(
"SampleFrequency");
74 if (it == pParams.end())
85 it = pParams.find(
"MovingAverage");
86 if (it == pParams.end())
92 std::string sOption = it->second.c_str();
93 m_movAvg = (boost::iequals(sOption,
"true")) ||
94 (boost::iequals(sOption,
"yes"));
103 it = pParams.find(
"alpha");
104 if (it == pParams.end())
106 it = pParams.find(
"tau");
107 if (it == pParams.end())
109 ASSERTL0(
false,
"MovingAverage needs either alpha or tau.");
118 m_session->LoadParameter(
"TimeStep", dT);
129 it = pParams.find(
"tau");
130 if (it != pParams.end())
133 "Cannot define both alpha and tau in MovingAverage.");
148 size_t dim = pFields.size() - 1;
149 size_t nExtraFields = (dim + 1) * dim / 2;
150 size_t origFields = pFields.size();
151 size_t nqtot = pFields[0]->GetTotPoints();
154 m_fields.resize(origFields + nExtraFields);
157 for (
size_t n = 0; n <
m_fields.size(); ++n)
161 for (
size_t n = 0; n <
m_delta.size(); ++n)
172 for (
size_t j = 0; j <
m_fields.size(); ++j)
175 if (pFields[0]->GetWaveSpace())
177 pFields[0]->HomogeneousBwdTrans(nqtot,
m_fields[j],
187 size_t dim = pFields.size() - 1;
188 size_t origFields = pFields.size();
191 for (
size_t n = 0; n < origFields; ++n)
193 m_variables.push_back(pFields[n]->GetSession()->GetVariable(n));
195 for (
int i = 0; i < dim; ++i)
197 for (
int j = i; j < dim; ++j)
199 std::string var = pFields[i]->GetSession()->GetVariable(i) +
200 pFields[j]->GetSession()->GetVariable(j);
210 boost::ignore_unused(fieldcoeffs, time);
213 size_t nq = pFields[0]->GetTotPoints();
214 size_t dim = pFields.size() - 1;
215 bool waveSpace = pFields[0]->GetWaveSpace();
226 NekDouble facOld, facAvg, facStress, facDelta;
229 facOld = 1.0 - alpha;
238 facStress = nSamples / (nSamples - 1);
239 facDelta = 1.0 / nSamples;
246 for (n = 0; n < dim; ++n)
250 pFields[n]->HomogeneousBwdTrans(nq, pFields[n]->GetPhys(), vel);
254 vel = pFields[n]->GetPhys();
271 for (i = 0, n = dim + 1; i < dim; ++i)
273 for (j = i; j < dim; ++j, ++n)
286 boost::ignore_unused(time);
288 size_t dim = pFields.size() - 1;
294 bool waveSpace = pFields[0]->GetWaveSpace();
295 pFields[0]->SetWaveSpace(
false);
298 for (
size_t i = 0; i <
m_fields.size(); ++i)
307 pFields[0]->SetWaveSpace(waveSpace);
#define ASSERTL0(condition, msg)
NekDouble Evaluate() const
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
unsigned int m_sampleFrequency
std::vector< std::string > m_variables
unsigned int m_numSamples
LibUtilities::FieldMetaDataMap m_fieldMetaData
std::vector< Array< OneD, NekDouble > > m_outFields
virtual SOLVER_UTILS_EXPORT void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
LibUtilities::SessionReaderSharedPtr m_session
virtual NekDouble v_GetScale() override
SOLVER_UTILS_EXPORT FilterReynoldsStresses(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< SolverUtils::EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
static std::string className
Name of the class.
static FilterSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< SolverUtils::EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
Creates an instance of this class.
std::vector< Array< OneD, NekDouble > > m_delta
SOLVER_UTILS_EXPORT ~FilterReynoldsStresses()
virtual void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
virtual void v_FillVariablesName(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields) override
std::vector< Array< OneD, NekDouble > > m_fields
virtual void v_PrepareOutput(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
virtual void v_ProcessSample(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, const NekDouble &time) override
std::shared_ptr< SessionReader > SessionReaderSharedPtr
FilterFactory & GetFilterFactory()
The above copyright notice and this permission notice shall be included.
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
svtvvtp (scalar times vector plus scalar times vector):
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 Svtvm(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvm (scalar times vector minus vector): z = alpha*x - y