67 const std::shared_ptr<SolverUtils::EquationSystem> &pEquation,
68 const std::map<std::string, std::string> &pParams)
72 auto it = pParams.find(
"SampleFrequency");
73 if (it == pParams.end())
84 it = pParams.find(
"MovingAverage");
85 if (it == pParams.end())
91 std::string sOption = it->second.c_str();
92 m_movAvg = (boost::iequals(sOption,
"true")) ||
93 (boost::iequals(sOption,
"yes"));
97 it = pParams.find(
"ScaleNumModes");
98 if (it == pParams.end())
115 it = pParams.find(
"alpha");
116 if (it == pParams.end())
118 it = pParams.find(
"tau");
119 if (it == pParams.end())
121 ASSERTL0(
false,
"MovingAverage needs either alpha or tau.");
130 m_session->LoadParameter(
"TimeStep", dT);
141 it = pParams.find(
"tau");
142 if (it != pParams.end())
145 "Cannot define both alpha and tau in MovingAverage");
156 size_t dim = pFields.size() - 1;
157 size_t nExtraFields = (dim + 1) * dim / 2;
158 size_t origFields = pFields.size();
159 size_t nqtot = pFields[0]->GetTotPoints();
160 bool waveSpace = pFields[0]->GetWaveSpace();
168 int nvariables =
m_session->GetVariables().size();
173 graph->GetExpansionInfo(
m_session->GetVariable(0));
178 for (
auto expIt = expInfo.begin(); expIt != expInfo.end(); ++expIt)
180 int expSpDim = expIt->second->m_basisKeyVector.size();
182 std::vector<LibUtilities::BasisKey> BKeyVector;
183 std::vector<int> oldPts(expSpDim);
185 for (
int i = 0; i < expSpDim; ++i)
188 expIt->second->m_basisKeyVector[i];
192 for (
int i = 0; i < expSpDim; ++i)
195 expIt->second->m_basisKeyVector[i];
208 (oldPts[0] - oldPts[i] == 1)
217 BKeyVector.push_back(bkeynew);
220 (*expInfoScaled)[expIt->first] =
222 expIt->second->m_geomPtr, BKeyVector);
225 graph->SetExpansionInfo(
"Highorder", expInfoScaled);
227 for (
int i = 0; i < pFields.size(); ++i)
232 "Nummodes scaling for Reynolds stresses is "
233 "implemented for 3DH1D expansions only.");
237 bool useFFT, homogen_dealiasing;
239 m_session->LoadParameter(
"HomModesZ", npointsZ);
241 m_session->MatchSolverInfo(
"USEFFT",
"FFTW", useFFT,
false);
242 m_session->MatchSolverInfo(
"DEALIASING",
"True",
243 homogen_dealiasing,
false);
253 homogen_dealiasing, graph,
266 WARNINGL0(nqtot != pFields[0]->GetTotPoints(),
267 "The scaled number of modes did not increase in the Reynolds "
269 "please increase scaled factor further.")
273 m_fields.resize(origFields + nExtraFields);
276 for (
size_t n = 0; n <
m_fields.size(); ++n)
281 for (
size_t n = 0; n <
m_delta.size(); ++n)
299 for (
size_t j = 0; j <
m_fields.size(); ++j)
302 if (pFields[0]->GetWaveSpace())
304 pFields[0]->HomogeneousBwdTrans(nqtot,
m_fields[j],
314 size_t dim = pFields.size() - 1;
315 size_t origFields = pFields.size();
318 for (
size_t n = 0; n < origFields; ++n)
320 m_variables.push_back(pFields[n]->GetSession()->GetVariable(n));
322 for (
int i = 0; i < dim; ++i)
324 for (
int j = i; j < dim; ++j)
326 std::string var = pFields[i]->GetSession()->GetVariable(i) +
327 pFields[j]->GetSession()->GetVariable(j);
339 size_t dim = pFields.size() - 1;
340 bool waveSpace = pFields[0]->GetWaveSpace();
342 size_t nq = pFields[0]->GetTotPoints();
343 size_t ncoeffs = pFields[0]->GetNcoeffs();
359 NekDouble facOld, facAvg, facStress, facDelta;
362 facOld = 1.0 - alpha;
371 facStress = nSamples / (nSamples - 1);
372 facDelta = 1.0 / nSamples;
379 for (n = 0; n < dim; ++n)
388 pFields[n]->HomogeneousBwdTrans(pFields[n]->GetTotPoints(),
389 pFields[n]->GetPhys(), phys);
394 pFields[n]->HomogeneousBwdTrans(nq, pFields[n]->GetPhys(), vel);
403 pFields[n]->GetPhys(), vel);
407 vel = pFields[n]->GetPhys();
425 pFields[dim]->HomogeneousBwdTrans(pFields[dim]->GetTotPoints(),
426 pFields[dim]->GetPhys(), phys);
439 pFields[dim]->GetPhys(), wsp1);
448 pFields[dim]->GetCoeffs(), 1, facOld,
m_outFields[dim],
459 for (i = 0, n = dim + 1; i < dim; ++i)
461 for (j = i; j < dim; ++j, ++n)
474 size_t dim = pFields.size() - 1;
479 bool waveSpace = pFields[0]->GetWaveSpace();
480 pFields[0]->SetWaveSpace(
false);
483 for (
size_t i = 0; i <
m_fields.size(); ++i)
500 pFields[0]->SetWaveSpace(waveSpace);
536 std::stringstream tmpOutname;
545 tmpOutname << name << suffix << ext;
549 tmpOutname << name <<
"_" << dump << suffix << ext;
558 for (
int i = 0; i <
m_modules.size(); ++i)
560 if (
m_modules[i]->GetModulePriority() == priority)
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define WARNINGL0(condition, msg)
Describes the specification for a Basis.
int GetNumPoints() const
Return points order at which basis is defined.
BasisType GetBasisType() const
Return type of expansion basis.
int GetNumModes() const
Returns the order of the basis.
PointsType GetPointsType() const
Return type of quadrature.
NekDouble Evaluate() const
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Defines a specification for a set of points.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
SOLVER_UTILS_EXPORT void CreateFields(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields)
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
std::vector< ModuleSharedPtr > m_modules
SOLVER_UTILS_EXPORT void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
SOLVER_UTILS_EXPORT std::string SetupOutput(const std::string ext, const ParamMap &pParams)
LibUtilities::SessionReaderSharedPtr m_session
NekDouble v_GetScale() override
std::string v_GetFileSuffix() override
NekDouble m_ScaleNumModes
void v_OutputField(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, int dump) override
FilterReynoldsStresses(const LibUtilities::SessionReaderSharedPtr &pSession, const std::shared_ptr< SolverUtils::EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
static std::string className
Name of the class.
std::vector< Array< OneD, NekDouble > > m_delta
void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
void v_FillVariablesName(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields) override
static FilterSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const std::shared_ptr< SolverUtils::EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
Creates an instance of this class.
std::vector< Array< OneD, NekDouble > > m_fields
Array< OneD, MultiRegions::ExpListSharedPtr > m_pFieldsScaled
void v_PrepareOutput(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
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
@ eFourierEvenlySpaced
1D Evenly-spaced points using Fourier Fit
@ eFourier
Fourier Expansion .
FilterFactory & GetFilterFactory()
std::shared_ptr< ExpansionInfoMap > ExpansionInfoMapShPtr
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::map< int, ExpansionInfoShPtr > ExpansionInfoMap
void Svtsvtp(int n, const T alpha, const T *x, int incx, const T beta, const T *y, int incy, T *z, int incz)
Svtsvtp (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.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.