Nektar++
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
Nektar::SolverUtils::FilterMovingAverage Class Reference

#include <FilterMovingAverage.h>

Inheritance diagram for Nektar::SolverUtils::FilterMovingAverage:
[legend]

Public Member Functions

SOLVER_UTILS_EXPORT FilterMovingAverage (const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
 
SOLVER_UTILS_EXPORT ~FilterMovingAverage () override
 
- Public Member Functions inherited from Nektar::SolverUtils::FilterFieldConvert
SOLVER_UTILS_EXPORT FilterFieldConvert (const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
 
SOLVER_UTILS_EXPORT ~FilterFieldConvert () override
 
- Public Member Functions inherited from Nektar::SolverUtils::Filter
SOLVER_UTILS_EXPORT Filter (const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation)
 
virtual SOLVER_UTILS_EXPORT ~Filter ()
 
SOLVER_UTILS_EXPORT void Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT void Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT void Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT bool IsTimeDependent ()
 

Static Public Member Functions

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. More...
 
- Static Public Member Functions inherited from Nektar::SolverUtils::FilterFieldConvert
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. More...
 

Static Public Attributes

static std::string className
 Name of the class. More...
 
- Static Public Attributes inherited from Nektar::SolverUtils::FilterFieldConvert
static std::string className
 Name of the class. More...
 

Protected Member Functions

void v_ProcessSample (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, const NekDouble &time) override
 
std::string v_GetFileSuffix () override
 
- Protected Member Functions inherited from Nektar::SolverUtils::FilterFieldConvert
SOLVER_UTILS_EXPORT void v_Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
 
virtual SOLVER_UTILS_EXPORT void v_FillVariablesName (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields)
 
SOLVER_UTILS_EXPORT void v_Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
 
SOLVER_UTILS_EXPORT void v_Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
 
virtual SOLVER_UTILS_EXPORT void v_ProcessSample (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, const NekDouble &time)
 
virtual SOLVER_UTILS_EXPORT void v_PrepareOutput (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
virtual SOLVER_UTILS_EXPORT NekDouble v_GetScale ()
 
virtual SOLVER_UTILS_EXPORT std::string v_GetFileSuffix ()
 
void OutputField (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, int dump=-1)
 
SOLVER_UTILS_EXPORT bool v_IsTimeDependent () override
 
void CreateModules (std::vector< std::string > &modcmds)
 
void CreateFields (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields)
 
void CheckModules (std::vector< ModuleSharedPtr > &modules)
 
virtual void v_Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)=0
 
virtual void v_Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)=0
 
virtual void v_Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)=0
 
virtual bool v_IsTimeDependent ()=0
 

Protected Attributes

NekDouble m_alpha
 
- Protected Attributes inherited from Nektar::SolverUtils::FilterFieldConvert
unsigned int m_numSamples
 
unsigned int m_outputFrequency
 
unsigned int m_sampleFrequency
 
std::string m_outputFile
 
std::string m_restartFile
 
unsigned int m_index
 
unsigned int m_outputIndex
 
bool m_phaseSample
 
NekDouble m_phaseSamplePeriod
 
NekDouble m_phaseSamplePhase
 
NekDouble m_phaseTolerance
 
NekDouble m_dt
 
std::vector< ModuleSharedPtrm_modules
 
LibUtilities::FieldMetaDataMap m_fieldMetaData
 
std::vector< Array< OneD, NekDouble > > m_outFields
 
std::vector< std::string > m_variables
 
FieldSharedPtr m_f
 
po::variables_map m_vm
 
- Protected Attributes inherited from Nektar::SolverUtils::Filter
LibUtilities::SessionReaderSharedPtr m_session
 
const std::weak_ptr< EquationSystemm_equ
 

Friends

class MemoryManager< FilterMovingAverage >
 

Additional Inherited Members

- Public Types inherited from Nektar::SolverUtils::Filter
typedef std::map< std::string, std::string > ParamMap
 

Detailed Description

Definition at line 43 of file FilterMovingAverage.h.

Constructor & Destructor Documentation

◆ FilterMovingAverage()

Nektar::SolverUtils::FilterMovingAverage::FilterMovingAverage ( const LibUtilities::SessionReaderSharedPtr pSession,
const std::weak_ptr< EquationSystem > &  pEquation,
const ParamMap pParams 
)

Definition at line 44 of file FilterMovingAverage.cpp.

