20 #ifndef __internalFieldAlgorithms_hpp__
21 #define __internalFieldAlgorithms_hpp__
26 template<
class T,
class MemorySpace>
32 using policy = Kokkos::RangePolicy<
34 Kokkos::IndexType<uint32> >;
36 if constexpr(isDeviceAccessible<exeSpace>())
41 auto filed = iField.
field().deviceViewAll();
45 Kokkos::parallel_reduce(
47 policy(aRange.start(), aRange.end() ),
51 if(filed[i] < minUpdate) minUpdate = filed[i];
53 Kokkos::Min<T>(minElement));
61 auto filed = iField.
field().deviceViewAll();
63 Kokkos::parallel_reduce(
65 policy(aRange.start(), aRange.end()),
69 if(filed[i] < minUpdate) minUpdate = filed[i];
71 Kokkos::Min<T>(minElement));
77 template<
class T,
class MemorySpace>
83 using policy = Kokkos::RangePolicy<
85 Kokkos::IndexType<uint32> >;
87 if constexpr(isDeviceAccessible<exeSpace>())
92 auto filed = iField.
field().deviceViewAll();
96 Kokkos::parallel_reduce(
98 policy(aRange.start(), aRange.end() ),
102 if( maxUpdate <filed[i]) maxUpdate = filed[i];
104 Kokkos::Max<T>(maxElement));
112 auto filed = iField.
field().deviceViewAll();
116 Kokkos::parallel_reduce(
117 "max(internalField)",
118 policy(aRange.start(), aRange.end() ),
122 if( maxUpdate <filed[i]) maxUpdate = filed[i];
124 Kokkos::Max<T>(maxElement));
130 template<
class T,
class MemorySpace>
136 using policy = Kokkos::RangePolicy<
138 Kokkos::IndexType<uint32> >;
140 if constexpr(isDeviceAccessible<exeSpace>())
145 auto filed = iField.
field().deviceViewAll();
150 Kokkos::parallel_reduce(
151 "minMax(internalField)",
152 policy(aRange.start(), aRange.end() ),
157 if(maxUpdate < filed[i]) maxUpdate = filed[i];
158 if(filed[i] < minUpdate) minUpdate = filed[i];
162 Kokkos::Min<T>(minElement),
163 Kokkos::Max<T>(maxElement)
165 return {minElement, maxElement};
172 auto filed = iField.
field().deviceViewAll();
177 Kokkos::parallel_reduce(
178 "minMax(internalField)",
179 policy(aRange.start(), aRange.end() ),
184 if(maxUpdate < filed[i]) maxUpdate = filed[i];
185 if(filed[i] < minUpdate) minUpdate = filed[i];
189 Kokkos::Min<T>(minElement),
190 Kokkos::Max<T>(maxElement)
192 return {minElement, maxElement};
196 template<
class T,
class MemorySpace>
202 using policy = Kokkos::RangePolicy<
204 Kokkos::IndexType<uint32> >;
206 if constexpr(isDeviceAccessible<exeSpace>())
210 auto field = iField.
field().deviceViewAll();
211 auto aPoints = maskD.getActivePoints();
214 Kokkos::parallel_for(
215 "internalField::fillSequence",
216 policy(aRange.start(), aRange.end() ),
221 field[i] = aPoints[i]+startVal;
231 auto field = iField.
field().deviceViewAll();
232 auto aPoints = maskH.getActivePoints();
235 Kokkos::parallel_for(
236 "internalField::fillSequence",
237 policy(aRange.start(), aRange.end() ),
242 field[i] = aPoints[i]+startVal;