20 #ifndef AMESOS2_SUPERLU_TYPEMAP_HPP
21 #define AMESOS2_SUPERLU_TYPEMAP_HPP
24 #ifdef HAVE_TEUCHOS_COMPLEX
28 #include <Teuchos_as.hpp>
29 #ifdef HAVE_TEUCHOS_COMPLEX
30 #include <Teuchos_SerializationTraits.hpp>
33 #include "Amesos2_TypeMap.hpp"
45 #undef __SUPERLU_SUPERMATRIX
46 #include "supermatrix.h"
48 #ifdef HAVE_TEUCHOS_COMPLEX
50 #undef __SUPERLU_SCOMPLEX
51 #undef SCOMPLEX_INCLUDE
52 #include "slu_scomplex.h"
56 #undef __SUPERLU_DCOMPLEX
57 #undef DCOMPLEX_INCLUDE
58 #include "slu_dcomplex.h"
60 #endif // HAVE_TEUCHOS_COMPLEX
66 #ifdef HAVE_TEUCHOS_COMPLEX
79 class ValueTypeConversionTraits<SLU::C::complex, Kokkos::complex<float>>
82 static SLU::C::complex convert(
const Kokkos::complex<float> t ) {
89 static SLU::C::complex safeConvert(
const Kokkos::complex<float> t ) {
98 class ValueTypeConversionTraits<SLU::Z::doublecomplex, Kokkos::complex<double>>
101 static SLU::Z::doublecomplex convert(
const Kokkos::complex<double> t ) {
102 SLU::Z::doublecomplex ret;
108 static SLU::Z::doublecomplex safeConvert(
const Kokkos::complex<double> t ) {
109 SLU::Z::doublecomplex ret;
119 class ValueTypeConversionTraits<Kokkos::complex<float>, SLU::C::complex>
122 static Kokkos::complex<float> convert(
const SLU::C::complex t ) {
123 return ( Kokkos::complex<float>( t.r, t.i ) );
126 static Kokkos::complex<float> safeConvert(
const SLU::C::complex t ) {
127 return ( Kokkos::complex<float>( t.r, t.i ) );
132 class ValueTypeConversionTraits<Kokkos::complex<double>, SLU::Z::doublecomplex>
135 static Kokkos::complex<double> convert(
const SLU::Z::doublecomplex t ) {
136 return ( Kokkos::complex<double>( t.r, t.i ) );
139 static Kokkos::complex<double> safeConvert(
const SLU::Z::doublecomplex t ) {
140 return ( Kokkos::complex<double>( t.r, t.i ) );
148 #endif // HAVE_TEUCHOS_COMPLEX
152 template <
class,
class>
class Superlu;
159 struct TypeMap<Superlu,float>
161 static SLU::Dtype_t dtype;
162 typedef float convert_type;
164 typedef float magnitude_type;
169 struct TypeMap<Superlu,double>
171 static SLU::Dtype_t dtype;
172 typedef double convert_type;
174 typedef double magnitude_type;
178 #ifdef HAVE_TEUCHOS_COMPLEX
181 struct TypeMap<Superlu,std::complex<float> >
183 static SLU::Dtype_t dtype;
184 typedef SLU::C::complex convert_type;
185 typedef Kokkos::complex<float> type;
186 typedef float magnitude_type;
191 struct TypeMap<Superlu,std::complex<double> >
193 static SLU::Dtype_t dtype;
194 typedef SLU::Z::doublecomplex convert_type;
195 typedef Kokkos::complex<double> type;
196 typedef double magnitude_type;
201 struct TypeMap<Superlu,Kokkos::complex<float> >
203 static SLU::Dtype_t dtype;
204 typedef SLU::C::complex convert_type;
205 typedef Kokkos::complex<float> type;
206 typedef float magnitude_type;
211 struct TypeMap<Superlu,Kokkos::complex<double> >
213 static SLU::Dtype_t dtype;
214 typedef SLU::Z::doublecomplex convert_type;
215 typedef Kokkos::complex<double> type;
216 typedef double magnitude_type;
220 #endif // HAVE_TEUCHOS_COMPLEX
227 #endif // AMESOS2_SUPERLU_TYPEMAP_HPP