3#include <deal.II/base/config.h>
5#include <deal.II/base/exceptions.h>
6#include <deal.II/base/point.h>
7#include <deal.II/base/vectorization.h>
9#include <deal.II/fe/mapping.h>
11#include <deal.II/grid/grid_tools_geometry.h>
12#include <deal.II/grid/tria.h>
19#include <unordered_set>
24 template <
typename number1,
typename number2>
28 std::unordered_set<int> seen;
29 auto it_a = a.begin();
30 auto it_b = b.begin();
32 while (it_a != a.end())
34 if (seen.contains(*it_a))
54 std::ostringstream out;
56 out << std::scientific << a_value;
60 template <
typename number>
61 inline dealii::VectorizedArray<number>
63 const number lower_limit,
64 const number upper_limit)
66 const auto ub = compare_and_apply_mask<dealii::SIMDComparison::greater_than>(in,
70 return compare_and_apply_mask<dealii::SIMDComparison::less_than>(ub,
76 template <
typename number>
78 limit_to_bounds(
const number in,
const number lower_limit,
const number upper_limit)
80 const auto ub = in > upper_limit ? upper_limit : in;
81 return ub < lower_limit ? lower_limit : ub;
88 template <
typename number>
89 dealii::VectorizedArray<number>
91 const number lower_limit,
92 const number upper_limit)
94 return compare_and_apply_mask<dealii::SIMDComparison::less_than>(
97 compare_and_apply_mask<dealii::SIMDComparison::greater_than>(in, lower_limit, 1.0, 0.0),
104 template <
typename number>
109 return std::floor(std::log10(x));
111 return std::floor(std::log10(std::abs(x)));
119 template <
int dim,
typename number>
122 const std::vector<dealii::Point<dim>> &points)
125 for (
unsigned int i = 0; i < vals.size() - 1; ++i)
126 result += (vals[i] + vals[i + 1]) / 2. * (points[i + 1].distance(points[i]));
131 template <
int dim,
typename number>
134 const dealii::Mapping<dim> &mapping)
136 return std::min(1e-2,
137 std::max(std::pow(10,
139 dealii::GridTools::volume<dim>(triangulation, mapping),
145 template <
int dim,
typename ForwardIterator>
147 to_point(
const ForwardIterator begin,
const ForwardIterator end)
150 AssertIndexRange(dim, std::distance(begin, end) + 1);
152 dealii::Point<dim> point;
155 for (
int i = 0; i < dim; ++i)
165 template <
typename TypeWeight,
typename TypeTerm>
168 const TypeTerm &term_a,
169 const TypeWeight &weight_b,
170 const TypeTerm &term_b)
172 return weight_a * term_a + weight_b * term_b;
183 template <
typename number>
184 [[nodiscard]] dealii::VectorizedArray<number>
187 dealii::VectorizedArray<number> result;
189 for (
unsigned int i = 0; i < dealii::VectorizedArray<number>::size(); ++i)
190 result[i] = std::erfc(x[i]);
Definition utility_functions.hpp:23
dealii::Point< dim > to_point(const ForwardIterator begin, const ForwardIterator end)
Definition utility_functions.hpp:147
TypeTerm calculate_arithmetic_phase_weighted_average(const TypeWeight &weight_a, const TypeTerm &term_a, const TypeWeight &weight_b, const TypeTerm &term_b)
Definition utility_functions.hpp:167
std::string to_string_with_precision(const T a_value, const int n=6)
Definition utility_functions.hpp:52
dealii::VectorizedArray< number > is_between(const dealii::VectorizedArray< number > &in, const number lower_limit, const number upper_limit)
Definition utility_functions.hpp:90
int get_exponent_power_ten(const number x)
Definition utility_functions.hpp:106
number compute_numerical_zero_of_norm(const dealii::Triangulation< dim > &triangulation, const dealii::Mapping< dim > &mapping)
Definition utility_functions.hpp:133
number integrate_over_line(const std::vector< number > &vals, const std::vector< dealii::Point< dim > > &points)
Definition utility_functions.hpp:121
void remove_duplicates(std::vector< number1 > &a, std::vector< number2 > &b)
Definition utility_functions.hpp:26
dealii::VectorizedArray< number > limit_to_bounds(const dealii::VectorizedArray< number > &in, const number lower_limit, const number upper_limit)
Definition utility_functions.hpp:62
dealii::VectorizedArray< number > calculate_complementary_error_function_vec(const dealii::VectorizedArray< number > &x)
Helper function for the element-wise computation of the complementary error function of a vectorized ...
Definition utility_functions.hpp:185