56 #ifndef AMESOS2_PARDISOMKL_TYPEMAP_HPP 57 #define AMESOS2_PARDISOMKL_TYPEMAP_HPP 59 #ifdef HAVE_TEUCHOS_COMPLEX 63 #include <Teuchos_as.hpp> 64 #ifdef HAVE_TEUCHOS_COMPLEX 65 #include <Teuchos_SerializationTraits.hpp> 68 #include "Amesos2_TypeMap.hpp" 76 #include <mkl_types.h> 78 typedef MKL_INT _INTEGER_t;
92 template <
typename TypeFrom>
93 class ValueTypeConversionTraits<
Amesos2::PMKL::_MKL_Complex8, TypeFrom>
96 static Amesos2::PMKL::_MKL_Complex8 convert(
const TypeFrom t )
98 Amesos2::PMKL::_MKL_Complex8 ret;
99 ret.real = Teuchos::as<float>(t.real());
100 ret.imag = Teuchos::as<float>(t.imag());
104 static Amesos2::PMKL::_MKL_Complex8 safeConvert(
const TypeFrom t )
106 Amesos2::PMKL::_MKL_Complex8 ret;
107 ret.real = Teuchos::as<float>(t.real());
108 ret.imag = Teuchos::as<float>(t.imag());
114 template <
typename TypeFrom>
115 class ValueTypeConversionTraits<
Amesos2::PMKL::_DOUBLE_COMPLEX_t, TypeFrom>
118 static Amesos2::PMKL::_DOUBLE_COMPLEX_t convert(
const TypeFrom t )
120 Amesos2::PMKL::_DOUBLE_COMPLEX_t ret;
121 ret.r = Teuchos::as<double>(t.real());
122 ret.i = Teuchos::as<double>(t.imag());
126 static Amesos2::PMKL::_DOUBLE_COMPLEX_t safeConvert(
const TypeFrom t )
128 Amesos2::PMKL::_DOUBLE_COMPLEX_t ret;
129 ret.r = Teuchos::as<double>(t.real());
130 ret.i = Teuchos::as<double>(t.imag());
137 template <
typename TypeTo>
138 class ValueTypeConversionTraits<TypeTo,
Amesos2::PMKL::_MKL_Complex8>
141 static TypeTo convert(
const Amesos2::PMKL::_MKL_Complex8 t )
143 typedef typename TypeTo::value_type value_type;
144 value_type ret_r = Teuchos::as<value_type>( t.real );
145 value_type ret_i = Teuchos::as<value_type>( t.imag );
146 return ( TypeTo( ret_r, ret_i ) );
149 static TypeTo safeConvert(
const Amesos2::PMKL::_MKL_Complex8 t )
151 typedef typename TypeTo::value_type value_type;
152 value_type ret_r = Teuchos::as<value_type>( t.real );
153 value_type ret_i = Teuchos::as<value_type>( t.imag );
154 return ( TypeTo( ret_r, ret_i ) );
159 template <
typename TypeTo>
160 class ValueTypeConversionTraits<TypeTo,
Amesos2::PMKL::_DOUBLE_COMPLEX_t>
163 static TypeTo convert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
165 typedef typename TypeTo::value_type value_type;
166 value_type ret_r = Teuchos::as<value_type>( t.r );
167 value_type ret_i = Teuchos::as<value_type>( t.i );
168 return ( TypeTo( ret_r, ret_i ) );
172 static TypeTo safeConvert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
174 typedef typename TypeTo::value_type value_type;
175 value_type ret_r = Teuchos::as<value_type>( t.r );
176 value_type ret_i = Teuchos::as<value_type>( t.i );
177 return ( TypeTo( ret_r, ret_i ) );
189 template <
class,
class>
class PardisoMKL;
197 struct TypeMap<PardisoMKL,float>
199 typedef PMKL::_REAL_t type;
200 typedef PMKL::_REAL_t magnitude_type;
205 struct TypeMap<PardisoMKL,double>
207 typedef PMKL::_DOUBLE_PRECISION_t type;
208 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
211 #ifdef HAVE_TEUCHOS_COMPLEX 219 struct TypeMap<PardisoMKL,
std::complex<float> >
221 typedef PMKL::_MKL_Complex8 type;
222 typedef PMKL::_REAL_t magnitude_type;
227 struct TypeMap<PardisoMKL,
std::complex<double> >
229 typedef PMKL::_DOUBLE_COMPLEX_t type;
230 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
235 struct TypeMap<PardisoMKL,PMKL::_MKL_Complex8>
237 typedef PMKL::_MKL_Complex8 type;
238 typedef PMKL::_REAL_t magnitude_type;
243 struct TypeMap<PardisoMKL,PMKL::_DOUBLE_COMPLEX_t>
245 typedef PMKL::_DOUBLE_COMPLEX_t type;
246 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
248 #endif // HAVE_TEUCHOS_COMPLEX 251 struct TypeMap<PardisoMKL,int>
253 typedef PMKL::_INTEGER_t type;
258 struct TypeMap<PardisoMKL,long long int>
260 typedef long long int type;
270 struct TypeMap<PardisoMKL,long int>
272 typedef Meta::if_then_else<
273 sizeof(int) <
sizeof(
long int),
274 TypeMap<PardisoMKL,long long int>::type,
275 TypeMap<PardisoMKL,int>::type >::type type;
280 #endif // AMESOS2_PARDISOMKL_TYPEMAP_HPP
Definition: Amesos2_AbstractConcreteMatrixAdapter.hpp:48
Definition: Amesos2_Cholmod_TypeMap.hpp:92