25#include <Kokkos_Macros.hpp>
40 , function_object(n_components)
48 const unsigned int n_components,
49 const std::string &input_expr)
73 "Names of the independent variables, separated by commas.");
77 std::string expr = input_expr;
81 for (
unsigned int i = 1; i < n_components; ++i)
94 "Function expression",
97 "Semicolon-separated formulas for the function components. Supports standard "
98 "operations, functions `sin`, `cos`, etc., and conditionals `if(x>0, 1, -1)`.");
100 "Function constants",
103 "Symbolic constants for the function expression, in the form "
104 "'var1=value1, var2=value2, ...'. Note: 'pi', 'Pi', 'PI', and 'E' are predefined.");
113 std::string vnames = prm.
get(
"Variable names");
114 std::string expression = prm.
get(
"Function expression");
115 std::string constants_list = prm.
get(
"Function constants");
117 std::vector<std::string> const_list =
119 std::map<std::string, double> constants;
128 for (
const auto &constant : const_list)
130 std::vector<std::string> this_c =
133 ExcMessage(
"The list of constants, <" + constants_list +
134 ">, is not a comma-separated list of "
135 "entries of the form 'name=value'."));
144 function_object.initialize(vnames, expression, constants);
148 function_object.initialize(vnames, expression, constants,
true);
153 "The list of variables specified is <" + vnames +
154 "> which is a list of length " +
156 " but it has to be a list of length equal to" +
157 " either dim (for a time-independent function)" +
158 " or dim+1 (for a time-dependent function)."));
169 function_object.vector_value(p, values);
178 return function_object.value(p, comp);
187 function_object.set_time(newtime);
virtual void set_time(const Number new_time)
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const override
ParsedFunction(const unsigned int n_components=1, const double h=1e-8)
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
static void declare_parameters(ParameterHandler &prm, const unsigned int n_components=1, const std::string &input_expr="")
virtual void set_time(const double newtime) override
void parse_parameters(ParameterHandler &prm)
void declare_entry(const std::string &entry, const std::string &default_value, const Patterns::PatternBase &pattern=Patterns::Anything(), const std::string &documentation="", const bool has_to_be_set=false)
std::string get(const std::string &entry_string) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcZero()
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::vector< std::string > split_string_list(const std::string &s, const std::string &delimiter=",")
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
double string_to_double(const std::string &s)