17 #ifndef dealii_vector_operations_internal_h
18 #define dealii_vector_operations_internal_h
30 #include <deal.II/lac/cuda_kernels.templates.h>
40 namespace VectorOperations
66 template <
typename T,
typename U>
73 template <
typename T,
typename U>
76 const std::complex<T> *
end,
77 std::complex<U> * dest)
82 template <
typename T,
typename U>
84 copy(
const std::complex<T> *,
const std::complex<T> *,
U *)
87 ExcMessage(
"Can't convert a vector of complex numbers "
88 "into a vector of reals/doubles"));
93 #ifdef DEAL_II_WITH_TBB
102 template <
typename Functor>
114 const unsigned int gs =
148 template <
typename Functor>
154 const std::shared_ptr<::parallel::internal::TBBPartitioner>
157 #ifdef DEAL_II_WITH_TBB
165 Assert(partitioner.get() !=
nullptr,
167 "Unexpected initialization of Vector that does "
168 "not set the TBB partitioner to a usable state."));
169 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
170 partitioner->acquire_one_partitioner();
186 partitioner->release_one_partitioner(tbb_partitioner);
188 else if (vec_size > 0)
200 template <
typename Number>
215 if (
value == Number())
230 template <
typename Number,
typename OtherNumber>
259 const OtherNumber *
const src;
263 template <
typename Number>
295 template <
typename Number>
299 const Number *
const v_val,
330 template <
typename Number>
334 const Number *
const v_val,
369 template <
typename Number>
397 template <
typename Number>
427 template <
typename Number>
455 template <
typename Number>
459 const Number *
const v_val,
460 const Number *
const w_val,
495 template <
typename Number>
499 const Number *
const v_val,
529 template <
typename Number>
572 template <
typename Number>
600 template <
typename Number>
604 const Number *
const u_val,
634 template <
typename Number>
638 const Number *
const u_val,
639 const Number *
const v_val,
674 template <
typename Number>
720 template <
typename Number>
757 template <
typename Number,
typename Number2>
760 static constexpr
bool vectorizes = std::is_same<Number, Number2>::value &&
763 Dot(
const Number *
const X,
const Number2 *
const Y)
789 "This operation is not correctly implemented for "
790 "complex-valued objects.");
794 const Number *
const X;
795 const Number2 *
const Y;
798 template <
typename Number,
typename RealType>
821 const Number *
const X;
824 template <
typename Number,
typename RealType>
850 template <
typename Number,
typename RealType>
871 return std::pow(std::abs(x),
p);
878 template <
typename Number>
904 template <
typename Number>
910 const Number *
const V,
911 const Number *
const W,
946 "This operation is not correctly implemented for "
947 "complex-valued objects.");
952 const Number *
const V;
953 const Number *
const W;
1001 template <
typename Operation,
typename ResultType>
1006 ResultType & result)
1010 result = ResultType();
1033 std::integral_constant<bool, Operation::vectorizes>());
1042 for (; j + 2 * n_lanes - 1 < n_chunks;
1043 j += 2 * n_lanes, n_chunks += n_lanes)
1046 a.
load(outer_results + j);
1047 b.load(outer_results + j + n_lanes);
1049 a.
store(outer_results + n_chunks);
1054 if (Operation::vectorizes)
1059 ResultType *result_ptr = outer_results + j;
1061 for (
unsigned int i = 0; i < 8; ++i)
1062 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1064 for (
unsigned int i = 0; i < 4; ++i)
1065 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1067 for (
unsigned int i = 0; i < 2; ++i)
1068 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1069 result = result_ptr[0] + result_ptr[1];
1076 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1077 outer_results[n_chunks] =
1078 outer_results[j] + outer_results[j + 1];
1083 result = outer_results[n_chunks - 1];
1095 ResultType r0, r1, r2, r3;
1099 first + 2 * new_size,
1100 first + 3 * new_size,
1103 result = (r0 + r1) + (r2 + r3);
1115 template <
typename Operation,
typename ResultType>
1120 ResultType * outer_results,
1121 std::integral_constant<bool, false>)
1129 for (
size_type i = 0; i < n_chunks; ++i)
1132 for (
unsigned int k = 0; k < 2; ++k)
1134 ResultType r0 = op(
index);
1135 ResultType r1 = op(
index + 1);
1136 ResultType r2 = op(
index + 2);
1137 ResultType r3 = op(
index + 3);
1142 r1 += op(
index + 1);
1143 r2 += op(
index + 2);
1144 r3 += op(
index + 3);
1146 r += (r0 + r1) + (r2 + r3);
1148 outer_results[i] = r;
1151 if (n_chunks * 32 < vec_size)
1153 const size_type remainder = vec_size - n_chunks * 32;
1154 const size_type inner_chunks = remainder / 8;
1155 const size_type remainder_inner = remainder % 8;
1156 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1157 switch (inner_chunks)
1176 for (
size_type j = 0; j < remainder_inner; ++j)
1178 outer_results[n_chunks++] = (r0 + r2) + r1;
1197 template <
typename Operation,
typename Number>
1202 Number * outer_results,
1203 std::integral_constant<bool, true>)
1215 const size_type regular_chunks = vec_size / (32 * n_lanes);
1216 for (
size_type i = 0; i < regular_chunks; ++i)
1219 for (
unsigned int k = 0; k < 2; ++k)
1224 op.do_vectorized(
index + 2 * n_lanes);
1226 op.do_vectorized(
index + 3 * n_lanes);
1227 index += n_lanes * 4;
1230 r0 += op.do_vectorized(
index);
1231 r1 += op.do_vectorized(
index + n_lanes);
1232 r2 += op.do_vectorized(
index + 2 * n_lanes);
1233 r3 += op.do_vectorized(
index + 3 * n_lanes);
1235 r += (r0 + r1) + (r2 + r3);
1237 r.
store(&outer_results[i * n_lanes]);
1246 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1247 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1248 size_type n_chunks = regular_chunks * n_lanes;
1249 const size_type start_irregular = regular_chunks * n_lanes * 32;
1250 if (start_irregular < vec_size)
1254 const size_type remainder = vec_size - start_irregular;
1255 const size_type loop_length = remainder / (2 * n_lanes);
1256 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1258 r0 += op.do_vectorized(
index);
1259 r1 += op.do_vectorized(
index + n_lanes);
1261 Number scalar_part = Number();
1262 size_type last = remainder % (2 * n_lanes);
1265 if (last >= n_lanes)
1267 r0 += op.do_vectorized(
index);
1271 for (
unsigned int i = 0; i < last; ++i)
1272 scalar_part += op(
index++);
1276 r0.
store(&outer_results[n_chunks]);
1277 outer_results[n_chunks] += scalar_part;
1281 n_chunks += n_lanes;
1292 #ifdef DEAL_II_WITH_TBB
1321 template <
typename Operation,
typename ResultType>
1335 const unsigned int gs =
1370 for (
size_type i = range.begin(); i < range.end(); ++i)
1411 template <
typename Operation,
typename ResultType>
1417 const Operation &op,
1420 ResultType & result,
1421 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1424 #ifdef DEAL_II_WITH_TBB
1432 Assert(partitioner.get() !=
nullptr,
1434 "Unexpected initialization of Vector that does "
1435 "not set the TBB partitioner to a usable state."));
1436 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1437 partitioner->acquire_one_partitioner();
1455 partitioner->release_one_partitioner(tbb_partitioner);
1456 result = generic_functor.
do_sum();
1467 template <
typename Number,
typename Number2,
typename MemorySpace>
1472 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1475 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1480 std::is_same<MemorySpace, ::MemorySpace::Default>::value &&
1481 std::is_same<Number, Number2>::value,
1482 "For the Default MemorySpace Number and Number2 should be the same type");
1487 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1496 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1499 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1506 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1509 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1516 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1525 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1529 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1536 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1541 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1543 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1550 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1554 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1561 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1566 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1573 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1579 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1581 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1588 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1597 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1600 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1607 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1611 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1618 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1623 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1625 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1632 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1635 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1642 template <
typename real_type>
1645 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1649 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1656 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1659 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1665 template <
typename real_type>
1668 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1676 template <
typename real_type>
1679 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1689 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1693 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1695 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1702 template <
typename MemorySpace2>
1705 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1709 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1717 template <
typename Number,
typename Number2>
1721 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1722 & thread_loop_partitioner,
1724 const ::MemorySpace::
1725 MemorySpaceData<Number2, ::MemorySpace::Host> &v_data,
1731 data.values.data());
1732 parallel_for(copier, 0, size, thread_loop_partitioner);
1736 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1737 & thread_loop_partitioner,
1745 parallel_for(setter, 0, size, thread_loop_partitioner);
1750 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1751 & thread_loop_partitioner,
1753 const ::MemorySpace::
1754 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1760 v_data.values.data());
1761 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1766 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1767 & thread_loop_partitioner,
1769 const ::MemorySpace::
1770 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1776 v_data.values.data());
1777 parallel_for(vector_subtract, 0, size, thread_loop_partitioner);
1782 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1783 & thread_loop_partitioner,
1791 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1795 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1796 & thread_loop_partitioner,
1799 const ::MemorySpace::
1800 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1806 v_data.values.data(),
1808 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1813 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1814 & thread_loop_partitioner,
1818 const ::MemorySpace::
1819 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1820 const ::MemorySpace::
1821 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1827 data.values.data(), v_data.values.data(), w_data.values.data(), a,
b);
1828 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1833 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1834 & thread_loop_partitioner,
1837 const ::MemorySpace::
1838 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1844 v_data.values.data(),
1846 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1851 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1852 & thread_loop_partitioner,
1856 const ::MemorySpace::
1857 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1863 v_data.values.data(),
1866 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1871 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1872 & thread_loop_partitioner,
1877 const ::MemorySpace::
1878 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1879 const ::MemorySpace::
1880 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1886 v_data.values.data(),
1887 w_data.values.data(),
1891 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1896 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1897 & thread_loop_partitioner,
1899 const Number factor,
1905 data.values.data(), factor);
1906 parallel_for(vector_multiply, 0, size, thread_loop_partitioner);
1910 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1911 & thread_loop_partitioner,
1913 const ::MemorySpace::
1914 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1920 v_data.values.data());
1921 parallel_for(vector_scale, 0, size, thread_loop_partitioner);
1925 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1926 & thread_loop_partitioner,
1929 const ::MemorySpace::
1930 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1936 v_data.values.data(),
1938 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1943 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1944 & thread_loop_partitioner,
1948 const ::MemorySpace::
1949 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1950 const ::MemorySpace::
1951 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1957 data.values.data(), v_data.values.data(), w_data.values.data(), a,
b);
1958 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1962 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1963 & thread_loop_partitioner,
1965 const ::MemorySpace::
1966 MemorySpaceData<Number2, ::MemorySpace::Host> &v_data,
1973 data.values.data(), v_data.values.data());
1975 dot, 0, size,
sum, thread_loop_partitioner);
1981 template <
typename real_type>
1983 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1984 & thread_loop_partitioner,
1997 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1998 & thread_loop_partitioner,
2000 const ::MemorySpace::
2001 MemorySpaceData<Number, ::MemorySpace::Host> &data)
2010 template <
typename real_type>
2012 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2013 & thread_loop_partitioner,
2024 template <
typename real_type>
2026 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2027 & thread_loop_partitioner,
2041 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2042 & thread_loop_partitioner,
2045 const ::MemorySpace::
2046 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
2047 const ::MemorySpace::
2048 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
2055 v_data.values.data(),
2056 w_data.values.data(),
2063 template <
typename MemorySpace2>
2066 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2067 & thread_loop_partitioner,
2070 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2076 std::is_same<MemorySpace2, ::MemorySpace::Host>::value,
2081 copy(thread_loop_partitioner, size, v_data, data);
2085 add_vector(thread_loop_partitioner, size, v_data, data);
2093 template <
typename MemorySpace2>
2096 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2100 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2106 std::is_same<MemorySpace2, ::MemorySpace::Default>::value,
2112 Kokkos::subview(data.values,
2113 Kokkos::pair<size_type, size_type>(0, size)),
2114 Kokkos::subview(v_data.values,
2115 Kokkos::pair<size_type, size_type>(0, size)));
2126 template <
typename Number>
2131 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2133 const ::MemorySpace::
2134 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2140 Kokkos::subview(data.values,
2141 Kokkos::pair<size_type, size_type>(0, size)),
2142 Kokkos::subview(v_data.values,
2143 Kokkos::pair<size_type, size_type>(0, size)));
2147 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2155 Kokkos::subview(data.values,
2156 Kokkos::pair<size_type, size_type>(0, size)),
2162 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2164 const ::MemorySpace::
2165 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2170 auto exec = typename ::MemorySpace::Default::kokkos_space::
2174 Kokkos::RangePolicy<
2175 ::MemorySpace::Default::kokkos_space::execution_space>(
2177 KOKKOS_LAMBDA(
int i) { data.values(i) += v_data.values(i); });
2183 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2185 const ::MemorySpace::
2186 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2191 auto exec = typename ::MemorySpace::Default::kokkos_space::
2195 Kokkos::RangePolicy<
2196 ::MemorySpace::Default::kokkos_space::execution_space>(
2198 KOKKOS_LAMBDA(
size_type i) { data.values(i) -= v_data.values(i); });
2204 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2211 auto exec = typename ::MemorySpace::Default::kokkos_space::
2215 Kokkos::RangePolicy<
2216 ::MemorySpace::Default::kokkos_space::execution_space>(
2218 KOKKOS_LAMBDA(
size_type i) { data.values(i) += a; });
2224 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2227 const ::MemorySpace::
2228 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2233 auto exec = typename ::MemorySpace::Default::kokkos_space::
2237 Kokkos::RangePolicy<
2238 ::MemorySpace::Default::kokkos_space::execution_space>(
2241 data.values(i) += a * v_data.values(i);
2248 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2252 const ::MemorySpace::
2253 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2254 const ::MemorySpace::
2255 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2260 auto exec = typename ::MemorySpace::Default::kokkos_space::
2264 Kokkos::RangePolicy<
2265 ::MemorySpace::Default::kokkos_space::execution_space>(
2268 data.values(i) += a * v_data.values(i) +
b * w_data.values(i);
2275 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2278 const ::MemorySpace::
2279 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2284 auto exec = typename ::MemorySpace::Default::kokkos_space::
2288 Kokkos::RangePolicy<
2289 ::MemorySpace::Default::kokkos_space::execution_space>(
2292 data.values(i) = x * data.values(i) + v_data.values(i);
2299 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2303 const ::MemorySpace::
2304 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2309 auto exec = typename ::MemorySpace::Default::kokkos_space::
2313 Kokkos::RangePolicy<
2314 ::MemorySpace::Default::kokkos_space::execution_space>(
2317 data.values(i) = x * data.values(i) + a * v_data.values(i);
2324 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2329 const ::MemorySpace::
2330 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2331 const ::MemorySpace::
2332 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2337 auto exec = typename ::MemorySpace::Default::kokkos_space::
2341 Kokkos::RangePolicy<
2342 ::MemorySpace::Default::kokkos_space::execution_space>(
2346 x * data.values(i) + a * v_data.values(i) +
b * w_data.values(i);
2353 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2355 const Number factor,
2360 auto exec = typename ::MemorySpace::Default::kokkos_space::
2364 Kokkos::RangePolicy<
2365 ::MemorySpace::Default::kokkos_space::execution_space>(
2367 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= factor; });
2373 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2375 const ::MemorySpace::
2376 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2381 auto exec = typename ::MemorySpace::Default::kokkos_space::
2385 Kokkos::RangePolicy<
2386 ::MemorySpace::Default::kokkos_space::execution_space>(
2388 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= v_data.values(i); });
2394 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2397 const ::MemorySpace::
2398 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2403 auto exec = typename ::MemorySpace::Default::kokkos_space::
2407 Kokkos::RangePolicy<
2408 ::MemorySpace::Default::kokkos_space::execution_space>(
2411 data.values(i) = a * v_data.values(i);
2418 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2422 const ::MemorySpace::
2423 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2424 const ::MemorySpace::
2425 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2430 auto exec = typename ::MemorySpace::Default::kokkos_space::
2434 Kokkos::RangePolicy<
2435 ::MemorySpace::Default::kokkos_space::execution_space>(
2438 data.values(i) = a * v_data.values(i) +
b * w_data.values(i);
2444 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2446 const ::MemorySpace::
2447 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2454 auto exec = typename ::MemorySpace::Default::kokkos_space::
2458 Kokkos::RangePolicy<
2459 ::MemorySpace::Default::kokkos_space::execution_space>(
2461 KOKKOS_LAMBDA(
size_type i, Number & update) {
2462 update += data.values(i) * v_data.values(i);
2470 template <
typename real_type>
2472 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2473 & thread_loop_partitioner,
2477 MemorySpaceData<Number, ::MemorySpace::Default> &data)
2479 sum =
dot(thread_loop_partitioner, size, data, data);
2484 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2486 const ::MemorySpace::
2487 MemorySpaceData<Number, ::MemorySpace::Default> &data)
2491 auto exec = typename ::MemorySpace::Default::kokkos_space::
2495 Kokkos::RangePolicy<
2496 ::MemorySpace::Default::kokkos_space::execution_space>(
2498 KOKKOS_LAMBDA(
size_type i, Number & update) {
2499 update += data.values(i);
2507 template <
typename real_type>
2510 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2517 auto exec = typename ::MemorySpace::Default::kokkos_space::
2521 Kokkos::RangePolicy<
2522 ::MemorySpace::Default::kokkos_space::execution_space>(
2524 KOKKOS_LAMBDA(
size_type i, Number & update) {
2525 #if KOKKOS_VERSION < 30400
2526 update += std::abs(data.values(i));
2527 #elif KOKKOS_VERSION < 30700
2530 update += Kokkos::abs(data.values(i));
2536 template <
typename real_type>
2539 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2547 auto exec = typename ::MemorySpace::Default::kokkos_space::
2551 Kokkos::RangePolicy<
2552 ::MemorySpace::Default::kokkos_space::execution_space>(
2554 KOKKOS_LAMBDA(
size_type i, Number & update) {
2555 #if KOKKOS_VERSION < 30400
2556 update += std::pow(
fabs(data.values(i)), exp);
2557 #elif KOKKOS_VERSION < 30700
2558 update += Kokkos::Experimental::pow(
2561 update += Kokkos::pow(Kokkos::abs(data.values(i)), exp);
2569 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2572 const ::MemorySpace::
2573 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2574 const ::MemorySpace::
2575 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2582 auto exec = typename ::MemorySpace::Default::kokkos_space::
2586 Kokkos::RangePolicy<
2587 ::MemorySpace::Default::kokkos_space::execution_space>(
2589 KOKKOS_LAMBDA(
size_type i, Number & update) {
2590 data.values(i) += a * v_data.values(i);
2600 template <
typename MemorySpace2>
2603 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2604 & thread_loop_partitioner,
2607 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2613 std::is_same<MemorySpace2, ::MemorySpace::Default>::value,
2618 copy(thread_loop_partitioner, size, v_data, data);
2622 add_vector(thread_loop_partitioner, size, v_data, data);
2630 template <
typename MemorySpace2>
2633 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2637 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2643 std::is_same<MemorySpace2, ::MemorySpace::Host>::value,
2649 Kokkos::subview(data.values,
2650 Kokkos::pair<size_type, size_type>(0, size)),
2651 Kokkos::subview(v_data.values,
2652 Kokkos::pair<size_type, size_type>(0, size)));
static unsigned int n_threads()
static constexpr std::size_t size()
void store(OtherNumber *ptr) const
void load(const OtherNumber *ptr)
#define DEAL_II_CONSTEXPR_IN_CONDITIONAL
#define DEAL_II_ALWAYS_INLINE
#define DEAL_II_OPENMP_SIMD_PRAGMA
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_FALLTHROUGH
static ::ExceptionBase & ExcInternalError()
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
#define AssertIsFinite(number)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
Expression fabs(const Expression &x)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
VectorType::value_type * begin(VectorType &V)
VectorType::value_type * end(VectorType &V)
T sum(const T &t, const MPI_Comm &mpi_communicator)
unsigned int minimum_parallel_grain_size
void accumulate_recursive(const Operation &op, const size_type first, const size_type last, ResultType &result)
bool is_non_negative(const T &t)
void parallel_reduce(const Operation &op, const size_type start, const size_type end, ResultType &result, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
void copy(const T *begin, const T *end, U *dest)
void parallel_for(Functor &functor, const size_type start, const size_type end, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
void copy(const std::complex< T > *, const std::complex< T > *, U *)
const unsigned int vector_accumulation_recursion_threshold
size_type do_accumulate(const Operation op, const size_type vec_size, const size_type start_index, ResultType *outer_results, std::integral_constant< bool, false >)
types::global_dof_index size_type
unsigned int global_dof_index
static const bool vectorizes
AddAndDot(Number *const X, const Number *const V, const Number *const W, const Number a)
VectorizedArray< Number > do_vectorized(const size_type i) const
Number operator()(const size_type i) const
Dot(const Number *const X, const Number2 *const Y)
static constexpr bool vectorizes
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Number operator()(const size_type i) const
MeanValue(const Number *X)
VectorizedArray< Number > do_vectorized(const size_type i) const
static const bool vectorizes
RealType operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
static const bool vectorizes
Norm2(const Number *const X)
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
RealType operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
NormP(const Number *X, RealType p)
static const bool vectorizes
void operator()(const tbb::blocked_range< size_type > &range) const
TBBForFunctor(Functor &functor, const size_type start, const size_type end)
static const unsigned int threshold_array_allocate
TBBReduceFunctor(const Operation &op, const size_type start, const size_type end)
ResultType small_array[threshold_array_allocate]
ResultType do_sum() const
void operator()(const tbb::blocked_range< size_type > &range) const
std::vector< ResultType > large_array
Vector_copy(const OtherNumber *const src, Number *const dst)
void operator()(const size_type begin, const size_type end) const
const OtherNumber *const src
Vector_set(const Number value, Number *const dst)
void operator()(const size_type begin, const size_type end) const
Vectorization_add_av(Number *const val, const Number *const v_val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number stored_factor
Vectorization_add_avpbw(Number *const val, const Number *const v_val, const Number *const w_val, const Number a, const Number b)
void operator()(const size_type begin, const size_type end) const
const Number *const w_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number stored_factor
Vectorization_add_factor(Number *const val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_add_v(Number *const val, const Number *const v_val)
const Number *const u_val
Vectorization_equ_au(Number *const val, const Number *const u_val, const Number a)
void operator()(const size_type begin, const size_type end) const
Vectorization_equ_aubv(Number *const val, const Number *const u_val, const Number *const v_val, const Number a, const Number b)
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_equ_aubvcw(Number *val, const Number *u_val, const Number *v_val, const Number *w_val, const Number a, const Number b, const Number c)
const Number *const w_val
const Number *const v_val
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
Vectorization_multiply_factor(Number *const val, const Number factor)
const Number stored_factor
void operator()(const size_type begin, const size_type end) const
void operator()(const size_type begin, const size_type end) const
const Number *const a_val
Vectorization_ratio(Number *val, const Number *a_val, const Number *b_val)
const Number *const b_val
Vectorization_sadd_xav(Number *val, const Number *const v_val, const Number a, const Number x)
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const w_val
void operator()(const size_type begin, const size_type end) const
Vectorization_sadd_xavbw(Number *val, const Number *v_val, const Number *w_val, Number x, Number a, Number b)
Vectorization_sadd_xv(Number *const val, const Number *const v_val, const Number x)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
Vectorization_scale(Number *const val, const Number *const v_val)
Vectorization_subtract_v(Number *val, const Number *const v_val)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, const real_type p, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same< MemorySpace2, ::MemorySpace::Host >::value, int >=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same< MemorySpace2, ::MemorySpace::Default >::value, int >=0)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, real_type exp, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same< MemorySpace2, ::MemorySpace::Default >::value, int >=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same< MemorySpace2, ::MemorySpace::Host >::value, int >=0)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, VectorOperation::values, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, Number *, Number *)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, real_type, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static real_type abs(const number &x)
static constexpr real_type abs_square(const number &x)