Nektar++
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
Nektar::LibUtilities::Equation Class Reference

#include <Equation.h>

Public Member Functions

 Equation (const Equation &)=default
 
 Equation ()
 
 Equation (InterpreterSharedPtr evaluator, const std::string &expr="", const std::string &vlist="")
 
Equationoperator= (const Equation &src)
 
NekDouble Evaluate () const
 
NekDouble Evaluate (NekDouble x, NekDouble y=0, NekDouble z=0, NekDouble t=0) const
 
NekDouble Evaluate (std::vector< NekDouble > point) const
 
void Evaluate (const Array< OneD, const NekDouble > &x, const Array< OneD, const NekDouble > &y, const Array< OneD, const NekDouble > &z, Array< OneD, NekDouble > &result) const
 
void Evaluate (const Array< OneD, const NekDouble > &x, const Array< OneD, const NekDouble > &y, const Array< OneD, const NekDouble > &z, const NekDouble t, Array< OneD, NekDouble > &result) const
 
void Evaluate (const Array< OneD, const NekDouble > &x, const Array< OneD, const NekDouble > &y, const Array< OneD, const NekDouble > &z, const Array< OneD, const NekDouble > &t, Array< OneD, NekDouble > &result) const
 
void Evaluate (const std::vector< Array< OneD, const NekDouble > > points, Array< OneD, NekDouble > &result) const
 
void SetParameter (const std::string &name, NekDouble value)
 
void SetConstants (const std::map< std::string, NekDouble > &constants)
 
std::string GetExpression (void) const
 
std::string GetVlist (void) const
 
NekDouble GetTime () const
 Returns time spend on expression evaluation at points (it does not include parse/pre-processing time).
 

Private Attributes

std::string m_vlist
 
std::string m_expr
 
int m_expr_id
 
InterpreterSharedPtr m_evaluator
 

Detailed Description

This class stores a string form of a symbolic expression to be evaluated e.g. for the boundary conditions, the unique numeric ID of that expression and a reference to the unique static instance of the Interpreter.

The scenario is that for multiple copies of Equation class holding their symbolic expressions in the std::string form, there is a unique instance of Interpreter, which holds a set of pre-processed symbolic expressions in the form of sequential containers of execution functors, ready for fast evaluation.

The interpreter also keeps all constants and parameters specified in an XML file. There should be only one copy of Equation class per each symbolic expression specified in XML file, modulo possible bugs. Classes Equation and Interpreter are complementary in a sense that the expression ID stored in the Equation class is generated by the Interpreter which holds ordered container of pre-processed expressions.

Definition at line 67 of file Equation.h.

Constructor & Destructor Documentation

◆ Equation() [1/3]

Nektar::LibUtilities::Equation::Equation ( const Equation )
default

◆ Equation() [2/3]

Nektar::LibUtilities::Equation::Equation ( )

Definition at line 46 of file BasicUtils/Equation.cpp.

47{
48 // Create Null expression and vlist
49 m_expr = "0.0";
50 m_vlist = "x y z t";
51 boost::algorithm::trim(m_expr);
52 boost::algorithm::trim(m_vlist);
53
54 // Evaluate expression
56 m_expr_id = m_evaluator->DefineFunction(m_vlist, m_expr);
57}
InterpreterSharedPtr m_evaluator
Definition Equation.h:128
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), m_evaluator, m_expr, m_expr_id, and m_vlist.

◆ Equation() [3/3]

Nektar::LibUtilities::Equation::Equation ( InterpreterSharedPtr  evaluator,
const std::string &  expr = "",
const std::string &  vlist = "" 
)

Definition at line 59 of file BasicUtils/Equation.cpp.

61 : m_vlist(vlist), m_expr(expr), m_expr_id(-1), m_evaluator(evaluator)
62{
63 boost::algorithm::trim(m_expr);
64 boost::algorithm::trim(m_vlist);
65
66 if (m_vlist.empty())
67 {
68 m_vlist = "x y z t";
69 }
70
71 try
72 {
73 if (!m_expr.empty())
74 {
75 m_expr_id = m_evaluator->DefineFunction(m_vlist, m_expr);
76 }
77 }
78 catch (const std::runtime_error &e)
79 {
80 m_expr_id = -1;
81 std::string msg(
82 std::string("Equation::Equation() fails on expression [") + m_expr +
83 std::string("]\n"));
85 throw e;
86 return;
87 }
88 catch (const std::string &e)
89 {
90 m_expr_id = -1;
91 std::string msg(
92 std::string("Equation::Equation() fails on expression [") + m_expr +
93 std::string("]\n"));
95 throw e;
96 return;
97 }
98}
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, m_vlist, and NEKERROR.

Member Function Documentation

◆ Evaluate() [1/7]

