./PaxHeaders.3947/control-3.2.0 0000644 0000000 0000000 00000000132 13450727360 012746 x ustar 00 30 mtime=1554231024.597428938
30 atime=1554231028.525576056
30 ctime=1554231028.525576056
control-3.2.0/ 0000755 0001750 0001750 00000000000 13450727360 013127 5 ustar 00olaf olaf 0000000 0000000 control-3.2.0/PaxHeaders.3947/src 0000644 0000000 0000000 00000000132 13450727364 013404 x ustar 00 30 mtime=1554231028.525576056
30 atime=1554231028.525576056
30 ctime=1554231028.525576056
control-3.2.0/src/ 0000755 0001750 0001750 00000000000 13450727364 013722 5 ustar 00olaf olaf 0000000 0000000 control-3.2.0/src/PaxHeaders.3947/sl_sb10ad.cc 0000644 0000000 0000000 00000000132 13450727360 015534 x ustar 00 30 mtime=1554231024.705433061
30 atime=1554231024.705433061
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10ad.cc 0000644 0001750 0001750 00000021350 13450727360 015776 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2014-2015 Thomas Vasileiou
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
H-infinity optimal controller using modified Glover's and Doyle's
formulas (continuous-time).
Uses SLICOT SB10AD by courtesy of NICONET e.V.
Author: Thomas Vasileiou
Created: January 2014
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10ad, SB10AD)
(F77_INT& JOB,
F77_INT& N, F77_INT& M, F77_INT& NP,
F77_INT& NCON, F77_INT& NMEAS,
double& GAMMA,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* AK, F77_INT& LDAK,
double* BK, F77_INT& LDBK,
double* CK, F77_INT& LDCK,
double* DK, F77_INT& LDDK,
double* AC, F77_INT& LDAC,
double* BC, F77_INT& LDBC,
double* CC, F77_INT& LDCC,
double* DC, F77_INT& LDDC,
double* RCOND,
double& GTOL, double& ACTOL,
F77_INT* IWORK, F77_INT& LIWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK, F77_INT& LBWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10ad__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10ad__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10AD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 9)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
F77_INT ncon = args(4).int_value ();
F77_INT nmeas = args(5).int_value ();
double gamma = args(6).double_value ();
double gtol = args(7).double_value ();
double actol = args(8).double_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT np = TO_F77_INT (c.rows ()); // np: number of outputs
F77_INT lda = max (1, TO_F77_INT (a.rows ()));
F77_INT ldb = max (1, TO_F77_INT (b.rows ()));
F77_INT ldc = max (1, TO_F77_INT (c.rows ()));
F77_INT ldd = max (1, TO_F77_INT (d.rows ()));
F77_INT ldak = max (1, n);
F77_INT ldbk = max (1, n);
F77_INT ldck = max (1, ncon);
F77_INT lddk = max (1, ncon);
F77_INT ldac = max (1, 2*n);
F77_INT ldbc = max (1, 2*n);
F77_INT ldcc = max (1, np-nmeas);
F77_INT lddc = max (1, np-nmeas);
F77_INT job = 1;
// arguments out
Matrix ak (ldak, n);
Matrix bk (ldbk, nmeas);
Matrix ck (ldck, n);
Matrix dk (lddk, nmeas);
Matrix ac (ldac, 2*n);
Matrix bc (ldbc, m-ncon);
Matrix cc (ldcc, 2*n);
Matrix dc (lddc, m-ncon);
ColumnVector rcond (4);
// workspace
F77_INT m2 = ncon;
F77_INT m1 = m - m2;
F77_INT np2 = nmeas;
F77_INT np1 = np - np2;
F77_INT nd1 = np1 - m2;
F77_INT nd2 = m1 - np2;
F77_INT liwork = max (2*max (n, m-ncon, np-nmeas, ncon, nmeas), n*n);
F77_INT lw1 = n*m + np*n + np*m + m2*m2 + np2*np2;
F77_INT lw2 = max ((n + np1 + 1)*(n + m2) +
max (3*(n + m2) + n + np1, 5*(n + m2)),
(n + np2)*(n + m1 + 1) +
max (3*(n + np2) + n + m1, 5*(n + np2)),
m2 + np1*np1 +
max (np1*max (n, m1), 3*m2 + np1, 5*m2),
np2 + m1*m1 +
max (max (n, np1)*m1, 3*np2 + m1, 5*np2));
F77_INT lw3 = max (nd1*m1 + max (4*min (nd1, m1) + max (nd1,m1),
6*min (nd1, m1)), np1*nd2 +
max (4*min (np1, nd2) + max (np1, nd2),
6*min (np1, nd2)));
F77_INT lw4 = 2*m*m + np*np + 2*m*n + m*np + 2*n*np;
F77_INT lw5 = 2*n*n + m*n + n*np;
F77_INT lw6 = max (m*m + max (2*m1, 3*n*n +
max (n*m, 10*n*n + 12*n + 5)),
np*np + max (2*np1, 3*n*n +
max (n*np, 10*n*n + 12*n + 5)));
F77_INT lw7 = m2*np2 + np2*np2 + m2*m2 +
max (nd1*nd1 + max (2*nd1, (nd1 + nd2)*np2),
nd2*nd2 + max (2*nd2, nd2*m2), 3*n,
n*(2*np2 + m2) +
max (2*n*m2, m2*np2 +
max (m2*m2 + 3*m2, np2*(2*np2 + m2 + max (np2, n)))));
F77_INT ldwork = lw1 + max (1, lw2, lw3, lw4, lw5 + max (lw6,lw7));
F77_INT lbwork = 2*n;
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, lbwork);
// error indicator
F77_INT info;
// SLICOT routine SB10AD
F77_XFCN (sb10ad, SB10AD,
(job,
n, m, np,
ncon, nmeas,
gamma,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
ak.fortran_vec (), ldak,
bk.fortran_vec (), ldbk,
ck.fortran_vec (), ldck,
dk.fortran_vec (), lddk,
ac.fortran_vec (), ldac,
bc.fortran_vec (), ldbc,
cc.fortran_vec (), ldcc,
dc.fortran_vec (), lddc,
rcond.fortran_vec (),
gtol, actol,
iwork, liwork,
dwork, ldwork,
bwork, lbwork,
info));
if (f77_exception_encountered)
error ("hinfsyn: __sl_sb10ad__: exception in SLICOT subroutine SB10AD");
static const char* err_msg[] = {
"0: successful exit",
"1: the matrix [A-j*omega*I, B2; C1, D12] had "
"not full column rank in respect to the tolerance EPS",
"2: the matrix [A-j*omega*I, B1; C2, D21] "
"had not full row rank in respect to the tolerance EPS",
"3: the matrix D12 had not full column rank in "
"respect to the tolerance SQRT(EPS)",
"4: the matrix D21 had not full row rank in respect "
"to the tolerance SQRT(EPS)",
"5: the singular value decomposition (SVD) algorithm "
"did not converge (when computing the SVD of one of the matrices "
"[A, B2; C1, D12], [A, B1; C2, D21], D12 or D21)",
"6: the controller is not admissible (too small value "
"of gamma)",
"7: the X-Riccati equation was not solved "
"successfully (the controller is not admissible or "
"there are numerical difficulties)",
"8: the Y-Riccati equation was not solved "
"successfully (the controller is not admissible or "
"there are numerical difficulties)",
"9: the determinant of Im2 + Tu*D11HAT*Ty*D22 is "
"zero [3]",
"10: there was numerical problems when estimating"
"the singular values of D1111, D1112, D1111', D1121'",
"11: the matrices Inp2 - D22*DK or Im2 - DK*D22"
"are singular to working precision",
"12: a stabilizing controller cannot be found"};
error_msg ("hinfsyn", info, 12, err_msg);
// return values
retval(0) = ak;
retval(1) = bk;
retval(2) = ck;
retval(3) = dk;
retval(4) = ac;
retval(5) = bc;
retval(6) = cc;
retval(7) = dc;
retval(8) = gamma;
retval(9) = rcond;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sb10fd.cc 0000644 0000000 0000000 00000000132 13450727360 015541 x ustar 00 30 mtime=1554231024.709433214
30 atime=1554231024.709433214
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10fd.cc 0000644 0001750 0001750 00000014474 13450727360 016014 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
H-infinity (sub)optimal state controller for a continuous-time system.
Uses SLICOT SB10FD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: December 2009
Version: 0.6
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10fd, SB10FD)
(F77_INT& N, F77_INT& M, F77_INT& NP,
F77_INT& NCON, F77_INT& NMEAS,
double& GAMMA,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* AK, F77_INT& LDAK,
double* BK, F77_INT& LDBK,
double* CK, F77_INT& LDCK,
double* DK, F77_INT& LDDK,
double* RCOND,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10fd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10fd__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10FD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 7)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
F77_INT ncon = args(4).int_value ();
F77_INT nmeas = args(5).int_value ();
double gamma = args(6).double_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT np = TO_F77_INT (c.rows ()); // np: number of outputs
F77_INT lda = max (1, TO_F77_INT (a.rows ()));
F77_INT ldb = max (1, TO_F77_INT (b.rows ()));
F77_INT ldc = max (1, TO_F77_INT (c.rows ()));
F77_INT ldd = max (1, TO_F77_INT (d.rows ()));
F77_INT ldak = max (1, n);
F77_INT ldbk = max (1, n);
F77_INT ldck = max (1, ncon);
F77_INT lddk = max (1, ncon);
double tol = 0;
// arguments out
Matrix ak (ldak, n);
Matrix bk (ldbk, nmeas);
Matrix ck (ldck, n);
Matrix dk (lddk, nmeas);
ColumnVector rcond (4);
// workspace
F77_INT m2 = ncon;
F77_INT m1 = m - m2;
F77_INT np1 = np - nmeas;
F77_INT np2 = nmeas;
F77_INT liwork = max (2*max (n, m-ncon, np-nmeas, ncon), n*n);
F77_INT q = max (m1, m2, np1, np2);
F77_INT ldwork = 2*q*(3*q+2*n) + max (1, (n+q)*(n+q+6), q*(q + max (n, q, 5) + 1),
2*n*(n+2*q) + max (1, 4*q*q +
max (2*q, 3*n*n + max (2*n*q, 10*n*n+12*n+5)),
q*(3*n + 3*q + max (2*n, 4*q + max (n, q)))));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT info;
// SLICOT routine SB10FD
F77_XFCN (sb10fd, SB10FD,
(n, m, np,
ncon, nmeas,
gamma,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
ak.fortran_vec (), ldak,
bk.fortran_vec (), ldbk,
ck.fortran_vec (), ldck,
dk.fortran_vec (), lddk,
rcond.fortran_vec (),
tol,
iwork,
dwork, ldwork,
bwork,
info));
if (f77_exception_encountered)
error ("hinfsyn: __sl_sb10fd__: exception in SLICOT subroutine SB10FD");
static const char* err_msg[] = {
"0: OK",
"1: the matrix [A-j*omega*I, B2; C1, D12] had "
"not full column rank in respect to the tolerance EPS",
"2: the matrix [A-j*omega*I, B1; C2, D21] "
"had not full row rank in respect to the tolerance EPS",
"3: the matrix D12 had not full column rank in "
"respect to the tolerance TOL",
"4: the matrix D21 had not full row rank in respect "
"to the tolerance TOL",
"5: the singular value decomposition (SVD) algorithm "
"did not converge (when computing the SVD of one of the matrices "
"[A, B2; C1, D12], [A, B1; C2, D21], D12 or D21)",
"6: the controller is not admissible (too small value "
"of gamma)",
"7: the X-Riccati equation was not solved "
"successfully (the controller is not admissible or "
"there are numerical difficulties)",
"8: the Y-Riccati equation was not solved "
"successfully (the controller is not admissible or "
"there are numerical difficulties)",
"9: the determinant of Im2 + Tu*D11HAT*Ty*D22 is "
"zero [3]"};
error_msg ("hinfsyn", info, 9, err_msg);
// return values
retval(0) = ak;
retval(1) = bk;
retval(2) = ck;
retval(3) = dk;
retval(4) = rcond;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/is_zp_vector.cc 0000644 0000000 0000000 00000000132 13450727360 016472 x ustar 00 30 mtime=1554231024.673431839
30 atime=1554231024.673431839
30 ctime=1554231028.525576056
control-3.2.0/src/is_zp_vector.cc 0000644 0001750 0001750 00000003621 13450727360 016735 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments zero-pole vectors and false otherwise.
Author: Lukas Reichlin
Created: October 2015
Version: 0.1
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_zp_vector", "__control_helper_functions__.oct");
DEFUN_DLD (is_zp_vector, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_zp_vector (@var{a}, @dots{})\n\
Return true if all arguments are zero-pole vectors and false otherwise.\n\
@var{[]} is a valid zero-pole vector.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_matrix, is_real_square_matrix, is_real_vector, is_real_scalar}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2
|| (args(i).rows () > 1 && args(i).columns () > 1)
|| ! args(i).OV_ISNUMERIC ()
|| ! (args(i).OV_ISCOMPLEX () || args(i).OV_ISREAL()))
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sg03bd.cc 0000644 0000000 0000000 00000000132 13450727360 015544 x ustar 00 30 mtime=1554231024.725433824
30 atime=1554231024.725433824
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sg03bd.cc 0000644 0001750 0001750 00000007632 13450727360 016015 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Square-root solver for generalized Lyapunov equations.
Uses SLICOT SG03BD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: September 2010
Version: 0.3
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sg03bd, SG03BD)
(char& DICO, char& FACT, char& TRANS,
F77_INT& N, F77_INT& M,
double* A, F77_INT& LDA,
double* E, F77_INT& LDE,
double* Q, F77_INT& LDQ,
double* Z, F77_INT& LDZ,
double* B, F77_INT& LDB,
double& SCALE,
double* ALPHAR, double* ALPHAI,
double* BETA,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sg03bd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sg03bd__, args, nargout,
"-*- texinfo -*-\n\
Slicot SG03BD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 4)
{
print_usage ();
}
else
{
// arguments in
char dico;
char fact = 'N';
char trans = 'N';
Matrix a = args(0).matrix_value ();
Matrix e = args(1).matrix_value ();
Matrix b = args(2).matrix_value ();
F77_INT discrete = args(3).int_value ();
if (discrete == 0)
dico = 'C';
else
dico = 'D';
F77_INT n = TO_F77_INT (a.rows ());
F77_INT m = TO_F77_INT (b.rows ());
F77_INT lda = max (1, n);
F77_INT lde = max (1, n);
F77_INT ldq = max (1, n);
F77_INT ldz = max (1, n);
F77_INT ldb = max (1, m, n);
F77_INT n1 = max (m, n);
b.resize (ldb, n1);
// arguments out
double scale;
Matrix q (ldq, n);
Matrix z (ldz, n);
ColumnVector alphar (n);
ColumnVector alphai (n);
ColumnVector beta (n);
// workspace
F77_INT ldwork = max (1, 4*n, 6*n-6);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// SLICOT routine SG03BD
F77_XFCN (sg03bd, SG03BD,
(dico, fact, trans,
n, m,
a.fortran_vec (), lda,
e.fortran_vec (), lde,
q.fortran_vec (), ldq,
z.fortran_vec (), ldz,
b.fortran_vec (), ldb,
scale,
alphar.fortran_vec (), alphai.fortran_vec (),
beta.fortran_vec (),
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("lyap: __sl_sg03bd__: exception in SLICOT subroutine SG03BD");
if (info != 0)
error ("lyap: __sl_sg03bd__: SG03BD returned info = %d", info);
// resize
b.resize (n, n);
// return values
retval(0) = b; // b has been overwritten by cholesky factor u
retval(1) = octave_value (scale);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/aclocal.m4 0000644 0000000 0000000 00000000132 13450727363 015320 x ustar 00 30 mtime=1554231027.353532729
30 atime=1554231027.809549657
30 ctime=1554231028.525576056
control-3.2.0/src/aclocal.m4 0000644 0001750 0001750 00000001271 13450727363 015562 0 ustar 00olaf olaf 0000000 0000000 # generated automatically by aclocal 1.15 -*- Autoconf -*-
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
m4_include([m4/octave-forge.m4])
control-3.2.0/src/PaxHeaders.3947/m4 0000644 0000000 0000000 00000000132 13450727360 013720 x ustar 00 30 mtime=1554231024.673431839
30 atime=1554231028.525576056
30 ctime=1554231028.525576056
control-3.2.0/src/m4/ 0000755 0001750 0001750 00000000000 13450727360 014236 5 ustar 00olaf olaf 0000000 0000000 control-3.2.0/src/m4/PaxHeaders.3947/octave-forge.m4 0000644 0000000 0000000 00000000132 13450727360 016620 x ustar 00 30 mtime=1554231024.673431839
30 atime=1554231027.041521147
30 ctime=1554231028.525576056
control-3.2.0/src/m4/octave-forge.m4 0000644 0001750 0001750 00000005753 13450727360 017073 0 ustar 00olaf olaf 0000000 0000000 # Copyright (C) 2017 Olaf Till
# Modifications to print what is searching for by JohnD
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see .
# arguments of OF_OCTAVE_ALT_SYMS (see also description of
# OF_OCTAVE_LIST_ALT_SYMS below):
#
# $1: symbol version 1
# $2: symbol version 2
# $3: test for symbol version 2
# $4: macro name to access alternative symbols
# $5: include directives for symbol version 1
# $6: include directives for symbol version 2
# (a list of lists of args 1--6 is $1 of OF_OCTAVE_LIST_ALT_SYMS)
# $7: name of generated include file with alternatives of Octave headers
# (arg7 is $2 of OF_OCTAVE_LIST_ALT_SYMS)
AC_DEFUN([OF_OCTAVE_ALT_SYMS], [
AC_MSG_CHECKING([$1 or $2])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include ]
$6],
[$3])],
[AC_DEFINE($4,
[[$2]],
[macro for alternative Octave symbols])
AC_MSG_RESULT([$2])
echo '$6' >> $7],
[AC_DEFINE($4,
[[$1]],
[macro for alternative Octave symbols])
AC_MSG_RESULT([$1])
echo '$5' >> $7]
)
])
# OF_OCTAVE_LIST_ALT_SYMS is called in the following way:
#
# OF_OCTAVE_LIST_ALT_SYMS([
# [dnl
# [old_octave_symbol],
# [new_octave_symbol],
# [[compilation test]
# [for new_octave_symbol]],
# [NAME_OF_GENERATED_MACRO____WILL_EXPAND_TO_OLD_OR_NEW_SYMBOL],
# [[include directives]
# [except #include ]
# [necessary to compile with old_octave_symbol]],
# [[include directives]
# [except #include ]
# [nessary to compile with new_octave_symbol]
# [and to compile the test]]
# ],
#
# ... further such lists as the above
#
# ],
#
# [name-of-header-file-for-alternative-octave-iclude-directives.h])
#
#
# This file should be put into src/m4/, and the line
#
# AC_CONFIG_MACRO_DIRS([m4])
#
# should be put into src/configure.ac. The package should use
# autoheader to generate config.h.in (src/bootstrap should contain the
# lines 'aclocal', 'autoconf', and 'autoheader -f'). Package code
# should include config.h and use the generated macros to access the
# alternative symbols of Octave. An example of a call to
# OF_OCTAVE_LIST_ALT_SYMS in src/configure.ac is available together
# with this file.
AC_DEFUN([OF_OCTAVE_LIST_ALT_SYMS], [
echo '/* generated by configure */' > $2
m4_foreach([it], [$1], [m4_apply([OF_OCTAVE_ALT_SYMS], [it, $2])])
AH_BOTTOM([#include "$2"])
])
control-3.2.0/src/PaxHeaders.3947/sl_sb03md.cc 0000644 0000000 0000000 00000000132 13450727360 015552 x ustar 00 30 mtime=1554231024.701432908
30 atime=1554231024.701432908
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb03md.cc 0000644 0001750 0001750 00000007121 13450727360 016014 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Solution of Lyapunov equations.
Uses SLICOT SB03MD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: December 2009
Version: 0.4
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb03md, SB03MD)
(char& DICO, char& JOB,
char& FACT, char& TRANA,
F77_INT& N,
double* A, F77_INT& LDA,
double* U, F77_INT& LDU,
double* C, F77_INT& LDC,
double& SCALE,
double& SEP, double& FERR,
double* WR, double* WI,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb03md__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb03md__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB03MD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 3)
{
print_usage ();
}
else
{
// arguments in
char dico;
char job = 'X';
char fact = 'N';
char trana = 'T';
Matrix a = args(0).matrix_value ();
Matrix c = args(1).matrix_value ();
F77_INT discrete = args(2).int_value ();
if (discrete == 0)
dico = 'C';
else
dico = 'D';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT lda = max (1, n);
F77_INT ldu = max (1, n);
F77_INT ldc = max (1, n);
// arguments out
double scale;
double sep = 0;
double ferr = 0;
Matrix u (ldu, n);
ColumnVector wr (n);
ColumnVector wi (n);
// workspace
F77_INT* iwork = 0; // not referenced because job = X
F77_INT ldwork = max (n*n, 3*n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// SLICOT routine SB03MD
F77_XFCN (sb03md, SB03MD,
(dico, job,
fact, trana,
n,
a.fortran_vec (), lda,
u.fortran_vec (), ldu,
c.fortran_vec (), ldc,
scale,
sep, ferr,
wr.fortran_vec (), wi.fortran_vec (),
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("lyap: __sl_sb03md__: exception in SLICOT subroutine SB03MD");
if (info != 0)
error ("lyap: __sl_sb03md__: SB03MD returned info = %d", info);
// return values
retval(0) = c;
retval(1) = octave_value (scale);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/configure 0000644 0000000 0000000 00000000132 13450727363 015364 x ustar 00 30 mtime=1554231027.981556042
30 atime=1554231027.913553518
30 ctime=1554231028.525576056
control-3.2.0/src/configure 0000755 0001750 0001750 00000315075 13450727363 015643 0 ustar 00olaf olaf 0000000 0000000 #! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for control 3.2.0.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
&& (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='print -r --'
as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='printf %s\n'
as_echo_n='printf %s'
else
if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
as_echo_n='/usr/ucb/echo -n'
else
as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
as_echo_n_body='eval
arg=$1;
case $arg in #(
*"$as_nl"*)
expr "X$arg" : "X\\(.*\\)$as_nl";
arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
esac;
expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
'
export as_echo_n_body
as_echo_n='sh -c $as_echo_n_body as_echo'
fi
export as_echo_body
as_echo='sh -c $as_echo_body as_echo'
fi
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# IFS
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
$as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there. '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
&& ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
_as_can_reexec=no; export _as_can_reexec;
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
as_fn_exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
else
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
"
as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }
exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
else
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
if (eval "$as_required") 2>/dev/null; then :
as_have_required=yes
else
as_have_required=no
fi
if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
as_shell=$as_dir/$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
CONFIG_SHELL=$as_shell as_have_required=yes
if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
break 2
fi
fi
done;;
esac
as_found=false
done
$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
CONFIG_SHELL=$SHELL as_have_required=yes
fi; }
IFS=$as_save_IFS
if test "x$CONFIG_SHELL" != x; then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
if test x$as_have_required = xno; then :
$as_echo "$0: This script requires a shell more modern than all"
$as_echo "$0: the shells that I found on your system."
if test x${ZSH_VERSION+set} = xset ; then
$as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
$as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
fi
exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS
## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{
case $as_dir in #(
-*) as_dir=./$as_dir;;
esac
test -d "$as_dir" || eval $as_mkdir_p || {
as_dirs=
while :; do
case $as_dir in #(
*\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
} || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
else
as_fn_append ()
{
eval $1=\$$1\$2
}
fi # as_fn_append
# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
$as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
as_dirname=dirname
else
as_dirname=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
# in an infinite loop. This has already happened in practice.
_as_can_reexec=no; export _as_can_reexec
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
xy) ECHO_C='\c';;
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -pR'
fi
else
as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
fi
as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
test -n "$DJDIR" || exec 7<&0 &1
# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='control'
PACKAGE_TARNAME='control'
PACKAGE_VERSION='3.2.0'
PACKAGE_STRING='control 3.2.0'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
ac_unique_file="sl_ab01od.cc"
ac_subst_vars='LTLIBOBJS
LIBOBJS
OBJEXT
EXEEXT
ac_ct_CXX
CPPFLAGS
LDFLAGS
CXXFLAGS
CXX
OCTAVE_CONFIG
MKOCTFILE
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
runstatedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
'
ac_precious_vars='build_alias
host_alias
target_alias
CXX
CXXFLAGS
LDFLAGS
LIBS
CPPFLAGS
CCC'
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE
# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'
ac_prev=
ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval $ac_prev=\$ac_option
ac_prev=
continue
fi
case $ac_option in
*=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
*=) ac_optarg= ;;
*) ac_optarg=yes ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file=$ac_optarg ;;
--config-cache | -C)
cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
-datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
| --dataroo | --dataro | --datar)
ac_prev=datarootdir ;;
-datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
| --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
datarootdir=$ac_optarg ;;
-disable-* | --disable-*)
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=no ;;
-docdir | --docdir | --docdi | --doc | --do)
ac_prev=docdir ;;
-docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
docdir=$ac_optarg ;;
-dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
ac_prev=dvidir ;;
-dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he | -h)
ac_init_help=long ;;
-help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
ac_init_help=recursive ;;
-help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
ac_init_help=short ;;
-host | --host | --hos | --ho)
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
-htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
ac_prev=htmldir ;;
-htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
| --ht=*)
htmldir=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
-localedir | --localedir | --localedi | --localed | --locale)
ac_prev=localedir ;;
-localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
localedir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
-pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
ac_prev=pdfdir ;;
-pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
pdfdir=$ac_optarg ;;
-psdir | --psdir | --psdi | --psd | --ps)
ac_prev=psdir ;;
-psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
psdir=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-runstatedir | --runstatedir | --runstatedi | --runstated \
| --runstate | --runstat | --runsta | --runst | --runs \
| --run | --ru | --r)
ac_prev=runstatedir ;;
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
| --run=* | --ru=* | --r=*)
runstatedir=$ac_optarg ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers | -V)
ac_init_version=: ;;
-with-* | --with-*)
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=\$ac_optarg ;;
-without-* | --without-*)
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=no ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
-*) as_fn_error $? "unrecognized option: \`$ac_option'
Try \`$0 --help' for more information"
;;
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
case $ac_envvar in #(
'' | [0-9]* | *[!_$as_cr_alnum]* )
as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
$as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
$as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
esac
done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
as_fn_error $? "missing argument to $ac_option"
fi
if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
# Check all directory arguments for consistency.
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
case $ac_val in
*/ )
ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
eval $ac_var=\$ac_val;;
esac
# Be sure to have absolute directory names.
case $ac_val in
[\\/$]* | ?:[\\/]* ) continue;;
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias
# FIXME: To remove some day.
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
fi
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
as_fn_error $? "pwd does not report name of working directory"
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then the parent directory.
ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
eval ac_env_${ac_var}_set=\${${ac_var}+set}
eval ac_env_${ac_var}_value=\$${ac_var}
eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
eval ac_cv_env_${ac_var}_value=\$${ac_var}
done
#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures control 3.2.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print \`checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for \`--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/control]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
_ACEOF
fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of control 3.2.0:";;
esac
cat <<\_ACEOF
Some influential environment variables:
CXX C++ compiler command
CXXFLAGS C++ compiler flags
LDFLAGS linker flags, e.g. -L if you have libraries in a
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if
you have headers in a nonstandard directory
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to the package provider.
_ACEOF
ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
test -d "$ac_dir" ||
{ cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
continue
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix
case $srcdir in
.) # We are building in place.
ac_srcdir=.
ac_top_srcdir=$ac_top_builddir_sub
ac_abs_top_srcdir=$ac_pwd ;;
[\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
ac_top_srcdir=$srcdir
ac_abs_top_srcdir=$srcdir ;;
*) # Relative name.
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_build_prefix$srcdir
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
# Check for guested configure.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
elif test -f "$ac_srcdir/configure"; then
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
control configure 3.2.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
exit
fi
## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
# ac_fn_cxx_try_compile LINENO
# ----------------------------
# Try to compile conftest.$ac_ext, and return whether this succeeded.
ac_fn_cxx_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_cxx_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_compile
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by control $as_me 3.2.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
_ACEOF
exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##
hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
_ASUNAME
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
$as_echo "PATH: $as_dir"
done
IFS=$as_save_IFS
} >&5
cat >&5 <<_ACEOF
## ----------- ##
## Core tests. ##
## ----------- ##
_ACEOF
# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Strip out --silent because we don't want to record it for future runs.
# Also quote any args containing shell meta-characters.
# Make two passes to allow for proper duplicate-argument suppression.
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
ac_must_keep_next=false
for ac_pass in 1 2
do
for ac_arg
do
case $ac_arg in
-no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
2)
as_fn_append ac_configure_args1 " '$ac_arg'"
if test $ac_must_keep_next = true; then
ac_must_keep_next=false # Got value, back to normal.
else
case $ac_arg in
*=* | --config-cache | -C | -disable-* | --disable-* \
| -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
| -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
| -with-* | --with-* | -without-* | --without-* | --x)
case "$ac_configure_args0 " in
"$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
esac
;;
-* ) ac_must_keep_next=true ;;
esac
fi
as_fn_append ac_configure_args " '$ac_arg'"
;;
esac
done
done
{ ac_configure_args0=; unset ac_configure_args0;}
{ ac_configure_args1=; unset ac_configure_args1;}
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
echo
$as_echo "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
# The following way of writing the cache mishandles newlines in values,
(
for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
eval ac_val=\$$ac_var
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
*) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
(set) 2>&1 |
case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
sed -n \
"s/'\''/'\''\\\\'\'''\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
;; #(
*)
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
esac |
sort
)
echo
$as_echo "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
for ac_var in $ac_subst_vars
do
eval ac_val=\$$ac_var
case $ac_val in
*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
$as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
$as_echo "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
for ac_var in $ac_subst_files
do
eval ac_val=\$$ac_var
case $ac_val in
*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
$as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
$as_echo "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
$as_echo "$as_me: caught signal $ac_signal"
$as_echo "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
$as_echo "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
cat >>confdefs.h <<_ACEOF
#define PACKAGE_NAME "$PACKAGE_NAME"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION "$PACKAGE_VERSION"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_STRING "$PACKAGE_STRING"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_URL "$PACKAGE_URL"
_ACEOF
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
ac_site_file1=NONE
ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
# We do not want a PATH search for config.site.
case $CONFIG_SITE in #((
-*) ac_site_file1=./$CONFIG_SITE;;
*/*) ac_site_file1=$CONFIG_SITE;;
*) ac_site_file1=./$CONFIG_SITE;;
esac
elif test "x$prefix" != xNONE; then
ac_site_file1=$prefix/share/config.site
ac_site_file2=$prefix/etc/config.site
else
ac_site_file1=$ac_default_prefix/share/config.site
ac_site_file2=$ac_default_prefix/etc/config.site
fi
for ac_site_file in "$ac_site_file1" "$ac_site_file2"
do
test "x$ac_site_file" = xNONE && continue
if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
$as_echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
|| { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
done
if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
$as_echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
$as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
for ac_var in $ac_precious_vars; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
eval ac_old_val=\$ac_cv_env_${ac_var}_value
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
# differences in whitespace do not lead to failure.
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
*\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
*" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
*) as_fn_append ac_configure_args " '$ac_arg'" ;;
esac
fi
done
if $ac_cache_corrupted; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
## -------------------- ##
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_headers="$ac_config_headers config.h"
# Avoid warnings for redefining AH-generated preprocessor symbols of
# Octave.
# Checks for programs.
# Extract the first word of "mkoctfile", so it can be a program name with args.
set dummy mkoctfile; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_MKOCTFILE+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$MKOCTFILE"; then
ac_cv_prog_MKOCTFILE="$MKOCTFILE" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_MKOCTFILE="mkoctfile"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
MKOCTFILE=$ac_cv_prog_MKOCTFILE
if test -n "$MKOCTFILE"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKOCTFILE" >&5
$as_echo "$MKOCTFILE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test -z "$MKOCTFILE"; then
as_fn_error 1 "mkoctfile not found" "$LINENO" 5;
fi
# Extract the first word of "octave-config", so it can be a program name with args.
set dummy octave-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_OCTAVE_CONFIG+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OCTAVE_CONFIG"; then
ac_cv_prog_OCTAVE_CONFIG="$OCTAVE_CONFIG" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OCTAVE_CONFIG="octave-config"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
OCTAVE_CONFIG=$ac_cv_prog_OCTAVE_CONFIG
if test -n "$OCTAVE_CONFIG"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCTAVE_CONFIG" >&5
$as_echo "$OCTAVE_CONFIG" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test -z "$OCTAVE_CONFIG"; then
as_fn_error 1 "octave-config not found" "$LINENO" 5;
fi
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
if test -z "$CXX"; then
if test -n "$CCC"; then
CXX=$CCC
else
if test -n "$ac_tool_prefix"; then
for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
$as_echo "$CXX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$CXX" && break
done
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_ac_ct_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
$as_echo "$ac_ct_CXX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$ac_ct_CXX" && break
done
if test "x$ac_ct_CXX" = x; then
CXX="g++"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CXX=$ac_ct_CXX
fi
fi
fi
fi
# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
sed '10a\
... rest of stderr output deleted ...
10q' conftest.err >conftest.er1
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
$as_echo_n "checking whether the C++ compiler works... " >&6; }
ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
ac_rmfiles=
for ac_file in $ac_files
do
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
* ) ac_rmfiles="$ac_rmfiles $ac_file";;
esac
done
rm -f $ac_rmfiles
if { { ac_try="$ac_link_default"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
# so that the user can short-circuit this test for compilers unknown to
# Autoconf.
for ac_file in $ac_files ''
do
test -f "$ac_file" || continue
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
;;
[ab].out )
# We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* )
if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
# We set ac_cv_exeext here because the later test for it is not
# safe: cross compilers may not add the suffix if given an `-o'
# argument, so we may need to know it at that point already.
# Even if this section looks crufty: it has the advantage of
# actually working.
break;;
* )
break;;
esac
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
else
ac_file=''
fi
if test -z "$ac_file"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C++ compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
$as_echo_n "checking for C++ compiler default output file name... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
$as_echo "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
$as_echo_n "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
# `rm'.
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
break;;
* ) break;;
esac
done
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
$as_echo "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
;
return 0;
}
_ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
$as_echo_n "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run C++ compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
$as_echo "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
$as_echo_n "checking for suffix of object files... " >&6; }
if ${ac_cv_objext+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
rm -f conftest.o conftest.obj
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
done
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
$as_echo "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
if ${ac_cv_cxx_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
#ifndef __GNUC__
choke me
#endif
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_compiler_gnu=yes
else
ac_compiler_gnu=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
if test $ac_compiler_gnu = yes; then
GXX=yes
else
GXX=
fi
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
$as_echo_n "checking whether $CXX accepts -g... " >&6; }
if ${ac_cv_prog_cxx_g+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
ac_cxx_werror_flag=yes
ac_cv_prog_cxx_g=no
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_cv_prog_cxx_g=yes
else
CXXFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
else
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_cv_prog_cxx_g=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
$as_echo "$ac_cv_prog_cxx_g" >&6; }
if test "$ac_test_CXXFLAGS" = set; then
CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
CXXFLAGS="-g -O2"
else
CXXFLAGS="-g"
fi
else
if test "$GXX" = yes; then
CXXFLAGS="-O2"
else
CXXFLAGS=
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Start of checks for Octave features, preparations for checks.
OCTLIBDIR=${OCTLIBDIR:-`$OCTAVE_CONFIG -p OCTLIBDIR`}
## We need Octaves include path both with and without '/octave'
## appended. The path without '/octave' is needed to selectively test
## for Octave headers, like octave/....h. The path with '/octave' is
## needed since some Octave headers contain include directives for
## other Octave headers with <> instead of "".
OCTINCLUDEDIR=${OCTINCLUDEDIR:-`$MKOCTFILE -p INCFLAGS`}
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
TCXXFLAGS=$CXXFLAGS
TLDFLAGS=$LDFLAGS
TLIBS=$LIBS
TCPPFLAGS=$CPPFLAGS
LDFLAGS="-L$OCTLIBDIR $LDFLAGS"
LIBS="-loctinterp $LIBS"
# CXXFLAGS=
CPPFLAGS="$OCTINCLUDEDIR $CPPFLAGS"
## Simple symbol alternatives of different Octave versions.
echo '/* generated by configure */' > oct-alt-includes.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking is_real_type or isreal" >&5
$as_echo_n "checking is_real_type or isreal... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
octave_value ().isreal ();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
$as_echo "#define OV_ISREAL isreal" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: isreal" >&5
$as_echo "isreal" >&6; }
echo '
' >> oct-alt-includes.h
else
$as_echo "#define OV_ISREAL is_real_type" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: is_real_type" >&5
$as_echo " is_real_type" >&6; }
echo '' >> oct-alt-includes.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking is_cell or iscell" >&5
$as_echo_n "checking is_cell or iscell... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
octave_value ().iscell ();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
$as_echo "#define OV_ISCELL iscell" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: iscell" >&5
$as_echo "iscell" >&6; }
echo '
' >> oct-alt-includes.h
else
$as_echo "#define OV_ISCELL is_cell" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: is_cell" >&5
$as_echo " is_cell" >&6; }
echo '' >> oct-alt-includes.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking is_object or isobject" >&5
$as_echo_n "checking is_object or isobject... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
octave_value ().isobject ();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
$as_echo "#define OV_ISOBJECT isobject" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: isobject" >&5
$as_echo "isobject" >&6; }
echo '
' >> oct-alt-includes.h
else
$as_echo "#define OV_ISOBJECT is_object" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: is_object" >&5
$as_echo " is_object" >&6; }
echo '' >> oct-alt-includes.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking is_complex_type or iscomplex" >&5
$as_echo_n "checking is_complex_type or iscomplex... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
octave_value ().iscomplex ();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
$as_echo "#define OV_ISCOMPLEX iscomplex" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: iscomplex" >&5
$as_echo "iscomplex" >&6; }
echo '
' >> oct-alt-includes.h
else
$as_echo "#define OV_ISCOMPLEX is_complex_type" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: is_complex_type" >&5
$as_echo " is_complex_type" >&6; }
echo '' >> oct-alt-includes.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking is_numeric_type or isnumeric" >&5
$as_echo_n "checking is_numeric_type or isnumeric... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
octave_value ().isnumeric ();
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
$as_echo "#define OV_ISNUMERIC isnumeric" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: isnumeric" >&5
$as_echo "isnumeric" >&6; }
echo '
' >> oct-alt-includes.h
else
$as_echo "#define OV_ISNUMERIC is_numeric_type" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: is_numeric_type" >&5
$as_echo " is_numeric_type" >&6; }
echo '' >> oct-alt-includes.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
LIBS=$TLIBS
LDFLAGS=$TLDFLAGS
CXXFLAGS=$TCXXFLAGS
CPPFLAGS=$TCPPFLAGS
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
# End of checks for Octave features.
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
# It is not useful on other systems. If it contains results you don't
# want to keep, you may remove or edit it.
#
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
# `ac_cv_env_foo' variables (set or unset) will be overridden when
# loading this file, other *unset* `ac_cv_foo' will be assigned the
# following values.
_ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(
for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
eval ac_val=\$$ac_var
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
*) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
(set) 2>&1 |
case $as_nl`(ac_space=' '; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes: double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \.
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
esac |
sort
) |
sed '
/^ac_cv_env_/b end
t clear
:clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
$as_echo "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
case $cache_file in #(
*/* | ?:*)
mv -f confcache "$cache_file"$$ &&
mv -f "$cache_file"$$ "$cache_file" ;; #(
*)
mv -f confcache "$cache_file" ;;
esac
fi
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
# Generated by $as_me.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
debug=false
ac_cs_recheck=false
ac_cs_silent=false
SHELL=\${CONFIG_SHELL-$SHELL}
export SHELL
_ASEOF
cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
&& (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='print -r --'
as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='printf %s\n'
as_echo_n='printf %s'
else
if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
as_echo_n='/usr/ucb/echo -n'
else
as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
as_echo_n_body='eval
arg=$1;
case $arg in #(
*"$as_nl"*)
expr "X$arg" : "X\\(.*\\)$as_nl";
arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
esac;
expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
'
export as_echo_n_body
as_echo_n='sh -c $as_echo_n_body as_echo'
fi
export as_echo_body
as_echo='sh -c $as_echo_body as_echo'
fi
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# IFS
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
$as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there. '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
&& ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
$as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
else
as_fn_append ()
{
eval $1=\$$1\$2
}
fi # as_fn_append
# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
as_dirname=dirname
else
as_dirname=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
xy) ECHO_C='\c';;
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -pR'
fi
else
as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{
case $as_dir in #(
-*) as_dir=./$as_dir;;
esac
test -d "$as_dir" || eval $as_mkdir_p || {
as_dirs=
while :; do
case $as_dir in #(
*\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
} || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
fi
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
_ASEOF
test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by control $as_me 3.2.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
CONFIG_LINKS = $CONFIG_LINKS
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
on `(hostname || uname -n) 2>/dev/null | sed 1q`
"
_ACEOF
case $ac_config_headers in *"
"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
esac
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_headers="$ac_config_headers"
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
from templates according to the current configuration. Unless the files
and actions are specified as TAGs, all are instantiated by default.
Usage: $0 [OPTION]... [TAG]...
-h, --help print this help, then exit
-V, --version print version number and configuration settings, then exit
--config print configuration, then exit
-q, --quiet, --silent
do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--header=FILE[:TEMPLATE]
instantiate the configuration header FILE
Configuration headers:
$config_headers
Report bugs to the package provider."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
control config.status 3.2.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Copyright (C) 2012 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
test -n "\$AWK" || AWK=awk
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
case $1 in
--*=?*)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
--*=)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=
ac_shift=:
;;
*)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
esac
case $ac_option in
# Handling of the options.
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
$as_echo "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
$as_echo "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--header | --heade | --head | --hea )
$ac_shift
case $ac_optarg in
*\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
as_fn_append CONFIG_HEADERS " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h)
# Conflict between --help and --header
as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
--help | --hel | -h )
$as_echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
-*) as_fn_error $? "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;
*) as_fn_append ac_config_targets " $1"
ac_need_defaults=false ;;
esac
shift
done
ac_configure_extra_args=
if $ac_cs_silent; then
exec 6>/dev/null
ac_configure_extra_args="$ac_configure_extra_args --silent"
fi
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
fi
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
echo
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
$as_echo "$ac_log"
} >&5
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Handling of arguments.
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
done
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
fi
# Have a temporary directory for convenience. Make it in the build tree
# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
tmp= ac_tmp=
trap 'exit_status=$?
: "${ac_tmp:=$tmp}"
{ test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
' 0
trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.
{
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -d "$tmp"
} ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
ac_tmp=$tmp
# Set up the scripts for CONFIG_HEADERS section.
# No need to generate them if there are no CONFIG_HEADERS.
# This happens for instance with `./config.status Makefile'.
if test -n "$CONFIG_HEADERS"; then
cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
BEGIN {
_ACEOF
# Transform confdefs.h into an awk script `defines.awk', embedded as
# here-document in config.status, that substitutes the proper values into
# config.h.in to produce config.h.
# Create a delimiter string that does not exist in confdefs.h, to ease
# handling of long lines.
ac_delim='%!_!# '
for ac_last_try in false false :; do
ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
if test -z "$ac_tt"; then
break
elif $ac_last_try; then
as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
else
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
done
# For the awk script, D is an array of macro values keyed by name,
# likewise P contains macro parameters if any. Preserve backslash
# newline sequences.
ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
sed -n '
s/.\{148\}/&'"$ac_delim"'/g
t rset
:rset
s/^[ ]*#[ ]*define[ ][ ]*/ /
t def
d
:def
s/\\$//
t bsnl
s/["\\]/\\&/g
s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
D["\1"]=" \3"/p
s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
d
:bsnl
s/["\\]/\\&/g
s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
D["\1"]=" \3\\\\\\n"\\/p
t cont
s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
t cont
d
:cont
n
s/.\{148\}/&'"$ac_delim"'/g
t clear
:clear
s/\\$//
t bsnlc
s/["\\]/\\&/g; s/^/"/; s/$/"/p
d
:bsnlc
s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
b cont
' >$CONFIG_STATUS || ac_write_fail=1
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
for (key in D) D_is_set[key] = 1
FS = ""
}
/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
line = \$ 0
split(line, arg, " ")
if (arg[1] == "#") {
defundef = arg[2]
mac1 = arg[3]
} else {
defundef = substr(arg[1], 2)
mac1 = arg[2]
}
split(mac1, mac2, "(") #)
macro = mac2[1]
prefix = substr(line, 1, index(line, defundef) - 1)
if (D_is_set[macro]) {
# Preserve the white space surrounding the "#".
print prefix "define", macro P[macro] D[macro]
next
} else {
# Replace #undef with comments. This is necessary, for example,
# in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
if (defundef == "undef") {
print "/*", prefix defundef, macro, "*/"
next
}
}
}
{ print }
_ACAWK
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
fi # test -n "$CONFIG_HEADERS"
eval set X " :H $CONFIG_HEADERS "
shift
for ac_tag
do
case $ac_tag in
:[FHLC]) ac_mode=$ac_tag; continue;;
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
:L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
ac_save_IFS=$IFS
IFS=:
set x $ac_tag
IFS=$ac_save_IFS
shift
ac_file=$1
shift
case $ac_mode in
:L) ac_source=$1;;
:[FH])
ac_file_inputs=
for ac_f
do
case $ac_f in
-) ac_f="$ac_tmp/stdin";;
*) # Look for the file first in the build tree, then in the source tree
# (if the path is not absolute). The absolute path cannot be DOS-style,
# because $ac_f cannot contain `:'.
test -f "$ac_f" ||
case $ac_f in
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
$as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
$as_echo "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
ac_sed_conf_input=`$as_echo "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
case $ac_tag in
*:-:* | *:-) cat >"$ac_tmp/stdin" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_dir="$ac_dir"; as_fn_mkdir_p
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix
case $srcdir in
.) # We are building in place.
ac_srcdir=.
ac_top_srcdir=$ac_top_builddir_sub
ac_abs_top_srcdir=$ac_pwd ;;
[\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
ac_top_srcdir=$srcdir
ac_abs_top_srcdir=$srcdir ;;
*) # Relative name.
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_build_prefix$srcdir
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
case $ac_mode in
:H)
#
# CONFIG_HEADER
#
if test x"$ac_file" != x-; then
{
$as_echo "/* $configure_input */" \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
} >"$ac_tmp/config.h" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
$as_echo "$as_me: $ac_file is unchanged" >&6;}
else
rm -f "$ac_file"
mv "$ac_tmp/config.h" "$ac_file" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
$as_echo "/* $configure_input */" \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
|| as_fn_error $? "could not create -" "$LINENO" 5
fi
;;
esac
done # for ac_tag
as_fn_exit 0
_ACEOF
ac_clean_files=$ac_clean_files_save
test $ac_write_fail = 0 ||
as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded. So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status. When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
ac_cs_success=:
ac_config_status_args=
test "$silent" = yes &&
ac_config_status_args="$ac_config_status_args --quiet"
exec 5>/dev/null
$SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
control-3.2.0/src/PaxHeaders.3947/readme 0000644 0000000 0000000 00000000132 13450727360 014635 x ustar 00 30 mtime=1554231024.673431839
30 atime=1554231024.673431839
30 ctime=1554231028.525576056
control-3.2.0/src/readme 0000644 0001750 0001750 00000006244 13450727360 015104 0 ustar 00olaf olaf 0000000 0000000 SLICOT Library Root Directory
-----------------------------
SLICOT - Subroutine Library In COntrol Theory - is a general purpose basic
mathematical library for control theoretical computations. The library
provides tools to perform essential system analysis and synthesis tasks.
The main emphasis in SLICOT is on numerical reliability of implemented
algorithms and the numerical robustness and efficiency of routines.
Providing algorithmic flexibility and the use of rigorous implementation
and documentation standards are other SLICOT features.
The SLICOT Library is available as standard Fortran 77 code in double
precision. Each user-callable subroutine for control computations is
accompanied by an example program which illustrates the use of the
subroutine and can act as a template for the user's own routines.
The SLICOT Library is organized by chapters, sections and subsections.
The following chapters are currently included:
A : Analysis Routines
B : Benchmark and Test Problems
D : Data Analysis
F : Filtering
I : Identification
M : Mathematical Routines
N : Nonlinear Systems
(not yet available, except for some auxiliary routines for Wiener systems)
S : Synthesis Routines
T : Transformation Routines
U : Utility Routines
SLICOT Library Root Directory contains few, basic files for the SLICOT Library
distribution and generation. When distributed, SLICOT software comes with
several filled-in subdirectories (benchmark_data, doc, examples, examples77,
src, and src_aux), and five files in this root
directory:
- this file, readme,
- the file Installation.txt, describing the SLICOT software installation,
- the main SLICOT Library documentation index, libindex.html, and
- two template files for building the object library and executable programs,
make.inc and makefile,
- GNU GENERAL PUBLIC LICENSE Version 2 text file.
The last two files might need few changes for being adapted to the specific
platform used. Details about installing/updating the SLICOT software are
given in the file Installation.txt.
After software installation, this directory will also contain the library
file slicot.a or slicot.lib, for Unix or Windows platforms, respectively.
The library file could then be linked in applications programs, as usual.
Specific examples are contained in the directories examples and examples77.
The on-line documentation of the SLICOT user's callable routines is
accessible via the main SLICOT Library documentation index, libindex.html.
This file also contains a link to the documentation of the lower-level,
support routines.
The SLICOT Library is built on LAPACK (Linear Algebra PACKage) and BLAS
(Basic Linear Algebra Subprograms) collections. Therefore, these
packages should be available on the platform used.
Basic References:
1. P. Benner, V. Mehrmann, V. Sima, S. Van Huffel, and A. Varga,
"SLICOT - A Subroutine Library in Systems and Control Theory",
Applied and Computational Control, Signals, and Circuits
(Birkhauser), Vol. 1, Ch. 10, pp. 505-546, 1999.
2. S. Van Huffel, V. Sima, A. Varga, S. Hammarling, and F. Delebecque,
"Development of High Performance Numerical Software for Control",
IEEE Control Systems Magazine, Vol. 24, Nr. 1, Feb., pp. 60-76, 2004.
control-3.2.0/src/PaxHeaders.3947/sl_sb04md.cc 0000644 0000000 0000000 00000000132 13450727360 015553 x ustar 00 30 mtime=1554231024.701432908
30 atime=1554231024.701432908
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb04md.cc 0000644 0001750 0001750 00000006011 13450727360 016012 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Solution of continuous-time Sylvester equations.
Uses SLICOT SB04MD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: January 2010
Version: 0.3
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb04md, SB04MD)
(F77_INT& N, F77_INT& M,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* Z, F77_INT& LDZ,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb04md__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb04md__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB04MD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 3)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
F77_INT n = TO_F77_INT (a.rows ());
F77_INT m = TO_F77_INT (b.rows ());
F77_INT lda = max (1, n);
F77_INT ldb = max (1, m);
F77_INT ldc = max (1, n);
F77_INT ldz = max (1, m);
// arguments out
Matrix z (ldz, m);
// workspace
F77_INT ldwork = max (1, 2*n*n + 8*n, 5*m, n + m);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, 4*n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// SLICOT routine SB04MD
F77_XFCN (sb04md, SB04MD,
(n, m,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
z.fortran_vec (), ldz,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("lyap: __sl_sb04md__: exception in SLICOT subroutine SB04MD");
if (info != 0)
error ("lyap: __sl_sb04md__: SB04MD returned info = %d", info);
// return values
retval(0) = c;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_ab04md.cc 0000644 0000000 0000000 00000000132 13450727360 015531 x ustar 00 30 mtime=1554231024.677431991
30 atime=1554231024.677431991
30 ctime=1554231028.525576056
control-3.2.0/src/sl_ab04md.cc 0000644 0001750 0001750 00000007121 13450727360 015773 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Discrete-time <--> continuous-time systems conversion
by a bilinear transformation.
Uses SLICOT AB04MD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: September 2011
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (ab04md, AB04MD)
(char& TYPE,
F77_INT& N, F77_INT& M, F77_INT& P,
double& ALPHA, double& BETA,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_ab04md__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_ab04md__, args, nargout,
"-*- texinfo -*-\n\
Slicot AB04MD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 7)
{
print_usage ();
}
else
{
// arguments in
char type;
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
double alpha = args(4).double_value ();
double beta = args(5).double_value ();
F77_INT discrete = args(6).int_value ();
if (discrete == 0)
type = 'C';
else
type = 'D';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, p);
F77_INT ldd = max (1, p);
// workspace
F77_INT ldwork = max (1, n);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// SLICOT routine AB04MD
F77_XFCN (ab04md, AB04MD,
(type,
n, m, p,
alpha, beta,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("__sl_ab04md__: exception in SLICOT subroutine AB04MD");
if (info != 0)
error ("__sl_ab04md__: AB04MD returned info = %d", info);
// return values
retval(0) = a;
retval(1) = b;
retval(2) = c;
retval(3) = d;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_tb04bd.cc 0000644 0000000 0000000 00000000132 13450727360 015541 x ustar 00 30 mtime=1554231024.729433977
30 atime=1554231024.729433977
30 ctime=1554231028.525576056
control-3.2.0/src/sl_tb04bd.cc 0000644 0001750 0001750 00000010716 13450727360 016007 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Transfer matrix of a given state-space representation (A,B,C,D),
using the pole-zeros method.
Uses SLICOT TB04BD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: October 2010
Version: 0.3
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (tb04bd, TB04BD)
(char& JOBD, char& ORDER, char& EQUIL,
F77_INT& N, F77_INT& M, F77_INT& P, F77_INT& MD,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
F77_INT* IGN, F77_INT& LDIGN,
F77_INT* IGD, F77_INT& LDIGD,
double* GN, double* GD,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_tb04bd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_tb04bd__, args, nargout,
"-*- texinfo -*-\n\
Slicot TB04BD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 5)
{
print_usage ();
}
else
{
// arguments in
char jobd = 'D';
char order = 'D';
char equil;
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
const F77_INT scaled = args(4).int_value ();
if (scaled == 0)
equil = 'S';
else
equil = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT md = n + 1;
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, p);
F77_INT ldd = max (1, p);
// arguments out
F77_INT ldign = max (1, p);
F77_INT ldigd = max (1, p);
F77_INT lg = p * m * md;
OCTAVE_LOCAL_BUFFER (F77_INT, ign, ldign*m);
OCTAVE_LOCAL_BUFFER (F77_INT, igd, ldigd*m);
RowVector gn (lg);
RowVector gd (lg);
// tolerance
double tol = 0; // use default value
// workspace
F77_INT ldwork = max (1, n*(n + p) + max (n + max (n, p), n*(2*n + 5)));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// SLICOT routine TB04BD
F77_XFCN (tb04bd, TB04BD,
(jobd, order, equil,
n, m, p, md,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
ign, ldign,
igd, ldigd,
gn.fortran_vec (), gd.fortran_vec (),
tol,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("ss2tf: __sl_tb04bd__: exception in SLICOT subroutine TB04BD");
if (info != 0)
error ("ss2tf: __sl_tb04bd__: TB04BD returned info = %d", info);
// return values
Cell num(p, m);
Cell den(p, m);
F77_INT ik, istr;
for (ik = 0; ik < p*m; ik++)
{
istr = ik*md;
num.xelem (ik) = gn.extract_n (istr, ign[ik]+1);
den.xelem (ik) = gd.extract_n (istr, igd[ik]+1);
}
retval(0) = num;
retval(1) = den;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sb10zd.cc 0000644 0000000 0000000 00000000132 13450727360 015565 x ustar 00 30 mtime=1554231024.717433519
30 atime=1554231024.717433519
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10zd.cc 0000644 0001750 0001750 00000012341 13450727360 016027 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Positive feedback controller for a discrete-time system (D != 0).
Uses SLICOT SB10ZD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: August 2011
Version: 0.4
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10zd, SB10ZD)
(F77_INT& N, F77_INT& M, F77_INT& NP,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double& FACTOR,
double* AK, F77_INT& LDAK,
double* BK, F77_INT& LDBK,
double* CK, F77_INT& LDCK,
double* DK, F77_INT& LDDK,
double* RCOND,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10zd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10zd__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10ZD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 6)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
double factor = args(4).double_value ();
double tol = args(5).double_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT np = TO_F77_INT (c.rows ()); // np: number of outputs
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, np);
F77_INT ldd = max (1, np);
F77_INT ldak = max (1, n);
F77_INT ldbk = max (1, n);
F77_INT ldck = max (1, m);
F77_INT lddk = max (1, m);
// arguments out
Matrix ak (ldak, n);
Matrix bk (ldbk, np);
Matrix ck (ldck, n);
Matrix dk (lddk, np);
ColumnVector rcond (6);
// workspace
F77_INT liwork = 2 * max (n, m+np);
F77_INT ldwork = 16*n*n + 5*m*m + 7*np*np + 6*m*n + 7*m*np +
7*n*np + 6*n + 2*(m + np) +
max (14*n+23, 16*n, 2*m-1, 2*np-1);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT info;
// SLICOT routine SB10ZD
F77_XFCN (sb10zd, SB10ZD,
(n, m, np,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
factor,
ak.fortran_vec (), ldak,
bk.fortran_vec (), ldbk,
ck.fortran_vec (), ldck,
dk.fortran_vec (), lddk,
rcond.fortran_vec (),
tol,
iwork,
dwork, ldwork,
bwork,
info));
if (f77_exception_encountered)
error ("ncfsyn: __sl_sb10zd__: exception in SLICOT subroutine SB10ZD");
static const char* err_msg[] = {
"0: OK",
"1: the P-Riccati equation is not solved successfully",
"2: the Q-Riccati equation is not solved successfully",
"3: the iteration to compute eigenvalues or singular "
"values failed to converge",
"4: the matrix (gamma^2-1)*In - P*Q is singular",
"5: the matrix Rx + Bx'*X*Bx is singular",
"6: the matrix Ip + D*Dk is singular",
"7: the matrix Im + Dk*D is singular",
"8: the matrix Ip - D*Dk is singular",
"9: the matrix Im - Dk*D is singular",
"10: the closed-loop system is unstable"};
error_msg ("ncfsyn", info, 10, err_msg);
// resizing
ak.resize (n, n);
bk.resize (n, np);
ck.resize (m, n);
dk.resize (m, np);
// return values
retval(0) = ak;
retval(1) = bk;
retval(2) = ck;
retval(3) = dk;
retval(4) = rcond;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_tg01fd.cc 0000644 0000000 0000000 00000000130 13450727360 015545 x ustar 00 29 mtime=1554231024.73343413
29 atime=1554231024.73343413
30 ctime=1554231028.525576056
control-3.2.0/src/sl_tg01fd.cc 0000644 0001750 0001750 00000010701 13450727360 016007 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2013-2015 Thomas Vasileiou
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Orthogonal reduction of a descriptor system to a SVD-like coordinate form.
Uses SLICOT TG01FD by courtesy of NICONET e.V.
Author: Thomas Vasileiou
Created: September 2013
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (tg01fd, TG01FD)
(char& COMPQ, char& COMPZ, char& JOBA,
F77_INT& L, F77_INT& N, F77_INT& M, F77_INT& P,
double* A, F77_INT& LDA,
double* E, F77_INT& LDE,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* Q, F77_INT& LDQ,
double* Z, F77_INT& LDZ,
F77_INT& RANKE, F77_INT& RNKA22,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_tg01fd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_tg01fd__, args, nargout,
"-*- texinfo -*-\n\
Slicot TG01FD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 6)
{
print_usage ();
}
else
{
// arguments in
char compq;
char compz;
char joba = 'T';
Matrix a = args(0).matrix_value ();
Matrix e = args(1).matrix_value ();
Matrix b = args(2).matrix_value ();
Matrix c = args(3).matrix_value ();
const F77_INT qz_flag = args(4).int_value ();
double tol = args(5).double_value ();
if (qz_flag == 0)
{
compq = 'N';
compz = 'N';
}
else
{
compq = 'I';
compz = 'I';
}
F77_INT l = TO_F77_INT (a.rows ());
F77_INT n = l;
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, l);
F77_INT lde = max (1, l);
F77_INT ldb = max (1, l);
F77_INT ldc = max (1, p);
F77_INT ldq = max (1, l);
F77_INT ldz = max (1, n);
// arguments out
Matrix q(l, l, 0.);
Matrix z(n, n, 0.);
Matrix empty(0, 0);
F77_INT ranke, rnka22;
// workspace
F77_INT ldwork = max (1, n+p, min (l,n) + max (3*n-1, m, l));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicators
F77_INT info = 0;
// SLICOT routine TG01FD
F77_XFCN (tg01fd, TG01FD,
(compq, compz, joba,
l, n, m, p,
a.fortran_vec (), lda,
e.fortran_vec (), lde,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
q.fortran_vec (), ldq,
z.fortran_vec (), ldz,
ranke, rnka22,
tol,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("__sl_tg01fd__: exception in SLICOT subroutine TG01FD");
if (info != 0)
error ("__sl_tg01fd__: TG01FD returned info = %d", info);
// return values
retval(0) = a;
retval(1) = e;
retval(2) = b;
retval(3) = c;
retval(4) = octave_value (ranke);
retval(5) = octave_value (rnka22);
if (qz_flag == 0)
{
retval(6) = empty;
retval(7) = empty;
}
else
{
retval(6) = q;
retval(7) = z;
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/__control_helper_functions__.cc 0000644 0000000 0000000 00000000132 13450727360 021667 x ustar 00 30 mtime=1554231024.629430158
30 atime=1554231024.629430158
30 ctime=1554231028.525576056
control-3.2.0/src/__control_helper_functions__.cc 0000644 0001750 0001750 00000001044 13450727360 022127 0 ustar 00olaf olaf 0000000 0000000 #include "is_real_scalar.cc"
#include "is_real_vector.cc"
#include "is_real_matrix.cc"
#include "is_real_square_matrix.cc"
#include "is_matrix.cc"
#include "is_zp_vector.cc"
#include "lti_input_idx.cc"
// stub function to avoid gen_doc_cache warning upon package installation
DEFUN_DLD (__control_helper_functions__, args, nargout,
"-*- texinfo -*-\n\
Helper functions for the control package.\n\
For internal use only.")
{
octave_value_list retval;
error ("__control_helper_functions__: for internal use only");
return retval;
}
control-3.2.0/src/PaxHeaders.3947/__control_slicot_functions__.cc 0000644 0000000 0000000 00000000132 13450727360 021705 x ustar 00 30 mtime=1554231024.629430158
30 atime=1554231024.629430158
30 ctime=1554231028.525576056
control-3.2.0/src/__control_slicot_functions__.cc 0000644 0001750 0001750 00000007355 13450727360 022160 0 ustar 00olaf olaf 0000000 0000000 #include "sl_ab08nd.cc" // invariant zeros of state-space models
#include "sl_ab13dd.cc" // L-infinity norm
#include "sl_sb10hd.cc" // H-2 controller synthesis - continuous-time
#include "sl_sb10ed.cc" // H-2 controller synthesis - discrete-time
#include "sl_ab13bd.cc" // H-2 norm
#include "sl_sb01bd.cc" // pole assignment
#include "sl_sb10fd.cc" // H-infinity controller synthesis - continuous-time
#include "sl_sb10dd.cc" // H-infinity controller synthesis - discrete-time
#include "sl_sb03md.cc" // Lyapunov equations
#include "sl_sb04md.cc" // Sylvester equations - continuous-time
#include "sl_sb04qd.cc" // Sylvester equations - discrete-time
#include "sl_sg03ad.cc" // generalized Lyapunov equations
#include "sl_sb02od.cc" // algebraic Riccati equations
#include "sl_ab13ad.cc" // Hankel singular values
#include "sl_ab01od.cc" // staircase form using orthogonal transformations
#include "sl_tb01pd.cc" // minimal realization of state-space models
#include "sl_sb03od.cc" // Cholesky factor of Lyapunov equations
#include "sl_sg03bd.cc" // Cholesky factor of generalized Lyapunov equations
#include "sl_ag08bd.cc" // finite Smith zeros of descriptor state-space models
#include "sl_tg01jd.cc" // minimal realization of descriptor state-space models
#include "sl_tg01hd.cc" // controllability staircase form of descriptor state-space models
#include "sl_tg01id.cc" // observability staircase form of descriptor state-space models
#include "sl_sg02ad.cc" // solution of algebraic Riccati equations for descriptor systems
#include "sl_tg04bx.cc" // gain of descriptor state-space models
#include "sl_tb01id.cc" // scaling of state-space models
#include "sl_tg01ad.cc" // scaling of descriptor state-space models
#include "sl_sb10id.cc" // H-infinity loop shaping - continuous-time
#include "sl_sb10kd.cc" // H-infinity loop shaping - discrete-time - strictly proper case
#include "sl_sb10zd.cc" // H-infinity loop shaping - discrete-time - proper case
#include "sl_tb04bd.cc" // state-space to transfer function conversion
#include "sl_ab04md.cc" // bilinear transformation
#include "sl_sb10jd.cc" // descriptor to regular state-space conversion
#include "sl_td04ad.cc" // transfer function to state-space conversion
#include "sl_tb01ud.cc" // controllable block Hessenberg realization
#include "sl_ab09hd.cc" // balanced stochastic truncation model reduction
#include "sl_ab09id.cc" // balanced truncation & singular perturbation approximation model reduction
#include "sl_ab09jd.cc" // Hankel-norm approximation model reduction
#include "sl_sb16ad.cc" // balanced truncation & singular perturbation approximation controller reduction
#include "sl_sb16bd.cc" // coprime factorization state-feedback controller reduction
#include "sl_sb16cd.cc" // frequency-weighted coprime factorization state-feedback controller reduction
#include "sl_sb10yd.cc" // fit state-space model to frequency response data
#include "sl_ident.cc" // system identification
#include "sl_ib01cd.cc" // compute initial state vector
#include "sl_ib01ad.cc" // compute singular values
// #include "sl_are.cc" // solve ARE with Schur vector approach and scaling
#include "sl_tg01fd.cc" // orthogonal reduction of dss to a SVD-like coordinate form
#include "sl_sb10ad.cc" // H-infinity optimal controller using modified Glover's and Doyle's formulas (continuous-time)
#include "sl_mb05nd.cc" // matrix exponential and integral for a real matrix
// stub function to avoid gen_doc_cache warning upon package installation
DEFUN_DLD (__control_slicot_functions__, args, nargout,
"-*- texinfo -*-\n\
Slicot Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_value_list retval;
error ("__control_slicot_functions__: for internal use only");
return retval;
}
control-3.2.0/src/PaxHeaders.3947/is_real_square_matrix.cc 0000644 0000000 0000000 00000000132 13450727360 020346 x ustar 00 30 mtime=1554231024.669431686
30 atime=1554231024.669431686
30 ctime=1554231028.525576056
control-3.2.0/src/is_real_square_matrix.cc 0000644 0001750 0001750 00000003550 13450727360 020612 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments are real-valued, square matrices and false otherwise.
Author: Lukas Reichlin
Created: September 2010
Version: 0.2
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_real_square_matrix", "__control_helper_functions__.oct");
DEFUN_DLD (is_real_square_matrix, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_real_square_matrix (@var{a}, @dots{})\n\
Return true if all arguments are real-valued, square matrices and false otherwise.\n\
@var{[]} is a valid square matrix.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_matrix, is_real_vector, is_real_scalar}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2 || args(i).rows () != args(i).columns ()
|| ! args(i).OV_ISNUMERIC () || ! args(i).OV_ISREAL ())
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/config.h.in 0000644 0000000 0000000 00000000132 13450727364 015504 x ustar 00 30 mtime=1554231028.521575909
30 atime=1554231028.521575909
30 ctime=1554231028.525576056
control-3.2.0/src/config.h.in 0000644 0001750 0001750 00000001621 13450727364 015745 0 ustar 00olaf olaf 0000000 0000000 /* config.h.in. Generated from configure.ac by autoheader. */
#include "undef-ah-octave.h"
/* macro for alternative Octave symbols */
#undef OV_ISCELL
/* macro for alternative Octave symbols */
#undef OV_ISCOMPLEX
/* macro for alternative Octave symbols */
#undef OV_ISNUMERIC
/* macro for alternative Octave symbols */
#undef OV_ISOBJECT
/* macro for alternative Octave symbols */
#undef OV_ISREAL
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
#include "oct-alt-includes.h"
control-3.2.0/src/PaxHeaders.3947/sl_sg02ad.cc 0000644 0000000 0000000 00000000132 13450727360 015542 x ustar 00 30 mtime=1554231024.725433824
30 atime=1554231024.725433824
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sg02ad.cc 0000644 0001750 0001750 00000016330 13450727360 016006 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Solution of algebraic Riccati equations for descriptor systems.
Uses SLICOT SG02AD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: October 2010
Version: 0.4
*/
#include
#include "common.h"
#include
extern "C"
{
int F77_FUNC (sg02ad, SG02AD)
(char& DICO, char& JOBB,
char& FACT, char& UPLO,
char& JOBL, char& SCAL,
char& SORT, char& ACC,
F77_INT& N, F77_INT& M, F77_INT& P,
double* A, F77_INT& LDA,
double* E, F77_INT& LDE,
double* B, F77_INT& LDB,
double* Q, F77_INT& LDQ,
double* R, F77_INT& LDR,
double* L, F77_INT& LDL,
double& RCONDU,
double* X, F77_INT& LDX,
double* ALFAR, double* ALFAI,
double* BETA,
double* S, F77_INT& LDS,
double* T, F77_INT& LDT,
double* U, F77_INT& LDU,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& IWARN, F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sg02ad__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sg02ad__, args, nargout,
"-*- texinfo -*-\n\
Slicot SG02AD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 8)
{
print_usage ();
}
else
{
// arguments in
char dico;
char jobb = 'B';
char fact = 'N';
char uplo = 'U';
char jobl;
char scal = 'N';
char sort = 'S';
char acc = 'N';
Matrix a = args(0).matrix_value ();
Matrix e = args(1).matrix_value ();
Matrix b = args(2).matrix_value ();
Matrix q = args(3).matrix_value ();
Matrix r = args(4).matrix_value ();
Matrix l = args(5).matrix_value ();
F77_INT discrete = args(6).int_value ();
F77_INT ijobl = args(7).int_value ();
if (discrete == 0)
dico = 'C';
else
dico = 'D';
if (ijobl == 0)
jobl = 'Z';
else
jobl = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = 0; // p: number of outputs, not used because FACT = 'N'
F77_INT lda = max (1, n);
F77_INT lde = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldq = max (1, n);
F77_INT ldr = max (1, m);
F77_INT ldl = max (1, n);
// arguments out
double rcondu;
F77_INT ldx = max (1, n);
Matrix x (ldx, n);
F77_INT nu = 2*n;
ColumnVector alfar (nu);
ColumnVector alfai (nu);
ColumnVector beta (nu);
// unused output arguments
F77_INT lds = max (1, 2*n + m);
OCTAVE_LOCAL_BUFFER (double, s, lds * lds);
F77_INT ldt = max (1, 2*n + m);
OCTAVE_LOCAL_BUFFER (double, t, ldt * 2*n);
F77_INT ldu = max (1, 2*n);
OCTAVE_LOCAL_BUFFER (double, u, ldu * 2*n);
// tolerance
double tol = 0; // use default value
// workspace
F77_INT liwork = max (1, m, 2*n);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
F77_INT ldwork = max (7*(2*n + 1) + 16, 16*n, 2*n + m, 3*m);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT iwarn;
F77_INT info;
// SLICOT routine SG02AD
F77_XFCN (sg02ad, SG02AD,
(dico, jobb,
fact, uplo,
jobl, scal,
sort, acc,
n, m, p,
a.fortran_vec (), lda,
e.fortran_vec (), lde,
b.fortran_vec (), ldb,
q.fortran_vec (), ldq,
r.fortran_vec (), ldr,
l.fortran_vec (), ldl,
rcondu,
x.fortran_vec (), ldx,
alfar.fortran_vec (), alfai.fortran_vec (),
beta.fortran_vec (),
s, lds,
t, ldt,
u, ldu,
tol,
iwork,
dwork, ldwork,
bwork,
iwarn, info));
if (f77_exception_encountered)
error ("are: __sl_sg02ad__: exception in SLICOT subroutine SG02AD");
static const char* err_msg[] = {
"0: OK",
"1: the computed extended matrix pencil is singular, "
"possibly due to rounding errors",
"2: the QZ algorithm failed",
"3: reordering of the generalized eigenvalues failed",
"4: after reordering, roundoff changed values of "
"some complex eigenvalues so that leading eigenvalues "
"in the generalized Schur form no longer satisfy the "
"stability condition; this could also be caused due "
"to scaling",
"5: the computed dimension of the solution does not "
"equal N",
"6: the spectrum is too close to the boundary of "
"the stability domain",
"7: a singular matrix was encountered during the "
"computation of the solution matrix X"};
static const char* warn_msg[] = {
"0: OK",
"1: solution may be inaccurate due to poor scaling "
"or eigenvalues too close to the boundary of the stability domain "
"(the imaginary axis, if DICO = 'C', or the unit circle, if DICO = 'D')"};
error_msg ("are", info, 7, err_msg);
warning_msg ("are", iwarn, 1, warn_msg);
// assemble complex vector - adapted from DEFUN complex in data.cc
alfar.resize (n);
alfai.resize (n);
beta.resize (n);
ColumnVector poler (n);
ColumnVector polei (n);
poler = quotient (alfar, beta);
polei = quotient (alfai, beta);
ComplexColumnVector pole (n, Complex ());
for (F77_INT i = 0; i < n; i++)
pole.xelem (i) = Complex (poler(i), polei(i));
// return value
retval(0) = x;
retval(1) = pole;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_ab08nd.cc 0000644 0000000 0000000 00000000132 13450727360 015536 x ustar 00 30 mtime=1554231024.677431991
30 atime=1554231024.677431991
30 ctime=1554231028.525576056
control-3.2.0/src/sl_ab08nd.cc 0000644 0001750 0001750 00000016664 13450727360 016014 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Invariant zeros of state-space models.
Uses SLICOT AB08ND by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: November 2009
Version: 0.8
*/
#include
#include "common.h"
#include
#include
extern "C"
{
int F77_FUNC (ab08nd, AB08ND)
(char& EQUIL,
F77_INT& N, F77_INT& M, F77_INT& P,
const double* A, F77_INT& LDA,
const double* B, F77_INT& LDB,
const double* C, F77_INT& LDC,
const double* D, F77_INT& LDD,
F77_INT& NU, F77_INT& RANK, F77_INT& DINFZ,
F77_INT& NKROR, F77_INT& NKROL, F77_INT* INFZ,
F77_INT* KRONR, F77_INT* KRONL,
double* AF, F77_INT& LDAF,
double* BF, F77_INT& LDBF,
double& TOL,
F77_INT* IWORK, double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
int F77_FUNC (dggev, DGGEV)
(char& JOBVL, char& JOBVR,
F77_INT& N,
double* AF, F77_INT& LDAF,
double* BF, F77_INT& LDBF,
double* ALPHAR, double* ALPHAI,
double* BETA,
double* VL, F77_INT& LDVL,
double* VR, F77_INT& LDVR,
double* WORK, F77_INT& LWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_ab08nd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_ab08nd__, args, nargout,
"-*- texinfo -*-\n\
Slicot AB08ND Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 5)
{
print_usage ();
}
else
{
// arguments in
char equil;
const Matrix a = args(0).matrix_value ();
const Matrix b = args(1).matrix_value ();
const Matrix c = args(2).matrix_value ();
const Matrix d = args(3).matrix_value ();
const F77_INT scaled = args(4).int_value ();
if (scaled == 0)
equil = 'S';
else
equil = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, TO_F77_INT (a.rows ()));
F77_INT ldb = max (1, TO_F77_INT (b.rows ()));
F77_INT ldc = max (1, TO_F77_INT (c.rows ()));
F77_INT ldd = max (1, TO_F77_INT (d.rows ()));
// arguments out
F77_INT nu;
F77_INT rank;
F77_INT dinfz;
F77_INT nkror;
F77_INT nkrol;
F77_INT ldaf = max (1, n + m);
F77_INT ldbf = max (1, n + p);
OCTAVE_LOCAL_BUFFER (F77_INT, infz, n);
OCTAVE_LOCAL_BUFFER (F77_INT, kronr, 1 + max (n, m));
OCTAVE_LOCAL_BUFFER (F77_INT, kronl, 1 + max (n, p));
OCTAVE_LOCAL_BUFFER (double, af, ldaf * (n + min (p, m)));
OCTAVE_LOCAL_BUFFER (double, bf, ldbf * (n + m));
// workspace
F77_INT s = max (m, p);
F77_INT ldwork = max (1, max (s, n) + max (3*s-1, n+s));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, s);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicator
F77_INT info;
// tolerance
double tol = 0; // AB08ND uses DLAMCH for default tolerance
// SLICOT routine AB08ND
F77_XFCN (ab08nd, AB08ND,
(equil,
n, m, p,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
nu, rank, dinfz,
nkror, nkrol, infz,
kronr, kronl,
af, ldaf,
bf, ldbf,
tol,
iwork, dwork, ldwork,
info));
if (f77_exception_encountered)
error ("ss: zero: __sl_ab08nd__: exception in SLICOT subroutine AB08ND");
if (info != 0)
error ("ss: zero: __sl_ab08nd__: AB08ND returned info = %d", info);
// DGGEV Part
char jobvl = 'N';
char jobvr = 'N';
double* vl = 0; // not referenced because jobvl = 'N'
F77_INT ldvl = 1;
double* vr = 0; // not referenced because jobvr = 'N'
F77_INT ldvr = 1;
F77_INT lwork = max (1, 8*nu);
OCTAVE_LOCAL_BUFFER (double, work, lwork);
ColumnVector alphar (nu);
ColumnVector alphai (nu);
ColumnVector beta (nu);
F77_INT info2;
F77_XFCN (dggev, DGGEV,
(jobvl, jobvr,
nu,
af, ldaf,
bf, ldbf,
alphar.fortran_vec (), alphai.fortran_vec (),
beta.fortran_vec (),
vl, ldvl,
vr, ldvr,
work, lwork,
info2));
if (f77_exception_encountered)
error ("ss: zero: __sl_ab08nd__: exception in LAPACK subroutine DGGEV");
if (info2 != 0)
error ("ss: zero: __sl_ab08nd__: DGGEV returned info = %d", info2);
// calculate gain
octave_value gain = Matrix (0, 0);;
if (m == 1 && p == 1)
{
if (nu < n)
gain = c * xpow (a, double (n-1-nu)).matrix_value() * b;
else
gain = d;
}
// assemble complex vector - adapted from DEFUN complex in data.cc
ColumnVector zeror (nu);
ColumnVector zeroi (nu);
zeror = quotient (alphar, beta);
zeroi = quotient (alphai, beta);
ComplexColumnVector zero (nu, Complex ());
for (F77_INT i = 0; i < nu; i++)
zero.xelem (i) = Complex (zeror(i), zeroi(i));
// prepare additional outputs for info struct
RowVector infzr (dinfz);
RowVector kronrr (nkror);
RowVector kronlr (nkrol);
for (F77_INT i = 0; i < dinfz; i++)
infzr.xelem (i) = infz[i];
for (F77_INT i = 0; i < nkror; i++)
kronrr.xelem (i) = kronr[i];
for (F77_INT i = 0; i < nkrol; i++)
kronlr.xelem (i) = kronl[i];
// return values
retval(0) = zero;
retval(1) = gain;
retval(2) = octave_value (rank);
retval(3) = infzr;
retval(4) = kronrr;
retval(5) = kronlr;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/Makefile 0000644 0000000 0000000 00000000132 13450727360 015115 x ustar 00 30 mtime=1554231024.597428938
30 atime=1554231024.597428938
30 ctime=1554231028.525576056
control-3.2.0/src/Makefile 0000644 0001750 0001750 00000003265 13450727360 015364 0 ustar 00olaf olaf 0000000 0000000 MKOCTFILE ?= mkoctfile
ifndef LAPACK_LIBS
LAPACK_LIBS := $(shell $(MKOCTFILE) -p LAPACK_LIBS)
endif
ifndef BLAS_LIBS
BLAS_LIBS := $(shell $(MKOCTFILE) -p BLAS_LIBS)
endif
ifndef FLIBS
FLIBS := $(shell $(MKOCTFILE) -p FLIBS)
endif
LFLAGS := $(shell $(MKOCTFILE) -p LFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
AR := $(shell $(MKOCTFILE) -p AR)
PKG_CXXFLAGS := -Wall -Wno-deprecated-declarations $(PKG_CXXFLAGS_APPEND)
all: __control_slicot_functions__.oct \
__control_helper_functions__.oct
# TODO: Private oct-files for control package.
# unpack and compile SLICOT library
# Note that TG04BX is a custom routine.
# It has the extension .fortran such that
# it is not deleted by rm *.f when using
# the developer makefile makefile_control.m
slicotlibrary.a: slicot.tar.gz
tar -xzf slicot.tar.gz
mkdir sltmp
mv slicot/src/*.f ./sltmp
mv slicot/src_aux/*.f ./sltmp
cp TG04BX.fortran ./sltmp/TG04BX.f
cp TB01ZD.fortran ./sltmp/TB01ZD.f
cd sltmp; $(MKOCTFILE) -c *.f
$(AR) -rc slicotlibrary.a ./sltmp/*.o
rm -rf sltmp slicot
# slicot functions
__control_slicot_functions__.oct: __control_slicot_functions__.cc common.cc slicotlibrary.a
LFLAGS="$(LFLAGS)" \
$(MKOCTFILE) $(PKG_CXXFLAGS) __control_slicot_functions__.cc common.cc slicotlibrary.a
# helper functions
__control_helper_functions__.oct: __control_helper_functions__.cc
$(MKOCTFILE) $(PKG_CXXFLAGS) __control_helper_functions__.cc
clean:
$(RM) -r *.o core octave-core *.oct *~ *.f slicot sltmp
realclean: clean
$(RM) -r *.a
## This should also remove any configure cache which clean should not
## remove according to GNU guidelines.
## https://www.gnu.org/prep/standards/html_node/Standard-Targets.html
distclean: clean realclean
control-3.2.0/src/PaxHeaders.3947/is_real_matrix.cc 0000644 0000000 0000000 00000000132 13450727360 016766 x ustar 00 30 mtime=1554231024.665431533
30 atime=1554231024.665431533
30 ctime=1554231028.525576056
control-3.2.0/src/is_real_matrix.cc 0000644 0001750 0001750 00000003432 13450727360 017231 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments are real-valued matrices and false otherwise.
Author: Lukas Reichlin
Created: September 2010
Version: 0.2
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_real_matrix", "__control_helper_functions__.oct");
DEFUN_DLD (is_real_matrix, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_real_matrix (@var{a}, @dots{})\n\
Return true if all arguments are real-valued matrices and false otherwise.\n\
@var{[]} is a valid matrix.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_square_matrix, is_real_vector, is_real_scalar}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2 || ! args(i).OV_ISNUMERIC ()
|| ! args(i).OV_ISREAL ())
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sb02od.cc 0000644 0000000 0000000 00000000132 13450727360 015553 x ustar 00 30 mtime=1554231024.697432756
30 atime=1554231024.697432756
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb02od.cc 0000644 0001750 0001750 00000014700 13450727360 016016 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Solve algebraic Riccati equation.
Uses SLICOT SB02OD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: February 2010
Version: 0.5
*/
#include
#include "common.h"
#include
extern "C"
{
int F77_FUNC (sb02od, SB02OD)
(char& DICO, char& JOBB,
char& FACT, char& UPLO,
char& JOBL, char& SORT,
F77_INT& N, F77_INT& M, F77_INT& P,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* Q, F77_INT& LDQ,
double* R, F77_INT& LDR,
double* L, F77_INT& LDL,
double& RCOND,
double* X, F77_INT& LDX,
double* ALFAR, double* ALFAI,
double* BETA,
double* S, F77_INT& LDS,
double* T, F77_INT& LDT,
double* U, F77_INT& LDU,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb02od__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb02od__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB02OD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 7)
{
print_usage ();
}
else
{
// arguments in
char dico;
char jobb = 'B';
char fact = 'N';
char uplo = 'U';
char jobl;
char sort = 'S';
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix q = args(2).matrix_value ();
Matrix r = args(3).matrix_value ();
Matrix l = args(4).matrix_value ();
F77_INT discrete = args(5).int_value ();
F77_INT ijobl = args(6).int_value ();
if (discrete == 0)
dico = 'C';
else
dico = 'D';
if (ijobl == 0)
jobl = 'Z';
else
jobl = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = 0; // p: number of outputs, not used because FACT = 'N'
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldq = max (1, n);
F77_INT ldr = max (1, m);
F77_INT ldl = max (1, n);
// arguments out
double rcond;
F77_INT ldx = max (1, n);
Matrix x (ldx, n);
F77_INT nu = 2*n;
ColumnVector alfar (nu);
ColumnVector alfai (nu);
ColumnVector beta (nu);
F77_INT lds = max (1, 2*n + m);
Matrix s (lds, lds);
// unused output arguments
F77_INT ldt = max (1, 2*n + m);
OCTAVE_LOCAL_BUFFER (double, t, ldt * 2*n);
F77_INT ldu = max (1, 2*n);
OCTAVE_LOCAL_BUFFER (double, u, ldu * 2*n);
// tolerance
double tol = 0; // use default value
// workspace
F77_INT liwork = max (1, m, 2*n);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
F77_INT ldwork = max (7*(2*n + 1) + 16, 16*n, 2*n + m, 3*m);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT info;
// SLICOT routine SB02OD
F77_XFCN (sb02od, SB02OD,
(dico, jobb,
fact, uplo,
jobl, sort,
n, m, p,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
q.fortran_vec (), ldq,
r.fortran_vec (), ldr,
l.fortran_vec (), ldl,
rcond,
x.fortran_vec (), ldx,
alfar.fortran_vec (), alfai.fortran_vec (),
beta.fortran_vec (),
s.fortran_vec (), lds,
t, ldt,
u, ldu,
tol,
iwork,
dwork, ldwork,
bwork,
info));
if (f77_exception_encountered)
error ("are: __sl_sb02od__: exception in SLICOT subroutine SB02OD");
static const char* err_msg[] = {
"0: OK",
"1: the computed extended matrix pencil is singular, "
"possibly due to rounding errors",
"2: the QZ (or QR) algorithm failed",
"3: reordering of the (generalized) eigenvalues "
"failed",
"4: after reordering, roundoff changed values of "
"some complex eigenvalues so that leading eigenvalues "
"in the (generalized) Schur form no longer satisfy "
"the stability condition; this could also be caused "
"due to scaling",
"5: the computed dimension of the solution does not "
"equal N",
"6: a singular matrix was encountered during the "
"computation of the solution matrix X"};
error_msg ("are", info, 6, err_msg);
// assemble complex vector - adapted from DEFUN complex in data.cc
alfar.resize (n);
alfai.resize (n);
beta.resize (n);
ColumnVector poler (n);
ColumnVector polei (n);
poler = quotient (alfar, beta);
polei = quotient (alfai, beta);
ComplexColumnVector pole (n, Complex ());
for (F77_INT i = 0; i < n; i++)
pole.xelem (i) = Complex (poler(i), polei(i));
// return value
retval(0) = x;
retval(1) = pole;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_ab13dd.cc 0000644 0000000 0000000 00000000131 13450727360 015517 x ustar 00 29 mtime=1554231024.68943245
30 atime=1554231024.685432297
30 ctime=1554231028.525576056
control-3.2.0/src/sl_ab13dd.cc 0000644 0001750 0001750 00000011725 13450727360 015767 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
L-infinity norm of a SS model.
Uses SLICOT AB13DD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: November 2009
Version: 0.5
*/
#include
#include
#include "common.h"
extern "C"
{
int F77_FUNC (ab13dd, AB13DD)
(char& DICO, char& JOBE,
char& EQUIL, char& JOBD,
F77_INT& N, F77_INT& M, F77_INT& P,
double* FPEAK,
double* A, F77_INT& LDA,
double* E, F77_INT& LDE,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* GPEAK,
double& TOL,
F77_INT* IWORK, double* DWORK, F77_INT& LDWORK,
Complex* CWORK, F77_INT& LCWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_ab13dd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_ab13dd__, args, nargout,
"-*- texinfo -*-\n\
Slicot AB13DD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 9)
{
print_usage ();
}
else
{
// arguments in
char dico;
char jobe;
char equil;
char jobd = 'D';
Matrix a = args(0).matrix_value ();
Matrix e = args(1).matrix_value ();
Matrix b = args(2).matrix_value ();
Matrix c = args(3).matrix_value ();
Matrix d = args(4).matrix_value ();
F77_INT discrete = args(5).int_value ();
F77_INT descriptor = args(6).int_value ();
double tol = args(7).double_value ();
const F77_INT scaled = args(8).int_value ();
if (discrete == 0)
dico = 'C';
else
dico = 'D';
if (descriptor == 0)
jobe = 'I';
else
jobe = 'G';
if (scaled == 0)
equil = 'S';
else
equil = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, n);
F77_INT lde = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, p);
F77_INT ldd = max (1, p);
ColumnVector fpeak (2);
ColumnVector gpeak (2);
fpeak(0) = 0;
fpeak(1) = 1;
// workspace
F77_INT ldwork = max (1, 15*n*n + p*p + m*m + (6*n+3)*(p+m) + 4*p*m +
n*m + 22*n + 7*min(p,m));
F77_INT lcwork = max (1, (n+m)*(n+p) + 2*min(p,m) + max(p,m));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (Complex, cwork, lcwork);
// error indicator
F77_INT info;
// SLICOT routine AB13DD
F77_XFCN (ab13dd, AB13DD,
(dico, jobe,
equil, jobd,
n, m, p,
fpeak.fortran_vec (),
a.fortran_vec (), lda,
e.fortran_vec (), lde,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
gpeak.fortran_vec (),
tol,
iwork, dwork, ldwork,
cwork, lcwork,
info));
if (f77_exception_encountered)
error ("lti: norm: __sl_ab13dd__: exception in SLICOT subroutine AB13DD");
static const char* err_msg[] = {
"0: OK",
"1: the matrix E is (numerically) singular",
"2: the (periodic) QR (or QZ) algorithm for computing "
"eigenvalues did not converge",
"3: the SVD algorithm for computing singular values did "
"not converge",
"4: the tolerance is too small and the algorithm did "
"not converge"};
error_msg ("__sl_ab13dd__", info, 4, err_msg);
// return values
retval(0) = fpeak;
retval(1) = gpeak;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_tb01pd.cc 0000644 0000000 0000000 00000000132 13450727360 015554 x ustar 00 30 mtime=1554231024.729433977
30 atime=1554231024.729433977
30 ctime=1554231028.525576056
control-3.2.0/src/sl_tb01pd.cc 0000644 0001750 0001750 00000007453 13450727360 016026 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Minimal realization of state-space models.
Uses SLICOT TB01PD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: September 2010
Version: 0.5
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (tb01pd, TB01PD)
(char& JOB, char& EQUIL,
F77_INT& N, F77_INT& M, F77_INT& P,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
F77_INT& NR,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_tb01pd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_tb01pd__, args, nargout,
"-*- texinfo -*-\n\
Slicot TB01PD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 5)
{
print_usage ();
}
else
{
// arguments in
char job = 'M';
char equil;
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
double tol = args(3).double_value ();
const F77_INT scaled = args(4).int_value ();
if (scaled == 0)
equil = 'S';
else
equil = 'N';
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc;
if (n == 0)
ldc = 1;
else
ldc = max (1, m, p);
b.resize (ldb, max (m, p));
c.resize (ldc, n);
// arguments out
F77_INT nr = 0;
// workspace
F77_INT liwork = n + max (m, p);
F77_INT ldwork = max (1, n + max (n, 3*m, 3*p));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicators
F77_INT info = 0;
// SLICOT routine TB01PD
F77_XFCN (tb01pd, TB01PD,
(job, equil,
n, m, p,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
nr,
tol,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("ss: minreal: __sl_tb01pd__: exception in SLICOT subroutine TB01PD");
if (info != 0)
error ("ss: minreal: __sl_tb01pd__: TB01PD returned info = %d", info);
// resize
a.resize (nr, nr);
b.resize (nr, m);
c.resize (p, nr);
// return values
retval(0) = a;
retval(1) = b;
retval(2) = c;
retval(3) = octave_value (nr);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/common.h 0000644 0000000 0000000 00000000132 13450727360 015116 x ustar 00 30 mtime=1554231024.661431381
30 atime=1554231024.661431381
30 ctime=1554231028.525576056
control-3.2.0/src/common.h 0000644 0001750 0001750 00000003766 13450727360 015373 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Common code for oct-files.
Author: Lukas Reichlin
Created: February 2012
Version: 0.2
*/
#ifndef COMMON_H
#define COMMON_H
#include
#if defined (OCTAVE_HAVE_F77_INT_TYPE)
# define TO_F77_INT(x) octave::to_f77_int (x)
#else
typedef octave_idx_type F77_INT;
# define TO_F77_INT(x) (x)
typedef octave_idx_type F77_LOGICAL;
#endif
F77_INT max (F77_INT a, F77_INT b);
F77_INT max (F77_INT a, F77_INT b, F77_INT c);
F77_INT max (F77_INT a, F77_INT b, F77_INT c, F77_INT d);
F77_INT max (F77_INT a, F77_INT b, F77_INT c, F77_INT d, F77_INT e);
F77_INT min (F77_INT a, F77_INT b);
void error_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[]);
void warning_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[]);
void warning_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[], octave_idx_type offset);
// FIXME: Keep until Octave 4.2 and older are no longer supported.
// This conditional defines f77_exception_encountered as a dummy constant
// to preserve code that needed to check its value to work correctly in older
// versions of Octave.
#if defined (OCTAVE_MAJOR_VERSION) && OCTAVE_MAJOR_VERSION >= 6
static const int f77_exception_encountered = 0;
#endif
#include "config.h"
#endif
control-3.2.0/src/PaxHeaders.3947/sl_ab09id.cc 0000644 0000000 0000000 00000000132 13450727360 015532 x ustar 00 30 mtime=1554231024.681432144
30 atime=1554231024.681432144
30 ctime=1554231028.525576056
control-3.2.0/src/sl_ab09id.cc 0000644 0001750 0001750 00000031177 13450727360 016004 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Model reduction based on Balance & Truncate (B&T) or
Singular Perturbation Approximation (SPA) method.
Uses SLICOT AB09ID by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: October 2011
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (ab09id, AB09ID)
(char& DICO, char& JOBC, char& JOBO, char& JOB,
char& WEIGHT, char& EQUIL, char& ORDSEL,
F77_INT& N, F77_INT& M, F77_INT& P,
F77_INT& NV, F77_INT& PV, F77_INT& NW, F77_INT& MW,
F77_INT& NR,
double& ALPHA, double& ALPHAC, double& ALPHAO,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* AV, F77_INT& LDAV,
double* BV, F77_INT& LDBV,
double* CV, F77_INT& LDCV,
double* DV, F77_INT& LDDV,
double* AW, F77_INT& LDAW,
double* BW, F77_INT& LDBW,
double* CW, F77_INT& LDCW,
double* DW, F77_INT& LDDW,
F77_INT& NS,
double* HSV,
double& TOL1, double& TOL2,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& IWARN, F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_ab09id__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_ab09id__, args, nargout,
"-*- texinfo -*-\n\
Slicot AB09ID Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 25)
{
print_usage ();
}
else
{
// arguments in
char dico;
char jobc;
char jobo;
char job;
char weight;
char equil;
char ordsel;
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
const F77_INT idico = args(4).int_value ();
const F77_INT iequil = args(5).int_value ();
F77_INT nr = args(6).int_value ();
const F77_INT iordsel = args(7).int_value ();
double alpha = args(8).double_value ();
const F77_INT ijob = args(9).int_value ();
Matrix av = args(10).matrix_value ();
Matrix bv = args(11).matrix_value ();
Matrix cv = args(12).matrix_value ();
Matrix dv = args(13).matrix_value ();
Matrix aw = args(14).matrix_value ();
Matrix bw = args(15).matrix_value ();
Matrix cw = args(16).matrix_value ();
Matrix dw = args(17).matrix_value ();
const F77_INT iweight = args(18).int_value ();
const F77_INT ijobc = args(19).int_value ();
double alphac = args(20).double_value ();
const F77_INT ijobo = args(21).int_value ();
double alphao = args(22).double_value ();
double tol1 = args(23).double_value ();
double tol2 = args(24).double_value ();
if (idico == 0)
dico = 'C';
else
dico = 'D';
if (iequil == 0)
equil = 'S';
else
equil = 'N';
if (iordsel == 0)
ordsel = 'F';
else
ordsel = 'A';
if (ijobc == 0)
jobc = 'S';
else
jobc = 'E';
if (ijobo == 0)
jobo = 'S';
else
jobo = 'E';
switch (ijob)
{
case 0:
job = 'B';
break;
case 1:
job = 'F';
break;
case 2:
job = 'S';
break;
case 3:
job = 'P';
break;
default:
error ("__sl_ab09id__: argument job invalid");
}
switch (iweight)
{
case 0:
weight = 'N';
break;
case 1:
weight = 'L';
break;
case 2:
weight = 'R';
break;
case 3:
weight = 'B';
break;
default:
error ("__sl_ab09id__: argument weight invalid");
}
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT nv = TO_F77_INT (av.rows ());
F77_INT pv = TO_F77_INT (cv.rows ());
F77_INT nw = TO_F77_INT (aw.rows ());
F77_INT mw = TO_F77_INT (bw.columns ());
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, p);
F77_INT ldd = max (1, p);
F77_INT ldav = max (1, nv);
F77_INT ldbv = max (1, nv);
F77_INT ldcv = max (1, pv);
F77_INT lddv = max (1, pv);
F77_INT ldaw = max (1, nw);
F77_INT ldbw = max (1, nw);
F77_INT ldcw = max (1, m);
F77_INT lddw = max (1, m);
// arguments out
F77_INT ns;
ColumnVector hsv (n);
// workspace
F77_INT liwork;
F77_INT liwrk1;
F77_INT liwrk2;
F77_INT liwrk3;
switch (job)
{
case 'B':
liwrk1 = 0;
break;
case 'F':
liwrk1 = n;
break;
default:
liwrk1 = 2*n;
}
if (nv == 0 || weight == 'R' || weight == 'N')
liwrk2 = 0;
else
liwrk2 = nv + max (p, pv);
if (nw == 0 || weight == 'L' || weight == 'N')
liwrk3 = 0;
else
liwrk3 = nw + max (m, mw);
liwork = max (3, liwrk1, liwrk2, liwrk3);
F77_INT ldwork;
F77_INT lminl;
F77_INT lrcf;
F77_INT lminr;
F77_INT llcf;
F77_INT lleft;
F77_INT lright;
if (nw == 0 || weight == 'L' || weight == 'N')
{
lrcf = 0;
lminr = 0;
}
else
{
lrcf = mw*(nw+mw) + max (nw*(nw+5), mw*(mw+2), 4*mw, 4*m);
if (m == mw)
lminr = nw + max (nw, 3*m);
else
lminr = 2*nw*max (m, mw) + nw + max (nw, 3*m, 3*mw);
}
llcf = pv*(nv+pv) + pv*nv + max (nv*(nv+5), pv*(pv+2), 4*pv, 4*p);
if (nv == 0 || weight == 'R' || weight == 'N')
lminl = 0;
else if (p == pv)
lminl = max (llcf, nv + max (nv, 3*p));
else
lminl = max (p, pv) * (2*nv + max (p, pv)) + max (llcf, nv + max (nv, 3*p, 3*pv));
if (pv == 0 || weight == 'R' || weight == 'N')
lleft = n*(p+5);
else
lleft = (n+nv) * (n + nv + max (n+nv, pv) + 5);
if (mw == 0 || weight == 'L' || weight == 'N')
lright = n*(m+5);
else
lright = (n+nw) * (n + nw + max (n+nw, mw) + 5);
ldwork = max (lminl, lminr, lrcf,
2*n*n + max (1, lleft, lright, 2*n*n+5*n, n*max (m, p)));
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicators
F77_INT iwarn = 0;
F77_INT info = 0;
// SLICOT routine AB09ID
F77_XFCN (ab09id, AB09ID,
(dico, jobc, jobo, job,
weight, equil, ordsel,
n, m, p,
nv, pv, nw, mw,
nr,
alpha, alphac, alphao,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
av.fortran_vec (), ldav,
bv.fortran_vec (), ldbv,
cv.fortran_vec (), ldcv,
dv.fortran_vec (), lddv,
aw.fortran_vec (), ldaw,
bw.fortran_vec (), ldbw,
cw.fortran_vec (), ldcw,
dw.fortran_vec (), lddw,
ns,
hsv.fortran_vec (),
tol1, tol2,
iwork,
dwork, ldwork,
iwarn, info));
if (f77_exception_encountered)
error ("modred: exception in SLICOT subroutine AB09ID");
static const char* err_msg[] = {
"0: OK",
"1: the computation of the ordered real Schur form of A "
"failed",
"2: the separation of the ALPHA-stable/unstable "
"diagonal blocks failed because of very close "
"eigenvalues",
"3: the reduction to a real Schur form of the state "
"matrix of a minimal realization of V failed",
"4: a failure was detected during the ordering of the "
"real Schur form of the state matrix of a minimal "
"realization of V or in the iterative process to "
"compute a left coprime factorization with inner "
"denominator",
"5: if DICO = 'C' and the matrix AV has an observable "
"eigenvalue on the imaginary axis, or DICO = 'D' and "
"AV has an observable eigenvalue on the unit circle",
"6: the reduction to a real Schur form of the state "
"matrix of a minimal realization of W failed",
"7: a failure was detected during the ordering of the "
"real Schur form of the state matrix of a minimal "
"realization of W or in the iterative process to "
"compute a right coprime factorization with inner "
"denominator",
"8: if DICO = 'C' and the matrix AW has a controllable "
"eigenvalue on the imaginary axis, or DICO = 'D' and "
"AW has a controllable eigenvalue on the unit circle",
"9: the computation of eigenvalues failed",
"10: the computation of Hankel singular values failed"};
static const char* warn_msg[] = {
"0: OK",
"1: with ORDSEL = 'F', the selected order NR is greater "
"than NSMIN, the sum of the order of the "
"ALPHA-unstable part and the order of a minimal "
"realization of the ALPHA-stable part of the given "
"system; in this case, the resulting NR is set equal "
"to NSMIN.",
"2: with ORDSEL = 'F', the selected order NR corresponds "
"to repeated singular values for the ALPHA-stable "
"part, which are neither all included nor all "
"excluded from the reduced model; in this case, the "
"resulting NR is automatically decreased to exclude "
"all repeated singular values.",
"3: with ORDSEL = 'F', the selected order NR is less "
"than the order of the ALPHA-unstable part of the "
"given system; in this case NR is set equal to the "
"order of the ALPHA-unstable part.",
/* 10+%d: %d */ "violations of the numerical stability condition "
"occurred during the assignment of eigenvalues in the "
"SLICOT Library routines SB08CD and/or SB08DD."};
error_msg ("modred", info, 10, err_msg);
warning_msg ("modred", iwarn, 3, warn_msg, 10);
// resize
a.resize (nr, nr);
b.resize (nr, m);
c.resize (p, nr);
hsv.resize (ns);
// return values
retval(0) = a;
retval(1) = b;
retval(2) = c;
retval(3) = d;
retval(4) = octave_value (nr);
retval(5) = hsv;
retval(6) = octave_value (ns);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/is_real_vector.cc 0000644 0000000 0000000 00000000132 13450727360 016764 x ustar 00 30 mtime=1554231024.669431686
30 atime=1554231024.669431686
30 ctime=1554231028.525576056
control-3.2.0/src/is_real_vector.cc 0000644 0001750 0001750 00000003523 13450727360 017230 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments are real-valued vectors and false otherwise.
Author: Lukas Reichlin
Created: September 2010
Version: 0.2
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_real_vector", "__control_helper_functions__.oct");
DEFUN_DLD (is_real_vector, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_real_vector (@var{a}, @dots{})\n\
Return true if all arguments are real-valued vectors and false otherwise.\n\
@var{[]} is not a valid vector.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_square_matrix, is_real_matrix, is_real_scalar}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2 || ! (args(i).rows () == 1 || args(i).columns () == 1)
|| ! args(i).OV_ISNUMERIC () || ! args(i).OV_ISREAL ())
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/undef-ah-octave.h 0000644 0000000 0000000 00000000132 13450727360 016574 x ustar 00 30 mtime=1554231024.933441765
30 atime=1554231024.933441765
30 ctime=1554231028.525576056
control-3.2.0/src/undef-ah-octave.h 0000644 0001750 0001750 00000000706 13450727360 017040 0 ustar 00olaf olaf 0000000 0000000 /* To be included at the top of config.h (by autoheader). Avoid
warnings for redefining AH-generated preprocessor symbols of
Octave. */
#ifdef PACKAGE_BUGREPORT
#undef PACKAGE_BUGREPORT
#endif
#ifdef PACKAGE_NAME
#undef PACKAGE_NAME
#endif
#ifdef PACKAGE_STRING
#undef PACKAGE_STRING
#endif
#ifdef PACKAGE_TARNAME
#undef PACKAGE_TARNAME
#endif
#ifdef PACKAGE_URL
#undef PACKAGE_URL
#endif
#ifdef PACKAGE_VERSION
#undef PACKAGE_VERSION
#endif
control-3.2.0/src/PaxHeaders.3947/common.cc 0000644 0000000 0000000 00000000132 13450727360 015254 x ustar 00 30 mtime=1554231024.661431381
30 atime=1554231024.661431381
30 ctime=1554231028.525576056
control-3.2.0/src/common.cc 0000644 0001750 0001750 00000005220 13450727360 015514 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Common code for oct-files.
Author: Lukas Reichlin
Created: April 2010
Version: 0.4
*/
#include
#include
#include "common.h"
F77_INT max (F77_INT a, F77_INT b)
{
if (a > b)
return a;
else
return b;
}
F77_INT max (F77_INT a, F77_INT b, F77_INT c)
{
return max (max (a, b), c);
}
F77_INT max (F77_INT a, F77_INT b, F77_INT c, F77_INT d)
{
return max (max (a, b), max (c, d));
}
F77_INT max (F77_INT a, F77_INT b, F77_INT c, F77_INT d, F77_INT e)
{
return max (max (a, b, c, d), e);
}
F77_INT min (F77_INT a, F77_INT b)
{
if (a < b)
return a;
else
return b;
}
void error_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[])
{
if (index == 0)
return;
std::ostringstream os;
if (index < 0)
os << name << ": the " << index << "-th argument had an invalid value";
else if (index <= max)
os << name << ": " << msg[index];
else
os << name << ": unknown error, info = " << index;
error ("%s", os.str ().c_str ());
}
void warning_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[])
{
if (index == 0)
return;
std::ostringstream os;
if (index > 0 && index <= max)
os << name << ": " << msg[index];
else
os << name << ": unknown warning, iwarn = " << index;
warning ("%s", os.str ().c_str ());
}
void warning_msg (const char name[], octave_idx_type index, octave_idx_type max, const char* msg[], octave_idx_type offset)
{
if (index == 0)
return;
std::ostringstream os;
if (index > 0 && index <= max)
os << name << ": " << msg[index];
else if (index > offset)
os << name << ": " << offset << "+" << (index - offset) << ": " << (index - offset) << " " << msg[max+1];
else
os << name << ": unknown warning, iwarn = " << index;
warning ("%s", os.str ().c_str ());
}
control-3.2.0/src/PaxHeaders.3947/TG04BX.fortran 0000644 0000000 0000000 00000000132 13450727360 015762 x ustar 00 30 mtime=1554231024.629430158
30 atime=1554231024.629430158
30 ctime=1554231028.525576056
control-3.2.0/src/TG04BX.fortran 0000644 0001750 0001750 00000020664 13450727360 016233 0 ustar 00olaf olaf 0000000 0000000 SUBROUTINE TG04BX( IP, IZ, A, LDA, E, B, C, D, PR, PI, ZR, ZI,
$ GAIN, IWORK )
C
C WARNING
C
C This routine is a modified version of TB04BX. It is intended
C for the Octave Control Systems Package and supports Descriptor
C State-Space models. TG04BX is *NOT* part of SLICOT and the
C authors from NICONET e.V. are *NOT* responsible for it.
C See file DESCRIPTION for the current maintainer of the Octave
C control package.
C
C SLICOT RELEASE 5.0.
C
C Copyright (c) 2002-2009 NICONET e.V.
C
C This program is free software: you can redistribute it and/or
C modify it under the terms of the GNU General Public License as
C published by the Free Software Foundation, either version 2 of
C the License, or (at your option) any later version.
C
C This program is distributed in the hope that it will be useful,
C but WITHOUT ANY WARRANTY; without even the implied warranty of
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
C GNU General Public License for more details.
C
C You should have received a copy of the GNU General Public License
C along with this program. If not, see
C .
C
C PURPOSE
C
C To compute the gain of a single-input single-output linear system,
C given its state-space representation (A,b,c,d), and its poles and
C zeros. The matrix A is assumed to be in an upper Hessenberg form.
C The gain is computed using the formula
C
C -1 IP IZ
C g = (c*( S0*E - A ) *b + d)*Prod( S0 - Pi )/Prod( S0 - Zi ) ,
C i=1 i=1 (1)
C
C where Pi, i = 1 : IP, and Zj, j = 1 : IZ, are the poles and zeros,
C respectively, and S0 is a real scalar different from all poles and
C zeros.
C
C ARGUMENTS
C
C Input/Output Parameters
C
C IP (input) INTEGER
C The number of the system poles. IP >= 0.
C
C IZ (input) INTEGER
C The number of the system zeros. IZ >= 0.
C
C A (input/output) DOUBLE PRECISION array, dimension (LDA,IP)
C On entry, the leading IP-by-IP part of this array must
C contain the state dynamics matrix A in an upper Hessenberg
C form. The elements below the second diagonal are not
C referenced.
C On exit, the leading IP-by-IP upper Hessenberg part of
C this array contains the LU factorization of the matrix
C A - S0*I, as computed by SLICOT Library routine MB02SD.
C
C LDA INTEGER
C The leading dimension of array A. LDA >= max(1,IP).
C
C B (input/output) DOUBLE PRECISION array, dimension (IP)
C On entry, this array must contain the system input
C vector b.
C On exit, this array contains the solution of the linear
C system ( A - S0*I )x = b .
C
C C (input) DOUBLE PRECISION array, dimension (IP)
C This array must contain the system output vector c.
C
C D (input) DOUBLE PRECISION
C The variable must contain the system feedthrough scalar d.
C
C PR (input) DOUBLE PRECISION array, dimension (IP)
C This array must contain the real parts of the system
C poles. Pairs of complex conjugate poles must be stored in
C consecutive memory locations.
C
C PI (input) DOUBLE PRECISION array, dimension (IP)
C This array must contain the imaginary parts of the system
C poles.
C
C ZR (input) DOUBLE PRECISION array, dimension (IZ)
C This array must contain the real parts of the system
C zeros. Pairs of complex conjugate zeros must be stored in
C consecutive memory locations.
C
C ZI (input) DOUBLE PRECISION array, dimension (IZ)
C This array must contain the imaginary parts of the system
C zeros.
C
C GAIN (output) DOUBLE PRECISION
C The gain of the linear system (A,b,c,d), given by (1).
C
C Workspace
C
C IWORK INTEGER array, dimension (IP)
C On exit, it contains the pivot indices; for 1 <= i <= IP,
C row i of the matrix A - S0*I was interchanged with
C row IWORK(i).
C
C METHOD
C
C The routine implements the method presented in [1]. A suitable
C value of S0 is chosen based on the system poles and zeros.
C Then, the LU factorization of the upper Hessenberg, nonsingular
C matrix A - S0*I is computed and used to solve the linear system
C in (1).
C
C REFERENCES
C
C [1] Varga, A. and Sima, V.
C Numerically Stable Algorithm for Transfer Function Matrix
C Evaluation.
C Int. J. Control, vol. 33, nr. 6, pp. 1123-1133, 1981.
C
C NUMERICAL ASPECTS
C
C The algorithm is numerically stable in practice and requires
C O(IP*IP) floating point operations.
C
C CONTRIBUTORS
C
C V. Sima, Research Institute for Informatics, Bucharest, May 2002.
C Partly based on the BIMASC Library routine GAIN by A. Varga.
C
C REVISIONS
C
C 2011-02-08 (Lukas Reichlin) Modifications for Descriptor Systems.
C
C KEYWORDS
C
C Eigenvalue, state-space representation, transfer function, zeros.
C
C ******************************************************************
C
C .. Parameters ..
DOUBLE PRECISION ZERO, ONE, TWO, P1, ONEP1
PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0,
$ P1 = 0.1D0, ONEP1 = 1.1D0 )
C .. Scalar Arguments ..
DOUBLE PRECISION D, GAIN
INTEGER IP, IZ, LDA
C .. Array Arguments ..
DOUBLE PRECISION A(LDA,*), E(LDA,*), B(*), C(*), PI(*), PR(*),
$ ZI(*), ZR(*)
INTEGER IWORK(*)
C .. Local Scalars ..
INTEGER I, J, INFO
DOUBLE PRECISION S0, S
C .. External Functions ..
DOUBLE PRECISION DDOT
EXTERNAL DDOT
C .. External Subroutines ..
C EXTERNAL MB02RD, MB02SD
EXTERNAL DGETRF, DGETRS
C .. Intrinsic Functions ..
INTRINSIC ABS, MAX
C ..
C .. Executable Statements ..
C
C For efficiency, the input scalar parameters are not checked.
C
C Quick return if possible.
C
C IF( IP.EQ.0 ) THEN
C GAIN = ZERO
C RETURN
C END IF
C
C Compute a suitable value for S0 .
C
S0 = ZERO
C
DO 10 I = 1, IP
S = ABS( PR(I) )
IF ( PI(I).NE.ZERO )
$ S = S + ABS( PI(I) )
S0 = MAX( S0, S )
10 CONTINUE
C
DO 20 I = 1, IZ
S = ABS( ZR(I) )
IF ( ZI(I).NE.ZERO )
$ S = S + ABS( ZI(I) )
S0 = MAX( S0, S )
20 CONTINUE
C
S0 = TWO*S0 + P1
IF ( S0.LE.ONE )
$ S0 = ONEP1
C
C Form A - S0*E .
C
DO 30 J = 1, LDA
DO 25 I = 1, LDA
A(I,J) = A(I,J) - S0*E(I,J)
25 CONTINUE
30 CONTINUE
C
C Compute the LU factorization of the matrix A - S0*E
C (guaranteed to be nonsingular).
C
C CALL MB02SD( IP, A, LDA, IWORK, INFO )
C CALL MB02SD( LDA, A, LDA, IWORK, INFO )oo
CALL DGETRF( LDA, LDA, A, LDA, IWORK, INFO)
C
C Solve the linear system (A - S0*E)*x = b .
C
C CALL MB02RD( 'No Transpose', IP, 1, A, LDA, IWORK, B, IP, INFO )
C CALL MB02RD( 'No Transpose', IP, 1, A, LDA, IWORK, B, LDA, INFO )
C CALL MB02RD( 'No Transpose', LDA, 1, A, LDA, IWORK, B, LDA, INFO )
CALL DGETRS( 'No Transpose', LDA, 1, A, LDA, IWORK, B, LDA, INFO )
C -1
C Compute c*(S0*E - A) *b + d .
C
C GAIN = D - DDOT( IP, C, 1, B, 1 )
GAIN = D - DDOT( LDA, C, 1, B, 1 )
C
C Multiply by the products in terms of poles and zeros in (1).
C
I = 1
C
C WHILE ( I <= IP ) DO
C
40 IF ( I.LE.IP ) THEN
IF ( PI(I).EQ.ZERO ) THEN
GAIN = GAIN*( S0 - PR(I) )
I = I + 1
ELSE
GAIN = GAIN*( S0*( S0 - TWO*PR(I) ) + PR(I)**2 + PI(I)**2 )
I = I + 2
END IF
GO TO 40
END IF
C
C END WHILE 40
C
I = 1
C
C WHILE ( I <= IZ ) DO
C
50 IF ( I.LE.IZ ) THEN
IF ( ZI(I).EQ.ZERO ) THEN
GAIN = GAIN/( S0 - ZR(I) )
I = I + 1
ELSE
GAIN = GAIN/( S0*( S0 - TWO*ZR(I) ) + ZR(I)**2 + ZI(I)**2 )
I = I + 2
END IF
GO TO 50
END IF
C
C END WHILE 50
C
RETURN
C *** Last line of TG04BX ***
END
control-3.2.0/src/PaxHeaders.3947/sl_sb10ed.cc 0000644 0000000 0000000 00000000132 13450727360 015540 x ustar 00 30 mtime=1554231024.709433214
30 atime=1554231024.709433214
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10ed.cc 0000644 0001750 0001750 00000014234 13450727360 016005 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
H2 optimal state controller for a discrete-time system.
Uses SLICOT SB10ED by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: November 2009
Version: 0.6
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10ed, SB10ED)
(F77_INT& N, F77_INT& M, F77_INT& NP,
F77_INT& NCON, F77_INT& NMEAS,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* AK, F77_INT& LDAK,
double* BK, F77_INT& LDBK,
double* CK, F77_INT& LDCK,
double* DK, F77_INT& LDDK,
double* RCOND,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10ed__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10ed__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10ED Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 6)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
F77_INT ncon = args(4).int_value ();
F77_INT nmeas = args(5).int_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT np = TO_F77_INT (c.rows ()); // np: number of outputs
F77_INT lda = max (1, TO_F77_INT (a.rows ()));
F77_INT ldb = max (1, TO_F77_INT (b.rows ()));
F77_INT ldc = max (1, TO_F77_INT (c.rows ()));
F77_INT ldd = max (1, TO_F77_INT (d.rows ()));
F77_INT ldak = max (1, n);
F77_INT ldbk = max (1, n);
F77_INT ldck = max (1, ncon);
F77_INT lddk = max (1, ncon);
double tol = 0;
// arguments out
Matrix ak (ldak, n);
Matrix bk (ldbk, nmeas);
Matrix ck (ldck, n);
Matrix dk (lddk, nmeas);
ColumnVector rcond (7);
// workspace
F77_INT m2 = ncon;
F77_INT m1 = m - m2;
F77_INT np1 = np - nmeas;
F77_INT np2 = nmeas;
F77_INT q = max (m1, m2, np1, np2);
F77_INT ldwork = 2*q*(3*q+2*n)+max(1,(n+q)*(n+q+6),q*(q+max(n,q,5)+1),
2*n*n+max(1,14*n*n+6*n+max(14*n+23,16*n),
q*(n+q+max(q,3))));
F77_INT liwork = max (2*m2, 2*n, n*n, np2);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT info;
// SLICOT routine SB10ED
F77_XFCN (sb10ed, SB10ED,
(n, m, np,
ncon, nmeas,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
ak.fortran_vec (), ldak,
bk.fortran_vec (), ldbk,
ck.fortran_vec (), ldck,
dk.fortran_vec (), lddk,
rcond.fortran_vec (),
tol,
iwork,
dwork, ldwork,
bwork,
info));
if (f77_exception_encountered)
error ("h2syn: __sl_sb10ed__: exception in SLICOT subroutine SB10ED");
static const char* err_msg[] = {
"0: OK",
"1: the matrix [A-exp(j*Theta)*I, B2; C1, D12] "
"had not full column rank in respect to the tolerance EPS",
"2: the matrix [A-exp(j*Theta)*I, B1; C2, D21] "
"had not full row rank in respect to the tolerance EPS",
"3: the matrix D12 had not full column rank in "
"respect to the tolerance TOL",
"4: the matrix D21 had not full row rank in respect "
"to the tolerance TOL",
"5: the singular value decomposition (SVD) algorithm "
"did not converge (when computing the SVD of one of the matrices "
"[A-I, B2; C1, D12], [A-I, B1; C2, D21], D12 or D21)",
"6: the X-Riccati equation was not solved successfully",
"7: the matrix Im2 + B2'*X2*B2 is not positive "
"definite, or it is numerically singular (with "
"respect to the tolerance TOL)",
"8: the Y-Riccati equation was not solved successfully",
"9: the matrix Ip2 + C2*Y2*C2' is not positive "
"definite, or it is numerically singular (with "
"respect to the tolerance TOL)",
"10: the matrix Im2 + DKHAT*D22 is singular, or its "
"estimated condition number is larger than or equal "
"to 1/TOL"};
error_msg ("h2syn", info, 10, err_msg);
// return values
retval(0) = ak;
retval(1) = bk;
retval(2) = ck;
retval(3) = dk;
retval(4) = rcond;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sb10yd.cc 0000644 0000000 0000000 00000000132 13450727360 015564 x ustar 00 30 mtime=1554231024.717433519
30 atime=1554231024.717433519
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10yd.cc 0000644 0001750 0001750 00000010573 13450727360 016033 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Fit FRD with SS model.
Uses SLICOT SB10YD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: October 2011
Version: 0.2
*/
#include
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10yd, SB10YD)
(F77_INT& DISCFL, F77_INT& FLAG,
F77_INT& LENDAT,
double* RFRDAT, double* IFRDAT,
double* OMEGA,
F77_INT& N,
double* A, F77_INT& LDA,
double* B,
double* C,
double* D,
double& TOL,
F77_INT* IWORK, double* DWORK, F77_INT& LDWORK,
Complex* ZWORK, F77_INT& LZWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10yd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10yd__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10YD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 6)
{
print_usage ();
}
else
{
// arguments in
Matrix rfrdat = args(0).matrix_value ();
Matrix ifrdat = args(1).matrix_value ();
Matrix omega = args(2).matrix_value ();
F77_INT n = args(3).int_value ();
F77_INT discfl = args(4).int_value ();
F77_INT flag = args(5).int_value ();
F77_INT lendat = TO_F77_INT (omega.rows ()); // number of frequencies
F77_INT lda = max (1, n);
// arguments out
Matrix a (lda, n);
Matrix b (n, 1);
Matrix c (1, n);
Matrix d (1, 1);
// workspace
F77_INT liwork = max (2, 2*n + 1);
F77_INT ldwork;
F77_INT lzwork;
F77_INT hnpts = 2048;
F77_INT lw1 = 2*lendat + 4*hnpts;
F77_INT lw2 = lendat + 6*hnpts;
F77_INT mn = min (2*lendat, 2*n+1);
F77_INT lw3;
F77_INT lw4;
if (n > 0)
{
lw3 = 2*lendat*(2*n+1) + max (2*lendat, 2*n+1)
+ max (mn + 6*n + 4, 2*mn + 1);
lzwork = lendat*(2*n+3);
}
else
{
lw3 = 4*lendat + 5;
lzwork = lendat;
}
if (flag == 1)
lw4 = max (n*n + 5*n, 6*n + 1 + min (1, n));
else
lw4 = 0;
ldwork = max (2, lw1, lw2, lw3, lw4);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, liwork);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (Complex, zwork, lzwork);
// tolerance
double tol = 0;
// error indicator
F77_INT info;
// SLICOT routine SB10YD
F77_XFCN (sb10yd, SB10YD,
(discfl, flag,
lendat,
rfrdat.fortran_vec (), ifrdat.fortran_vec (),
omega.fortran_vec (),
n,
a.fortran_vec (), lda,
b.fortran_vec (),
c.fortran_vec (),
d.fortran_vec (),
tol,
iwork, dwork, ldwork,
zwork, lzwork,
info));
if (f77_exception_encountered)
error ("fitfrd: __sl_sb10yd__: exception in SLICOT subroutine SB10YD");
if (info != 0)
error ("fitfrd: __sl_sb10yd__: SB10YD returned info = %d", info);
// return values
retval(0) = a;
retval(1) = b;
retval(2) = c;
retval(3) = d;
retval(4) = octave_value (n);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/is_real_scalar.cc 0000644 0000000 0000000 00000000132 13450727360 016727 x ustar 00 30 mtime=1554231024.669431686
30 atime=1554231024.669431686
30 ctime=1554231028.525576056
control-3.2.0/src/is_real_scalar.cc 0000644 0001750 0001750 00000003444 13450727360 017175 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments are real-valued scalars and false otherwise.
Author: Lukas Reichlin
Created: September 2010
Version: 0.2
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_real_scalar", "__control_helper_functions__.oct");
DEFUN_DLD (is_real_scalar, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_real_scalar (@var{a}, @dots{})\n\
Return true if all arguments are real-valued scalars and false otherwise.\n\
@var{[]} is not a valid scalar.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_matrix, is_real_vector}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2 || ! args(i).is_scalar_type ()
|| ! args(i).OV_ISNUMERIC () || ! args(i).OV_ISREAL ())
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_tb01ud.cc 0000644 0000000 0000000 00000000132 13450727360 015561 x ustar 00 30 mtime=1554231024.729433977
30 atime=1554231024.729433977
30 ctime=1554231028.525576056
control-3.2.0/src/sl_tb01ud.cc 0000644 0001750 0001750 00000007500 13450727360 016024 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Orthogonal canonical form.
Uses SLICOT TB01UD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: October 2011
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (tb01ud, TB01UD)
(char& JOBZ,
F77_INT& N, F77_INT& M, F77_INT& P,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
F77_INT& NCONT, F77_INT& INDCON,
F77_INT* NBLK,
double* Z, F77_INT& LDZ,
double* TAU,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_tb01ud__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_tb01ud__, args, nargout,
"-*- texinfo -*-\n\
Slicot TB01UD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 4)
{
print_usage ();
}
else
{
// arguments in
char jobz = 'I';
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
double tol = args(3).double_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT p = TO_F77_INT (c.rows ()); // p: number of outputs
F77_INT lda = max (1, n);
F77_INT ldb = max (1, n);
F77_INT ldc = max (1, p);
F77_INT ldz = max (1, n);
// arguments out
Matrix z (ldz, n);
F77_INT ncont;
F77_INT indcon;
OCTAVE_LOCAL_BUFFER (F77_INT, nblk, n);
OCTAVE_LOCAL_BUFFER (double, tau, n);
// workspace
F77_INT ldwork = max (1, n, 3*m, p);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, m);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicators
F77_INT info;
// SLICOT routine TB01UD
F77_XFCN (tb01ud, TB01UD,
(jobz,
n, m, p,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
ncont, indcon,
nblk,
z.fortran_vec (), ldz,
tau,
tol,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("__sl_tb01ud__: exception in SLICOT subroutine TB01UD");
if (info != 0)
error ("__sl_tb01ud__: TB01UD returned info = %d", info);
// resize
a.resize (n, n);
b.resize (n, m);
c.resize (p, n);
z.resize (n, n);
// return values
retval(0) = a;
retval(1) = b;
retval(2) = c;
retval(3) = z;
retval(4) = octave_value (ncont);
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_sb10hd.cc 0000644 0000000 0000000 00000000132 13450727360 015543 x ustar 00 30 mtime=1554231024.709433214
30 atime=1554231024.709433214
30 ctime=1554231028.525576056
control-3.2.0/src/sl_sb10hd.cc 0000644 0001750 0001750 00000012325 13450727360 016007 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
H2 optimal state controller for a continuous-time system.
Uses SLICOT SB10HD by courtesy of NICONET e.V.
Author: Lukas Reichlin
Created: November 2009
Version: 0.6
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (sb10hd, SB10HD)
(F77_INT& N, F77_INT& M, F77_INT& NP,
F77_INT& NCON, F77_INT& NMEAS,
double* A, F77_INT& LDA,
double* B, F77_INT& LDB,
double* C, F77_INT& LDC,
double* D, F77_INT& LDD,
double* AK, F77_INT& LDAK,
double* BK, F77_INT& LDBK,
double* CK, F77_INT& LDCK,
double* DK, F77_INT& LDDK,
double* RCOND,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_LOGICAL* BWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_sb10hd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_sb10hd__, args, nargout,
"-*- texinfo -*-\n\
Slicot SB10HD Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 6)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
Matrix b = args(1).matrix_value ();
Matrix c = args(2).matrix_value ();
Matrix d = args(3).matrix_value ();
F77_INT ncon = args(4).int_value ();
F77_INT nmeas = args(5).int_value ();
F77_INT n = TO_F77_INT (a.rows ()); // n: number of states
F77_INT m = TO_F77_INT (b.columns ()); // m: number of inputs
F77_INT np = TO_F77_INT (c.rows ()); // np: number of outputs
F77_INT lda = max (1, TO_F77_INT (a.rows ()));
F77_INT ldb = max (1, TO_F77_INT (b.rows ()));
F77_INT ldc = max (1, TO_F77_INT (c.rows ()));
F77_INT ldd = max (1, TO_F77_INT (d.rows ()));
F77_INT ldak = max (1, n);
F77_INT ldbk = max (1, n);
F77_INT ldck = max (1, ncon);
F77_INT lddk = max (1, ncon);
double tol = 0;
// arguments out
Matrix ak (ldak, n);
Matrix bk (ldbk, nmeas);
Matrix ck (ldck, n);
Matrix dk (lddk, nmeas);
ColumnVector rcond (4);
// workspace
F77_INT m2 = ncon;
F77_INT m1 = m - m2;
F77_INT np1 = np - nmeas;
F77_INT np2 = nmeas;
F77_INT q = max (m1, m2, np1, np2);
F77_INT ldwork = 2*q*(3*q + 2*n) + max (1, q*(q + max (n, 5) + 1), n*(14*n + 12 + 2*q) + 5);
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, max (2*n, n*n));
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
OCTAVE_LOCAL_BUFFER (F77_LOGICAL, bwork, 2*n);
// error indicator
F77_INT info;
// SLICOT routine SB10HD
F77_XFCN (sb10hd, SB10HD,
(n, m, np,
ncon, nmeas,
a.fortran_vec (), lda,
b.fortran_vec (), ldb,
c.fortran_vec (), ldc,
d.fortran_vec (), ldd,
ak.fortran_vec (), ldak,
bk.fortran_vec (), ldbk,
ck.fortran_vec (), ldck,
dk.fortran_vec (), lddk,
rcond.fortran_vec (),
tol,
iwork,
dwork, ldwork,
bwork,
info));
if (f77_exception_encountered)
error ("h2syn: __sl_sb10hd__: exception in SLICOT subroutine SB10HD");
static const char* err_msg[] = {
"0: OK",
"1: the matrix D12 had not full column rank in "
"respect to the tolerance TOL",
"2: the matrix D21 had not full row rank in respect "
"to the tolerance TOL",
"3: the singular value decomposition (SVD) algorithm "
"did not converge (when computing the SVD of one of "
"the matrices D12 or D21)",
"4: the X-Riccati equation was not solved successfully",
"5: the Y-Riccati equation was not solved successfully"};
error_msg ("h2syn", info, 5, err_msg);
// return values
retval(0) = ak;
retval(1) = bk;
retval(2) = ck;
retval(3) = dk;
retval(4) = rcond;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/is_matrix.cc 0000644 0000000 0000000 00000000132 13450727360 015763 x ustar 00 30 mtime=1554231024.665431533
30 atime=1554231024.665431533
30 ctime=1554231028.525576056
control-3.2.0/src/is_matrix.cc 0000644 0001750 0001750 00000003433 13450727360 016227 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Return true if all arguments are matrices and false otherwise.
Author: Lukas Reichlin
Created: June 2012
Version: 0.2
*/
#include
#include "config.h"
// PKG_ADD: autoload ("is_matrix", "__control_helper_functions__.oct");
DEFUN_DLD (is_matrix, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {} is_matrix (@var{a}, @dots{})\n\
Return true if all arguments are matrices and false otherwise.\n\
@var{[]} is a valid matrix.\n\
Avoid nasty stuff like @code{true = isreal (\"a\")}\n\
@seealso{is_real_matrix, is_real_square_matrix, is_real_vector, is_real_scalar}\n\
@end deftypefn")
{
octave_value retval = true;
octave_idx_type nargin = args.length ();
if (nargin == 0)
{
print_usage ();
}
else
{
for (octave_idx_type i = 0; i < nargin; i++)
{
if (args(i).ndims () != 2 || ! args(i).OV_ISNUMERIC ()
|| ! (args(i).OV_ISCOMPLEX () || args(i).OV_ISREAL ()))
{
retval = false;
break;
}
}
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/sl_mb05nd.cc 0000644 0000000 0000000 00000000132 13450727360 015547 x ustar 00 30 mtime=1554231024.697432756
30 atime=1554231024.697432756
30 ctime=1554231028.525576056
control-3.2.0/src/sl_mb05nd.cc 0000644 0001750 0001750 00000007201 13450727360 016010 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2014-2015 Thomas Vasileiou
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
Matrix exponential and integral for a real matrix.
Uses SLICOT MB05ND by courtesy of NICONET e.V.
Author: Thomas Vasileiou
Created: March 2014
Version: 0.2
*/
#include
#include "common.h"
extern "C"
{
int F77_FUNC (mb05nd, MB05ND)
(F77_INT& N, double& DELTA,
double* A, F77_INT& LDA,
double* EX, F77_INT& LDEX,
double* EXINT, F77_INT& LDEXINT,
double& TOL,
F77_INT* IWORK,
double* DWORK, F77_INT& LDWORK,
F77_INT& INFO);
}
// PKG_ADD: autoload ("__sl_mb05nd__", "__control_slicot_functions__.oct");
DEFUN_DLD (__sl_mb05nd__, args, nargout,
"-*- texinfo -*-\n\
Slicot MB05ND Release 5.0\n\
No argument checking.\n\
For internal use only.")
{
octave_idx_type nargin = args.length ();
octave_value_list retval;
if (nargin != 3)
{
print_usage ();
}
else
{
// arguments in
Matrix a = args(0).matrix_value ();
double delta = args(1).double_value ();
double tol = args(2).double_value ();
F77_INT n = TO_F77_INT (a.rows ());
F77_INT lda = max (1, n);
F77_INT ldex = max (1, n);
F77_INT ldexin = max (1, n);
// arguments out
Matrix ex (ldex, n);
Matrix exint (ldexin, n);
// workspace
F77_INT ldwork = max (1, 2*n*n); // optimum performance
OCTAVE_LOCAL_BUFFER (F77_INT, iwork, n);
OCTAVE_LOCAL_BUFFER (double, dwork, ldwork);
// error indicators
F77_INT info = 0;
// SLICOT routine MB05ND
F77_XFCN (mb05nd, MB05ND,
(n, delta,
a.fortran_vec (), lda,
ex.fortran_vec (), ldex,
exint.fortran_vec (), ldexin,
tol,
iwork,
dwork, ldwork,
info));
if (f77_exception_encountered)
error ("__sl_mb05nd__: exception in SLICOT subroutine MB05ND");
if (info > 0)
{
if (info == n+1)
info = 2;
else
info = 1;
}
static const char* err_msg[] = {
"0: OK",
"1: some element of the denominator of the Pade "
"approximation is zero, so the denominator "
"is exactly singular.",
"2: DELTA = (delta * frobenius norm of matrix A) is "
"probably too large to permit meaningful computation. "
"That is, DELTA > SQRT(BIG), where BIG is a "
"representable number near the overflow threshold of "
"the machine."};
error_msg ("__sl_mb05nd__", info, 2, err_msg);
// return values
retval(0) = ex;
retval(1) = exint;
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/bootstrap 0000644 0000000 0000000 00000000132 13450727360 015415 x ustar 00 30 mtime=1554231024.661431381
30 atime=1554231024.953442529
30 ctime=1554231028.525576056
control-3.2.0/src/bootstrap 0000755 0001750 0001750 00000000055 13450727360 015661 0 ustar 00olaf olaf 0000000 0000000 #! /bin/sh
aclocal
autoconf
autoheader -f
control-3.2.0/src/PaxHeaders.3947/lti_input_idx.cc 0000644 0000000 0000000 00000000132 13450727360 016637 x ustar 00 30 mtime=1554231024.673431839
30 atime=1554231024.673431839
30 ctime=1554231028.525576056
control-3.2.0/src/lti_input_idx.cc 0000644 0001750 0001750 00000006332 13450727360 017104 0 ustar 00olaf olaf 0000000 0000000 /*
Copyright (C) 2009-2016 Lukas F. Reichlin
This file is part of LTI Syncope.
LTI Syncope is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LTI Syncope is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LTI Syncope. If not, see .
First, this function implemented the following Octave function in C++
function [mat_idx, opt_idx] = __lti_input_idx__ (varargin)
str_idx = find (cellfun (@ischar, varargin));
if (isempty (str_idx))
mat_idx = 1 : nargin;
opt_idx = [];
else
mat_idx = 1 : str_idx(1)-1;
opt_idx = str_idx(1) : nargin;
endif
endfunction
Later on, the C++ function was extended such that
it recognizes classes in some cases. See comment
block in the code for details. I know this looks
like a horrible definition for a function, but it
is exactly the behavior I need.
Author: Lukas Reichlin
Created: October 2015
Version: 0.1
*/
#include
#include "config.h"
// PKG_ADD: autoload ("__lti_input_idx__", "__control_helper_functions__.oct");
DEFUN_DLD (__lti_input_idx__, args, ,
"-*- texinfo -*-\n\
@deftypefn {Loadable Function} {[@var{mat_idx}, @var{opt_idx}, @var{obj_flg}] =} __lti_input_idx__ (@var{args})\n\
Return some indices for cell @var{args}. For internal use only.\n\
Read the source code in @code{lti_input_idx.cc} for details.\n\
@end deftypefn")
{
octave_value_list retval;
octave_idx_type nargin = args.length ();
// first, check whether a cell is passed
if (nargin == 1 && args(0).is_defined () && args(0).OV_ISCELL ())
{
octave_idx_type len = args(0).cell_value().numel();
octave_idx_type idx = len;
octave_idx_type offset = 0;
// if the cell is not empty, look for the first string
for (octave_idx_type i = 0; i < len; i++)
{
if (args(0).cell_value().elem(i).is_string ())
{
idx = i;
break;
}
}
// ** If the element before the first string is an object,
// then this object belongs to the option index.
// ss (d, ltisys, 'key', val)
// ** If there is no string at all in cell args(0), check
// whether the last element in args(0) is an object.
// If so, this object also belongs to the option index.
// tf (num, den, ltisys)
// ** All other objects (before built-in types (except chars)
// and after strings) are not recognized as objects.
// ss (a, b, ltisys, c, d, 'key', val, 'lti', ltisys)
if (len > 0 && idx > 0
&& args(0).cell_value().elem(idx-1).OV_ISOBJECT ())
{
offset = 1;
}
Range mat_idx (1, idx-offset);
Range opt_idx (idx+1-offset, len);
retval(2) = offset; // abused as logical in the LTI constructors
retval(1) = opt_idx;
retval(0) = mat_idx;
}
else
{
print_usage ();
}
return retval;
}
control-3.2.0/src/PaxHeaders.3947/slicot.tar.gz 0000644 0000000 0000000 00000000131 13450727360 016100 x ustar 00 30 mtime=1554231024.933441765
29 atime=1554231024.92544146
30 ctime=1554231028.525576056
control-3.2.0/src/slicot.tar.gz 0000644 0001750 0001750 00011565204 13450727360 016360 0 ustar 00olaf olaf 0000000 0000000 ‹×}òL slicot.tar ìýis9²/Ïk~ŠŠyþq-É"»€Úg‹Ðbwë´%k¼OLÜ %ÚæYò¥îöÄùð2K¢6)ŠZ\5Ór‘ÄšH$@æ/G?üáÖŸP=Y¿"KbüWý¿×Ï„ˆ³8ÎÒL¦À_ã?Éí7í¸ž]/ƒà¿Î¦_Æ-éŽ.Î'ëhÏšŸÑ³³éÉÅÕm²Á"ã§0þ"²ÿu_þûÿžŽ¯Æ+e‡…Æ~±Œúñ_ËÓ4þ»»j†ÑH}¸qóƾê'5êŠ`þ'I–ý!Wп¹Ïw>þA„#5ûOÃP½öÖ½ü†b”&Q4*Ô÷ÃP¨ï“QÕfˆF1&’ê]ŽŠÜd–£Øeà‰ÄHà{¤ÞVƒÔß‹A[[£Qjs|§TQ‰ý!IªŽr„¦n¿(9ŠDd[›ÉL¿§£<×%AWOd&,‘Eœ[šÉÈö‚—ä'‘û>”6ƒŽ—Ä©÷Ü6©nüÛ缎ùEBTçØÏÿu<4©„a–d$ó^;§¼I17E0 2¥›‚ab¦A2*ÒÖº:–Ïñë"o«k‰ò›ëJìlÍF‚fñ
Ëçï…WWSû³Q1g´º–_[×@U•Ia¿Eµ²e*pàw+—F¼‚ü+(¿™„EÙò£Q›Fj
Ph‡véQËBlˆFYê±s{?˜ßšÕͳúºi²ØBÀøó®Òú´ëÉ:ô?ÇaUÿ‹zýo..¡(¬(…¦uZªu-Ìeç)š2·„ÀîÏêaÅ(o×ÿh
»‹ƒÂ«KiGaaE‡°Ôá´¨©,ÅI÷Êä(ÍlƒÝh.Rª@ÐIê°Ú%
øÌíœ3ÌßM%ͰS[
CfjSty®kƒN›=§ÙEÓ~\íóÎÕIÔvžÖ,üÝ4È8Ô]SÝŒ3àéÕ•
ôt•Ê$¯wઽYJÒøñŽ©éj:fËoYis“‚ÕËWZ~~B‡\”.‘èQ°D‰>}©9áÇ5©¬Ìj}¸aÅ8ÓjÍWÖœè®åóm?í뺆õ?’RÖœÿÄýú¿Ž'c$s+R2Û³ (Kõ÷ #¤$NÕ#c|)[D|Ïn¤`¡7²´<¹C
%Ìy®Â¨F
µ\f®³Lá*—Ù{$¤-1
¥•$IF§›\
«oMsU8ŠÊËi:ìÄÛ¯HÚ…Ò®Ãiì(&³DU):‘yW‚iä@éI¡× ³$“Z”Ò–""©Ó¨>fEPô¥çª4‹
M0EÔ4ÒÉF±Rè{%Ü£TÏÅGxN”'æ8UC“tV§n@`èvd8Xõ/‹ì§¨Ðé%'g¬Y£Á0WÌœhŠ)†W]µ{ê"³Üå*k”H;ARªVL C°¬Èìu h–L½ÊâH¯–Þ$ªœ¨zpvDB%ðö¬6¢0vg¸yj'4݉e¹~·Â@ɈBÑÆÍ9§–‡ã0·ZS˜;¹H·ÉH›àNÀð§"™®³‹PYSÓ2¸Ó‘šÏáj$•K<`kça8ËÛˆ³2ŚjEK‰ÉÔ°GâÍÅ„ñv"ã”6,©Ø9ÇqÒ:-“……Sãd’ZñfÈ 0N"—6‰Èr{¯ËD¿ÇJ–'¶‘¶ñqŽÇœxjˆŒôj9»J‹%æ—!pdtNh{lb„«ŽYl™&K‰À°Ìeº#pL-"ˇDyÒ{‹$b:°µ©DÙ9&y/Ca‹IPÄRk²¸pçĉ°˜É¼¼ÎÁUC*çP„ùzX8UË…SÓ'Õ‚<*Q›n&C…•¶+,tf«
iQQÞ0%ð¶,ìjEQXí‚âØ&)„I¢(™™© ¦HfZûW|&Ò:
ã*ÚFá\MK±
%‹Ôö#MNóÌé æŠ
„„4šD‘šµ"ÁÛ{R˜œŠ'
5ÂÌÉXé#qb92±Ç7JLFI‰ƒIv¤öûL}/*ššÚ§‹ö}:5)’uÈUS–;ù–FnMÏc·¦#±Tú˜tÞA¦Ê1ËM¢GFâœHÍÖ¤§‘‡©»A» ZÇBhM#¹["#Ê@&m)y’T諨.æPôÍÌșۥ¯’
Ì·˜n´WˆIº‰\÷O-Ö"¶c@z,ra”YÎpŠ:ü2"8u3Þ“ÌŽ‡½|e'Z{Êtj–GB_R°”Øê"ê½Ä¿$qÚ1S%Ç]ÊÓלþ©Z3‘Ù~¤ÒÌ~ZûžZ)MŠ0Ð×(C°-05©œÇV>äIlgAIË?f¥„G#“”N—&®iÔGÚÝPPØ„%m-S¢o†úy‹¬fa±À!ñMè«ø4rgXIdä€R©2·+r½¯Ä»a¤5îÜö#+‹QfΜAºK·çHwŽ›£q€\
[Q(ñ`àÝ¢FZ°YÔû-xhì®ÚOá3³7\-Xêí¿Þ[ò叨ödw1P*h–X&F\*v‹"Ëz2ËÝ{œXêi! :ç½¢0 FÇúûÂJŽçŒ2] 4ŽJ\s]R"°’"VÖß6S¦¾Æv%ƒÝXbçyå–ÉhÛ,Âìv‰•òÄÎáØl‘@Ÿ2;h˜çIlÓg¤} Šf¬è`Ûg,tPÇv4D`½ç Í»iz·â/‚iÍ‘»ÿ¡¥áš8ب %;†/ïåÒ,¸‰9%àÎ×±d‘»‰N»mÔ$õª54:Kh
6r
UbUZä¨aæÎû©Í4ô´Èéb´ù‹¿…qÖN