42 typename std::remove_const<typename LocalSparseMatrixType::value_type>::type;
43 using mag_type =
typename ScalingFactorsViewType::non_const_value_type;
44 static_assert(ScalingFactorsViewType::rank == 1,
45 "scalingFactors must be a rank-1 Kokkos::View.");
46 using device_type =
typename LocalSparseMatrixType::device_type;
47 using LO =
typename LocalSparseMatrixType::ordinal_type;
48 using policy_type = Kokkos::TeamPolicy<typename device_type::execution_space, LO>;
59 const ScalingFactorsViewType& scalingFactors,
60 const bool assumeSymmetric)
62 , scalingFactors_(scalingFactors)
63 , assumeSymmetric_(assumeSymmetric) {}
65 KOKKOS_INLINE_FUNCTION
void
66 operator()(
const typename policy_type::member_type& team)
const {
67 using KAM = KokkosKernels::ArithTraits<mag_type>;
69 const LO lclRow = team.league_rank();
70 const mag_type curRowNorm = scalingFactors_(lclRow);
73 const mag_type scalingFactor = assumeSymmetric_ ? KAM::sqrt(curRowNorm) : curRowNorm;
74 auto curRow = A_lcl_.row(lclRow);
75 const LO numEnt = curRow.length;
76 Kokkos::parallel_for(Kokkos::TeamThreadRange(team, numEnt), [&](
const LO k) {
78 curRow.value(k) = curRow.value(k) / scalingFactor;
80 curRow.value(k) = curRow.value(k) * scalingFactor;
86 LocalSparseMatrixType A_lcl_;
87 typename ScalingFactorsViewType::const_type scalingFactors_;
88 bool assumeSymmetric_;
106 const ScalingFactorsViewType& scalingFactors,
107 const bool assumeSymmetric,
108 const bool divide =
true) {
109 using device_type =
typename LocalSparseMatrixType::device_type;
111 using LO =
typename LocalSparseMatrixType::ordinal_type;
112 using policy_type = Kokkos::TeamPolicy<execution_space, LO>;
114 const LO lclNumRows = A_lcl.numRows();
118 typename ScalingFactorsViewType::const_type,
true>;
119 functor_type functor(A_lcl, scalingFactors, assumeSymmetric);
120 Kokkos::parallel_for(
"leftScaleLocalCrsMatrix",
121 policy_type(lclNumRows, Kokkos::AUTO), functor);
125 typename ScalingFactorsViewType::const_type,
false>;
126 functor_type functor(A_lcl, scalingFactors, assumeSymmetric);
127 Kokkos::parallel_for(
"leftScaleLocalCrsMatrix",
128 policy_type(lclNumRows, Kokkos::AUTO), functor);