54 #ifndef AMESOS2_SUPERLU_TYPEMAP_HPP
55 #define AMESOS2_SUPERLU_TYPEMAP_HPP
58 #ifdef HAVE_TEUCHOS_COMPLEX
62 #include <Teuchos_as.hpp>
63 #ifdef HAVE_TEUCHOS_COMPLEX
64 #include <Teuchos_SerializationTraits.hpp>
67 #include "Amesos2_TypeMap.hpp"
79 #undef __SUPERLU_SUPERMATRIX
80 #include "supermatrix.h"
82 #ifdef HAVE_TEUCHOS_COMPLEX
84 #undef __SUPERLU_SCOMPLEX
85 #undef SCOMPLEX_INCLUDE
86 #include "slu_scomplex.h"
90 #undef __SUPERLU_DCOMPLEX
91 #undef DCOMPLEX_INCLUDE
92 #include "slu_dcomplex.h"
94 #endif // HAVE_TEUCHOS_COMPLEX
100 #ifdef HAVE_TEUCHOS_COMPLEX
113 class ValueTypeConversionTraits<SLU::C::complex, Kokkos::complex<float>>
116 static SLU::C::complex convert(
const Kokkos::complex<float> t ) {
123 static SLU::C::complex safeConvert(
const Kokkos::complex<float> t ) {
132 class ValueTypeConversionTraits<SLU::Z::doublecomplex, Kokkos::complex<double>>
135 static SLU::Z::doublecomplex convert(
const Kokkos::complex<double> t ) {
136 SLU::Z::doublecomplex ret;
142 static SLU::Z::doublecomplex safeConvert(
const Kokkos::complex<double> t ) {
143 SLU::Z::doublecomplex ret;
153 class ValueTypeConversionTraits<Kokkos::complex<float>, SLU::C::complex>
156 static Kokkos::complex<float> convert(
const SLU::C::complex t ) {
157 return ( Kokkos::complex<float>( t.r, t.i ) );
160 static Kokkos::complex<float> safeConvert(
const SLU::C::complex t ) {
161 return ( Kokkos::complex<float>( t.r, t.i ) );
166 class ValueTypeConversionTraits<Kokkos::complex<double>, SLU::Z::doublecomplex>
169 static Kokkos::complex<double> convert(
const SLU::Z::doublecomplex t ) {
170 return ( Kokkos::complex<double>( t.r, t.i ) );
173 static Kokkos::complex<double> safeConvert(
const SLU::Z::doublecomplex t ) {
174 return ( Kokkos::complex<double>( t.r, t.i ) );
182 #endif // HAVE_TEUCHOS_COMPLEX
186 template <
class,
class>
class Superlu;
193 struct TypeMap<Superlu,float>
195 static SLU::Dtype_t dtype;
196 typedef float convert_type;
198 typedef float magnitude_type;
203 struct TypeMap<Superlu,double>
205 static SLU::Dtype_t dtype;
206 typedef double convert_type;
208 typedef double magnitude_type;
212 #ifdef HAVE_TEUCHOS_COMPLEX
215 struct TypeMap<Superlu,std::complex<float> >
217 static SLU::Dtype_t dtype;
218 typedef SLU::C::complex convert_type;
219 typedef Kokkos::complex<float> type;
220 typedef float magnitude_type;
225 struct TypeMap<Superlu,std::complex<double> >
227 static SLU::Dtype_t dtype;
228 typedef SLU::Z::doublecomplex convert_type;
229 typedef Kokkos::complex<double> type;
230 typedef double magnitude_type;
235 struct TypeMap<Superlu,Kokkos::complex<float> >
237 static SLU::Dtype_t dtype;
238 typedef SLU::C::complex convert_type;
239 typedef Kokkos::complex<float> type;
240 typedef float magnitude_type;
245 struct TypeMap<Superlu,Kokkos::complex<double> >
247 static SLU::Dtype_t dtype;
248 typedef SLU::Z::doublecomplex convert_type;
249 typedef Kokkos::complex<double> type;
250 typedef double magnitude_type;
254 #endif // HAVE_TEUCHOS_COMPLEX
261 #endif // AMESOS2_SUPERLU_TYPEMAP_HPP