23 #ifdef DEAL_II_WITH_SYMENGINE
29 template <
int spacedim>
31 const std::string §ion_name,
32 const std::string &component_names,
33 const std::vector<std::set<dealii::types::boundary_id>> &ids,
34 const std::vector<std::string> &selected_components,
35 const std::vector<BoundaryConditionType> &bc_type,
36 const std::vector<std::string> &expressions)
38 , component_names(component_names)
41 , selected_components(selected_components)
43 , expressions(expressions)
73 this->selected_components,
90 for (
const auto &
exp : this->expressions)
92 std::make_unique<dealii::Functions::SymbolicFunction<spacedim>>(
exp));
97 for (
const auto &comp : this->selected_components)
111 template <
int spacedim>
115 n_boundary_conditions = ids.size();
116 AssertThrow(n_boundary_conditions == bc_type.size(),
117 ExcMessage(
"The number of boundary ids must be equal to the "
118 "number of boundary condition types."));
119 AssertThrow(n_boundary_conditions == expressions.size(),
120 ExcMessage(
"The number of boundary ids must be equal to the "
121 "number of expressions."));
122 AssertThrow(n_boundary_conditions == selected_components.size(),
124 "must be equal to the number "
125 "of selected components."));
127 std::set<types::boundary_id> all_ids;
128 unsigned int n_ids = 0;
129 for (
const auto &
id : ids)
131 all_ids.insert(
id.begin(),
id.end());
139 ExcMessage(
"If you use the boundary id -1, then no other "
140 "boundary ids can be specified"));
142 ExcMessage(
"Only one BoundaryCondition can be specified "
143 "with the special boundary id -1"));
167 for (
unsigned int i = 0; i < n_boundary_conditions; ++i)
173 AssertThrow(masks[i].n_selected_components() == spacedim,
199 template <
int spacedim>
202 const dealii::Differentiation::SD::types::substitution_map
205 auto smap = substitution_map;
216 for (
auto &f : functions)
217 f->update_user_substitution_map(smap);
222 template <
int spacedim>
227 for (
auto &f : functions)
228 f->set_additional_function_arguments(arguments);
233 template <
int spacedim>
237 for (
auto &f : functions)
243 template <
int spacedim>
244 std::set<dealii::types::boundary_id>
247 std::set<dealii::types::boundary_id> essential_boundary_ids;
248 for (
unsigned int i = 0; i < ids.size(); ++i)
252 essential_boundary_ids.insert(ids[i].begin(), ids[i].end());
254 return essential_boundary_ids;
259 template <
int spacedim>
260 std::set<dealii::types::boundary_id>
263 std::set<dealii::types::boundary_id> natural_boundary_ids;
264 for (
unsigned int i = 0; i < ids.size(); ++i)
267 natural_boundary_ids.insert(ids[i].begin(), ids[i].end());
269 return natural_boundary_ids;
static ParameterHandler prm
boost::signals2::signal< void()> parse_parameters_call_back
void add_parameter(const std::string &entry, ParameterType ¶meter, const std::string &documentation="", ParameterHandler &prm_=prm, const Patterns::PatternBase &pattern=*Patterns::Tools::Convert< ParameterType >::to_pattern())
static const unsigned int max_int_value
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::map< SD::Expression, SD::Expression, internal::ExpressionKeyLess > substitution_map
Expression exp(const Expression &exponent)
static constexpr double LOG10E
static constexpr double PI_2
const types::boundary_id invalid_boundary_id
static constexpr double E
static constexpr double PI
static constexpr double SQRT2
static constexpr double SQRT1_2
static constexpr double PI_4
static constexpr double LN10
static constexpr double LN2
static constexpr double LOG2E