56 #ifndef AMESOS2_CHOLMOD_TYPEMAP_HPP
57 #define AMESOS2_CHOLMOD_TYPEMAP_HPP
60 #ifdef HAVE_TEUCHOS_COMPLEX
64 #include <Teuchos_as.hpp>
65 #ifdef HAVE_TEUCHOS_COMPLEX
66 #include <Teuchos_SerializationTraits.hpp>
69 #include "Amesos2_TypeMap.hpp"
76 double complexpair[2];
94 template <
typename TypeFrom>
95 class ValueTypeConversionTraits<Amesos2::CHOL::complex, TypeFrom>
98 static Amesos2::CHOL::complex convert(
const TypeFrom t )
100 Amesos2::CHOL::complex ret;
103 ret.complexpair[0] = Teuchos::as<float>(t.real());
104 ret.complexpair[1] = Teuchos::as<float>(t.imag());
108 static Amesos2::CHOL::complex safeConvert(
const TypeFrom t )
110 Amesos2::CHOL::complex ret;
113 ret.complexpair[0] = Teuchos::as<float>(t.real());
114 ret.complexpair[1] = Teuchos::as<float>(t.imag());
120 template <
typename TypeTo>
121 class ValueTypeConversionTraits<TypeTo, Amesos2::CHOL::complex>
124 static TypeTo convert(
const Amesos2::CHOL::complex t )
126 typedef typename TypeTo::value_type value_type;
129 value_type ret_r = Teuchos::as<value_type>(t.complexpair[0]);
130 value_type ret_i = Teuchos::as<value_type>(t.complexpair[1]);
131 return ( TypeTo( ret_r, ret_i ) );
134 static TypeTo safeConvert(
const Amesos2::CHOL::complex t )
136 typedef typename TypeTo::value_type value_type;
139 value_type ret_r = Teuchos::as<value_type>(t.complexpair[0]);
140 value_type ret_i = Teuchos::as<value_type>(t.complexpair[1]);
141 return ( TypeTo( ret_r, ret_i ) );
153 template <
class,
class>
class Cholmod;
156 struct TypeMap<Cholmod,float>
159 typedef float magnitude_type;
163 struct TypeMap<Cholmod,double>
166 typedef double magnitude_type;
169 #ifdef HAVE_TEUCHOS_COMPLEX
172 struct TypeMap<Cholmod,std::complex<double> >
174 typedef CHOL::complex type;
175 typedef double magnitude_type;
178 #endif // HAVE_TEUCHOS_COMPLEX
184 #endif // AMESOS2_CHOLMOD_TYPEMAP_HPP