1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/*
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Copyright (c) 2011, Intel Corporation. All rights reserved.
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Redistribution and use in source and binary forms, with or without modification,
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath are permitted provided that the following conditions are met:
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Redistributions of source code must retain the above copyright notice, this
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   list of conditions and the following disclaimer.
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Redistributions in binary form must reproduce the above copyright notice,
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   this list of conditions and the following disclaimer in the documentation
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   and/or other materials provided with the distribution.
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Neither the name of Intel Corporation nor the names of its contributors may
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   be used to endorse or promote products derived from this software without
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   specific prior written permission.
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ********************************************************************************
282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang *   Content : Eigen bindings to LAPACKe
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *    Householder QR decomposition of a matrix w/o pivoting based on
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *    LAPACKE_?geqrf function.
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ********************************************************************************
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath*/
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#ifndef EIGEN_QR_LAPACKE_H
352b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#define EIGEN_QR_LAPACKE_H
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen {
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangnamespace internal {
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
412b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang/** \internal Specialization for the data types supported by LAPACKe */
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
432b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#define EIGEN_LAPACKE_QR_NOPIV(EIGTYPE, LAPACKE_TYPE, LAPACKE_PREFIX) \
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixQR, typename HCoeffs> \
45a829215e078ace896f52702caa0c27608f40e3b0Miao Wangstruct householder_qr_inplace_blocked<MatrixQR, HCoeffs, EIGTYPE, true> \
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ \
472b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index = 32, \
48a829215e078ace896f52702caa0c27608f40e3b0Miao Wang      typename MatrixQR::Scalar* = 0) \
49a829215e078ace896f52702caa0c27608f40e3b0Miao Wang  { \
50a829215e078ace896f52702caa0c27608f40e3b0Miao Wang    lapack_int m = (lapack_int) mat.rows(); \
51a829215e078ace896f52702caa0c27608f40e3b0Miao Wang    lapack_int n = (lapack_int) mat.cols(); \
52a829215e078ace896f52702caa0c27608f40e3b0Miao Wang    lapack_int lda = (lapack_int) mat.outerStride(); \
53a829215e078ace896f52702caa0c27608f40e3b0Miao Wang    lapack_int matrix_order = (MatrixQR::IsRowMajor) ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \
542b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    LAPACKE_##LAPACKE_PREFIX##geqrf( matrix_order, m, n, (LAPACKE_TYPE*)mat.data(), lda, (LAPACKE_TYPE*)hCoeffs.data()); \
55a829215e078ace896f52702caa0c27608f40e3b0Miao Wang    hCoeffs.adjointInPlace(); \
56a829215e078ace896f52702caa0c27608f40e3b0Miao Wang  } \
57a829215e078ace896f52702caa0c27608f40e3b0Miao Wang};
58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao WangEIGEN_LAPACKE_QR_NOPIV(double, double, d)
602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao WangEIGEN_LAPACKE_QR_NOPIV(float, float, s)
612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao WangEIGEN_LAPACKE_QR_NOPIV(dcomplex, lapack_complex_double, z)
622b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao WangEIGEN_LAPACKE_QR_NOPIV(scomplex, lapack_complex_float, c)
63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
682b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#endif // EIGEN_QR_LAPACKE_H
69