53 #ifndef AMESOS2_MUMPS_TYPEMAP_HPP
54 #define AMESOS2_MUMPS_TYPEMAP_HPP
57 #ifdef HAVE_TEUCHOS_COMPLEX
61 #include <Teuchos_as.hpp>
62 #ifdef HAVE_TEUCHOS_COMPLEX
63 #include <Teuchos_SerializationTraits.hpp>
66 #include "Amesos2_TypeMap.hpp"
76 #ifdef HAVE_TEUCHOS_COMPLEX
87 template <
class,
class>
class MUMPS;
97 struct TypeMap<MUMPS,float>
100 typedef float magnitude_type;
101 typedef MUMPST::SMUMPS_STRUC_C MUMPS_STRUC_C;
106 struct TypeMap<MUMPS,double>
109 typedef double magnitude_type;
110 typedef MUMPST::DMUMPS_STRUC_C MUMPS_STRUC_C;
113 #ifdef HAVE_TEUCHOS_COMPLEX
116 struct TypeMap<MUMPS,std::complex<float> >
118 typedef MUMPST::CMUMPS_COMPLEX type;
119 typedef float magnitude_type;
120 typedef MUMPST::CMUMPS_STRUC_C MUMPS_STRUC_C;
124 struct TypeMap<MUMPS,std::complex<double> >
126 typedef MUMPST::ZMUMPS_COMPLEX type;
127 typedef double magnitude_type;
128 typedef MUMPST::ZMUMPS_STRUC_C MUMPS_STRUC_C;
132 struct TypeMap<MUMPS, MUMPST::CMUMPS_COMPLEX>
134 typedef MUMPST::CMUMPS_COMPLEX type;
135 typedef float magnitude_type;
136 typedef MUMPST::CMUMPS_STRUC_C MUMPS_STRUC_C;
140 struct TypeMap<MUMPS, MUMPST::ZMUMPS_COMPLEX>
142 typedef MUMPST::ZMUMPS_COMPLEX type;
143 typedef double magnitude_type;
144 typedef MUMPST::ZMUMPS_STRUC_C MUMPS_STRUC_C;
147 #endif // HAVE_TEUCHOS_COMPLEX
154 #ifdef HAVE_TEUCHOS_COMPLEX
171 template <
typename TypeFrom>
172 class ValueTypeConversionTraits<Amesos2::MUMPST::CMUMPS_COMPLEX, TypeFrom >
175 static Amesos2::MUMPST::CMUMPS_COMPLEX convert(
const TypeFrom t )
177 Amesos2::MUMPST::CMUMPS_COMPLEX ret;
178 ret.r = Teuchos::as<float>(t.real());
179 ret.i = Teuchos::as<float>(t.imag());
183 static Amesos2::MUMPST::CMUMPS_COMPLEX safeConvert(
const TypeFrom t )
185 Amesos2::MUMPST::CMUMPS_COMPLEX ret;
186 ret.r = Teuchos::as<float>(t.real());
187 ret.i = Teuchos::as<float>(t.imag());
194 template <
typename TypeFrom>
195 class ValueTypeConversionTraits<Amesos2::MUMPST::ZMUMPS_COMPLEX , TypeFrom >
198 static Amesos2::MUMPST::ZMUMPS_COMPLEX convert(
const TypeFrom t )
200 Amesos2::MUMPST::ZMUMPS_COMPLEX ret;
201 ret.r = Teuchos::as<double>( t.real() );
202 ret.i = Teuchos::as<double>( t.imag() );
207 static Amesos2::MUMPST::ZMUMPS_COMPLEX safeConvert(
const TypeFrom t )
209 Amesos2::MUMPST::ZMUMPS_COMPLEX ret;
210 ret.r = Teuchos::as<double>( t.real() );
211 ret.i = Teuchos::as<double>( t.imag() );
216 template <
typename TypeTo>
217 class ValueTypeConversionTraits<TypeTo, Amesos2::MUMPST::CMUMPS_COMPLEX>
220 static TypeTo convert(
const Amesos2::MUMPST::CMUMPS_COMPLEX t)
222 typedef typename TypeTo::value_type value_type;
223 value_type ret_r = Teuchos::as<value_type>(t.r);
224 value_type ret_i = Teuchos::as<value_type>(t.i);
225 return (TypeTo(ret_r, ret_i));
228 static TypeTo safeConvert(
const Amesos2::MUMPST::CMUMPS_COMPLEX t)
230 typedef typename TypeTo::value_type value_type;
231 value_type ret_r = Teuchos::as<value_type>(t.r);
232 value_type ret_i = Teuchos::as<value_type>(t.i);
233 return (TypeTo(ret_r, ret_i));
238 template <
typename TypeTo>
239 class ValueTypeConversionTraits<TypeTo, Amesos2::MUMPST::ZMUMPS_COMPLEX>
242 static TypeTo convert(
const Amesos2::MUMPST::ZMUMPS_COMPLEX t)
244 typedef typename TypeTo::value_type value_type;
245 value_type ret_r = Teuchos::as<value_type>(t.r);
246 value_type ret_i = Teuchos::as<value_type>(t.i);
247 return (TypeTo(ret_r, ret_i));
250 static TypeTo safeConvert(
const Amesos2::MUMPST::ZMUMPS_COMPLEX t)
252 typedef typename TypeTo::value_type value_type;
253 value_type ret_r = Teuchos::as<value_type>(t.r);
254 value_type ret_i = Teuchos::as<value_type>(t.i);
255 return (TypeTo(ret_r, ret_i));
267 #endif // HAVE_TEUCHOS_COMPLEX
271 #endif // AMESOS2_MUMPS_TYPEMAP_HPP