Mercurial > octave
changeset 22953:fd649fd3db75
use F77_INT instead of octave_idx_type for liboctave EIG classes
* EIG.cc, fEIG.cc: Use F77_INT instead of octave_idx_type for integer
data passed to Fortran subroutines.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 26 Dec 2016 21:44:04 -0500 |
parents | 7c9492d3b421 |
children | 6cd3e9acf443 |
files | liboctave/numeric/EIG.cc liboctave/numeric/fEIG.cc |
diffstat | 2 files changed, 179 insertions(+), 147 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/numeric/EIG.cc Mon Dec 26 21:28:03 2016 -0500 +++ b/liboctave/numeric/EIG.cc Mon Dec 26 21:44:04 2016 -0500 @@ -40,12 +40,13 @@ if (a.is_symmetric ()) return symmetric_init (a, calc_rev, calc_lev); - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; Matrix atmp = a; double *tmp_data = atmp.fortran_vec (); @@ -56,19 +57,19 @@ Array<double> wi (dim_vector (n, 1)); double *pwi = wi.fortran_vec (); - octave_idx_type tnvr = calc_rev ? n : 0; + F77_INT tnvr = calc_rev ? n : 0; Matrix vr (tnvr, tnvr); double *pvr = vr.fortran_vec (); - octave_idx_type tnvl = calc_lev ? n : 0; + F77_INT tnvl = calc_lev ? n : 0; Matrix vl (tnvl, tnvl); double *pvl = vl.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; double dummy_work; - octave_idx_type ilo; - octave_idx_type ihi; + F77_INT ilo; + F77_INT ihi; Array<double> scale (dim_vector (n, 1)); double *pscale = scale.fortran_vec (); @@ -81,7 +82,7 @@ Array<double> rcondv (dim_vector (n, 1)); double *prcondv = rcondv.fortran_vec (); - octave_idx_type dummy_iwork; + F77_INT dummy_iwork; F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), @@ -99,7 +100,7 @@ if (info != 0) (*current_liboctave_error_handler) ("dgeevx workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<double> work (dim_vector (lwork, 1)); double *pwork = work.fortran_vec (); @@ -123,20 +124,20 @@ (*current_liboctave_error_handler) ("dgeevx failed to converge"); lambda.resize (n); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; v.resize (nvr, nvr); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; w.resize (nvl, nvl); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) { if (wi.elem (j) == 0.0) { lambda.elem (j) = Complex (wr.elem (j)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) v.elem (i, j) = vr.elem (i, j); - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) w.elem (i, j) = vl.elem (i, j); } else @@ -147,7 +148,7 @@ lambda.elem (j) = Complex (wr.elem (j), wi.elem (j)); lambda.elem (j+1) = Complex (wr.elem (j+1), wi.elem (j+1)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) { double real_part = vr.elem (i, j); double imag_part = vr.elem (i, j+1); @@ -155,7 +156,7 @@ v.elem (i, j+1) = Complex (real_part, -imag_part); } - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) { double real_part = vl.elem (i, j); double imag_part = vl.elem (i, j+1); @@ -172,12 +173,13 @@ octave_idx_type EIG::symmetric_init (const Matrix& a, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; Matrix atmp = a; double *tmp_data = atmp.fortran_vec (); @@ -185,7 +187,7 @@ ColumnVector wr (n); double *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; double dummy_work; F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), @@ -197,7 +199,7 @@ if (info != 0) (*current_liboctave_error_handler) ("dsyev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<double> work (dim_vector (lwork, 1)); double *pwork = work.fortran_vec (); @@ -230,12 +232,13 @@ if (a.is_hermitian ()) return hermitian_init (a, calc_rev, calc_lev); - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; ComplexMatrix atmp = a; Complex *tmp_data = atmp.fortran_vec (); @@ -243,23 +246,23 @@ ComplexColumnVector wr (n); Complex *pw = wr.fortran_vec (); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; ComplexMatrix vrtmp (nvr, nvr); Complex *pvr = vrtmp.fortran_vec (); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; ComplexMatrix vltmp (nvl, nvl); Complex *pvl = vltmp.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; Complex dummy_work; - octave_idx_type lrwork = 2*n; + F77_INT lrwork = 2*n; Array<double> rwork (dim_vector (lrwork, 1)); double *prwork = rwork.fortran_vec (); - octave_idx_type ilo; - octave_idx_type ihi; + F77_INT ilo; + F77_INT ihi; Array<double> scale (dim_vector (n, 1)); double *pscale = scale.fortran_vec (); @@ -289,7 +292,7 @@ if (info != 0) (*current_liboctave_error_handler) ("zgeevx workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<Complex> work (dim_vector (lwork, 1)); Complex *pwork = work.fortran_vec (); @@ -323,12 +326,13 @@ octave_idx_type EIG::hermitian_init (const ComplexMatrix& a, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; ComplexMatrix atmp = a; Complex *tmp_data = atmp.fortran_vec (); @@ -336,10 +340,10 @@ ColumnVector wr (n); double *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; Complex dummy_work; - octave_idx_type lrwork = 3*n; + F77_INT lrwork = 3*n; Array<double> rwork (dim_vector (lrwork, 1)); double *prwork = rwork.fortran_vec (); @@ -354,7 +358,7 @@ if (info != 0) (*current_liboctave_error_handler) ("zheev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<Complex> work (dim_vector (lwork, 1)); Complex *pwork = work.fortran_vec (); @@ -386,16 +390,19 @@ (*current_liboctave_error_handler) ("EIG: matrix contains Inf or NaN values"); - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; Matrix tmp = b; double *tmp_data = tmp.fortran_vec (); @@ -426,15 +433,15 @@ Array<double> beta (dim_vector (n, 1)); double *pbeta = beta.fortran_vec (); - octave_idx_type tnvr = calc_rev ? n : 0; + F77_INT tnvr = calc_rev ? n : 0; Matrix vr (tnvr, tnvr); double *pvr = vr.fortran_vec (); - octave_idx_type tnvl = calc_lev ? n : 0; + F77_INT tnvl = calc_lev ? n : 0; Matrix vl (tnvl, tnvl); double *pvl = vl.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; double dummy_work; F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), @@ -449,7 +456,7 @@ if (info != 0) (*current_liboctave_error_handler) ("dggev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<double> work (dim_vector (lwork, 1)); double *pwork = work.fortran_vec (); @@ -469,20 +476,20 @@ (*current_liboctave_error_handler) ("dggev failed to converge"); lambda.resize (n); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; v.resize (nvr, nvr); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; w.resize (nvl, nvl); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) { if (ai.elem (j) == 0.0) { lambda.elem (j) = Complex (ar.elem (j) / beta.elem (j)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) v.elem (i, j) = vr.elem (i, j); - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) w.elem (i, j) = vl.elem (i, j); } else @@ -495,14 +502,14 @@ lambda.elem (j+1) = Complex (ar.elem (j+1) / beta.elem (j+1), ai.elem (j+1) / beta.elem (j+1)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) { double real_part = vr.elem (i, j); double imag_part = vr.elem (i, j+1); v.elem (i, j) = Complex (real_part, imag_part); v.elem (i, j+1) = Complex (real_part, -imag_part); } - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) { double real_part = vl.elem (i, j); double imag_part = vl.elem (i, j+1); @@ -520,16 +527,19 @@ EIG::symmetric_init (const Matrix& a, const Matrix& b, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; Matrix atmp = a; double *atmp_data = atmp.fortran_vec (); @@ -540,7 +550,7 @@ ColumnVector wr (n); double *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; double dummy_work; F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), @@ -554,7 +564,7 @@ if (info != 0) (*current_liboctave_error_handler) ("dsygv workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<double> work (dim_vector (lwork, 1)); double *pwork = work.fortran_vec (); @@ -587,16 +597,19 @@ (*current_liboctave_error_handler) ("EIG: matrix contains Inf or NaN values"); - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; ComplexMatrix tmp = b; Complex*tmp_data = tmp.fortran_vec (); @@ -624,18 +637,18 @@ ComplexColumnVector beta (n); Complex *pbeta = beta.fortran_vec (); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; ComplexMatrix vrtmp (nvr, nvr); Complex *pvr = vrtmp.fortran_vec (); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; ComplexMatrix vltmp (nvl, nvl); Complex *pvl = vltmp.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; Complex dummy_work; - octave_idx_type lrwork = 8*n; + F77_INT lrwork = 8*n; Array<double> rwork (dim_vector (lrwork, 1)); double *prwork = rwork.fortran_vec (); @@ -654,7 +667,7 @@ if (info != 0) (*current_liboctave_error_handler) ("zggev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<Complex> work (dim_vector (lwork, 1)); Complex *pwork = work.fortran_vec (); @@ -678,7 +691,7 @@ lambda.resize (n); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) lambda.elem (j) = alpha.elem (j) / beta.elem (j); v = vrtmp; @@ -691,16 +704,19 @@ EIG::hermitian_init (const ComplexMatrix& a, const ComplexMatrix& b, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; ComplexMatrix atmp = a; Complex *atmp_data = atmp.fortran_vec (); @@ -711,10 +727,10 @@ ColumnVector wr (n); double *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; Complex dummy_work; - octave_idx_type lrwork = 3*n; + F77_INT lrwork = 3*n; Array<double> rwork (dim_vector (lrwork, 1)); double *prwork = rwork.fortran_vec (); @@ -730,7 +746,7 @@ if (info != 0) (*current_liboctave_error_handler) ("zhegv workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<Complex> work (dim_vector (lwork, 1)); Complex *pwork = work.fortran_vec ();
--- a/liboctave/numeric/fEIG.cc Mon Dec 26 21:28:03 2016 -0500 +++ b/liboctave/numeric/fEIG.cc Mon Dec 26 21:44:04 2016 -0500 @@ -41,12 +41,13 @@ if (a.is_symmetric ()) return symmetric_init (a, calc_rev, calc_lev); - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; FloatMatrix atmp = a; float *tmp_data = atmp.fortran_vec (); @@ -57,19 +58,19 @@ Array<float> wi (dim_vector (n, 1)); float *pwi = wi.fortran_vec (); - volatile octave_idx_type nvr = calc_rev ? n : 0; + volatile F77_INT nvr = calc_rev ? n : 0; FloatMatrix vr (nvr, nvr); float *pvr = vr.fortran_vec (); - volatile octave_idx_type nvl = calc_lev ? n : 0; + volatile F77_INT nvl = calc_lev ? n : 0; FloatMatrix vl (nvl, nvl); float *pvl = vl.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; float dummy_work; - octave_idx_type ilo; - octave_idx_type ihi; + F77_INT ilo; + F77_INT ihi; Array<float> scale (dim_vector (n, 1)); float *pscale = scale.fortran_vec (); @@ -82,7 +83,7 @@ Array<float> rcondv (dim_vector (n, 1)); float *prcondv = rcondv.fortran_vec (); - octave_idx_type dummy_iwork; + F77_INT dummy_iwork; F77_XFCN (sgeevx, SGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), F77_CONST_CHAR_ARG2 ("N", 1), @@ -100,7 +101,7 @@ if (info != 0) (*current_liboctave_error_handler) ("sgeevx workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<float> work (dim_vector (lwork, 1)); float *pwork = work.fortran_vec (); @@ -127,7 +128,7 @@ v.resize (nvr, nvr); w.resize (nvl, nvl); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) { if (wi.elem (j) == 0.0) { @@ -135,7 +136,7 @@ for (octave_idx_type i = 0; i < nvr; i++) v.elem (i, j) = vr.elem (i, j); - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) w.elem (i, j) = vl.elem (i, j); } else @@ -146,14 +147,14 @@ lambda.elem (j) = FloatComplex (wr.elem (j), wi.elem (j)); lambda.elem (j+1) = FloatComplex (wr.elem (j+1), wi.elem (j+1)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) { float real_part = vr.elem (i, j); float imag_part = vr.elem (i, j+1); v.elem (i, j) = FloatComplex (real_part, imag_part); v.elem (i, j+1) = FloatComplex (real_part, -imag_part); } - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) { float real_part = vl.elem (i, j); float imag_part = vl.elem (i, j+1); @@ -170,12 +171,13 @@ octave_idx_type FloatEIG::symmetric_init (const FloatMatrix& a, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; FloatMatrix atmp = a; float *tmp_data = atmp.fortran_vec (); @@ -183,7 +185,7 @@ FloatColumnVector wr (n); float *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; float dummy_work; F77_XFCN (ssyev, SSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), @@ -195,7 +197,7 @@ if (info != 0) (*current_liboctave_error_handler) ("ssyev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<float> work (dim_vector (lwork, 1)); float *pwork = work.fortran_vec (); @@ -229,12 +231,13 @@ if (a.is_hermitian ()) return hermitian_init (a, calc_rev, calc_lev); - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; FloatComplexMatrix atmp = a; FloatComplex *tmp_data = atmp.fortran_vec (); @@ -242,23 +245,23 @@ FloatComplexColumnVector wr (n); FloatComplex *pw = wr.fortran_vec (); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; FloatComplexMatrix vrtmp (nvr, nvr); FloatComplex *pvr = vrtmp.fortran_vec (); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; FloatComplexMatrix vltmp (nvl, nvl); FloatComplex *pvl = vltmp.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; FloatComplex dummy_work; - octave_idx_type lrwork = 2*n; + F77_INT lrwork = 2*n; Array<float> rwork (dim_vector (lrwork, 1)); float *prwork = rwork.fortran_vec (); - octave_idx_type ilo; - octave_idx_type ihi; + F77_INT ilo; + F77_INT ihi; Array<float> scale (dim_vector (n, 1)); float *pscale = scale.fortran_vec (); @@ -287,7 +290,7 @@ if (info != 0) (*current_liboctave_error_handler) ("cgeevx workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<FloatComplex> work (dim_vector (lwork, 1)); FloatComplex *pwork = work.fortran_vec (); @@ -321,12 +324,13 @@ FloatEIG::hermitian_init (const FloatComplexMatrix& a, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT a_nc = to_f77_int (a.cols ()); - if (n != a.cols ()) + if (n != a_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); - octave_idx_type info = 0; + F77_INT info = 0; FloatComplexMatrix atmp = a; FloatComplex *tmp_data = atmp.fortran_vec (); @@ -334,10 +338,10 @@ FloatColumnVector wr (n); float *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; FloatComplex dummy_work; - octave_idx_type lrwork = 3*n; + F77_INT lrwork = 3*n; Array<float> rwork (dim_vector (lrwork, 1)); float *prwork = rwork.fortran_vec (); @@ -352,7 +356,7 @@ if (info != 0) (*current_liboctave_error_handler) ("cheev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<FloatComplex> work (dim_vector (lwork, 1)); FloatComplex *pwork = work.fortran_vec (); @@ -384,16 +388,19 @@ (*current_liboctave_error_handler) ("EIG: matrix contains Inf or NaN values"); - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; FloatMatrix tmp = b; float *tmp_data = tmp.fortran_vec (); @@ -423,15 +430,15 @@ Array<float> beta (dim_vector (n, 1)); float *pbeta = beta.fortran_vec (); - volatile octave_idx_type nvr = calc_rev ? n : 0; + volatile F77_INT nvr = calc_rev ? n : 0; FloatMatrix vr (nvr, nvr); float *pvr = vr.fortran_vec (); - volatile octave_idx_type nvl = calc_lev ? n : 0; + volatile F77_INT nvl = calc_lev ? n : 0; FloatMatrix vl (nvl, nvl); float *pvl = vl.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; float dummy_work; F77_XFCN (sggev, SGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), @@ -446,7 +453,7 @@ if (info != 0) (*current_liboctave_error_handler) ("sggev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<float> work (dim_vector (lwork, 1)); float *pwork = work.fortran_vec (); @@ -470,15 +477,15 @@ w.resize (nvl, nvl); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) { if (ai.elem (j) == 0.0) { lambda.elem (j) = FloatComplex (ar.elem (j) / beta.elem (j)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) v.elem (i, j) = vr.elem (i, j); - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) w.elem (i, j) = vl.elem (i, j); } else @@ -491,14 +498,14 @@ lambda.elem (j+1) = FloatComplex (ar.elem (j+1) / beta.elem (j+1), ai.elem (j+1) / beta.elem (j+1)); - for (octave_idx_type i = 0; i < nvr; i++) + for (F77_INT i = 0; i < nvr; i++) { float real_part = vr.elem (i, j); float imag_part = vr.elem (i, j+1); v.elem (i, j) = FloatComplex (real_part, imag_part); v.elem (i, j+1) = FloatComplex (real_part, -imag_part); } - for (octave_idx_type i = 0; i < nvl; i++) + for (F77_INT i = 0; i < nvl; i++) { float real_part = vl.elem (i, j); float imag_part = vl.elem (i, j+1); @@ -516,16 +523,19 @@ FloatEIG::symmetric_init (const FloatMatrix& a, const FloatMatrix& b, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; FloatMatrix atmp = a; float *atmp_data = atmp.fortran_vec (); @@ -536,7 +546,7 @@ FloatColumnVector wr (n); float *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; float dummy_work; F77_XFCN (ssygv, SSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), @@ -550,7 +560,7 @@ if (info != 0) (*current_liboctave_error_handler) ("ssygv workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work); + lwork = static_cast<F77_INT> (dummy_work); Array<float> work (dim_vector (lwork, 1)); float *pwork = work.fortran_vec (); @@ -583,16 +593,19 @@ (*current_liboctave_error_handler) ("EIG: matrix contains Inf or NaN values"); - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; FloatComplexMatrix tmp = b; FloatComplex *tmp_data = tmp.fortran_vec (); @@ -620,18 +633,18 @@ FloatComplexColumnVector beta (n); FloatComplex *pbeta = beta.fortran_vec (); - octave_idx_type nvr = calc_rev ? n : 0; + F77_INT nvr = calc_rev ? n : 0; FloatComplexMatrix vrtmp (nvr, nvr); FloatComplex *pvr = vrtmp.fortran_vec (); - octave_idx_type nvl = calc_lev ? n : 0; + F77_INT nvl = calc_lev ? n : 0; FloatComplexMatrix vltmp (nvl, nvl); FloatComplex *pvl = vltmp.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; FloatComplex dummy_work; - octave_idx_type lrwork = 8*n; + F77_INT lrwork = 8*n; Array<float> rwork (dim_vector (lrwork, 1)); float *prwork = rwork.fortran_vec (); @@ -648,7 +661,7 @@ if (info != 0) (*current_liboctave_error_handler) ("cggev workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<FloatComplex> work (dim_vector (lwork, 1)); FloatComplex *pwork = work.fortran_vec (); @@ -670,7 +683,7 @@ lambda.resize (n); - for (octave_idx_type j = 0; j < n; j++) + for (F77_INT j = 0; j < n; j++) lambda.elem (j) = alpha.elem (j) / beta.elem (j); v = vrtmp; @@ -684,16 +697,19 @@ const FloatComplexMatrix& b, bool calc_rev, bool calc_lev) { - octave_idx_type n = a.rows (); - octave_idx_type nb = b.rows (); + F77_INT n = to_f77_int (a.rows ()); + F77_INT nb = to_f77_int (b.rows ()); - if (n != a.cols () || nb != b.cols ()) + F77_INT a_nc = to_f77_int (a.cols ()); + F77_INT b_nc = to_f77_int (b.cols ()); + + if (n != a_nc || nb != b_nc) (*current_liboctave_error_handler) ("EIG requires square matrix"); if (n != nb) (*current_liboctave_error_handler) ("EIG requires same size matrices"); - octave_idx_type info = 0; + F77_INT info = 0; FloatComplexMatrix atmp = a; FloatComplex *atmp_data = atmp.fortran_vec (); @@ -704,10 +720,10 @@ FloatColumnVector wr (n); float *pwr = wr.fortran_vec (); - octave_idx_type lwork = -1; + F77_INT lwork = -1; FloatComplex dummy_work; - octave_idx_type lrwork = 3*n; + F77_INT lrwork = 3*n; Array<float> rwork (dim_vector (lrwork, 1)); float *prwork = rwork.fortran_vec (); @@ -723,7 +739,7 @@ if (info != 0) (*current_liboctave_error_handler) ("zhegv workspace query failed"); - lwork = static_cast<octave_idx_type> (dummy_work.real ()); + lwork = static_cast<F77_INT> (dummy_work.real ()); Array<FloatComplex> work (dim_vector (lwork, 1)); FloatComplex *pwork = work.fortran_vec ();