Skip to content

Commit 2738d4c

Browse files
committed
Only invoke Kokkos::isfinite on floating point types
Signed-off-by: malphil <[email protected]>
1 parent a7cc103 commit 2738d4c

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

packages/muelu/src/Graph/MatrixTransformation/MueLu_CutDrop.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -696,8 +696,8 @@ class CutDropFunctor {
696696
}
697697
}
698698

699-
errorEncountered |= !Kokkos::isfinite(x_aij);
700-
errorEncountered |= !Kokkos::isfinite(y_aij);
699+
errorEncountered |= !is_finite_type_safe(x_aij);
700+
errorEncountered |= !is_finite_type_safe(y_aij);
701701
}
702702

703703
// drop everything to the right of where values stop passing threshold

packages/muelu/src/Graph/MatrixTransformation/MueLu_DistanceLaplacianDropping.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -712,15 +712,15 @@ class DropFunctor {
712712
auto aiiajj = ATS::magnitude(diag(rlid)) * ATS::magnitude(diag(clid)); // |a_ii|*|a_jj|
713713
auto aij2 = ATS::magnitude(val) * ATS::magnitude(val); // |a_ij|^2
714714

715-
encounteredError |= (!Kokkos::isfinite(aij2) || !Kokkos::isfinite(aiiajj));
715+
encounteredError |= (!is_finite_type_safe(aij2) || !is_finite_type_safe(aiiajj));
716716

717717
results(offset + k) = Kokkos::max((aij2 <= eps * eps * aiiajj) ? DROP : KEEP,
718718
results(offset + k));
719719
} else if constexpr (measure == Misc::SignedRugeStuebenMeasure) {
720720
auto neg_aij = -ATS::real(val);
721721
auto max_neg_aik = eps * ATS::real(diag(rlid));
722722

723-
encounteredError |= !Kokkos::isfinite(neg_aij) || !Kokkos::isfinite(max_neg_aik);
723+
encounteredError |= !is_finite_type_safe(neg_aij) || !is_finite_type_safe(max_neg_aik);
724724

725725
results(offset + k) = Kokkos::max((neg_aij < max_neg_aik) ? DROP : KEEP,
726726
results(offset + k));
@@ -732,7 +732,7 @@ class DropFunctor {
732732
if (!is_nonpositive)
733733
aij2 = -aij2;
734734

735-
encounteredError |= !Kokkos::isfinite(aij2) || !Kokkos::isfinite(aiiajj);
735+
encounteredError |= !is_finite_type_safe(aij2) || !is_finite_type_safe(aiiajj);
736736

737737
results(offset + k) = Kokkos::max((aij2 <= eps * eps * aiiajj) ? DROP : KEEP,
738738
results(offset + k));
@@ -859,15 +859,15 @@ class VectorDropFunctor {
859859
auto aiiajj = ATS::magnitude(diag(brlid)) * ATS::magnitude(diag(bclid)); // |a_ii|*|a_jj|
860860
auto aij2 = ATS::magnitude(val) * ATS::magnitude(val); // |a_ij|^2
861861

862-
encounteredError |= !Kokkos::isfinite(aij2) || !Kokkos::isfinite(aiiajj);
862+
encounteredError |= !is_finite_type_safe(aij2) || !is_finite_type_safe(aiiajj);
863863

864864
results(offset + k) = Kokkos::max((aij2 <= eps * eps * aiiajj) ? DROP : KEEP,
865865
results(offset + k));
866866
} else if constexpr (measure == Misc::SignedRugeStuebenMeasure) {
867867
auto neg_aij = -ATS::real(val);
868868
auto max_neg_aik = eps * ATS::real(diag(brlid));
869869

870-
encounteredError |= !Kokkos::isfinite(neg_aij) || !Kokkos::isfinite(max_neg_aik);
870+
encounteredError |= !is_finite_type_safe(neg_aij) || !is_finite_type_safe(max_neg_aik);
871871

872872
results(offset + k) = Kokkos::max((neg_aij < max_neg_aik) ? DROP : KEEP,
873873
results(offset + k));
@@ -879,7 +879,7 @@ class VectorDropFunctor {
879879
if (!is_nonpositive)
880880
aij2 = -aij2;
881881

882-
encounteredError |= !Kokkos::isfinite(aij2) || !Kokkos::isfinite(aiiajj);
882+
encounteredError |= !is_finite_type_safe(aij2) || !is_finite_type_safe(aiiajj);
883883

884884
results(offset + k) = Kokkos::max((aij2 <= eps * eps * aiiajj) ? DROP : KEEP,
885885
results(offset + k));

packages/muelu/src/Graph/MatrixTransformation/MueLu_DroppingCommon.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ struct DroppingFunctorState<Kokkos::pair<local_ordinal_type, local_ordinal_type>
6868
, encounteredError(_encounteredError) {}
6969
};
7070

71+
template <typename T>
72+
KOKKOS_INLINE_FUNCTION bool is_finite_type_safe(T value) {
73+
if constexpr (std::is_floating_point_v<T>) {
74+
return Kokkos::isfinite(value);
75+
} else {
76+
return true;
77+
}
78+
}
79+
7180
namespace Misc {
7281

7382
template <class local_ordinal_type>

0 commit comments

Comments
 (0)