47 : FilterFieldConvert(pSession, pEquation, pParams)
48{
49 // Load sampling frequency
50 auto it = pParams.find("SampleFrequency");
51 if (it == pParams.end())
52 {
54 }
55 else
56 {
57 LibUtilities::Equation equ(m_session->GetInterpreter(), it->second);
58 m_sampleFrequency = round(equ.Evaluate());
59 }
60
61 // Load filter parameter
62 it = pParams.find("alpha");
63 if (it == pParams.end())
64 {
65 it = pParams.find("tau");
66 if (it == pParams.end())
67 {
68 ASSERTL0(false, "FilterMovingAverage needs either alpha or tau.");
69 }
70 else
71 {
72 // Load time constant
73 LibUtilities::Equation equ(m_session->GetInterpreter(), it->second);
74 NekDouble tau = equ.Evaluate();
75 // Load delta T between samples
76 NekDouble dT;
77 m_session->LoadParameter("TimeStep", dT);
78 dT = dT * m_sampleFrequency;
79 // Calculate alpha
80 m_alpha = dT / (tau + dT);
81 }
82 }
83 else
84 {
85 LibUtilities::Equation equ(m_session->GetInterpreter(), it->second);
86 m_alpha = equ.Evaluate();
87 // Check if tau was also defined
88 it = pParams.find("tau");
89 if (it != pParams.end())
90 {
91 ASSERTL0(false,
92 "Cannot define both alpha and tau in MovingAverage.");
93 }
94 }
95 // Check bounds of m_alpha
96 ASSERTL0(m_alpha > 0 && m_alpha < 1, "Alpha out of bounds.");
97}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208
SOLVER_UTILS_EXPORT FilterFieldConvert(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
LibUtilities::SessionReaderSharedPtr m_session
Definition: Filter.h:83
double NekDouble

References ASSERTL0, Nektar::LibUtilities::Equation::Evaluate(), m_alpha, Nektar::SolverUtils::FilterFieldConvert::m_sampleFrequency, and Nektar::SolverUtils::Filter::m_session.

◆ ~FilterMovingAverage()

Nektar::SolverUtils::FilterMovingAverage::~FilterMovingAverage ( )
override

Definition at line 99 of file FilterMovingAverage.cpp.

100{
101}

Member Function Documentation

◆ create()

static FilterSharedPtr Nektar::SolverUtils::FilterMovingAverage::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const std::weak_ptr< EquationSystem > &  pEquation,
const std::map< std::string, std::string > &  pParams 
)
inlinestatic

Creates an instance of this class.

Definition at line 49 of file FilterMovingAverage.h.

53 {
56 pSession, pEquation, pParams);
57 return p;
58 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< Filter > FilterSharedPtr
A shared pointer to a Driver object.
Definition: Filter.h:51

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.

◆ v_GetFileSuffix()

std::string Nektar::SolverUtils::FilterMovingAverage::v_GetFileSuffix ( )
inlineoverrideprotectedvirtual

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 74 of file FilterMovingAverage.h.

75 {
76 return "_movAvg";
77 }

◆ v_ProcessSample()

void Nektar::SolverUtils::FilterMovingAverage::v_ProcessSample ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
std::vector< Array< OneD, NekDouble > > &  fieldcoeffs,
const NekDouble time 
)
overrideprotectedvirtual

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 103 of file FilterMovingAverage.cpp.

108{
109 // Take first sample as initial vector
110 NekDouble alpha = m_alpha;
111 if (m_numSamples == 1)
112 {
113 alpha = 1.0;
114 }
115
116 // \bar{u}_n = alpha * u_n + (1-alpha) * \bar{u}_{n-1}
117 for (int n = 0; n < m_outFields.size(); ++n)
118 {
119 Vmath::Svtsvtp(m_outFields[n].size(), alpha, fieldcoeffs[n], 1,
120 (1.0 - alpha), m_outFields[n], 1, m_outFields[n], 1);
121 }
122}
std::vector< Array< OneD, NekDouble > > m_outFields
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):
Definition: Vmath.hpp:473

References m_alpha, Nektar::SolverUtils::FilterFieldConvert::m_numSamples, Nektar::SolverUtils::FilterFieldConvert::m_outFields, and Vmath::Svtsvtp().

Friends And Related Function Documentation

◆ MemoryManager< FilterMovingAverage >

friend class MemoryManager< FilterMovingAverage >
friend

Definition at line 1 of file FilterMovingAverage.h.

Member Data Documentation

◆ className

std::string Nektar::SolverUtils::FilterMovingAverage::className
static
Initial value:
=
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:197
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.
FilterFactory & GetFilterFactory()
Definition: Filter.cpp:39

Name of the class.

Definition at line 61 of file FilterMovingAverage.h.

◆ m_alpha

NekDouble Nektar::SolverUtils::FilterMovingAverage::m_alpha
protected

Definition at line 79 of file FilterMovingAverage.h.

Referenced by FilterMovingAverage(), and v_ProcessSample().