omega_h
Reliable mesh adaptation
Omega_h_array_ops.hpp
1 #ifndef OMEGA_H_ARRAY_OPS_HPP
2 #define OMEGA_H_ARRAY_OPS_HPP
3 
4 #include <vector>
5 
6 #include <Omega_h_comm.hpp>
7 #include <Omega_h_scalar.hpp>
8 
9 namespace Omega_h {
10 
11 template <class T>
12 bool operator==(Read<T> a, Read<T> b);
13 
14 template <typename T>
15 promoted_t<T> get_sum(Read<T> a);
16 template <typename T>
17 T get_min(Read<T> a);
18 template <typename T>
19 T get_max(Read<T> a);
20 
21 template <typename T>
22 promoted_t<T> get_sum(CommPtr comm, Read<T> a);
23 template <typename T>
24 T get_min(CommPtr comm, Read<T> a);
25 template <typename T>
26 T get_max(CommPtr comm, Read<T> a);
27 
28 template <typename T>
29 struct MinMax {
30  T min;
31  T max;
32 };
33 
34 template <typename T>
35 MinMax<T> get_minmax(CommPtr comm, Read<T> a);
36 
37 bool are_close(Reals a, Reals b, Real tol = EPSILON, Real floor = EPSILON);
38 bool are_close_abs(Reals a, Reals b, Real tol = EPSILON);
39 
40 template <typename T>
41 Bytes each_eq(Read<T> a, Read<T> b);
42 template <typename T>
43 Bytes each_eq_to(Read<T> a, T b);
44 
45 /* "a" may be larger than "b" by some integer factor */
46 template <typename T>
47 Write<T> multiply_each(Read<T> a, Read<T> b, std::string const& name = "");
48 template <typename T>
49 Read<T> multiply_each_by(Read<T> a, T b);
50 template <typename T>
51 Write<T> divide_each(Read<T> a, Read<T> b, std::string const& name = "");
52 Reals divide_each_maybe_zero(Reals a, Reals b);
53 template <typename T>
54 Write<T> concat(Read<T> a, Read<T> b, std::string const& name = "");
55 Reals pow_each(Reals a, Reals b);
56 template <typename T>
57 Read<T> divide_each_by(Read<T> a, T b);
58 template <typename T>
59 Read<T> add_each(Read<T> a, Read<T> b, std::string const& name = "");
60 template <typename T>
61 Read<T> subtract_each(Read<T> a, Read<T> b);
62 template <typename T>
63 Read<T> add_to_each(Read<T> a, T b);
64 template <typename T>
65 Read<T> subtract_from_each(Read<T> a, T b);
66 template <typename T>
67 Bytes each_geq_to(Read<T> a, T b);
68 template <typename T>
69 Bytes each_leq_to(Read<T> a, T b);
70 template <typename T>
71 Bytes each_gt(Read<T> a, T b);
72 template <typename T>
73 Bytes each_lt(Read<T> a, T b);
74 template <typename T>
75 Bytes gt_each(Read<T> a, Read<T> b);
76 template <typename T>
77 Bytes lt_each(Read<T> a, Read<T> b);
78 template <typename T>
79 Bytes eq_each(Read<T> a, Read<T> b);
80 template <typename T>
81 Bytes neq_each(Read<T> a, Read<T> b);
82 template <typename T>
83 Bytes each_neq_to(Read<T> a, T b);
84 template <typename T>
85 Read<T> min_each(Read<T> a, Read<T> b);
86 template <typename T>
87 Read<T> max_each(Read<T> a, Read<T> b);
88 template <typename T>
89 Read<T> each_max_with(Read<T> a, T b);
90 Bytes land_each(Bytes a, Bytes b);
91 Bytes lor_each(Bytes a, Bytes b);
92 Bytes bit_or_each(Bytes a, Bytes b);
93 Bytes bit_neg_each(Bytes a);
94 Read<Real> fabs_each(Read<Real> a);
95 
96 template <typename T>
97 Read<T> ternary_each(Bytes cond, Read<T> a, Read<T> b);
98 
99 template <typename T>
100 Read<T> get_component(Read<T> a, Int ncomps, Int comp);
101 
102 template <typename T>
103 void set_component(Write<T> out, Read<T> a, Int ncomps, Int comp);
104 
105 template <typename T>
106 LO find_last(Read<T> array, T value);
107 
108 template <typename T>
109 bool is_sorted(Read<T> array);
110 
111 template <typename T>
112 Read<T> interleave(std::vector<Read<T>> arrays);
113 
114 template <typename T>
115 Read<T> coalesce(std::vector<Read<T>> arrays);
116 
117 Real repro_sum(Reals a);
118 Real repro_sum(CommPtr comm, Reals a);
119 void repro_sum(CommPtr comm, Reals a, Int ncomps, Real result[]);
120 
121 Reals interpolate_between(Reals a, Reals b, Real t);
122 Reals invert_each(Reals a);
123 
124 template <typename Tout, typename Tin>
125 Read<Tout> array_cast(Read<Tin> in);
126 
127 #define OMEGA_H_EXPL_INST_DECL(T) \
128  extern template bool operator==(Read<T> a, Read<T> b); \
129  extern template promoted_t<T> get_sum(Read<T> a); \
130  extern template T get_min(Read<T> a); \
131  extern template T get_max(Read<T> a); \
132  extern template promoted_t<T> get_sum(CommPtr comm, Read<T> a); \
133  extern template T get_min(CommPtr comm, Read<T> a); \
134  extern template T get_max(CommPtr comm, Read<T> a); \
135  extern template MinMax<T> get_minmax(CommPtr comm, Read<T> a); \
136  extern template Write<T> multiply_each( \
137  Read<T> a, Read<T> b, std::string const&); \
138  extern template Write<T> divide_each( \
139  Read<T> a, Read<T> b, std::string const&); \
140  extern template Write<T> concat( \
141  Read<T> a, Read<T> b, std::string const&); \
142  extern template Read<T> add_each(Read<T> a, Read<T> b, std::string const&); \
143  extern template Read<T> subtract_each(Read<T> a, Read<T> b); \
144  extern template Read<T> add_to_each(Read<T> a, T b); \
145  extern template Read<T> subtract_from_each(Read<T> a, T b); \
146  extern template Bytes each_geq_to(Read<T> a, T b); \
147  extern template Bytes each_leq_to(Read<T> a, T b); \
148  extern template Bytes each_gt(Read<T> a, T b); \
149  extern template Bytes each_lt(Read<T> a, T b); \
150  extern template Bytes each_neq_to(Read<T> a, T b); \
151  extern template Bytes each_eq(Read<T> a, Read<T> b); \
152  extern template Bytes each_eq_to(Read<T> a, T b); \
153  extern template Read<T> multiply_each_by(Read<T> a, T b); \
154  extern template Read<T> divide_each_by(Read<T> a, T b); \
155  extern template Read<T> min_each(Read<T> a, Read<T> b); \
156  extern template Read<T> max_each(Read<T> a, Read<T> b); \
157  extern template Read<T> ternary_each(Bytes cond, Read<T> a, Read<T> b); \
158  extern template Read<T> each_max_with(Read<T> a, T b); \
159  extern template Bytes gt_each(Read<T> a, Read<T> b); \
160  extern template Bytes lt_each(Read<T> a, Read<T> b); \
161  extern template Bytes eq_each(Read<T> a, Read<T> b); \
162  extern template Bytes neq_each(Read<T> a, Read<T> b); \
163  extern template Read<T> get_component(Read<T> a, Int ncomps, Int comp); \
164  extern template void set_component( \
165  Write<T> out, Read<T> a, Int ncomps, Int comp); \
166  extern template LO find_last(Read<T> array, T value); \
167  extern template bool is_sorted(Read<T> array); \
168  extern template Read<T> interleave(std::vector<Read<T>> arrays); \
169  extern template Read<T> coalesce(std::vector<Read<T>> arrays);
170 OMEGA_H_EXPL_INST_DECL(I8)
171 OMEGA_H_EXPL_INST_DECL(I32)
172 OMEGA_H_EXPL_INST_DECL(I64)
173 OMEGA_H_EXPL_INST_DECL(Real)
174 #undef OMEGA_H_EXPL_INST_DECL
175 
176 extern template Read<Real> array_cast(Read<I32>);
177 extern template Read<I32> array_cast(Read<I8>);
178 
179 } // end namespace Omega_h
180 
181 #endif
Definition: Omega_h_array.hpp:89
Definition: Omega_h_array.hpp:50
Definition: amr_mpi_test.cpp:6
Definition: Omega_h_array_ops.hpp:29