57 #ifndef AMESOS2_SUPERLUDIST_TYPEMAP_HPP 58 #define AMESOS2_SUPERLUDIST_TYPEMAP_HPP 62 #include <Teuchos_as.hpp> 63 #ifdef HAVE_TEUCHOS_COMPLEX 64 #include <Teuchos_SerializationTraits.hpp> 67 #include "Amesos2_TypeMap.hpp" 74 #define USER_FREE(addr) SLUD::superlu_free_dist(addr) 78 #undef __SUPERLU_SUPERMATRIX 79 #include "superlu_defs.h" 81 #if SUPERLU_DIST_MAJOR_VERSION > 4 82 typedef superlu_dist_options_t amesos2_superlu_dist_options_t;
83 typedef superlu_dist_mem_usage_t amesos2_superlu_dist_mem_usage_t;
84 #define AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER 1 86 typedef superlu_options_t amesos2_superlu_dist_options_t;
87 typedef mem_usage_t amesos2_superlu_dist_mem_usage_t;
91 #include "superlu_ddefs.h" 94 #if defined(HAVE_TEUCHOS_COMPLEX) && !defined(__clang__) 96 #include "superlu_zdefs.h" 98 #endif // HAVE_TEUCHOS_COMPLEX 101 #if defined(HAVE_TEUCHOS_COMPLEX) && !defined(__clang__) 105 template <
typename slu_scalar_t,
typename slu_mag_t>
106 struct slu_mt_mult {};
110 template <
typename T>
111 struct slu_mt_mult<T,T> : std::multiplies<T> {};
115 struct slu_mt_mult<Z::doublecomplex,double>
116 : std::binary_function<Z::doublecomplex,double,Z::doublecomplex> {
117 Z::doublecomplex operator()(Z::doublecomplex amesos_z,
double amesos_d) {
118 Z::doublecomplex amesos_zr;
119 zd_mult(&amesos_zr, &amesos_z, amesos_d);
125 struct slu_mt_mult<Z::doublecomplex,Z::doublecomplex>
126 : std::binary_function<Z::doublecomplex,Z::doublecomplex,Z::doublecomplex> {
127 Z::doublecomplex operator()(Z::doublecomplex amesos_z1, Z::doublecomplex amesos_z2) {
128 Z::doublecomplex amesos_zr;
129 zz_mult(&amesos_zr, &amesos_z1, &amesos_z2);
133 #endif // HAVE_TEUCHOS_COMPLEX 135 #if defined(HAVE_TEUCHOS_COMPLEX) && !defined(__clang__) 151 template <
typename TypeFrom>
152 class ValueTypeConversionTraits<
SLUD::Z::doublecomplex, TypeFrom>
155 static SLUD::Z::doublecomplex convert(
const TypeFrom t )
157 SLUD::Z::doublecomplex ret;
158 ret.r = Teuchos::as<double>(t.real());
159 ret.i = Teuchos::as<double>(t.imag());
163 static SLUD::Z::doublecomplex safeConvert(
const TypeFrom t )
165 SLUD::Z::doublecomplex ret;
166 ret.r = Teuchos::as<double>(t.real());
167 ret.i = Teuchos::as<double>(t.imag());
174 template <
typename TypeTo>
175 class ValueTypeConversionTraits<TypeTo,
SLUD::Z::doublecomplex>
178 static TypeTo convert(
const SLUD::Z::doublecomplex t )
180 typedef typename TypeTo::value_type value_type;
181 value_type ret_r = Teuchos::as<value_type>( t.r );
182 value_type ret_i = Teuchos::as<value_type>( t.i );
183 return ( TypeTo( ret_r, ret_i ) );
187 static TypeTo safeConvert(
const SLUD::Z::doublecomplex t )
189 typedef typename TypeTo::value_type value_type;
190 value_type ret_r = Teuchos::as<value_type>( t.r );
191 value_type ret_i = Teuchos::as<value_type>( t.i );
192 return ( TypeTo( ret_r, ret_i ) );
196 template <
typename Ordinal>
197 class SerializationTraits<Ordinal,
SLUD::Z::doublecomplex>
198 :
public DirectSerializationTraits<Ordinal,SLUD::Z::doublecomplex>
214 ostream& operator<<(ostream& out,
const SLUD::Z::doublecomplex z);
218 #endif // HAVE_TEUCHOS_COMPLEX 224 template <
class,
class>
class Superludist;
231 struct TypeMap<Superludist,double>
233 static const SLUD::Dtype_t dtype = SLUD::SLU_D;
235 typedef double magnitude_type;
236 typedef SLUD::D::LUstruct_t LUstruct_t;
237 typedef SLUD::D::SOLVEstruct_t SOLVEstruct_t;
240 #if defined(HAVE_TEUCHOS_COMPLEX) && !defined(__clang__) 242 struct TypeMap<Superludist,
std::complex<double> >
244 static const SLUD::Dtype_t dtype = SLUD::SLU_Z;
245 typedef SLUD::Z::doublecomplex type;
246 typedef double magnitude_type;
247 typedef SLUD::Z::LUstruct_t LUstruct_t;
248 typedef SLUD::Z::SOLVEstruct_t SOLVEstruct_t;
255 struct TypeMap<Superludist,
SLUD::Z::doublecomplex>
257 static const SLUD::Dtype_t dtype = SLUD::SLU_Z;
258 typedef SLUD::Z::doublecomplex type;
259 typedef double magnitude_type;
260 typedef SLUD::Z::LUstruct_t LUstruct_t;
261 typedef SLUD::Z::SOLVEstruct_t SOLVEstruct_t;
264 #endif // HAVE_TEUCHOS_COMPLEX 271 #endif // AMESOS2_SUPERLUDIST_TYPEMAP_HPP
Definition: Amesos2_AbstractConcreteMatrixAdapter.hpp:48
Definition: Amesos2_Umfpack_TypeMap.hpp:60
Definition: Amesos2_Superludist_TypeMap.hpp:69