22 #ifndef AMESOS2_PARDISOMKL_TYPEMAP_HPP
23 #define AMESOS2_PARDISOMKL_TYPEMAP_HPP
25 #ifdef HAVE_TEUCHOS_COMPLEX
29 #include <mkl_types.h>
32 #include <Teuchos_as.hpp>
33 #ifdef HAVE_TEUCHOS_COMPLEX
34 #include <Teuchos_SerializationTraits.hpp>
37 #include "Amesos2_TypeMap.hpp"
42 #include <mkl_types.h>
51 typedef MKL_INT _INTEGER_t;
63 #ifdef HAVE_TEUCHOS_COMPLEX
66 template <
typename TypeFrom>
67 class ValueTypeConversionTraits<Amesos2::PMKL::_MKL_Complex8, TypeFrom>
70 static Amesos2::PMKL::_MKL_Complex8 convert(
const TypeFrom t )
72 Amesos2::PMKL::_MKL_Complex8 ret;
73 ret.real = Teuchos::as<float>(t.real());
74 ret.imag = Teuchos::as<float>(t.imag());
78 static Amesos2::PMKL::_MKL_Complex8 safeConvert(
const TypeFrom t )
80 Amesos2::PMKL::_MKL_Complex8 ret;
81 ret.real = Teuchos::as<float>(t.real());
82 ret.imag = Teuchos::as<float>(t.imag());
88 template <
typename TypeFrom>
89 class ValueTypeConversionTraits<Amesos2::PMKL::_DOUBLE_COMPLEX_t, TypeFrom>
92 static Amesos2::PMKL::_DOUBLE_COMPLEX_t convert(
const TypeFrom t )
94 Amesos2::PMKL::_DOUBLE_COMPLEX_t ret;
95 ret.r = Teuchos::as<double>(t.real());
96 ret.i = Teuchos::as<double>(t.imag());
100 static Amesos2::PMKL::_DOUBLE_COMPLEX_t safeConvert(
const TypeFrom t )
102 Amesos2::PMKL::_DOUBLE_COMPLEX_t ret;
103 ret.r = Teuchos::as<double>(t.real());
104 ret.i = Teuchos::as<double>(t.imag());
111 template <
typename TypeTo>
112 class ValueTypeConversionTraits<TypeTo, Amesos2::PMKL::_MKL_Complex8>
115 static TypeTo convert(
const Amesos2::PMKL::_MKL_Complex8 t )
117 typedef typename TypeTo::value_type value_type;
118 value_type ret_r = Teuchos::as<value_type>( t.real );
119 value_type ret_i = Teuchos::as<value_type>( t.imag );
120 return ( TypeTo( ret_r, ret_i ) );
123 static TypeTo safeConvert(
const Amesos2::PMKL::_MKL_Complex8 t )
125 typedef typename TypeTo::value_type value_type;
126 value_type ret_r = Teuchos::as<value_type>( t.real );
127 value_type ret_i = Teuchos::as<value_type>( t.imag );
128 return ( TypeTo( ret_r, ret_i ) );
133 template <
typename TypeTo>
134 class ValueTypeConversionTraits<TypeTo, Amesos2::PMKL::_DOUBLE_COMPLEX_t>
137 static TypeTo convert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
139 typedef typename TypeTo::value_type value_type;
140 value_type ret_r = Teuchos::as<value_type>( t.r );
141 value_type ret_i = Teuchos::as<value_type>( t.i );
142 return ( TypeTo( ret_r, ret_i ) );
146 static TypeTo safeConvert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
148 typedef typename TypeTo::value_type value_type;
149 value_type ret_r = Teuchos::as<value_type>( t.r );
150 value_type ret_i = Teuchos::as<value_type>( t.i );
151 return ( TypeTo( ret_r, ret_i ) );
163 template <
class,
class>
class PardisoMKL;
172 struct TypeMap<PardisoMKL,float>
174 typedef PMKL::_REAL_t type;
175 typedef PMKL::_REAL_t magnitude_type;
180 struct TypeMap<PardisoMKL,double>
182 typedef PMKL::_DOUBLE_PRECISION_t type;
183 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
186 #ifdef HAVE_TEUCHOS_COMPLEX
194 struct TypeMap<PardisoMKL,std::complex<float> >
196 typedef PMKL::_MKL_Complex8 type;
197 typedef PMKL::_REAL_t magnitude_type;
202 struct TypeMap<PardisoMKL,std::complex<double> >
204 typedef PMKL::_DOUBLE_COMPLEX_t type;
205 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
210 struct TypeMap<PardisoMKL,PMKL::_MKL_Complex8>
212 typedef PMKL::_MKL_Complex8 type;
213 typedef PMKL::_REAL_t magnitude_type;
218 struct TypeMap<PardisoMKL,PMKL::_DOUBLE_COMPLEX_t>
220 typedef PMKL::_DOUBLE_COMPLEX_t type;
221 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
223 #endif // HAVE_TEUCHOS_COMPLEX
226 struct TypeMap<PardisoMKL,int>
228 typedef PMKL::_INTEGER_t type;
233 struct TypeMap<PardisoMKL,long long int>
235 typedef long long int type;
245 struct TypeMap<PardisoMKL,long int>
247 typedef std::conditional_t<
248 sizeof(int) <
sizeof(
long int),
249 TypeMap<PardisoMKL,long long int>::type,
250 TypeMap<PardisoMKL,int>::type > type;
255 #endif // AMESOS2_PARDISOMKL_TYPEMAP_HPP