Allow vtkm::Matrix to support T values which are vtkm::Vec.

This commit is contained in:
Robert Maynard 2016-11-11 17:04:32 -05:00
parent 9caabf97ce
commit b4378c8546
3 changed files with 117 additions and 1 deletions

@ -1550,6 +1550,35 @@ struct FloatLimits<vtkm::Float32>
}
};
template<int N>
struct FloatLimits< vtkm::Vec<vtkm::Float32,N> >
{
typedef vtkm::detail::IEEE754Bits32 BitsType;
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Nan() {
BitsType nan = {VTKM_NAN_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(nan.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Infinity() {
BitsType inf = {VTKM_INF_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(inf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> NegativeInfinity() {
BitsType neginf = {VTKM_NEG_INF_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(neginf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Epsilon() {
return vtkm::Vec<vtkm::Float32,N>(VTKM_EPSILON_32);
}
};
template<>
struct FloatLimits<vtkm::Float64>
{
@ -1579,6 +1608,35 @@ struct FloatLimits<vtkm::Float64>
}
};
template<int N>
struct FloatLimits< vtkm::Vec<vtkm::Float64,N> >
{
typedef vtkm::detail::IEEE754Bits64 BitsType;
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Nan() {
BitsType nan = {VTKM_NAN_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(nan.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Infinity() {
BitsType inf = {VTKM_INF_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(inf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> NegativeInfinity() {
BitsType neginf = {VTKM_NEG_INF_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(neginf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Epsilon() {
return vtkm::Vec<vtkm::Float64,N>(VTKM_EPSILON_64);
}
};
#undef VTKM_NAN_BITS_32
#undef VTKM_INF_BITS_32
#undef VTKM_NEG_INF_BITS_32

@ -566,6 +566,35 @@ struct FloatLimits<vtkm::Float32>
}
};
template<int N>
struct FloatLimits< vtkm::Vec<vtkm::Float32,N> >
{
typedef vtkm::detail::IEEE754Bits32 BitsType;
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Nan() {
BitsType nan = {VTKM_NAN_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(nan.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Infinity() {
BitsType inf = {VTKM_INF_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(inf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> NegativeInfinity() {
BitsType neginf = {VTKM_NEG_INF_BITS_32};
return vtkm::Vec<vtkm::Float32,N>(neginf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float32,N> Epsilon() {
return vtkm::Vec<vtkm::Float32,N>(VTKM_EPSILON_32);
}
};
template<>
struct FloatLimits<vtkm::Float64>
{
@ -595,6 +624,35 @@ struct FloatLimits<vtkm::Float64>
}
};
template<int N>
struct FloatLimits< vtkm::Vec<vtkm::Float64,N> >
{
typedef vtkm::detail::IEEE754Bits64 BitsType;
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Nan() {
BitsType nan = {VTKM_NAN_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(nan.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Infinity() {
BitsType inf = {VTKM_INF_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(inf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> NegativeInfinity() {
BitsType neginf = {VTKM_NEG_INF_BITS_64};
return vtkm::Vec<vtkm::Float64,N>(neginf.scalar);
}
VTKM_EXEC_CONT_EXPORT
static vtkm::Vec<vtkm::Float64,N> Epsilon() {
return vtkm::Vec<vtkm::Float64,N>(VTKM_EPSILON_64);
}
};
#undef VTKM_NAN_BITS_32
#undef VTKM_INF_BITS_32
#undef VTKM_NEG_INF_BITS_32

@ -387,7 +387,7 @@ void MatrixLUPFactor(vtkm::Matrix<T,Size,Size> &A,
{
permutation[index] = index;
}
inversionParity = 1;
inversionParity = T(1);
valid = true;
for (vtkm::IdComponent rowIndex = 0; rowIndex < Size; rowIndex++)