56 #ifndef AMESOS2_PARDISOMKL_TYPEMAP_HPP
57 #define AMESOS2_PARDISOMKL_TYPEMAP_HPP
59 #ifdef HAVE_TEUCHOS_COMPLEX
63 #include <mkl_types.h>
66 #include <Teuchos_as.hpp>
67 #ifdef HAVE_TEUCHOS_COMPLEX
68 #include <Teuchos_SerializationTraits.hpp>
71 #include "Amesos2_TypeMap.hpp"
76 #include <mkl_types.h>
85 typedef MKL_INT _INTEGER_t;
97 #ifdef HAVE_TEUCHOS_COMPLEX
100 template <
typename TypeFrom>
101 class ValueTypeConversionTraits<Amesos2::PMKL::_MKL_Complex8, TypeFrom>
104 static Amesos2::PMKL::_MKL_Complex8 convert(
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());
112 static Amesos2::PMKL::_MKL_Complex8 safeConvert(
const TypeFrom t )
114 Amesos2::PMKL::_MKL_Complex8 ret;
115 ret.real = Teuchos::as<float>(t.real());
116 ret.imag = Teuchos::as<float>(t.imag());
122 template <
typename TypeFrom>
123 class ValueTypeConversionTraits<Amesos2::PMKL::_DOUBLE_COMPLEX_t, TypeFrom>
126 static Amesos2::PMKL::_DOUBLE_COMPLEX_t convert(
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());
134 static Amesos2::PMKL::_DOUBLE_COMPLEX_t safeConvert(
const TypeFrom t )
136 Amesos2::PMKL::_DOUBLE_COMPLEX_t ret;
137 ret.r = Teuchos::as<double>(t.real());
138 ret.i = Teuchos::as<double>(t.imag());
145 template <
typename TypeTo>
146 class ValueTypeConversionTraits<TypeTo, Amesos2::PMKL::_MKL_Complex8>
149 static TypeTo convert(
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 ) );
157 static TypeTo safeConvert(
const Amesos2::PMKL::_MKL_Complex8 t )
159 typedef typename TypeTo::value_type value_type;
160 value_type ret_r = Teuchos::as<value_type>( t.real );
161 value_type ret_i = Teuchos::as<value_type>( t.imag );
162 return ( TypeTo( ret_r, ret_i ) );
167 template <
typename TypeTo>
168 class ValueTypeConversionTraits<TypeTo, Amesos2::PMKL::_DOUBLE_COMPLEX_t>
171 static TypeTo convert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
173 typedef typename TypeTo::value_type value_type;
174 value_type ret_r = Teuchos::as<value_type>( t.r );
175 value_type ret_i = Teuchos::as<value_type>( t.i );
176 return ( TypeTo( ret_r, ret_i ) );
180 static TypeTo safeConvert(
const Amesos2::PMKL::_DOUBLE_COMPLEX_t t )
182 typedef typename TypeTo::value_type value_type;
183 value_type ret_r = Teuchos::as<value_type>( t.r );
184 value_type ret_i = Teuchos::as<value_type>( t.i );
185 return ( TypeTo( ret_r, ret_i ) );
197 template <
class,
class>
class PardisoMKL;
206 struct TypeMap<PardisoMKL,float>
208 typedef PMKL::_REAL_t type;
209 typedef PMKL::_REAL_t magnitude_type;
214 struct TypeMap<PardisoMKL,double>
216 typedef PMKL::_DOUBLE_PRECISION_t type;
217 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
220 #ifdef HAVE_TEUCHOS_COMPLEX
228 struct TypeMap<PardisoMKL,std::complex<float> >
230 typedef PMKL::_MKL_Complex8 type;
231 typedef PMKL::_REAL_t magnitude_type;
236 struct TypeMap<PardisoMKL,std::complex<double> >
238 typedef PMKL::_DOUBLE_COMPLEX_t type;
239 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
244 struct TypeMap<PardisoMKL,PMKL::_MKL_Complex8>
246 typedef PMKL::_MKL_Complex8 type;
247 typedef PMKL::_REAL_t magnitude_type;
252 struct TypeMap<PardisoMKL,PMKL::_DOUBLE_COMPLEX_t>
254 typedef PMKL::_DOUBLE_COMPLEX_t type;
255 typedef PMKL::_DOUBLE_PRECISION_t magnitude_type;
257 #endif // HAVE_TEUCHOS_COMPLEX
260 struct TypeMap<PardisoMKL,int>
262 typedef PMKL::_INTEGER_t type;
267 struct TypeMap<PardisoMKL,long long int>
269 typedef long long int type;
279 struct TypeMap<PardisoMKL,long int>
281 typedef std::conditional_t<
282 sizeof(int) <
sizeof(
long int),
283 TypeMap<PardisoMKL,long long int>::type,
284 TypeMap<PardisoMKL,int>::type > type;
289 #endif // AMESOS2_PARDISOMKL_TYPEMAP_HPP