Mercurial > octave
changeset 22951:2e6a327e7903
use F77_INT instead of octave_idx_type for liboctave QRP functions
* qrp.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:24:32 -0500 |
parents | f2fae9bd5cec |
children | 7c9492d3b421 |
files | liboctave/numeric/qrp.cc |
diffstat | 1 files changed, 76 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/numeric/qrp.cc Mon Dec 26 21:16:01 2016 -0500 +++ b/liboctave/numeric/qrp.cc Mon Dec 26 21:24:32 2016 -0500 @@ -50,19 +50,19 @@ { assert (qr_type != qr<Matrix>::raw); - octave_idx_type m = a.rows (); - octave_idx_type n = a.cols (); + F77_INT m = to_f77_int (a.rows ()); + F77_INT n = to_f77_int (a.cols ()); - octave_idx_type min_mn = m < n ? m : n; + F77_INT min_mn = m < n ? m : n; OCTAVE_LOCAL_BUFFER (double, tau, min_mn); - octave_idx_type info = 0; + F77_INT info = 0; Matrix afact = a; if (m > n && qr_type == qr<Matrix>::std) afact.resize (m, m); - MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0); + MArray<F77_INT> jpvt (dim_vector (n, 1), 0); if (m > 0) { @@ -73,20 +73,24 @@ &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; - lwork = std::max (lwork, static_cast<octave_idx_type> (1)); + F77_INT lwork = static_cast<F77_INT> (rlwork); + lwork = std::max (lwork, static_cast<F77_INT> (1)); OCTAVE_LOCAL_BUFFER (double, work, lwork); + F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, info)); } else - for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1; + { + for (F77_INT i = 0; i < n; i++) + jpvt(i) = i+1; + } // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= static_cast<octave_idx_type> (1); + jpvt -= static_cast<F77_INT> (1); p = PermMatrix (jpvt, true); form (n, afact, tau, qr_type); @@ -114,19 +118,19 @@ { assert (qr_type != qr<FloatMatrix>::raw); - octave_idx_type m = a.rows (); - octave_idx_type n = a.cols (); + F77_INT m = to_f77_int (a.rows ()); + F77_INT n = to_f77_int (a.cols ()); - octave_idx_type min_mn = m < n ? m : n; + F77_INT min_mn = m < n ? m : n; OCTAVE_LOCAL_BUFFER (float, tau, min_mn); - octave_idx_type info = 0; + F77_INT info = 0; FloatMatrix afact = a; if (m > n && qr_type == qr<FloatMatrix>::std) afact.resize (m, m); - MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0); + MArray<F77_INT> jpvt (dim_vector (n, 1), 0); if (m > 0) { @@ -137,20 +141,24 @@ &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; - lwork = std::max (lwork, static_cast<octave_idx_type> (1)); + F77_INT lwork = static_cast<F77_INT> (rlwork); + lwork = std::max (lwork, static_cast<F77_INT> (1)); OCTAVE_LOCAL_BUFFER (float, work, lwork); + F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, info)); } else - for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1; + { + for (F77_INT i = 0; i < n; i++) + jpvt(i) = i+1; + } // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= static_cast<octave_idx_type> (1); + jpvt -= static_cast<F77_INT> (1); p = PermMatrix (jpvt, true); form (n, afact, tau, qr_type); @@ -178,19 +186,19 @@ { assert (qr_type != qr<ComplexMatrix>::raw); - octave_idx_type m = a.rows (); - octave_idx_type n = a.cols (); + F77_INT m = to_f77_int (a.rows ()); + F77_INT n = to_f77_int (a.cols ()); - octave_idx_type min_mn = m < n ? m : n; + F77_INT min_mn = m < n ? m : n; OCTAVE_LOCAL_BUFFER (Complex, tau, min_mn); - octave_idx_type info = 0; + F77_INT info = 0; ComplexMatrix afact = a; if (m > n && qr_type == qr<ComplexMatrix>::std) afact.resize (m, m); - MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0); + MArray<F77_INT> jpvt (dim_vector (n, 1), 0); if (m > 0) { @@ -198,25 +206,35 @@ // workspace query. Complex clwork; - F77_XFCN (zgeqp3, ZGEQP3, (m, n, F77_DBLE_CMPLX_ARG (afact.fortran_vec ()), - m, jpvt.fortran_vec (), F77_DBLE_CMPLX_ARG (tau), - F77_DBLE_CMPLX_ARG (&clwork), -1, rwork, info)); + F77_XFCN (zgeqp3, ZGEQP3, (m, n, + F77_DBLE_CMPLX_ARG (afact.fortran_vec ()), + m, jpvt.fortran_vec (), + F77_DBLE_CMPLX_ARG (tau), + F77_DBLE_CMPLX_ARG (&clwork), + -1, rwork, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); - lwork = std::max (lwork, static_cast<octave_idx_type> (1)); + F77_INT lwork = static_cast<F77_INT> (clwork.real ()); + lwork = std::max (lwork, static_cast<F77_INT> (1)); OCTAVE_LOCAL_BUFFER (Complex, work, lwork); - F77_XFCN (zgeqp3, ZGEQP3, (m, n, F77_DBLE_CMPLX_ARG (afact.fortran_vec ()), - m, jpvt.fortran_vec (), F77_DBLE_CMPLX_ARG (tau), - F77_DBLE_CMPLX_ARG (work), lwork, rwork, info)); + + F77_XFCN (zgeqp3, ZGEQP3, (m, n, + F77_DBLE_CMPLX_ARG (afact.fortran_vec ()), + m, jpvt.fortran_vec (), + F77_DBLE_CMPLX_ARG (tau), + F77_DBLE_CMPLX_ARG (work), + lwork, rwork, info)); } else - for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1; + { + for (F77_INT i = 0; i < n; i++) + jpvt(i) = i+1; + } // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= static_cast<octave_idx_type> (1); + jpvt -= static_cast<F77_INT> (1); p = PermMatrix (jpvt, true); form (n, afact, tau, qr_type); @@ -244,19 +262,19 @@ { assert (qr_type != qr<FloatComplexMatrix>::raw); - octave_idx_type m = a.rows (); - octave_idx_type n = a.cols (); + F77_INT m = to_f77_int (a.rows ()); + F77_INT n = to_f77_int (a.cols ()); - octave_idx_type min_mn = m < n ? m : n; + F77_INT min_mn = m < n ? m : n; OCTAVE_LOCAL_BUFFER (FloatComplex, tau, min_mn); - octave_idx_type info = 0; + F77_INT info = 0; FloatComplexMatrix afact = a; if (m > n && qr_type == qr<FloatComplexMatrix>::std) afact.resize (m, m); - MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0); + MArray<F77_INT> jpvt (dim_vector (n, 1), 0); if (m > 0) { @@ -264,25 +282,35 @@ // workspace query. FloatComplex clwork; - F77_XFCN (cgeqp3, CGEQP3, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()), - m, jpvt.fortran_vec (), F77_CMPLX_ARG (tau), - F77_CMPLX_ARG (&clwork), -1, rwork, info)); + F77_XFCN (cgeqp3, CGEQP3, (m, n, + F77_CMPLX_ARG (afact.fortran_vec ()), + m, jpvt.fortran_vec (), + F77_CMPLX_ARG (tau), + F77_CMPLX_ARG (&clwork), + -1, rwork, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); - lwork = std::max (lwork, static_cast<octave_idx_type> (1)); + F77_INT lwork = static_cast<F77_INT> (clwork.real ()); + lwork = std::max (lwork, static_cast<F77_INT> (1)); OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); - F77_XFCN (cgeqp3, CGEQP3, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()), - m, jpvt.fortran_vec (), F77_CMPLX_ARG (tau), - F77_CMPLX_ARG (work), lwork, rwork, info)); + + F77_XFCN (cgeqp3, CGEQP3, (m, n, + F77_CMPLX_ARG (afact.fortran_vec ()), + m, jpvt.fortran_vec (), + F77_CMPLX_ARG (tau), + F77_CMPLX_ARG (work), + lwork, rwork, info)); } else - for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1; + { + for (F77_INT i = 0; i < n; i++) + jpvt(i) = i+1; + } // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= static_cast<octave_idx_type> (1); + jpvt -= static_cast<F77_INT> (1); p = PermMatrix (jpvt, true); form (n, afact, tau, qr_type);