17 #ifndef dealii_vector_operations_internal_h
18 #define dealii_vector_operations_internal_h
38 namespace VectorOperations
64 template <
typename T,
typename U>
71 template <
typename T,
typename U>
74 const std::complex<T> *
end,
75 std::complex<U> *dest)
80 template <
typename T,
typename U>
82 copy(
const std::complex<T> *,
const std::complex<T> *,
U *)
85 ExcMessage(
"Can't convert a vector of complex numbers "
86 "into a vector of reals/doubles"));
91 #ifdef DEAL_II_WITH_TBB
100 template <
typename Functor>
112 const unsigned int gs =
146 template <
typename Functor>
152 const std::shared_ptr<::parallel::internal::TBBPartitioner>
155 #ifdef DEAL_II_WITH_TBB
163 Assert(partitioner.get() !=
nullptr,
165 "Unexpected initialization of Vector that does "
166 "not set the TBB partitioner to a usable state."));
167 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
168 partitioner->acquire_one_partitioner();
184 partitioner->release_one_partitioner(tbb_partitioner);
186 else if (vec_size > 0)
198 template <
typename Number>
213 if (
value == Number())
215 if constexpr (std::is_trivial_v<Number>)
228 template <
typename Number,
typename OtherNumber>
244 if constexpr (std::is_trivially_copyable<Number>() &&
245 std::is_same_v<Number, OtherNumber>)
255 const OtherNumber *
const src;
259 template <
typename Number>
291 template <
typename Number>
295 const Number *
const v_val,
326 template <
typename Number>
330 const Number *
const v_val,
365 template <
typename Number>
393 template <
typename Number>
423 template <
typename Number>
451 template <
typename Number>
455 const Number *
const v_val,
456 const Number *
const w_val,
491 template <
typename Number>
495 const Number *
const v_val,
525 template <
typename Number>
568 template <
typename Number>
596 template <
typename Number>
600 const Number *
const u_val,
630 template <
typename Number>
634 const Number *
const u_val,
635 const Number *
const v_val,
670 template <
typename Number>
716 template <
typename Number>
753 template <
typename Number,
typename Number2>
756 static constexpr
bool vectorizes = std::is_same_v<Number, Number2> &&
759 Dot(
const Number *
const X,
const Number2 *
const Y)
785 "This operation is not correctly implemented for "
786 "complex-valued objects.");
790 const Number *
const X;
791 const Number2 *
const Y;
794 template <
typename Number,
typename RealType>
817 const Number *
const X;
820 template <
typename Number,
typename RealType>
846 template <
typename Number,
typename RealType>
867 return std::pow(std::abs(x),
p);
874 template <
typename Number>
900 template <
typename Number>
906 const Number *
const V,
907 const Number *
const W,
942 "This operation is not correctly implemented for "
943 "complex-valued objects.");
948 const Number *
const V;
949 const Number *
const W;
997 template <
typename Operation,
typename ResultType>
1006 result = ResultType();
1029 std::integral_constant<bool, Operation::vectorizes>());
1038 for (; j + 2 * n_lanes - 1 < n_chunks;
1039 j += 2 * n_lanes, n_chunks += n_lanes)
1042 a.
load(outer_results + j);
1043 b.load(outer_results + j + n_lanes);
1045 a.
store(outer_results + n_chunks);
1050 if (Operation::vectorizes)
1055 ResultType *result_ptr = outer_results + j;
1057 for (
unsigned int i = 0; i < 8; ++i)
1058 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1060 for (
unsigned int i = 0; i < 4; ++i)
1061 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1063 for (
unsigned int i = 0; i < 2; ++i)
1064 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1065 result = result_ptr[0] + result_ptr[1];
1072 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1073 outer_results[n_chunks] =
1074 outer_results[j] + outer_results[j + 1];
1079 result = outer_results[n_chunks - 1];
1091 ResultType r0, r1, r2, r3;
1095 first + 2 * new_size,
1096 first + 3 * new_size,
1099 result = (r0 + r1) + (r2 + r3);
1111 template <
typename Operation,
typename ResultType>
1116 ResultType *outer_results,
1117 std::integral_constant<bool, false>)
1125 for (
size_type i = 0; i < n_chunks; ++i)
1128 for (
unsigned int k = 0; k < 2; ++k)
1130 ResultType r0 = op(
index);
1131 ResultType r1 = op(
index + 1);
1132 ResultType r2 = op(
index + 2);
1133 ResultType r3 = op(
index + 3);
1138 r1 += op(
index + 1);
1139 r2 += op(
index + 2);
1140 r3 += op(
index + 3);
1142 r += (r0 + r1) + (r2 + r3);
1144 outer_results[i] = r;
1147 if (n_chunks * 32 < vec_size)
1149 const size_type remainder = vec_size - n_chunks * 32;
1150 const size_type inner_chunks = remainder / 8;
1151 const size_type remainder_inner = remainder % 8;
1152 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1153 switch (inner_chunks)
1172 for (
size_type j = 0; j < remainder_inner; ++j)
1174 outer_results[n_chunks++] = (r0 + r2) + r1;
1193 template <
typename Operation,
typename Number>
1198 Number *outer_results,
1199 std::integral_constant<bool, true>)
1211 const size_type regular_chunks = vec_size / (32 * n_lanes);
1212 for (
size_type i = 0; i < regular_chunks; ++i)
1215 for (
unsigned int k = 0; k < 2; ++k)
1220 op.do_vectorized(
index + 2 * n_lanes);
1222 op.do_vectorized(
index + 3 * n_lanes);
1223 index += n_lanes * 4;
1226 r0 += op.do_vectorized(
index);
1227 r1 += op.do_vectorized(
index + n_lanes);
1228 r2 += op.do_vectorized(
index + 2 * n_lanes);
1229 r3 += op.do_vectorized(
index + 3 * n_lanes);
1231 r += (r0 + r1) + (r2 + r3);
1233 r.
store(&outer_results[i * n_lanes]);
1242 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1243 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1244 size_type n_chunks = regular_chunks * n_lanes;
1245 const size_type start_irregular = regular_chunks * n_lanes * 32;
1246 if (start_irregular < vec_size)
1250 const size_type remainder = vec_size - start_irregular;
1251 const size_type loop_length = remainder / (2 * n_lanes);
1252 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1254 r0 += op.do_vectorized(
index);
1255 r1 += op.do_vectorized(
index + n_lanes);
1257 Number scalar_part = Number();
1258 size_type last = remainder % (2 * n_lanes);
1261 if (last >= n_lanes)
1263 r0 += op.do_vectorized(
index);
1267 for (
unsigned int i = 0; i < last; ++i)
1268 scalar_part += op(
index++);
1272 r0.
store(&outer_results[n_chunks]);
1273 outer_results[n_chunks] += scalar_part;
1277 n_chunks += n_lanes;
1288 #ifdef DEAL_II_WITH_TBB
1317 template <
typename Operation,
typename ResultType>
1331 const unsigned int gs =
1366 for (
size_type i = range.begin(); i < range.end(); ++i)
1407 template <
typename Operation,
typename ResultType>
1413 const Operation &op,
1417 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1420 #ifdef DEAL_II_WITH_TBB
1428 Assert(partitioner.get() !=
nullptr,
1430 "Unexpected initialization of Vector that does "
1431 "not set the TBB partitioner to a usable state."));
1432 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1433 partitioner->acquire_one_partitioner();
1451 partitioner->release_one_partitioner(tbb_partitioner);
1452 result = generic_functor.
do_sum();
1463 template <
typename Number,
typename Number2,
typename MemorySpace>
1468 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1471 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1476 std::is_same_v<MemorySpace, ::MemorySpace::Default> &&
1477 std::is_same_v<Number, Number2>,
1478 "For the Default MemorySpace Number and Number2 should be the same type");
1483 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1492 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1495 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1502 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1505 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1512 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1521 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1525 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1532 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1537 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1539 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1546 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1550 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1557 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1562 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1569 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1575 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1577 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1584 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1593 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1596 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1603 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1607 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1614 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1619 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1621 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1628 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1631 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1638 template <
typename real_type>
1641 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1645 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1652 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1655 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1661 template <
typename real_type>
1664 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1672 template <
typename real_type>
1675 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1685 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1689 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1691 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1698 template <
typename MemorySpace2>
1701 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1705 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1713 template <
typename Number,
typename Number2>
1717 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1718 &thread_loop_partitioner,
1720 const ::MemorySpace::
1721 MemorySpaceData<Number2, ::MemorySpace::Host> &v_data,
1727 data.values.data());
1728 parallel_for(copier, 0, size, thread_loop_partitioner);
1732 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1733 &thread_loop_partitioner,
1741 parallel_for(setter, 0, size, thread_loop_partitioner);
1746 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1747 &thread_loop_partitioner,
1749 const ::MemorySpace::
1750 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1756 v_data.values.data());
1757 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1762 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1763 &thread_loop_partitioner,
1765 const ::MemorySpace::
1766 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1772 v_data.values.data());
1773 parallel_for(vector_subtract, 0, size, thread_loop_partitioner);
1778 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1779 &thread_loop_partitioner,
1787 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1791 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1792 &thread_loop_partitioner,
1795 const ::MemorySpace::
1796 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1802 v_data.values.data(),
1804 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1809 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1810 &thread_loop_partitioner,
1814 const ::MemorySpace::
1815 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1816 const ::MemorySpace::
1817 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1823 data.values.data(), v_data.values.data(), w_data.values.data(), a,
b);
1824 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1829 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1830 &thread_loop_partitioner,
1833 const ::MemorySpace::
1834 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1840 v_data.values.data(),
1842 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1847 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1848 &thread_loop_partitioner,
1852 const ::MemorySpace::
1853 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1859 v_data.values.data(),
1862 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1867 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1868 &thread_loop_partitioner,
1873 const ::MemorySpace::
1874 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1875 const ::MemorySpace::
1876 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1882 v_data.values.data(),
1883 w_data.values.data(),
1887 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1892 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1893 &thread_loop_partitioner,
1895 const Number factor,
1901 data.values.data(), factor);
1902 parallel_for(vector_multiply, 0, size, thread_loop_partitioner);
1906 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1907 &thread_loop_partitioner,
1909 const ::MemorySpace::
1910 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1916 v_data.values.data());
1917 parallel_for(vector_scale, 0, size, thread_loop_partitioner);
1921 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1922 &thread_loop_partitioner,
1925 const ::MemorySpace::
1926 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1932 v_data.values.data(),
1934 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1939 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1940 &thread_loop_partitioner,
1944 const ::MemorySpace::
1945 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
1946 const ::MemorySpace::
1947 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
1953 data.values.data(), v_data.values.data(), w_data.values.data(), a,
b);
1954 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1958 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1959 &thread_loop_partitioner,
1961 const ::MemorySpace::
1962 MemorySpaceData<Number2, ::MemorySpace::Host> &v_data,
1969 data.values.data(), v_data.values.data());
1971 dot, 0, size,
sum, thread_loop_partitioner);
1977 template <
typename real_type>
1979 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1980 &thread_loop_partitioner,
1993 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1994 &thread_loop_partitioner,
1996 const ::MemorySpace::
1997 MemorySpaceData<Number, ::MemorySpace::Host> &data)
2006 template <
typename real_type>
2008 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2009 &thread_loop_partitioner,
2020 template <
typename real_type>
2022 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2023 &thread_loop_partitioner,
2037 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2038 &thread_loop_partitioner,
2041 const ::MemorySpace::
2042 MemorySpaceData<Number, ::MemorySpace::Host> &v_data,
2043 const ::MemorySpace::
2044 MemorySpaceData<Number, ::MemorySpace::Host> &w_data,
2051 v_data.values.data(),
2052 w_data.values.data(),
2059 template <
typename MemorySpace2>
2062 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2063 &thread_loop_partitioner,
2066 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2072 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2077 copy(thread_loop_partitioner, size, v_data, data);
2081 add_vector(thread_loop_partitioner, size, v_data, data);
2089 template <
typename MemorySpace2>
2092 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2096 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2102 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2108 Kokkos::subview(data.values,
2109 Kokkos::pair<size_type, size_type>(0, size)),
2110 Kokkos::subview(v_data.values,
2111 Kokkos::pair<size_type, size_type>(0, size)));
2122 template <
typename Number>
2127 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2129 const ::MemorySpace::
2130 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2136 Kokkos::subview(data.values,
2137 Kokkos::pair<size_type, size_type>(0, size)),
2138 Kokkos::subview(v_data.values,
2139 Kokkos::pair<size_type, size_type>(0, size)));
2143 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2151 Kokkos::subview(data.values,
2152 Kokkos::pair<size_type, size_type>(0, size)),
2158 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2160 const ::MemorySpace::
2161 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2166 auto exec = typename ::MemorySpace::Default::kokkos_space::
2170 Kokkos::RangePolicy<
2171 ::MemorySpace::Default::kokkos_space::execution_space>(
2173 KOKKOS_LAMBDA(
int i) { data.values(i) += v_data.values(i); });
2179 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2181 const ::MemorySpace::
2182 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2187 auto exec = typename ::MemorySpace::Default::kokkos_space::
2190 "::subtract_vector",
2191 Kokkos::RangePolicy<
2192 ::MemorySpace::Default::kokkos_space::execution_space>(
2194 KOKKOS_LAMBDA(
size_type i) { data.values(i) -= v_data.values(i); });
2200 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2207 auto exec = typename ::MemorySpace::Default::kokkos_space::
2211 Kokkos::RangePolicy<
2212 ::MemorySpace::Default::kokkos_space::execution_space>(
2214 KOKKOS_LAMBDA(
size_type i) { data.values(i) += a; });
2220 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2223 const ::MemorySpace::
2224 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2229 auto exec = typename ::MemorySpace::Default::kokkos_space::
2233 Kokkos::RangePolicy<
2234 ::MemorySpace::Default::kokkos_space::execution_space>(
2237 data.values(i) += a * v_data.values(i);
2244 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2248 const ::MemorySpace::
2249 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2250 const ::MemorySpace::
2251 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2256 auto exec = typename ::MemorySpace::Default::kokkos_space::
2260 Kokkos::RangePolicy<
2261 ::MemorySpace::Default::kokkos_space::execution_space>(
2264 data.values(i) += a * v_data.values(i) +
b * w_data.values(i);
2271 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2274 const ::MemorySpace::
2275 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2280 auto exec = typename ::MemorySpace::Default::kokkos_space::
2284 Kokkos::RangePolicy<
2285 ::MemorySpace::Default::kokkos_space::execution_space>(
2288 data.values(i) = x * data.values(i) + v_data.values(i);
2295 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2299 const ::MemorySpace::
2300 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2305 auto exec = typename ::MemorySpace::Default::kokkos_space::
2309 Kokkos::RangePolicy<
2310 ::MemorySpace::Default::kokkos_space::execution_space>(
2313 data.values(i) = x * data.values(i) + a * v_data.values(i);
2320 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2325 const ::MemorySpace::
2326 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2327 const ::MemorySpace::
2328 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2333 auto exec = typename ::MemorySpace::Default::kokkos_space::
2337 Kokkos::RangePolicy<
2338 ::MemorySpace::Default::kokkos_space::execution_space>(
2342 x * data.values(i) + a * v_data.values(i) +
b * w_data.values(i);
2349 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2351 const Number factor,
2356 auto exec = typename ::MemorySpace::Default::kokkos_space::
2359 "::multiply_factor",
2360 Kokkos::RangePolicy<
2361 ::MemorySpace::Default::kokkos_space::execution_space>(
2363 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= factor; });
2369 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2371 const ::MemorySpace::
2372 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2377 auto exec = typename ::MemorySpace::Default::kokkos_space::
2381 Kokkos::RangePolicy<
2382 ::MemorySpace::Default::kokkos_space::execution_space>(
2384 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= v_data.values(i); });
2390 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2393 const ::MemorySpace::
2394 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2399 auto exec = typename ::MemorySpace::Default::kokkos_space::
2403 Kokkos::RangePolicy<
2404 ::MemorySpace::Default::kokkos_space::execution_space>(
2407 data.values(i) = a * v_data.values(i);
2414 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2418 const ::MemorySpace::
2419 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2420 const ::MemorySpace::
2421 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2426 auto exec = typename ::MemorySpace::Default::kokkos_space::
2430 Kokkos::RangePolicy<
2431 ::MemorySpace::Default::kokkos_space::execution_space>(
2434 data.values(i) = a * v_data.values(i) +
b * w_data.values(i);
2440 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2442 const ::MemorySpace::
2443 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2450 auto exec = typename ::MemorySpace::Default::kokkos_space::
2454 Kokkos::RangePolicy<
2455 ::MemorySpace::Default::kokkos_space::execution_space>(
2457 KOKKOS_LAMBDA(
size_type i, Number & update) {
2458 update += data.values(i) * v_data.values(i);
2466 template <
typename real_type>
2468 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2469 &thread_loop_partitioner,
2473 MemorySpaceData<Number, ::MemorySpace::Default> &data)
2475 sum =
dot(thread_loop_partitioner, size, data, data);
2480 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2482 const ::MemorySpace::
2483 MemorySpaceData<Number, ::MemorySpace::Default> &data)
2487 auto exec = typename ::MemorySpace::Default::kokkos_space::
2491 Kokkos::RangePolicy<
2492 ::MemorySpace::Default::kokkos_space::execution_space>(
2494 KOKKOS_LAMBDA(
size_type i, Number & update) {
2495 update += data.values(i);
2503 template <
typename real_type>
2506 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2513 auto exec = typename ::MemorySpace::Default::kokkos_space::
2517 Kokkos::RangePolicy<
2518 ::MemorySpace::Default::kokkos_space::execution_space>(
2520 KOKKOS_LAMBDA(
size_type i, Number & update) {
2521 #if KOKKOS_VERSION < 30400
2522 update += std::abs(data.values(i));
2523 #elif KOKKOS_VERSION < 30700
2526 update += Kokkos::abs(data.values(i));
2532 template <
typename real_type>
2535 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2543 auto exec = typename ::MemorySpace::Default::kokkos_space::
2547 Kokkos::RangePolicy<
2548 ::MemorySpace::Default::kokkos_space::execution_space>(
2550 KOKKOS_LAMBDA(
size_type i, Number & update) {
2551 #if KOKKOS_VERSION < 30400
2552 update += std::pow(
fabs(data.values(i)), exp);
2553 #elif KOKKOS_VERSION < 30700
2554 update += Kokkos::Experimental::pow(
2557 update += Kokkos::pow(Kokkos::abs(data.values(i)), exp);
2565 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2568 const ::MemorySpace::
2569 MemorySpaceData<Number, ::MemorySpace::Default> &v_data,
2570 const ::MemorySpace::
2571 MemorySpaceData<Number, ::MemorySpace::Default> &w_data,
2578 auto exec = typename ::MemorySpace::Default::kokkos_space::
2582 Kokkos::RangePolicy<
2583 ::MemorySpace::Default::kokkos_space::execution_space>(
2585 KOKKOS_LAMBDA(
size_type i, Number & update) {
2586 data.values(i) += a * v_data.values(i);
2596 template <
typename MemorySpace2>
2599 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2600 &thread_loop_partitioner,
2603 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2609 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2614 copy(thread_loop_partitioner, size, v_data, data);
2618 add_vector(thread_loop_partitioner, size, v_data, data);
2626 template <
typename MemorySpace2>
2629 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2633 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2639 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2645 Kokkos::subview(data.values,
2646 Kokkos::pair<size_type, size_type>(0, size)),
2647 Kokkos::subview(v_data.values,
2648 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_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 > &, 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_v< MemorySpace2, ::MemorySpace::Default >, 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 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 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_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
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 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_v< MemorySpace2, ::MemorySpace::Host >, 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 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_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
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)