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

#include <FilterError.h>

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

Public Member Functions

SOLVER_UTILS_EXPORT FilterError (const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const ParamMap &pParams)
 
SOLVER_UTILS_EXPORT ~FilterError () override=default
 
- 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 Attributes

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) final
 
void v_Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) final
 
void v_Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) final
 
bool v_IsTimeDependent () final
 
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
 

Private Attributes

size_t m_index = 0
 
size_t m_outputFrequency
 
size_t m_numVariables
 
bool m_homogeneous
 
std::ofstream m_outFile
 
LibUtilities::CommSharedPtr m_comm
 

Friends

class MemoryManager< FilterError >
 

Additional Inherited Members

- Public Types inherited from Nektar::SolverUtils::Filter
typedef std::map< std::string, std::string > ParamMap
 
- Protected Attributes inherited from Nektar::SolverUtils::Filter
LibUtilities::SessionReaderSharedPtr m_session
 
const std::weak_ptr< EquationSystemm_equ
 

Detailed Description

Definition at line 42 of file FilterError.h.

Constructor & Destructor Documentation

◆ FilterError()

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

Definition at line 42 of file FilterError.cpp.

45 : Filter(pSession, pEquation)
46{
47 std::string outName;
48
49 // OutputFile
50 auto it = pParams.find("OutputFile");
51 if (it == pParams.end())
52 {
53 outName = m_session->GetSessionName();
54 }
55 else
56 {
57 ASSERTL0(it->second.length() > 0, "Empty parameter 'OutputFile'.");
58 outName = it->second;
59 }
60 outName += ".err";
61
62 // Lock equation system pointer
63 auto equationSys = m_equ.lock();
64 ASSERTL0(equationSys, "Weak pointer expired");
65
66 m_numVariables = equationSys->GetNvariables();
67
68 m_comm = pSession->GetComm();
69 if (m_comm->GetRank() == 0)
70 {
71 m_outFile.open(outName);
72 ASSERTL0(m_outFile.good(), "Unable to open: '" + outName + "'");
73 m_outFile.setf(std::ios::scientific, std::ios::floatfield);
74
75 m_outFile << "Time";
76 for (size_t i = 0; i < m_numVariables; ++i)
77 {
78 std::string varName = equationSys->GetVariable(i);
79 m_outFile << " " + varName + "_L2"
80 << " " + varName + "_Linf";
81 }
82
83 m_outFile << std::endl;
84 }
85
86 // OutputFrequency
87 it = pParams.find("OutputFrequency");
88 if (it == pParams.end())
89 {
91 }
92 else
93 {
94 ASSERTL0(it->second.length() > 0, "Empty parameter 'OutputFrequency'.");
95 LibUtilities::Equation equ(m_session->GetInterpreter(), it->second);
96 m_outputFrequency = round(equ.Evaluate());
97 }
98}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208
LibUtilities::CommSharedPtr m_comm
Definition: FilterError.h:85
LibUtilities::SessionReaderSharedPtr m_session
Definition: Filter.h:83
const std::weak_ptr< EquationSystem > m_equ
Definition: Filter.h:84
SOLVER_UTILS_EXPORT Filter(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation)
Definition: Filter.cpp:45

References ASSERTL0, Nektar::LibUtilities::Equation::Evaluate(), m_comm, Nektar::SolverUtils::Filter::m_equ, m_numVariables, m_outFile, m_outputFrequency, and Nektar::SolverUtils::Filter::m_session.

◆ ~FilterError()

SOLVER_UTILS_EXPORT Nektar::SolverUtils::FilterError::~FilterError ( )
overridedefault

Member Function Documentation

◆ create()

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

52 {
54 pSession, pEquation, pParams);
55 return p;
56 }
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_Finalise()

void Nektar::SolverUtils::FilterError::v_Finalise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
finalprotectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 161 of file FilterError.cpp.

165{
166 if (m_comm->GetRank() == 0)
167 {
168 m_outFile.close();
169 }
170}

References m_comm, and m_outFile.

◆ v_Initialise()

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

Implements Nektar::SolverUtils::Filter.

Definition at line 100 of file FilterError.cpp.

