Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Protected Member Functions | List of all members
panzer::Expr::Eval< DT, VP > Class Template Reference

Interprets mathematical expressions in a string and evaluates them using Kokkos::View objects as values and Kokkos::parallel_for for the operators. This class is mean to support Kokkos-parallel execution of user-provided mathematical expressions. Example uses include evaluating analytic boundary and initial conditions for a PDE problem. The API of this class (namely Eval::read_string or another read_* function inherited from Teuchos::Reader) is only meant to be called once for a given set of evaluation points. Variables should be predefined with point-dependent values all stored in a single Kokkos::View. For example, X coordinates for all points could be stored in a Kokkos::View<double*>, whose extent is the number of points. Values which are the same for all points are still supported, for example the current time. Then if the expression is for example "x^t", this class launches a single parallel_for to raise the coordinate of all points at once to the "t" power. More...

#include <Panzer_ExprEval.hpp>

Inheritance diagram for panzer::Expr::Eval< DT, VP >:
Inheritance graph
[legend]

Public Types

using original_view_type = Kokkos::View< DT, VP...>
 The corresponding Kokkos::View type, using the same template arguments are were given to Eval. More...
 
using view_data_type = DT
 The data type, including dimension information. More...
 
using scalar_type = typename original_view_type::non_const_value_type
 The scalar type. More...
 
using const_view_type = Kokkos::View< typename RebindDataType< view_data_type, scalar_type const >::type, VP...>
 One scalar for each evaluation point, read-only. More...
 
using const_bool_view_type = Kokkos::View< typename RebindDataType< view_data_type, bool const >::type, VP...>
 One boolean for each evaluation point, read-only. More...
 
using single_view_type = Kokkos::View< scalar_type, VP...>
 One scalar (same for all evaluation points) More...
 
using const_single_view_type = Kokkos::View< scalar_type const, VP...>
 One scalar (same for all evaluation points), read-only. More...
 
using single_bool_view_type = Kokkos::View< bool, VP...>
 One boolean (same for all evaluation points) More...
 
using const_single_bool_view_type = Kokkos::View< bool const, VP...>
 One boolean (same for all evaluation points), read-only. More...
 
- Public Types inherited from panzer::Expr::EvalBase
using Function = std::function< void(std::string const &name, Teuchos::any &, std::vector< Teuchos::any > &rhs)>
 The type of user-defined functions which are callable in the math language. More...
 

Public Member Functions

 Eval ()
 
void set (std::string const &name, bool value)
 Assign a boolean value to a variable symbol. More...
 
void set (std::string const &name, scalar_type const &value)
 Assign a scalar value to a variable symbol. More...
 
void set (std::string const &name, const_view_type const &value)
 Assign scalar values (one for each evaluation point) to a variable symbol. More...
 
- Public Member Functions inherited from panzer::Expr::EvalBase
 EvalBase ()
 Constructor. More...
 
void set (std::string const &name, Function const &value)
 Registers an EvalBase::Function, binding it to a name and making it callable. More...
 
template<typename T >
T constget (std::string const &name) const
 Get the value of a variable in the symbol map. More...
 
- Public Member Functions inherited from Teuchos::Reader
virtual ~Reader ()
 
 Reader (ReaderTablesPtr tables_in)
 
void read_stream (any &result, std::istream &stream, std::string const &stream_name_in)
 
void read_string (any &result, std::string const &string, std::string const &string_name)
 
void read_file (any &result, std::string const &file_name)
 

Protected Member Functions

void make_constant (Teuchos::any &result, double const &value) override
 
void inspect_arg (Teuchos::any const &arg, bool &is_many, bool &is_bool) override
 
void single_single_ternary_op (Teuchos::any &result, Teuchos::any &cond, Teuchos::any &left, Teuchos::any &right) override
 
void single_many_ternary_op (Teuchos::any &result, Teuchos::any &cond, Teuchos::any &left, Teuchos::any &right) override
 
void many_single_ternary_op (Teuchos::any &result, Teuchos::any &cond, Teuchos::any &left, Teuchos::any &right) override
 
void many_many_ternary_op (Teuchos::any &result, Teuchos::any &cond, Teuchos::any &left, Teuchos::any &right) override
 
void single_single_binary_op (BinaryOpCode code, Teuchos::any &result, Teuchos::any &left, Teuchos::any &right) override
 
void single_many_binary_op (BinaryOpCode code, Teuchos::any &result, Teuchos::any &left, Teuchos::any &right) override
 
void many_single_binary_op (BinaryOpCode code, Teuchos::any &result, Teuchos::any &left, Teuchos::any &right) override
 
void many_many_binary_op (BinaryOpCode code, Teuchos::any &result, Teuchos::any &left, Teuchos::any &right) override
 
void many_neg_op (Teuchos::any &result, Teuchos::any &right) override
 
void single_neg_op (Teuchos::any &result, Teuchos::any &right) override
 
- Protected Member Functions inherited from panzer::Expr::EvalBase
void at_shift (Teuchos::any &result, int token, std::string &text) override
 Called at every parsed token in the math language. More...
 
void at_reduce (Teuchos::any &result, int prod, std::vector< Teuchos::any > &rhs) override
 Called at every reduced production in the math language. More...
 
void ternary_op (Teuchos::any &result, Teuchos::any &cond, Teuchos::any &left, Teuchos::any &right)
 Executes the ternary operator, e.g. (a > b) ? a : b. More...
 
void binary_op (BinaryOpCode code, Teuchos::any &result, Teuchos::any &left, Teuchos::any &right)
 Executes a binary operator. More...
 
