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
21 template <typename Number, std::size_t width>
22 inline ::dealii::VectorizedArray<Number, width>
23 erf(const ::dealii::VectorizedArray<Number, width> &x)
24 {
25 ::dealii::VectorizedArray<Number, width> out;
26 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
27 out[i] = std::erf(x[i]);
28 return out;
29 }
30
31 template <typename Number, std::size_t width>
32 inline ::dealii::VectorizedArray<Number, width>
33 erfc(const ::dealii::VectorizedArray<Number, width> &x)
34 {
35 ::dealii::VectorizedArray<Number, width> out;
36 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
37 out[i] = std::erfc(x[i]);
38 return out;
39 }
40
41 template <typename Number, std::size_t width>
42 inline ::dealii::VectorizedArray<Number, width>
43 atan2(const ::dealii::VectorizedArray<Number, width> &y,
44 const ::dealii::VectorizedArray<Number, width> &x)
45 {
46 ::dealii::VectorizedArray<Number, width> out;
47 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
48 out[i] = std::atan2(y[i], x[i]);
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, const Number denom)
55 {
56 ::dealii::VectorizedArray<Number, width> out;
57 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
58 out[i] = std::fmod(numer[i], denom);
59 return out;
60 }
61
62 template <typename Number, std::size_t width>
63 inline ::dealii::VectorizedArray<Number, width>
64 fmod(const ::dealii::VectorizedArray<Number, width> &numer,
65 const ::dealii::VectorizedArray<Number, width> &denom)
66 {
67 ::dealii::VectorizedArray<Number, width> out;
68 for (unsigned int i = 0; i < dealii::VectorizedArray<Number, width>::size(); ++i)
69 out[i] = std::fmod(numer[i], denom[i]);
70 return out;
71 }
72
73 // NOLINTEND(cert-dcl58-cpp, readability-identifier-naming,
74 // readability-identifier-length)
75
76} // namespace std
Definition vectorized_operations.h:17
inline ::dealii::VectorizedArray< Number, width > atan2(const ::dealii::VectorizedArray< Number, width > &y, const ::dealii::VectorizedArray< Number, width > &x)
Definition vectorized_operations.h:43
inline ::dealii::VectorizedArray< Number, width > erf(const ::dealii::VectorizedArray< Number, width > &x)
Definition vectorized_operations.h:23
inline ::dealii::VectorizedArray< Number, width > erfc(const ::dealii::VectorizedArray< Number, width > &x)
Definition vectorized_operations.h:33
inline ::dealii::VectorizedArray< Number, width > fmod(const ::dealii::VectorizedArray< Number, width > &numer, const Number denom)
Definition vectorized_operations.h:54