19 #ifndef AMESOS2_MUMPS_TYPEMAP_HPP
20 #define AMESOS2_MUMPS_TYPEMAP_HPP
23 #ifdef HAVE_TEUCHOS_COMPLEX
27 #include <Teuchos_as.hpp>
28 #ifdef HAVE_TEUCHOS_COMPLEX
29 #include <Teuchos_SerializationTraits.hpp>
32 #include "Amesos2_TypeMap.hpp"
42 #ifdef HAVE_TEUCHOS_COMPLEX
53 template <
class,
class>
class MUMPS;
63 struct TypeMap<MUMPS,float>
66 typedef float magnitude_type;
67 typedef MUMPST::SMUMPS_STRUC_C MUMPS_STRUC_C;
72 struct TypeMap<MUMPS,double>
75 typedef double magnitude_type;
76 typedef MUMPST::DMUMPS_STRUC_C MUMPS_STRUC_C;
79 #ifdef HAVE_TEUCHOS_COMPLEX
82 struct TypeMap<MUMPS,std::complex<float> >
84 typedef MUMPST::CMUMPS_COMPLEX type;
85 typedef float magnitude_type;
86 typedef MUMPST::CMUMPS_STRUC_C MUMPS_STRUC_C;
90 struct TypeMap<MUMPS,std::complex<double> >
92 typedef MUMPST::ZMUMPS_COMPLEX type;
93 typedef double magnitude_type;
94 typedef MUMPST::ZMUMPS_STRUC_C MUMPS_STRUC_C;
98 struct TypeMap<MUMPS, MUMPST::CMUMPS_COMPLEX>
100 typedef MUMPST::CMUMPS_COMPLEX type;
101 typedef float magnitude_type;
102 typedef MUMPST::CMUMPS_STRUC_C MUMPS_STRUC_C;
106 struct TypeMap<MUMPS, MUMPST::ZMUMPS_COMPLEX>
108 typedef MUMPST::ZMUMPS_COMPLEX type;
109 typedef double magnitude_type;
110 typedef MUMPST::ZMUMPS_STRUC_C MUMPS_STRUC_C;
113 #endif // HAVE_TEUCHOS_COMPLEX
120 #ifdef HAVE_TEUCHOS_COMPLEX
137 template <
typename TypeFrom>
138 class ValueTypeConversionTraits<Amesos2::MUMPST::CMUMPS_COMPLEX, TypeFrom >
141 static Amesos2::MUMPST::CMUMPS_COMPLEX convert(
const TypeFrom t )
143 Amesos2::MUMPST::CMUMPS_COMPLEX ret;
144 ret.r = Teuchos::as<float>(t.real());
145 ret.i = Teuchos::as<float>(t.imag());
149 static Amesos2::MUMPST::CMUMPS_COMPLEX safeConvert(
const TypeFrom t )
151 Amesos2::MUMPST::CMUMPS_COMPLEX ret;
152 ret.r = Teuchos::as<float>(t.real());
153 ret.i = Teuchos::as<float>(t.imag());
160 template <
typename TypeFrom>
161 class ValueTypeConversionTraits<Amesos2::MUMPST::ZMUMPS_COMPLEX , TypeFrom >
164 static Amesos2::MUMPST::ZMUMPS_COMPLEX convert(
const TypeFrom t )
166 Amesos2::MUMPST::ZMUMPS_COMPLEX ret;
167 ret.r = Teuchos::as<double>( t.real() );
168 ret.i = Teuchos::as<double>( t.imag() );
173 static Amesos2::MUMPST::ZMUMPS_COMPLEX safeConvert(
const TypeFrom t )
175 Amesos2::MUMPST::ZMUMPS_COMPLEX ret;
176 ret.r = Teuchos::as<double>( t.real() );
177 ret.i = Teuchos::as<double>( t.imag() );
182 template <
typename TypeTo>
183 class ValueTypeConversionTraits<TypeTo, Amesos2::MUMPST::CMUMPS_COMPLEX>
186 static TypeTo convert(
const Amesos2::MUMPST::CMUMPS_COMPLEX t)
188 typedef typename TypeTo::value_type value_type;
189 value_type ret_r = Teuchos::as<value_type>(t.r);
190 value_type ret_i = Teuchos::as<value_type>(t.i);
191 return (TypeTo(ret_r, ret_i));
194 static TypeTo safeConvert(
const Amesos2::MUMPST::CMUMPS_COMPLEX t)
196 typedef typename TypeTo::value_type value_type;
197 value_type ret_r = Teuchos::as<value_type>(t.r);
198 value_type ret_i = Teuchos::as<value_type>(t.i);
199 return (TypeTo(ret_r, ret_i));
204 template <
typename TypeTo>
205 class ValueTypeConversionTraits<TypeTo, Amesos2::MUMPST::ZMUMPS_COMPLEX>
208 static TypeTo convert(
const Amesos2::MUMPST::ZMUMPS_COMPLEX t)
210 typedef typename TypeTo::value_type value_type;
211 value_type ret_r = Teuchos::as<value_type>(t.r);
212 value_type ret_i = Teuchos::as<value_type>(t.i);
213 return (TypeTo(ret_r, ret_i));
216 static TypeTo safeConvert(
const Amesos2::MUMPST::ZMUMPS_COMPLEX t)
218 typedef typename TypeTo::value_type value_type;
219 value_type ret_r = Teuchos::as<value_type>(t.r);
220 value_type ret_i = Teuchos::as<value_type>(t.i);
221 return (TypeTo(ret_r, ret_i));
233 #endif // HAVE_TEUCHOS_COMPLEX
237 #endif // AMESOS2_MUMPS_TYPEMAP_HPP