NekDouble Nektar::LibUtilities::Equation::Evaluate ( ) const

Definition at line 109 of file BasicUtils/Equation.cpp.

110{
111 try
112 {
113 if (m_expr_id != -1)
114 {
115 return m_evaluator->Evaluate(m_expr_id);
116 }
117 }
118 catch (const std::runtime_error &e)
119 {
120 std::string msg(
121 std::string("Equation::Evaluate fails on expression [") + m_expr +
122 std::string("]\n"));
123 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
124 }
125 catch (const std::string &e)
126 {
127 std::string msg(
128 std::string("Equation::Evaluate fails on expression [") + m_expr +
129 std::string("]\n"));
130 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
131 }
132 return 0;
133}

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, and NEKERROR.

Referenced by Evaluate(), Evaluate(), Evaluate(), Nektar::SolverUtils::ForcingMovingReferenceFrame::EvaluateExpression(), Nektar::SolverUtils::FilterAeroForces::FilterAeroForces(), Nektar::FilterAeroForcesSPM::FilterAeroForcesSPM(), Nektar::SolverUtils::FilterAverageFields::FilterAverageFields(), Nektar::FilterBenchmark::FilterBenchmark(), Nektar::SolverUtils::FilterBodyFittedVelocity::FilterBodyFittedVelocity(), Nektar::SolverUtils::FilterCheckpoint::FilterCheckpoint(), Nektar::FilterCheckpointCellModel::FilterCheckpointCellModel(), Nektar::FilterElectrogram::FilterElectrogram(), Nektar::SolverUtils::FilterEnergy::FilterEnergy(), Nektar::SolverUtils::FilterEnergy1D::FilterEnergy1D(), Nektar::SolverUtils::FilterError::FilterError(), Nektar::SolverUtils::FilterFieldConvert::FilterFieldConvert(), Nektar::FilterHilbertFFTPhase::FilterHilbertFFTPhase(), Nektar::SolverUtils::FilterHistoryPoints::FilterHistoryPoints(), Nektar::SolverUtils::FilterIntegral::FilterIntegral(), Nektar::SolverUtils::FilterMaxMinFields::FilterMaxMinFields(), Nektar::SolverUtils::FilterMean::FilterMean(), Nektar::SolverUtils::FilterModalEnergy::FilterModalEnergy(), Nektar::SolverUtils::FilterMovingAverage::FilterMovingAverage(), Nektar::FilterMovingBody::FilterMovingBody(), Nektar::FilterOffsetPhase::FilterOffsetPhase(), Nektar::SolverUtils::FilterReynoldsStresses::FilterReynoldsStresses(), Nektar::SolverUtils::FilterThresholdMax::FilterThresholdMax(), Nektar::SolverUtils::FilterThresholdMin::FilterThresholdMin(), Nektar::SpatialDomains::MeshGraph::ReadExpansionInfo(), Nektar::LibUtilities::SessionReader::ReadParameters(), Nektar::SpatialDomains::MeshGraph::ReadRefinementInfo(), and Nektar::SolverUtils::FilterLagrangianPoints::v_Initialise().

◆ Evaluate() [2/7]

void Nektar::LibUtilities::Equation::Evaluate ( const Array< OneD, const NekDouble > &  x,
const Array< OneD, const NekDouble > &  y,
const Array< OneD, const NekDouble > &  z,
Array< OneD, NekDouble > &  result 
) const

Definition at line 186 of file BasicUtils/Equation.cpp.

190{
191 Array<OneD, NekDouble> zero(x.size(), 0.0);
192 Evaluate(x, y, z, zero, result);
193}

References Evaluate().

◆ Evaluate() [3/7]

void Nektar::LibUtilities::Equation::Evaluate ( const Array< OneD, const NekDouble > &  x,
const Array< OneD, const NekDouble > &  y,
const Array< OneD, const NekDouble > &  z,
const Array< OneD, const NekDouble > &  t,
Array< OneD, NekDouble > &  result 
) const

Definition at line 204 of file BasicUtils/Equation.cpp.

209{
210 std::vector<Array<OneD, const NekDouble>> points;
211 points.push_back(x);
212 points.push_back(y);
213 points.push_back(z);
214 points.push_back(t);
215 Evaluate(points, result);
216}

References Evaluate().

◆ Evaluate() [4/7]

void Nektar::LibUtilities::Equation::Evaluate ( const Array< OneD, const NekDouble > &  x,
const Array< OneD, const NekDouble > &  y,
const Array< OneD, const NekDouble > &  z,
const NekDouble  t,
Array< OneD, NekDouble > &  result 
) const

Definition at line 195 of file BasicUtils/Equation.cpp.

199{
200 Array<OneD, NekDouble> time(x.size(), t);
201 Evaluate(x, y, z, time, result);
202}