void neg_op (Teuchos::any &result, Teuchos::any &right)
 Executes the only native unary operator in the math language, numeric negation via a minus sign. More...
 

Additional Inherited Members

- Protected Attributes inherited from panzer::Expr::EvalBase
std::map< std::string,
Teuchos::any
symbol_map
 Stores all current symbols including variables and functions. More...
 

Detailed Description

template<typename DT, typename... VP>
class panzer::Expr::Eval< DT, VP >

Interprets mathematical expressions in a string and evaluates them using Kokkos::View objects as values and Kokkos::parallel_for for the operators. This class is mean to support Kokkos-parallel execution of user-provided mathematical expressions. Example uses include evaluating analytic boundary and initial conditions for a PDE problem. The API of this class (namely Eval::read_string or another read_* function inherited from Teuchos::Reader) is only meant to be called once for a given set of evaluation points. Variables should be predefined with point-dependent values all stored in a single Kokkos::View. For example, X coordinates for all points could be stored in a Kokkos::View<double*>, whose extent is the number of points. Values which are the same for all points are still supported, for example the current time. Then if the expression is for example "x^t", this class launches a single parallel_for to raise the coordinate of all points at once to the "t" power.

Note
This class currently supports rank-1 and rank-2 Kokkos::Views. It should support all scalar types which support the native binary operators ('+', '-', '*', '/'), and also pow(x, y).
Expression results are allocated when an expression is evaluated, and deallocated after they have been used in all higher-level expressions. For example, "(a * b) + c" does the following:
  • allocate space for "(a * b)"
  • compute and store "(a * b)"
  • allocate space for "(a * b) + c"
  • compute and store "(a * b) + c"
  • deallocate space for "(a * b)"

Definition at line 229 of file Panzer_ExprEval.hpp.

Member Typedef Documentation

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::original_view_type = Kokkos::View<DT, VP ...>

The corresponding Kokkos::View type, using the same template arguments are were given to Eval.

Definition at line 232 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::view_data_type = DT

The data type, including dimension information.

Definition at line 234 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::scalar_type = typename original_view_type::non_const_value_type

The scalar type.

This type should be constructible from a value of type "double" and should be usable with the four basic binary operator ('+', '-', '*', '/') and also the pow() function.

Definition at line 241 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::const_view_type = Kokkos::View<typename RebindDataType<view_data_type, scalar_type const>::type, VP ...>

One scalar for each evaluation point, read-only.

This is the original view type where the scalar type is constant. This means it is a read-only view. and will most likely be the type that is returned from read_string().

Definition at line 249 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::const_bool_view_type = Kokkos::View<typename RebindDataType<view_data_type, bool const>::type, VP ...>

One boolean for each evaluation point, read-only.

Definition at line 253 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::single_view_type = Kokkos::View<scalar_type, VP ...>

One scalar (same for all evaluation points)

Definition at line 257 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::const_single_view_type = Kokkos::View<scalar_type const, VP ...>

One scalar (same for all evaluation points), read-only.

Definition at line 261 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::single_bool_view_type = Kokkos::View<bool, VP ...>

One boolean (same for all evaluation points)

Definition at line 265 of file Panzer_ExprEval.hpp.

template<typename DT, typename... VP>
using panzer::Expr::Eval< DT, VP >::const_single_bool_view_type = Kokkos::View<bool const, VP ...>

One boolean (same for all evaluation points), read-only.

Definition at line 269 of file Panzer_ExprEval.hpp.

Constructor & Destructor Documentation

template<typename DT , typename... VP>
panzer::Expr::Eval< DT, VP >::Eval ( )

Definition at line 381 of file Panzer_ExprEval_impl.hpp.

Member Function Documentation

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::set ( std::string const name,
bool  value 
)

Assign a boolean value to a variable symbol.

Definition at line 387 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::set ( std::string const name,
scalar_type const value 
)

Assign a scalar value to a variable symbol.

Definition at line 396 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::set ( std::string const name,
const_view_type const value 
)

Assign scalar values (one for each evaluation point) to a variable symbol.

Definition at line 407 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::make_constant ( Teuchos::any result,
double const value 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 412 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::inspect_arg ( Teuchos::any const arg,
bool &  is_many,
bool &  is_bool 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 423 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::single_single_ternary_op ( Teuchos::any result,
Teuchos::any cond,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 444 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::single_many_ternary_op ( Teuchos::any result,
Teuchos::any cond,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 451 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::many_single_ternary_op ( Teuchos::any result,
Teuchos::any cond,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 459 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::many_many_ternary_op ( Teuchos::any result,
Teuchos::any cond,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 467 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::single_single_binary_op ( BinaryOpCode  code,
Teuchos::any result,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 474 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::single_many_binary_op ( BinaryOpCode  code,
Teuchos::any result,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 494 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::many_single_binary_op ( BinaryOpCode  code,
Teuchos::any result,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 516 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::many_many_binary_op ( BinaryOpCode  code,
Teuchos::any result,
Teuchos::any left,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 538 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::many_neg_op ( Teuchos::any result,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 619 of file Panzer_ExprEval_impl.hpp.

template<typename DT , typename... VP>
void panzer::Expr::Eval< DT, VP >::single_neg_op ( Teuchos::any result,
Teuchos::any right 
)
overrideprotectedvirtual

Implements panzer::Expr::EvalBase.

Definition at line 624 of file Panzer_ExprEval_impl.hpp.


The documentation for this class was generated from the following files: