1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_BLAS_COMMON_H 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_BLAS_COMMON_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 137faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include <Eigen/Core> 147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include <Eigen/Jacobi> 157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream> 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <complex> 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef SCALAR 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#error the token SCALAR must be defined to compile this file 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/src/misc/blas.h> 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define NOTR 0 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define TR 1 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define ADJ 2 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define LEFT 0 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define RIGHT 1 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define UP 0 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define LO 1 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define NUNIT 0 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define UNIT 1 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define INVALID 0xff 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define OP(X) ( ((X)=='N' || (X)=='n') ? NOTR \ 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ((X)=='T' || (X)=='t') ? TR \ 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ((X)=='C' || (X)=='c') ? ADJ \ 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : INVALID) 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define SIDE(X) ( ((X)=='L' || (X)=='l') ? LEFT \ 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ((X)=='R' || (X)=='r') ? RIGHT \ 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : INVALID) 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define UPLO(X) ( ((X)=='U' || (X)=='u') ? UP \ 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ((X)=='L' || (X)=='l') ? LO \ 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : INVALID) 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 547faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#define DIAG(X) ( ((X)=='N' || (X)=='n') ? NUNIT \ 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ((X)=='U' || (X)=='u') ? UNIT \ 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : INVALID) 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool check_op(const char* op) 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return OP(*op)!=0xff; 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool check_side(const char* side) 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return SIDE(*side)!=0xff; 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline bool check_uplo(const char* uplo) 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return UPLO(*uplo)!=0xff; 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "BandTriangularSolver.h" 777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "GeneralRank1Update.h" 787faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "PackedSelfadjointProduct.h" 797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "PackedTriangularMatrixVector.h" 807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "PackedTriangularSolverVector.h" 817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include "Rank2Update.h" 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen; 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef SCALAR Scalar; 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef NumTraits<Scalar>::Real RealScalar; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef std::complex<RealScalar> Complex; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathenum 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath IsComplex = Eigen::NumTraits<SCALAR>::IsComplex, 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Conj = IsComplex 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Matrix<Scalar,Dynamic,Dynamic,ColMajor> PlainMatrixType; 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Map<Matrix<Scalar,Dynamic,Dynamic,ColMajor>, 0, OuterStride<> > MatrixType; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Map<Matrix<Scalar,Dynamic,1>, 0, InnerStride<Dynamic> > StridedVectorType; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Map<Matrix<Scalar,Dynamic,1> > CompactVectorType; 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathMap<Matrix<T,Dynamic,Dynamic,ColMajor>, 0, OuterStride<> > 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathmatrix(T* data, int rows, int cols, int stride) 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Map<Matrix<T,Dynamic,Dynamic,ColMajor>, 0, OuterStride<> >(data, rows, cols, OuterStride<>(stride)); 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathMap<Matrix<T,Dynamic,1>, 0, InnerStride<Dynamic> > vector(T* data, int size, int incr) 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Map<Matrix<T,Dynamic,1>, 0, InnerStride<Dynamic> >(data, size, InnerStride<Dynamic>(incr)); 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathMap<Matrix<T,Dynamic,1> > vector(T* data, int size) 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Map<Matrix<T,Dynamic,1> >(data, size); 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathT* get_compact_vector(T* x, int n, int incx) 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(incx==1) 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath T* ret = new Scalar[n]; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(incx<0) vector(ret,n) = vector(x,n,-incx).reverse(); 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else vector(ret,n) = vector(x,n, incx); 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return ret; 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathT* copy_back(T* x_cpy, T* x, int n, int incx) 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(x_cpy==x) 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return 0; 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(incx<0) vector(x,n,-incx).reverse() = vector(x_cpy,n); 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else vector(x,n, incx) = vector(x_cpy,n); 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return x_cpy; 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_BLAS_FUNC(X) EIGEN_CAT(SCALAR_SUFFIX,X##_) 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_BLAS_COMMON_H 146