103{
104
105 // Check for homogeneous expansion
106 m_homogeneous = pFields[0]->GetExpType() == MultiRegions::e3DH1D ||
107 pFields[0]->GetExpType() == MultiRegions::e3DH2D;
108
109 v_Update(pFields, time);
110}
void v_Update(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) final

References Nektar::MultiRegions::e3DH1D, Nektar::MultiRegions::e3DH2D, m_homogeneous, and v_Update().

◆ v_IsTimeDependent()

bool Nektar::SolverUtils::FilterError::v_IsTimeDependent ( )
finalprotectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 172 of file FilterError.cpp.

173{
174 return true;
175}

◆ v_Update()

void Nektar::SolverUtils::FilterError::v_Update ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
finalprotectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 112 of file FilterError.cpp.

115{
116 // Check whether output frequency matches
117 if (m_index++ % m_outputFrequency > 0)
118 {
119 return;
120 }
121
122 // Output to file L2 and Linf error for each variable
123 if (m_comm->GetRank() == 0)
124 {
125 m_outFile << time;
126 }
127
128 // Lock equation system pointer
129 auto equationSys = m_equ.lock();
130 ASSERTL0(equationSys, "Weak pointer expired");
131
132 for (size_t i = 0; i < m_numVariables; ++i)
133 {
134 // Evaluate "ExactSolution" function, or zero array
135 Array<OneD, NekDouble> exactsoln(pFields[i]->GetTotPoints(), 0.0);
136 equationSys->EvaluateExactSolution(i, exactsoln, time);
137
138 // If homogeneous expansion is used, transform the solution to
139 // Fourier (Wave) space
140 if (m_homogeneous)
141 {
142 pFields[i]->HomogeneousFwdTrans(pFields[i]->GetTotPoints(),
143 exactsoln, exactsoln);
144 }
145
146 NekDouble vL2Error = equationSys->L2Error(i, exactsoln);
147 NekDouble vLinfError = equationSys->LinfError(i, exactsoln);
148
149 if (m_comm->GetRank() == 0)
150 {
151 m_outFile << " " << vL2Error << " " << vLinfError;
152 }
153 }
154
155 if (m_comm->GetRank() == 0)
156 {
157 m_outFile << std::endl;
158 }
159}
double NekDouble

References ASSERTL0, m_comm, Nektar::SolverUtils::Filter::m_equ, m_homogeneous, m_index, m_numVariables, m_outFile, and m_outputFrequency.

Referenced by v_Initialise().

Friends And Related Function Documentation

◆ MemoryManager< FilterError >

friend class MemoryManager< FilterError >
friend

Definition at line 1 of file FilterError.h.

Member Data Documentation

◆ className

std::string Nektar::SolverUtils::FilterError::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.
Definition: FilterError.h:48
FilterFactory & GetFilterFactory()
Definition: Filter.cpp:39

Name of the class.

Definition at line 59 of file FilterError.h.

◆ m_comm

LibUtilities::CommSharedPtr Nektar::SolverUtils::FilterError::m_comm
private

Definition at line 85 of file FilterError.h.

Referenced by FilterError(), v_Finalise(), and v_Update().

◆ m_homogeneous

bool Nektar::SolverUtils::FilterError::m_homogeneous
private

Definition at line 83 of file FilterError.h.

Referenced by v_Initialise(), and v_Update().

◆ m_index

size_t Nektar::SolverUtils::FilterError::m_index = 0
private

Definition at line 80 of file FilterError.h.

Referenced by v_Update().

◆ m_numVariables

size_t Nektar::SolverUtils::FilterError::m_numVariables
private

Definition at line 82 of file FilterError.h.

Referenced by FilterError(), and v_Update().

◆ m_outFile

std::ofstream Nektar::SolverUtils::FilterError::m_outFile
private

Definition at line 84 of file FilterError.h.

Referenced by FilterError(), v_Finalise(), and v_Update().

◆ m_outputFrequency

size_t Nektar::SolverUtils::FilterError::m_outputFrequency
private

Definition at line 81 of file FilterError.h.

Referenced by FilterError(), and v_Update().