10#ifndef AMESOS2_UMFPACK_TYPEMAP_HPP
11#define AMESOS2_UMFPACK_TYPEMAP_HPP
14#ifdef HAVE_TEUCHOS_COMPLEX
18#include <Teuchos_as.hpp>
19#ifdef HAVE_TEUCHOS_COMPLEX
20#include <Teuchos_SerializationTraits.hpp>
23#include "Amesos2_TypeMap.hpp"
39#ifdef HAVE_TEUCHOS_COMPLEX
42template <
typename TypeFrom>
43class ValueTypeConversionTraits<std::complex<double>, TypeFrom>
46 static std::complex<double> convert(
const TypeFrom t )
48 return std::complex<double>(
49 Teuchos::as<double>(t.real()),
50 Teuchos::as<double>(t.imag()));
53 static std::complex<double> safeConvert(
const TypeFrom t )
55 return std::complex<double>(
56 Teuchos::as<double>(t.real()),
57 Teuchos::as<double>(t.imag()));
63template <
typename TypeTo>
64class ValueTypeConversionTraits<TypeTo, std::complex<double>>
67 static TypeTo convert(
const std::complex<double> t )
69 typedef typename TypeTo::value_type value_type;
70 value_type ret_r = Teuchos::as<value_type>( t.real() );
71 value_type ret_i = Teuchos::as<value_type>( t.imag() );
72 return ( TypeTo( ret_r, ret_i ) );
76 static TypeTo safeConvert(
const std::complex<double> t )
78 typedef typename TypeTo::value_type value_type;
79 value_type ret_r = Teuchos::as<value_type>( t.real() );
80 value_type ret_i = Teuchos::as<value_type>( t.imag() );
81 return ( TypeTo( ret_r, ret_i ) );
93template <
class,
class>
class Umfpack;
101struct TypeMap<Umfpack,float>
104 typedef double magnitude_type;
108struct TypeMap<Umfpack,double>
111 typedef double magnitude_type;
115#ifdef HAVE_TEUCHOS_COMPLEX
118struct TypeMap<Umfpack,std::complex<float> >
120 typedef Kokkos::complex<double> type;
121 typedef double magnitude_type;
125struct TypeMap<Umfpack,std::complex<double> >
127 typedef Kokkos::complex<double> type;
128 typedef double magnitude_type;