References Evaluate().

◆ Evaluate() [5/7]

void Nektar::LibUtilities::Equation::Evaluate ( const std::vector< Array< OneD, const NekDouble > >  points,
Array< OneD, NekDouble > &  result 
) const

Definition at line 218 of file BasicUtils/Equation.cpp.

220{
221 try
222 {
223 if (m_expr_id != -1)
224 {
225 m_evaluator->Evaluate(m_expr_id, points, result);
226 }
227 }
228 catch (const std::runtime_error &e)
229 {
230 std::string msg =
231 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
232 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
233 return;
234 }
235 catch (const std::string &e)
236 {
237 std::string msg =
238 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
239 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
240 return;
241 }
242}

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, and NEKERROR.

◆ Evaluate() [6/7]

NekDouble Nektar::LibUtilities::Equation::Evaluate ( NekDouble  x,
NekDouble  y = 0,
NekDouble  z = 0,
NekDouble  t = 0 
) const

Definition at line 135 of file BasicUtils/Equation.cpp.

137{
138 try
139 {
140 if (m_expr_id != -1)
141 {
142 return m_evaluator->Evaluate(m_expr_id, x, y, z, t);
143 }
144 }
145 catch (const std::runtime_error &e)
146 {
147 std::string msg =
148 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
149 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
150 }
151 catch (const std::string &e)
152 {
153 std::string msg =
154 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
155 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
156 }
157
158 return 0;
159}

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, and NEKERROR.

◆ Evaluate() [7/7]

NekDouble Nektar::LibUtilities::Equation::Evaluate ( std::vector< NekDouble point) const

Definition at line 161 of file BasicUtils/Equation.cpp.

162{
163 try
164 {
165 if (m_expr_id != -1)
166 {
167 return m_evaluator->EvaluateAtPoint(m_expr_id, point);
168 }
169 }
170 catch (const std::runtime_error &e)
171 {
172 std::string msg =
173 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
174 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
175 }
176 catch (const std::string &e)
177 {
178 std::string msg =
179 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
180 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
181 }
182
183 return 0;
184}

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, and NEKERROR.

◆ GetExpression()

std::string Nektar::LibUtilities::Equation::GetExpression ( void  ) const

Definition at line 254 of file BasicUtils/Equation.cpp.

255{
256 return m_expr;
257}

References m_expr.

Referenced by export_Equation().

◆ GetTime()

NekDouble Nektar::LibUtilities::Equation::GetTime ( ) const

Returns time spend on expression evaluation at points (it does not include parse/pre-processing time).

Definition at line 266 of file BasicUtils/Equation.cpp.

267{
268 return m_evaluator->GetTime();
269}

References m_evaluator.

Referenced by export_Equation().

◆ GetVlist()

std::string Nektar::LibUtilities::Equation::GetVlist ( void  ) const

Definition at line 259 of file BasicUtils/Equation.cpp.

260{
261 return m_vlist;
262}

References m_vlist.

Referenced by export_Equation().

◆ operator=()

Equation & Nektar::LibUtilities::Equation::operator= ( const Equation src)

Definition at line 100 of file BasicUtils/Equation.cpp.

101{
102 m_vlist = src.m_vlist;
103 m_expr = src.m_expr;
104 m_expr_id = src.m_expr_id;
105 m_evaluator = src.m_evaluator;
106 return *this;
107}

References m_evaluator, m_expr, m_expr_id, and m_vlist.

◆ SetConstants()

void Nektar::LibUtilities::Equation::SetConstants ( const std::map< std::string, NekDouble > &  constants)

Definition at line 249 of file BasicUtils/Equation.cpp.

250{
251 m_evaluator->AddConstants(constants);
252}

References m_evaluator.

◆ SetParameter()

void Nektar::LibUtilities::Equation::SetParameter ( const std::string &  name,
NekDouble  value 
)

Definition at line 244 of file BasicUtils/Equation.cpp.

245{
246 m_evaluator->SetParameter(name, value);
247}

References m_evaluator.

Referenced by export_Equation().

Member Data Documentation

◆ m_evaluator

InterpreterSharedPtr Nektar::LibUtilities::Equation::m_evaluator
private

◆ m_expr

std::string Nektar::LibUtilities::Equation::m_expr
private

◆ m_expr_id

int Nektar::LibUtilities::Equation::m_expr_id
private

Definition at line 127 of file Equation.h.

Referenced by Equation(), Equation(), Evaluate(), Evaluate(), Evaluate(), Evaluate(), and operator=().

◆ m_vlist

std::string Nektar::LibUtilities::Equation::m_vlist
private

Definition at line 125 of file Equation.h.

Referenced by Equation(), Equation(), GetVlist(), and operator=().