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
tensor_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) 2019 - 2025 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
17#include <deal.II/base/tensor.h>
21
22#include <map>
23
25
26
27template <int rank, int dim, typename Number>
28const std::vector<std::string> &
30{
31 return this->expressions;
32}
33
34
35
36template <int rank, int dim, typename Number>
38 const double initial_time)
39 : TensorFunction<rank, dim, Number>(initial_time)
40 , n_components(Utilities::pow(dim, rank))
41{}
42
43
44template <int rank, int dim, typename Number>
46 const std::string &expression,
47 const std::string &constants,
48 const std::string &variable_names)
49 : TensorFunction<rank, dim, Number>()
50 , n_components(Utilities::pow(dim, rank))
51{
56 0,
58 ",",
59 "="));
60 initialize(variable_names,
61 expression,
62 constants_map,
63 Utilities::split_string_list(variable_names, ",").size() ==
64 dim + 1);
65}
66
67
68
69template <int rank, int dim, typename Number>
70void
72 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 rank, int dim, typename Number>
86void
88 const std::string &vars,
89 const std::string &expression,
90 const std::map<std::string, double> &constants,
91 const bool time_dependent)
92{
93 initialize(vars,
94 Utilities::split_string_list(expression, ';'),
95 constants,
96 time_dependent);
97}
98
99
100
101template <int rank, int dim, typename Number>
104{
105 std::array<Number, Tensor<rank, dim, Number>::n_independent_components>
106 values;
107 auto values_view = make_array_view(values.begin(), values.end());
108 this->do_all_values(p, this->get_time(), values_view);
109
111 make_array_view(values.begin(), values.end()));
112}
113
114
115
116template <int rank, int dim, typename Number>
117void
119 const std::vector<Point<dim>> &p,
120 std::vector<Tensor<rank, dim, Number>> &values) const
121{
122 Assert(p.size() == values.size(),
123 ExcDimensionMismatch(p.size(), values.size()));
124
125 for (unsigned int i = 0; i < p.size(); ++i)
126 {
127 values[i] = value(p[i]);
128 }
129}
130
131// explicit instantiations
132#include "base/tensor_function_parser.inst"
133
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
static const unsigned int max_int_value
Definition patterns.h:594
Definition point.h:111
TensorFunctionParser(const double initial_time=0.0)
virtual Tensor< rank, dim, Number > value(const Point< dim > &p) const override
virtual void value_list(const std::vector< Point< dim > > &p, std::vector< Tensor< rank, dim, Number > > &values) const override
virtual void initialize(const std::string &vars, const std::vector< std::string > &expressions, const ConstMap &constants, const bool time_dependent=false) override
const std::vector< std::string > & get_expressions() const
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 Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#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