Nektar++
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 (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
 
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). More...
 

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 71 of file Equation.h.

Constructor & Destructor Documentation

◆ Equation() [1/2]

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

◆ Equation() [2/2]

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

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

47 : m_vlist(vlist), m_expr(expr), m_expr_id(-1), m_evaluator(evaluator)
48{
49 boost::algorithm::trim(m_expr);
50 boost::algorithm::trim(m_vlist);
51
52 if (m_vlist.empty())
53 {
54 m_vlist = "x y z t";
55 }
56
57 try
58 {
59 if (!m_expr.empty())
60 {
61 m_expr_id = m_evaluator->DefineFunction(m_vlist, m_expr);
62 }
63 }
64 catch (const std::runtime_error &e)
65 {
66 m_expr_id = -1;
67 std::string msg(
68 std::string("Equation::Equation() fails on expression [") + m_expr +
69 std::string("]\n"));
71 throw e;
72 return;
73 }
74 catch (const std::string &e)
75 {
76 m_expr_id = -1;
77 std::string msg(
78 std::string("Equation::Equation() fails on expression [") + m_expr +
79 std::string("]\n"));
81 throw e;
82 return;
83 }
84}
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:209
InterpreterSharedPtr m_evaluator
Definition: Equation.h:126

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

Member Function Documentation

◆ Evaluate() [1/6]

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

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

96{
97 try
98 {
99 if (m_expr_id != -1)
100 {
101 return m_evaluator->Evaluate(m_expr_id);
102 }
103 }
104 catch (const std::runtime_error &e)
105 {
106 std::string msg(
107 std::string("Equation::Evaluate fails on expression [") + m_expr +
108 std::string("]\n"));
109 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
110 }
111 catch (const std::string &e)
112 {
113 std::string msg(
114 std::string("Equation::Evaluate fails on expression [") + m_expr +
115 std::string("]\n"));
116 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
117 }
118 return 0;
119}

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

Referenced by Evaluate(), 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::Extrapolate::GenerateHOPBCMap(), Nektar::IncNavierStokes::GetPivotPoint(), Nektar::SpatialDomains::MeshGraph::ReadExpansionInfo(), Nektar::LibUtilities::SessionReader::ReadParameters(), Nektar::SpatialDomains::MeshGraph::ReadRefinementInfo(), Nektar::IncNavierStokes::SetMRFDomainVelBCs(), Nektar::MultiRegions::DisContField::v_EvaluateBoundaryConditions(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_EvaluateBoundaryConditions(), Nektar::MultiRegions::DisContField::v_GetRobinBCInfo(), Nektar::IncNavierStokes::v_InitObject(), Nektar::SolverUtils::ForcingMovingReferenceFrame::v_InitObject(), Nektar::GlobalMapping::Mapping::v_UpdateBCs(), and Nektar::AcousticSystem::WhiteNoiseBC().

◆ Evaluate() [2/6]

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 147 of file BasicUtils/Equation.cpp.

151{
152 Array<OneD, NekDouble> zero(x.size(), 0.0);
153 Evaluate(x, y, z, zero, result);
154}
std::vector< double > z(NPUPPER)

References Evaluate(), and Nektar::UnitTests::z().

◆ Evaluate() [3/6]

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 165 of file BasicUtils/Equation.cpp.

170{
171 std::vector<Array<OneD, const NekDouble>> points;
172 points.push_back(x);
173 points.push_back(y);
174 points.push_back(z);
175 points.push_back(t);
176 Evaluate(points, result);
177}

References Evaluate(), and Nektar::UnitTests::z().

◆ Evaluate() [4/6]

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 156 of file BasicUtils/Equation.cpp.

160{
161 Array<OneD, NekDouble> time(x.size(), t);
162 Evaluate(x, y, z, time, result);
163}

References Evaluate(), and Nektar::UnitTests::z().

◆ Evaluate() [5/6]

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

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

181{
182 try
183 {
184 if (m_expr_id != -1)
185 {
186 m_evaluator->Evaluate(m_expr_id, points, result);
187 }
188 }
189 catch (const std::runtime_error &e)
190 {
191 std::string msg =
192 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
193 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
194 return;
195 }
196 catch (const std::string &e)
197 {
198 std::string msg =
199 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
200 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
201 return;
202 }
203}

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

◆ Evaluate() [6/6]

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

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

123{
124 try
125 {
126 if (m_expr_id != -1)
127 {
128 return m_evaluator->Evaluate(m_expr_id, x, y, z, t);
129 }
130 }
131 catch (const std::runtime_error &e)
132 {
133 std::string msg =
134 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
135 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
136 }
137 catch (const std::string &e)
138 {
139 std::string msg =
140 "Equation::Evaluate fails on expression [" + m_expr + "]\n";
141 NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
142 }
143
144 return 0;
145}

References Nektar::ErrorUtil::efatal, m_evaluator, m_expr, m_expr_id, CellMLToNektar.pycml::msg, NEKERROR, and Nektar::UnitTests::z().

◆ GetExpression()

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

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

216{
217 return m_expr;
218}

References m_expr.

Referenced by Nektar::Extrapolate::GenerateHOPBCMap().

◆ 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 227 of file BasicUtils/Equation.cpp.

228{
229 return m_evaluator->GetTime();
230}

References m_evaluator.

◆ GetVlist()

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

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

221{
222 return m_vlist;
223}

References m_vlist.

◆ operator=()

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

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

87{
88 m_vlist = src.m_vlist;
89 m_expr = src.m_expr;
90 m_expr_id = src.m_expr_id;
91 m_evaluator = src.m_evaluator;
92 return *this;
93}

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 210 of file BasicUtils/Equation.cpp.

211{
212 m_evaluator->AddConstants(constants);
213}

References m_evaluator.

Referenced by Equation_SetConstants().

◆ SetParameter()

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

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

206{
207 m_evaluator->SetParameter(name, value);
208}

References m_evaluator, and CellMLToNektar.pycml::name.

Member Data Documentation

◆ m_evaluator

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

Definition at line 126 of file Equation.h.

Referenced by Equation(), Evaluate(), GetTime(), operator=(), SetConstants(), and SetParameter().

◆ m_expr

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

Definition at line 124 of file Equation.h.

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

◆ m_expr_id

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

Definition at line 125 of file Equation.h.

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

◆ m_vlist

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

Definition at line 123 of file Equation.h.

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