44 #ifndef AMESOS2_UMFPACK_TYPEMAP_HPP
45 #define AMESOS2_UMFPACK_TYPEMAP_HPP
48 #ifdef HAVE_TEUCHOS_COMPLEX
52 #include <Teuchos_as.hpp>
53 #ifdef HAVE_TEUCHOS_COMPLEX
54 #include <Teuchos_SerializationTraits.hpp>
57 #include "Amesos2_TypeMap.hpp"
73 #ifdef HAVE_TEUCHOS_COMPLEX
76 template <
typename TypeFrom>
77 class ValueTypeConversionTraits<std::complex<double>, TypeFrom>
80 static std::complex<double> convert(
const TypeFrom t )
82 return std::complex<double>(
83 Teuchos::as<double>(t.real()),
84 Teuchos::as<double>(t.imag()));
87 static std::complex<double> safeConvert(
const TypeFrom t )
89 return std::complex<double>(
90 Teuchos::as<double>(t.real()),
91 Teuchos::as<double>(t.imag()));
97 template <
typename TypeTo>
98 class ValueTypeConversionTraits<TypeTo, std::complex<double>>
101 static TypeTo convert(
const std::complex<double> t )
103 typedef typename TypeTo::value_type value_type;
104 value_type ret_r = Teuchos::as<value_type>( t.real() );
105 value_type ret_i = Teuchos::as<value_type>( t.imag() );
106 return ( TypeTo( ret_r, ret_i ) );
110 static TypeTo safeConvert(
const std::complex<double> t )
112 typedef typename TypeTo::value_type value_type;
113 value_type ret_r = Teuchos::as<value_type>( t.real() );
114 value_type ret_i = Teuchos::as<value_type>( t.imag() );
115 return ( TypeTo( ret_r, ret_i ) );
119 #endif // HAVE_TEUCHOS_COMPLEX
127 template <
class,
class>
class Umfpack;
135 struct TypeMap<Umfpack,float>
138 typedef double magnitude_type;
142 struct TypeMap<Umfpack,double>
145 typedef double magnitude_type;
149 #ifdef HAVE_TEUCHOS_COMPLEX
152 struct TypeMap<Umfpack,std::complex<float> >
154 typedef std::complex<double> type;
155 typedef double magnitude_type;
159 struct TypeMap<Umfpack,std::complex<double> >
161 typedef std::complex<double> type;
162 typedef double magnitude_type;
166 #endif // HAVE_TEUCHOS_COMPLEX
173 #endif // AMESOS2_UMFPACK_TYPEMAP_HPP