deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
function_parser.cc
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2005 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13
18
19#include <deal.II/lac/vector.h>
20
21#include <complex>
22#include <map>
23
25
26
27template <int dim>
28const std::vector<std::string> &
30{
31 return this->expressions;
32}
33
34
35
36template <int dim>
37FunctionParser<dim>::FunctionParser(const unsigned int n_components,
38 const double initial_time,
39 const double h)
40 : AutoDerivativeFunction<dim>(h, n_components, initial_time)
41{}
42
43
44template <int dim>
45FunctionParser<dim>::FunctionParser(const std::string &expression,
46 const std::string &constants,
47 const std::string &variable_names,
48 const double h)
50 h,
51 Utilities::split_string_list(expression, ';').size())
52{
57 0,
59 ",",
60 "="));
61 initialize(variable_names,
62 expression,
63 constants_map,
64 Utilities::split_string_list(variable_names, ",").size() ==
65 dim + 1);
66}
67
68
69
70template <int dim>
71void
72FunctionParser<dim>::initialize(const std::string &variables,
73 const std::vector<std::string> &expressions,
74 const std::map<std::string, double> &constants,
75 const bool time_dependent)
76{
77 AssertThrow(this->n_components == expressions.size(),
78 ExcInvalidExpressionSize(this->n_components, expressions.size()));
80 variables, expressions, constants, time_dependent);
81}
82
83
84
85template <int dim>
86void
87FunctionParser<dim>::initialize(const std::string &vars,
88 const std::string &expression,
89 const std::map<std::string, double> &constants,
90 const bool time_dependent)
91{
92 initialize(vars,
93 Utilities::split_string_list(expression, ';'),
94 constants,
95 time_dependent);
96}
97
98
99
100template <int dim>
101double
103 const unsigned int component) const
104{
105 return this->do_value(p, this->get_time(), component);
106}
107
108// Explicit Instantiations.
109
110template class FunctionParser<1>;
111template class FunctionParser<2>;
112template class FunctionParser<3>;
113
FunctionParser(const unsigned int n_components=1, const double initial_time=0.0, const double h=1e-8)
virtual void initialize(const std::string &vars, const std::vector< std::string > &expressions, const ConstMap &constants, const bool time_dependent=false) override
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
const std::vector< std::string > & get_expressions() const
static const unsigned int max_int_value
Definition patterns.h:594
Definition point.h:111
virtual void initialize(const std::string &vars, const std::vector< std::string > &expressions, const std::map< std::string, double > &constants, const bool time_dependent=false)
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define AssertThrow(cond, exc)
std::size_t size
Definition mpi.cc:733
std::vector< std::string > split_string_list(const std::string &s, const std::string &delimiter=",")
Definition utilities.cc:695
static T to_value(const std::string &s, const Patterns::PatternBase &p= *Convert< T >::to_pattern())=delete