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

#include <FilterMaxMinFields.h>

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

Public Member Functions

SOLVER_UTILS_EXPORT FilterMaxMinFields (const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
 
SOLVER_UTILS_EXPORT ~FilterMaxMinFields () 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_Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
 
void v_FillVariablesName (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields) override
 
void v_ProcessSample (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, std::vector< Array< OneD, NekDouble > > &fieldcoeffs, const NekDouble &time) override
 
void v_PrepareOutput (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
 
NekDouble v_GetScale () 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

bool m_isMax
 
ProblemType m_problemType
 
std::vector< Array< OneD, NekDouble > > m_curFieldsPhys
 
std::vector< Array< OneD, NekDouble > > m_outFieldsPhys
 
- 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
 

Private Attributes

bool m_initialized
 

Friends

class MemoryManager< FilterMaxMinFields >
 

Additional Inherited Members

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

Detailed Description

Definition at line 50 of file FilterMaxMinFields.h.

Constructor & Destructor Documentation

◆ FilterMaxMinFields()

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

Definition at line 44 of file FilterMaxMinFields.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 flag for max or min
62 it = pParams.find("MaxOrMin");
63 std::string sOption = it->second.c_str();
64 if (boost::iequals(sOption, "maximum") || boost::iequals(sOption, "max"))
65 {
66 m_isMax = true;
67 }
68 else if (boost::iequals(sOption, "minimum") ||
69 boost::iequals(sOption, "min"))
70 {
71 m_isMax = false;
72 }
73 else
74 {
75 ASSERTL1(false, "MaxOrMin needs to be max or min.");
76 }
78
79 // Initialize other member vars
81}
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
Definition: ErrorUtil.hpp:242
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

References ASSERTL1, Nektar::SolverUtils::eCompressible, Nektar::LibUtilities::Equation::Evaluate(), m_initialized, m_isMax, m_problemType, Nektar::SolverUtils::FilterFieldConvert::m_restartFile, Nektar::SolverUtils::FilterFieldConvert::m_sampleFrequency, and Nektar::SolverUtils::Filter::m_session.

◆ ~FilterMaxMinFields()

Nektar::SolverUtils::FilterMaxMinFields::~FilterMaxMinFields ( )
override

Definition at line 83 of file FilterMaxMinFields.cpp.

84{
85}

Member Function Documentation

◆ create()

static FilterSharedPtr Nektar::SolverUtils::FilterMaxMinFields::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 56 of file FilterMaxMinFields.h.

60 {
63 pSession, pEquation, pParams);
64 return p;
65 }
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_FillVariablesName()

void Nektar::SolverUtils::FilterMaxMinFields::v_FillVariablesName ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields)
inlineoverrideprotectedvirtual

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 85 of file FilterMaxMinFields.h.

88 {
90 }
virtual SOLVER_UTILS_EXPORT void v_FillVariablesName(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields)

References Nektar::SolverUtils::FilterFieldConvert::v_FillVariablesName().

◆ v_GetFileSuffix()

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

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 99 of file FilterMaxMinFields.h.

100 {
101 if (m_isMax)
102 {
103 return "_max";
104 }
105 else
106 {
107 return "_min";
108 }
109 }

References m_isMax.

◆ v_GetScale()

NekDouble Nektar::SolverUtils::FilterMaxMinFields::v_GetScale ( )
overrideprotectedvirtual

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 226 of file FilterMaxMinFields.cpp.

227{
228 return 1.0;
229}

◆ v_Initialise()

void Nektar::SolverUtils::FilterMaxMinFields::v_Initialise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
overrideprotectedvirtual

Reimplemented from Nektar::SolverUtils::FilterFieldConvert.

Definition at line 87 of file FilterMaxMinFields.cpp.

90{
91 // Initialise output arrays
93
94 // Allocate storage
95 int nf;
96 m_curFieldsPhys.resize(m_variables.size());
97 m_outFieldsPhys.resize(m_variables.size());
98 for (int n = 0; n < m_variables.size(); ++n)
99 {
100 nf = (n < pFields.size()) ? n : 0;
101 m_curFieldsPhys[n] =
102 Array<OneD, NekDouble>(pFields[nf]->GetTotPoints(), 0.0);
103 m_outFieldsPhys[n] =
104 Array<OneD, NekDouble>(pFields[nf]->GetTotPoints(), 0.0);
105 }
106
107 // Check type of problem
108 std::string firstVarName = pFields[0]->GetSession()->GetVariable(0);
109 if (boost::iequals(firstVarName, "u"))
110 {
112 }
113 else if (boost::iequals(firstVarName, "rho"))
114 {
116 }
117 else
118 {
120 }
121
122 if (m_initialized)
123 {
124 for (int n = 0; n < m_variables.size(); ++n)
125 {
126 int nf = (n < pFields.size()) ? n : 0;
127 pFields[nf]->BwdTrans(m_outFields[n], m_outFieldsPhys[n]);
128 if (pFields[nf]->GetWaveSpace())
129 {
130 pFields[nf]->HomogeneousBwdTrans(pFields[nf]->GetTotPoints(),
132 m_outFieldsPhys[n]);
133 }
134 }
135 }
136}
std::vector< Array< OneD, NekDouble > > m_outFields
SOLVER_UTILS_EXPORT void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
std::vector< Array< OneD, NekDouble > > m_curFieldsPhys
std::vector< Array< OneD, NekDouble > > m_outFieldsPhys

