1 /*
  2  *   Copyright (c) 2011, Michael Lehn
  3  *
  4  *   All rights reserved.
  5  *
  6  *   Redistribution and use in source and binary forms, with or without
  7  *   modification, are permitted provided that the following conditions
  8  *   are met:
  9  *
 10  *   1) Redistributions of source code must retain the above copyright
 11  *      notice, this list of conditions and the following disclaimer.
 12  *   2) Redistributions in binary form must reproduce the above copyright
 13  *      notice, this list of conditions and the following disclaimer in
 14  *      the documentation and/or other materials provided with the
 15  *      distribution.
 16  *   3) Neither the name of the FLENS development group nor the names of
 17  *      its contributors may be used to endorse or promote products derived
 18  *      from this software without specific prior written permission.
 19  *
 20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 23  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 24  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 25  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 26  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 27  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 28  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 29  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 30  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 31  */
 32 
 33 /* Based on
 34  *
 35        SUBROUTINE DTRSEN( JOB, COMPQ, SELECT, N, T, LDT, Q, LDQ, WR, WI,
 36       $                   M, S, SEP, WORK, LWORK, IWORK, LIWORK, INFO )
 37  *
 38  *  -- LAPACK routine (version 3.3.1) --
 39  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 40  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 41  *  -- April 2011                                                      --
 42  *
 43  */
 44 
 45 #ifndef FLENS_LAPACK_EIG_TRSEN_H
 46 #define FLENS_LAPACK_EIG_TRSEN_H 1
 47 
 48 #include <cmath>
 49 #include <flens/matrixtypes/matrixtypes.h>
 50 #include <flens/vectortypes/vectortypes.h>
 51 
 52 namespace flens { namespace lapack {
 53 
 54 namespace TRSEN {
 55 
 56     enum Job {
 57         None = 'N',                 // = 'N': none;
 58         EigenvaluesOnly = 'E',      // = 'E': for eigenvalues only (S);
 59         InvariantSubspaceOnly = 'V',// = 'V': for invariant subspace only (SEP);
 60         Both = 'B'                  // = 'B': for both eigenvalues and invariant
 61                                     //        subspace (S and SEP).
 62     };
 63 
 64 }
 65 
 66 //== trsen =====================================================================
 67 
 68 template <typename SELECT, typename MT, typename MQ, typename WR, typename WI,
 69           typename IndexType, typename S, typename SEP,
 70           typename WORK, typename IWORK>
 71     IndexType
 72     trsen(TRSEN::Job                job,
 73           bool                      computeQ,
 74           const DenseVector<SELECT> &select,
 75           GeMatrix<MT>              &T,
 76           GeMatrix<MQ>              &Q,
 77           DenseVector<WR>           &wr,
 78           DenseVector<WI>           &wi,
 79           IndexType                 &m,
 80           S                         &s,
 81           SEP                       &sep,
 82           DenseVector<WORK>         &work,
 83           DenseVector<IWORK>        &iwork);
 84 
 85 //-- forwarding ----------------------------------------------------------------
 86 
 87 template <typename SELECT, typename MT, typename MQ, typename WR, typename WI,
 88           typename IndexType, typename S, typename SEP,
 89           typename WORK, typename IWORK>
 90     IndexType
 91     trsen(TRSEN::Job                job,
 92           bool                      computeQ,
 93           const DenseVector<SELECT> &select,
 94           MT                        &&T,
 95           MQ                        &&Q,
 96           WR                        &&wr,
 97           WI                        &&wi,
 98           IndexType                 &&m,
 99           S                         &&s,
100           SEP                       &&sep,
101           WORK                      &&work,
102           IWORK                     &&iwork);
103 
104 } } // namespace lapack, flens
105 
106 #endif // FLENS_LAPACK_EIG_TRSEN_H