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 72 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 Equation.cpp.

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

47  :
48  m_vlist (vlist),
49  m_expr (expr),
50  m_expr_id (-1),
51  m_evaluator (evaluator)
52 {
53  boost::algorithm::trim(m_expr);
54  boost::algorithm::trim(m_vlist);
55 
56  if (m_vlist.empty())
57  {
58  m_vlist = "x y z t";
59  }
60 
61  try
62  {
63  if (!m_expr.empty())
64  {
65  m_expr_id = m_evaluator->DefineFunction(m_vlist, m_expr);
66  }
67  }
68  catch (const std::runtime_error& e)
69  {
70  m_expr_id = -1;
71  std::string msg(std::string("Equation::Equation() fails on expression [") + m_expr + std::string("]\n"));
73  throw e;
74  return;
75  }
76  catch (const std::string& e)
77  {
78  m_expr_id = -1;
79  std::string msg(std::string("Equation::Equation() fails on expression [") + m_expr + 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 mod...
Definition: ErrorUtil.hpp:209
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

Member Function Documentation

◆ Evaluate() [1/6]

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

Definition at line 95 of file Equation.cpp.

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

Referenced by Evaluate(), Nektar::SolverUtils::FilterMovingAverage::FilterMovingAverage(), Nektar::SolverUtils::FilterReynoldsStresses::FilterReynoldsStresses(), Nektar::Extrapolate::GenerateHOPBCMap(), Nektar::SpatialDomains::MeshGraph::ReadExpansions(), Nektar::LibUtilities::SessionReader::ReadParameters(), Nektar::MultiRegions::DisContField3D::v_EvaluateBoundaryConditions(), Nektar::MultiRegions::DisContField3DHomogeneous1D::v_EvaluateBoundaryConditions(), Nektar::MultiRegions::DisContField2D::v_EvaluateBoundaryConditions(), Nektar::MultiRegions::DisContField3D::v_GetRobinBCInfo(), Nektar::MultiRegions::DisContField2D::v_GetRobinBCInfo(), Nektar::IncNavierStokes::v_InitObject(), Nektar::GlobalMapping::Mapping::v_UpdateBCs(), and Nektar::AcousticSystem::v_WhiteNoiseBC().

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(std::string("Equation::Evaluate fails on expression [") + m_expr + std::string("]\n"));
107  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
108  }
109  catch (const std::string& e)
110  {
111  std::string msg(std::string("Equation::Evaluate fails on expression [") + m_expr + std::string("]\n"));
112  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
113  }
114  return 0;
115 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:209
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ Evaluate() [2/6]

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

Definition at line 117 of file Equation.cpp.

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

119 {
120  try
121  {
122  if (m_expr_id != -1)
123  {
124  return m_evaluator->Evaluate(m_expr_id, x,y,z,t);
125  }
126  }
127  catch (const std::runtime_error& e)
128  {
129  std::string msg =
130  "Equation::Evaluate fails on expression [" + m_expr + "]\n";
131  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
132  }
133  catch (const std::string& e)
134  {
135  std::string msg =
136  "Equation::Evaluate fails on expression [" + m_expr + "]\n";
137  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
138  }
139 
140  return 0;
141 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:209
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ 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,
Array< OneD, NekDouble > &  result 
) const

Definition at line 143 of file Equation.cpp.

References Evaluate().

148 {
149  Array<OneD, NekDouble> zero(x.num_elements(), 0.0);
150  Evaluate(x,y,z,zero, result);
151 }
NekDouble Evaluate() const
Definition: Equation.cpp:95

◆ 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 153 of file Equation.cpp.

References Evaluate().

159 {
160  Array<OneD, NekDouble> time(x.num_elements(), t);
161  Evaluate(x,y,z,time, result);
162 }
NekDouble Evaluate() const
Definition: Equation.cpp:95

◆ Evaluate() [5/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 Equation.cpp.

References Evaluate().

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

◆ Evaluate() [6/6]

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

Definition at line 180 of file Equation.cpp.

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

183 {
184  try
185  {
186  if (m_expr_id != -1)
187  {
188  m_evaluator->Evaluate(m_expr_id, points, result);
189  }
190  }
191  catch (const std::runtime_error& e)
192  {
193  std::string msg =
194  "Equation::Evaluate fails on expression [" + m_expr + "]\n";
195  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e.what());
196  return;
197  }
198  catch (const std::string& e)
199  {
200  std::string msg =
201  "Equation::Evaluate fails on expression [" + m_expr + "]\n";
202  NEKERROR(ErrorUtil::efatal, msg + std::string("ERROR: ") + e);
203  return;
204  }
205 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
Definition: ErrorUtil.hpp:209
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ GetExpression()

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

Definition at line 217 of file Equation.cpp.

References m_expr.

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

218 {
219  return m_expr;
220 }

◆ 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 229 of file Equation.cpp.

References m_evaluator.

230 {
231  return m_evaluator->GetTime();
232 }
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ GetVlist()

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

Definition at line 222 of file Equation.cpp.

References m_vlist.

223 {
224  return m_vlist;
225 }

◆ operator=()

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

Definition at line 86 of file Equation.cpp.

References m_evaluator, m_expr, m_expr_id, and m_vlist.

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 }
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ SetConstants()

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

Definition at line 212 of file Equation.cpp.

References m_evaluator.

213 {
214  m_evaluator->AddConstants(constants);
215 }
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

◆ SetParameter()

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

Definition at line 207 of file Equation.cpp.

References m_evaluator.

208 {
209  m_evaluator->SetParameter(name, value);
210 }
InterpreterSharedPtr m_evaluator
Definition: Equation.h:128

Member Data Documentation

◆ m_evaluator

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

Definition at line 128 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 126 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 127 of file Equation.h.

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

◆ m_vlist

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

Definition at line 125 of file Equation.h.

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