References Nektar::SolverUtils::eCompressible, Nektar::SolverUtils::eIncompressible, Nektar::SolverUtils::eOthers, m_curFieldsPhys, m_initialized, Nektar::SolverUtils::FilterFieldConvert::m_outFields, m_outFieldsPhys, m_problemType, Nektar::SolverUtils::FilterFieldConvert::m_variables, and Nektar::SolverUtils::FilterFieldConvert::v_Initialise().

◆ v_PrepareOutput()

void Nektar::SolverUtils::FilterMaxMinFields::v_PrepareOutput ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
overrideprotectedvirtual

◆ v_ProcessSample()

void Nektar::SolverUtils::FilterMaxMinFields::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 153 of file FilterMaxMinFields.cpp.

157{
158 for (int n = 0; n < m_variables.size(); ++n)
159 {
160 int nf = (n < pFields.size()) ? n : 0;
161 pFields[nf]->BwdTrans(fieldcoeffs[n], m_curFieldsPhys[n]);
162 if (pFields[nf]->GetWaveSpace())
163 {
164 pFields[nf]->HomogeneousBwdTrans(pFields[nf]->GetTotPoints(),
166 m_curFieldsPhys[n]);
167 }
168 }
169
170 // Get max/min for each field
171 if (!m_initialized)
172 {
173 for (int n = 0; n < m_variables.size(); ++n)
174 {
175 int length = m_outFieldsPhys[n].size();
176 Vmath::Vcopy(length, m_curFieldsPhys[n], 1, m_outFieldsPhys[n], 1);
177 }
178 m_initialized = true;
179 }
180 else
181 {
182 for (int n = 0; n < m_variables.size(); ++n)
183 {
184 int length = m_outFieldsPhys[n].size();
185 if (m_isMax)
186 {
187 // Compute max
188 for (int i = 0; i < length; ++i)
189 {
190 if (m_curFieldsPhys[n][i] > m_outFieldsPhys[n][i])
191 {
192 m_outFieldsPhys[n][i] = m_curFieldsPhys[n][i];
193 }
194 }
195 }
196 else
197 {
198 // Compute min
199 for (int i = 0; i < length; ++i)
200 {
201 if (m_curFieldsPhys[n][i] < m_outFieldsPhys[n][i])
202 {
203 m_outFieldsPhys[n][i] = m_curFieldsPhys[n][i];
204 }
205 }
206 }
207 }
208 }
209
210 // Forward transform and put into m_outFields
211 for (int n = 0; n < m_variables.size(); ++n)
212 {
213 int nf = (n < pFields.size()) ? n : 0;
214 pFields[nf]->FwdTransLocalElmt(m_outFieldsPhys[n], m_outFields[n]);
215 }
216}
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.hpp:825

References m_curFieldsPhys, m_initialized, m_isMax, Nektar::SolverUtils::FilterFieldConvert::m_outFields, m_outFieldsPhys, Nektar::SolverUtils::FilterFieldConvert::m_variables, and Vmath::Vcopy().

Friends And Related Function Documentation

◆ MemoryManager< FilterMaxMinFields >

friend class MemoryManager< FilterMaxMinFields >
friend

Definition at line 1 of file FilterMaxMinFields.h.

Member Data Documentation

◆ className

std::string Nektar::SolverUtils::FilterMaxMinFields::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 68 of file FilterMaxMinFields.h.

◆ m_curFieldsPhys

std::vector<Array<OneD, NekDouble> > Nektar::SolverUtils::FilterMaxMinFields::m_curFieldsPhys
protected

Definition at line 79 of file FilterMaxMinFields.h.

Referenced by v_Initialise(), and v_ProcessSample().

◆ m_initialized

bool Nektar::SolverUtils::FilterMaxMinFields::m_initialized
private

Definition at line 112 of file FilterMaxMinFields.h.

Referenced by FilterMaxMinFields(), v_Initialise(), and v_ProcessSample().

◆ m_isMax

bool Nektar::SolverUtils::FilterMaxMinFields::m_isMax
protected

Definition at line 77 of file FilterMaxMinFields.h.

Referenced by FilterMaxMinFields(), v_GetFileSuffix(), and v_ProcessSample().

◆ m_outFieldsPhys

std::vector<Array<OneD, NekDouble> > Nektar::SolverUtils::FilterMaxMinFields::m_outFieldsPhys
protected

Definition at line 80 of file FilterMaxMinFields.h.

Referenced by v_Initialise(), and v_ProcessSample().

◆ m_problemType

ProblemType Nektar::SolverUtils::FilterMaxMinFields::m_problemType
protected

Definition at line 78 of file FilterMaxMinFields.h.

Referenced by FilterMaxMinFields(), and v_Initialise().