PRISMS-PF Manual
Loading...
Searching...
No Matches
vectorized_operations.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2025 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#pragma once
5
6#include <deal.II/base/vectorization.h>
7
8#include <prismspf/config.h>
9
10#include <cmath>
11
16namespace std
17{
18 // NOLINTBEGIN(cert-dcl58-cpp, readability-identifier-naming,
19 // readability-identifier-length)
20 // clang-format off
21
22 template <typename Number, std::size_t width>
23 inline ::dealii::VectorizedArray<Number, width>
24 erf(const ::dealii::VectorizedArray<Number, width> &x)
25 {
26 ::dealii::VectorizedArray<Number, width> out;
27 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
28 out[i] = std::erf(x[i]);
29 return out;
30 }
31
32 template <typename Number, std::size_t width>
33 inline ::dealii::VectorizedArray<Number, width>
34 erfc(const ::dealii::VectorizedArray<Number, width> &x)
35 {
36 ::dealii::VectorizedArray<Number, width> out;
37 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
38 out[i] = std::erfc(x[i]);
39 return out;
40 }
41
42 template <typename Number, std::size_t width>
43 inline ::dealii::VectorizedArray<Number, width>
44 fmod(const ::dealii::VectorizedArray<Number, width> &numer, const Number denom)
45 {
46 ::dealii::VectorizedArray<Number, width> out;
47 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
48 out[i] = std::fmod(numer[i], denom);
49 return out;
50 }
51
52 template <typename Number, std::size_t width>
53 inline ::dealii::VectorizedArray<Number, width>
54 fmod(const ::dealii::VectorizedArray<Number, width> &numer,
55 const ::dealii::VectorizedArray<Number, width> &denom)
56 {
57 ::dealii::VectorizedArray<Number, width> out;
58 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
59 out[i] = std::fmod(numer[i], denom[i]);
60 return out;
61 }
62
63 // clang-format on
64 // NOLINTEND(cert-dcl58-cpp, readability-identifier-naming,
65 // readability-identifier-length)
66
67} // namespace std
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
Definition vectorized_operations.h:17
inline ::dealii::VectorizedArray< Number, width > erf(const ::dealii::VectorizedArray< Number, width > &x)
Definition vectorized_operations.h:24
inline ::dealii::VectorizedArray< Number, width > erfc(const ::dealii::VectorizedArray< Number, width > &x)
Definition vectorized_operations.h:34
inline ::dealii::VectorizedArray< Number, width > fmod(const ::dealii::VectorizedArray< Number, width > &numer, const Number denom)
Definition vectorized_operations.h:44