47struct EquilibrationInfo {
48 using val_type =
typename KokkosKernels::ArithTraits<ScalarType>::val_type;
49 using mag_type =
typename KokkosKernels::ArithTraits<val_type>::mag_type;
50 using device_type =
typename DeviceType::device_type;
51 using host_device_type =
typename Kokkos::View<mag_type*, device_type>::host_mirror_type::device_type;
52 using HostMirror = EquilibrationInfo<val_type, host_device_type>;
60 EquilibrationInfo(
const std::size_t lclNumRows,
61 const std::size_t lclNumCols,
62 const bool assumeSymmetric_)
63 :
rowNorms(Kokkos::View<mag_type*, device_type>(
"rowNorms", lclNumRows))
64 ,
rowDiagonalEntries(Kokkos::View<val_type*, device_type>(
"rowDiagonalEntries", lclNumRows))
65 ,
colNorms(Kokkos::View<mag_type*, device_type>(
"colNorms", lclNumCols))
67 assumeSymmetric_ ? std::size_t(0) : lclNumCols))
69 assumeSymmetric_ ? std::size_t(0) : lclNumCols))
76 EquilibrationInfo(
const Kokkos::View<mag_type*, device_type>& rowNorms_,
77 const Kokkos::View<val_type*, device_type>& rowDiagonalEntries_,
78 const Kokkos::View<mag_type*, device_type>& colNorms_,
79 const Kokkos::View<val_type*, device_type>& colDiagonalEntries_,
80 const Kokkos::View<mag_type*, device_type>& rowScaledColNorms_,
81 const bool assumeSymmetric_,
84 const bool foundZeroDiag_,
85 const bool foundZeroRowNorm_)
98 template <
class SrcDeviceType>
100 assign(
const EquilibrationInfo<ScalarType, SrcDeviceType>& src) {
110 Kokkos::View<val_type*, device_type>(
"colDiagonalEntries", 0);
117 Kokkos::View<mag_type*, device_type>(
"rowScaledColNorms", 0);
130 typename EquilibrationInfo<val_type, device_type>::HostMirror
132 auto rowNorms_h = Kokkos::create_mirror_view(
rowNorms);
134 auto colNorms_h = Kokkos::create_mirror_view(
colNorms);
138 return HostMirror{rowNorms_h, rowDiagonalEntries_h, colNorms_h,