10 #ifndef AMESOS2_UMFPACK_TYPEMAP_HPP
11 #define AMESOS2_UMFPACK_TYPEMAP_HPP
14 #ifdef HAVE_TEUCHOS_COMPLEX
18 #include <Teuchos_as.hpp>
19 #ifdef HAVE_TEUCHOS_COMPLEX
20 #include <Teuchos_SerializationTraits.hpp>
23 #include "Amesos2_TypeMap.hpp"
39 #ifdef HAVE_TEUCHOS_COMPLEX
42 template <
typename TypeFrom>
43 class ValueTypeConversionTraits<std::complex<double>, TypeFrom>
46 static std::complex<double> convert(
const TypeFrom t )
48 return std::complex<double>(
49 Teuchos::as<double>(t.real()),
50 Teuchos::as<double>(t.imag()));
53 static std::complex<double> safeConvert(
const TypeFrom t )
55 return std::complex<double>(
56 Teuchos::as<double>(t.real()),
57 Teuchos::as<double>(t.imag()));
63 template <
typename TypeTo>
64 class ValueTypeConversionTraits<TypeTo, std::complex<double>>
67 static TypeTo convert(
const std::complex<double> t )
69 typedef typename TypeTo::value_type value_type;
70 value_type ret_r = Teuchos::as<value_type>( t.real() );
71 value_type ret_i = Teuchos::as<value_type>( t.imag() );
72 return ( TypeTo( ret_r, ret_i ) );
76 static TypeTo safeConvert(
const std::complex<double> t )
78 typedef typename TypeTo::value_type value_type;
79 value_type ret_r = Teuchos::as<value_type>( t.real() );
80 value_type ret_i = Teuchos::as<value_type>( t.imag() );
81 return ( TypeTo( ret_r, ret_i ) );
85 #endif // HAVE_TEUCHOS_COMPLEX
93 template <
class,
class>
class Umfpack;
101 struct TypeMap<Umfpack,float>
104 typedef double magnitude_type;
108 struct TypeMap<Umfpack,double>
111 typedef double magnitude_type;
115 #ifdef HAVE_TEUCHOS_COMPLEX
118 struct TypeMap<Umfpack,std::complex<float> >
120 typedef Kokkos::complex<double> type;
121 typedef double magnitude_type;
125 struct TypeMap<Umfpack,std::complex<double> >
127 typedef Kokkos::complex<double> type;
128 typedef double magnitude_type;
132 #endif // HAVE_TEUCHOS_COMPLEX
139 #endif // AMESOS2_UMFPACK_TYPEMAP_HPP