44#ifndef AMESOS2_UMFPACK_TYPEMAP_HPP
45#define AMESOS2_UMFPACK_TYPEMAP_HPP
48#ifdef HAVE_TEUCHOS_COMPLEX
52#include <Teuchos_as.hpp>
53#ifdef HAVE_TEUCHOS_COMPLEX
54#include <Teuchos_SerializationTraits.hpp>
57#include "Amesos2_TypeMap.hpp"
73#ifdef HAVE_TEUCHOS_COMPLEX
76template <
typename TypeFrom>
77class ValueTypeConversionTraits<std::complex<double>, TypeFrom>
80 static std::complex<double> convert(
const TypeFrom t )
82 return std::complex<double>(
83 Teuchos::as<double>(t.real()),
84 Teuchos::as<double>(t.imag()));
87 static std::complex<double> safeConvert(
const TypeFrom t )
89 return std::complex<double>(
90 Teuchos::as<double>(t.real()),
91 Teuchos::as<double>(t.imag()));
97template <
typename TypeTo>
98class ValueTypeConversionTraits<TypeTo, std::complex<double>>
101 static TypeTo convert(
const std::complex<double> t )
103 typedef typename TypeTo::value_type value_type;
104 value_type ret_r = Teuchos::as<value_type>( t.real() );
105 value_type ret_i = Teuchos::as<value_type>( t.imag() );
106 return ( TypeTo( ret_r, ret_i ) );
110 static TypeTo safeConvert(
const std::complex<double> t )
112 typedef typename TypeTo::value_type value_type;
113 value_type ret_r = Teuchos::as<value_type>( t.real() );
114 value_type ret_i = Teuchos::as<value_type>( t.imag() );
115 return ( TypeTo( ret_r, ret_i ) );
127template <
class,
class>
class Umfpack;
135struct TypeMap<Umfpack,float>
138 typedef double magnitude_type;
142struct TypeMap<Umfpack,double>
145 typedef double magnitude_type;
149#ifdef HAVE_TEUCHOS_COMPLEX
152struct TypeMap<Umfpack,std::complex<float> >
154 typedef std::complex<double> type;
155 typedef double magnitude_type;
159struct TypeMap<Umfpack,std::complex<double> >
161 typedef std::complex<double> type;
162 typedef double magnitude_type;