GPL + CeCILL Header change
[scilab.git] / scilab / modules / linear_algebra / includes / sas_schur.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2009 - DIGITEO - Bernard HUGUENEY
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  * === LICENSE_END ===
14  *
15  */
16 #ifndef SAS_SCHUR_H
17 #define SAS_SCHUR_H
18
19 #include "doublecomplex.h"
20
21
22 typedef int (*zgges_select_t)(doublecomplex const* alpha, doublecomplex const* beta);
23 typedef int (*dgges_select_t)(double const* alphaReal, double const* alphaImg, double const* beta);
24 typedef int (*zgees_select_t)(doublecomplex const* w);
25 typedef int (*dgees_select_t)(double const* wReal, double const* wImg);
26
27 typedef union schur_function_ptr
28 {
29     void (*none)(void);
30     zgges_select_t zgges_select;
31     dgges_select_t dgges_select;
32     zgees_select_t zgees_select;
33     dgees_select_t dgees_select;
34 } schur_select_type;
35
36
37
38 /*
39  * computes Schur decomposition of matrix . Does not (yet) handle pencil or ordered variants using external functions !
40  *
41  * in/out data :
42  *
43  * @param pData1 double[complex]* in/out data of the real or complex ('z' format) arg1 matrix. output : schur
44  * @param pData2 double[complex]* in/out data of the real or complex ('z' format) arg2 matrix.
45  * NULL if only one argument matrix. output: generalized schur form of arg2.
46  *
47  * in :
48  *
49  * @param iCols int in : nb of rows/cols of the matrices
50  * @param complexArgs int (boolean semantics) in : indicates wheter the argument[s] matrix is|are complex or real
51  *
52  * out data :
53  *
54  * @param pLhsOpt1 double[complex]* out : result of the optional lhs : [|left] schur vectors for [1|2] argument[|s].
55  * NULL if optional lhs are not to be computed
56  * @param pLhsOpt2 double[complex]* out : result of the optional right schur vectors (only used with 2 arguments).
57  *
58  * @return error code : 0 if OK, -1 if MALLOC failure, LAPACK error code otherwise.
59  *
60  */
61 int iSchurM(double* pData1, double* pData2, int iCols, int complexArgs, double* pLhsOpt1, double* pLhsOpt2, schur_select_type pSelectFun, int* pDim);
62
63
64
65
66
67
68 extern int zb02ow(doublecomplex const* alpha, doublecomplex const* beta);
69 extern int zb02ox(doublecomplex const* alpha, doublecomplex const* beta);
70
71 extern int sb02ow(double const* alphaReal, double const* alphaImg, double const* beta);
72 extern int sb02ox(double const* alphaReal, double const* alphaImg, double const* beta);
73
74 extern int zb02mv(doublecomplex const* w);
75 extern int zb02mw(doublecomplex const* w);
76
77 extern int sb02mv(double const* wReal, double const* wImg);
78 extern int sb02mw(double const* wReal, double const* wImg);
79
80 #endif