Mercurial > octave
changeset 22973:aa55d32100c9
use F77_INT instead of octave_idx_type for liboctave sparse matrix classes
* dSparse.cc, CSparse.cc: Use F77_INT instead of octave_idx_type for
integer data passed to Fortran subroutines.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 28 Dec 2016 17:14:00 -0500 |
parents | 8bc5d69a96f3 |
children | ecc5eeada8dc |
files | liboctave/array/CSparse.cc liboctave/array/dSparse.cc |
diffstat | 2 files changed, 559 insertions(+), 267 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/CSparse.cc Wed Dec 28 13:33:13 2016 -0500 +++ b/liboctave/array/CSparse.cc Wed Dec 28 17:14:00 2016 -0500 @@ -3683,13 +3683,21 @@ } } - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - F77_XFCN (zptsv, ZPTSV, (nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zptsv, ZPTSV, (tmp_nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (result), - b.rows (), err)); + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -3741,13 +3749,21 @@ } } - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - F77_XFCN (zgtsv, ZGTSV, (nr, b_nc, F77_DBLE_CMPLX_ARG (DL), + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgtsv, ZGTSV, (tmp_nr, b_nc, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (result), - b.rows (), err)); + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -3808,8 +3824,8 @@ OCTAVE_LOCAL_BUFFER (Complex, DU, nr - 1); OCTAVE_LOCAL_BUFFER (Complex, D, nr); OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1); - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) { @@ -3845,8 +3861,14 @@ } } - F77_XFCN (zgttrf, ZGTTRF, (nr, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), - F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgttrf, ZGTTRF, (tmp_nr, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), + F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -3865,6 +3887,7 @@ { char job = 'N'; volatile octave_idx_type x_nz = b.nnz (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); retval = SparseComplexMatrix (nr, b_nc, x_nz); retval.xcidx (0) = 0; @@ -3882,11 +3905,13 @@ F77_XFCN (zgttrs, ZGTTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, 1, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), + tmp_nr, 1, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, - F77_DBLE_CMPLX_ARG (work), b.rows (), err + F77_DBLE_CMPLX_ARG (work), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0; @@ -3984,16 +4009,23 @@ } } - octave_idx_type b_nr = b.rows (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + rcond = 1.; retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - F77_XFCN (zptsv, ZPTSV, (nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zptsv, ZPTSV, (tmp_nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (result), - b_nr, err)); + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4043,16 +4075,23 @@ } } - octave_idx_type b_nr = b.rows (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + rcond = 1.; retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - F77_XFCN (zgtsv, ZGTSV, (nr, b_nc, F77_DBLE_CMPLX_ARG (DL), + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgtsv, ZGTSV, (tmp_nr, b_nc, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (result), - b_nr, err)); + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4111,8 +4150,8 @@ OCTAVE_LOCAL_BUFFER (Complex, DU, nr - 1); OCTAVE_LOCAL_BUFFER (Complex, D, nr); OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1); - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) { @@ -4148,8 +4187,14 @@ } } - F77_XFCN (zgttrf, ZGTTRF, (nr, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), - F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgttrf, ZGTTRF, (tmp_nr, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), + F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4168,7 +4213,7 @@ { rcond = 1.; char job = 'N'; - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr); @@ -4182,16 +4227,18 @@ for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) Bx[i] = b(i,j); F77_XFCN (zgttrs, ZGTTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, 1, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), + tmp_nr, 1, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (DU2), pipvt, - F77_DBLE_CMPLX_ARG (Bx), b_nr, err + F77_DBLE_CMPLX_ARG (Bx), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: This should probably be a warning so that @@ -4264,8 +4311,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4273,7 +4320,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4291,11 +4338,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { rcond = 0.0; @@ -4316,10 +4369,12 @@ F77_XFCN (zpbcon, ZPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4346,14 +4401,17 @@ retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); F77_XFCN (zpbtrs, ZPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, F77_DBLE_CMPLX_ARG (result), b.rows (), err + tmp_nr, n_lower, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, F77_DBLE_CMPLX_ARG (result), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Probably should be a warning. @@ -4368,9 +4426,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4379,7 +4437,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4402,12 +4460,18 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (zgbtrf, ZGBTRF, (nr, nc, n_lower, n_upper, + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgbtrf, ZGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, err)); + ldm, pipvt, tmp_err)); + + err = tmp_err; // Throw-away extra info LAPACK gives so as to not // change output. @@ -4434,12 +4498,16 @@ Array<double> iz (dim_vector (nr, 1)); double *piz = iz.fortran_vec (); + F77_INT tmp_nc = to_f77_int (nc); + F77_XFCN (zgbcon, ZGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4466,14 +4534,17 @@ retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); char job = 'N'; F77_XFCN (zgbtrs, ZGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, F77_DBLE_CMPLX_ARG (result), b.rows (), err + tmp_nr, n_lower, n_upper, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, pipvt, F77_DBLE_CMPLX_ARG (result), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + + err = tmp_err; } } } @@ -4510,8 +4581,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4520,7 +4591,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4538,11 +4609,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { rcond = 0.0; @@ -4561,10 +4638,12 @@ F77_XFCN (zpbcon, ZPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4588,7 +4667,7 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr); @@ -4601,15 +4680,17 @@ retval.xcidx (0) = 0; for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) Bx[i] = b.elem (i, j); F77_XFCN (zpbtrs, ZPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, F77_DBLE_CMPLX_ARG (Bx), b_nr, err + tmp_nr, n_lower, 1, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, F77_DBLE_CMPLX_ARG (Bx), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Probably should be a warning. @@ -4648,9 +4729,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4659,7 +4740,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4682,12 +4763,18 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgbtrf, ZGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, err)); + ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4712,12 +4799,16 @@ Array<double> iz (dim_vector (nr, 1)); double *piz = iz.fortran_vec (); + F77_INT tmp_nc = to_f77_int (nc); + F77_XFCN (zgbcon, ZGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4743,6 +4834,7 @@ { char job = 'N'; volatile octave_idx_type x_nz = b.nnz (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); retval = SparseComplexMatrix (nr, b_nc, x_nz); retval.xcidx (0) = 0; @@ -4760,10 +4852,12 @@ F77_XFCN (zgbtrs, ZGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, F77_DBLE_CMPLX_ARG (work), b.rows (), err + tmp_nr, n_lower, n_upper, 1, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, pipvt, F77_DBLE_CMPLX_ARG (work), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0; @@ -4825,8 +4919,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4835,7 +4929,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4853,11 +4947,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // Matrix is not positive definite!! Fall through to @@ -4878,10 +4978,12 @@ F77_XFCN (zpbcon, ZPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4905,17 +5007,19 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); F77_XFCN (zpbtrs, ZPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, F77_DBLE_CMPLX_ARG (result), b_nr, err + tmp_nr, n_lower, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, F77_DBLE_CMPLX_ARG (result), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Probably should be a warning. @@ -4930,9 +5034,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -4941,7 +5045,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4964,12 +5068,18 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgbtrf, ZGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, err)); + ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4994,12 +5104,16 @@ Array<double> iz (dim_vector (nr, 1)); double *piz = iz.fortran_vec (); + F77_INT tmp_nc = to_f77_int (nc); + F77_XFCN (zgbcon, ZGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5024,15 +5138,18 @@ if (err == 0) { char job = 'N'; - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); retval = ComplexMatrix (b); Complex *result = retval.fortran_vec (); F77_XFCN (zgbtrs, ZGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, F77_DBLE_CMPLX_ARG (result), b.rows (), err + tmp_nr, n_lower, n_upper, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, pipvt, F77_DBLE_CMPLX_ARG (result), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + + err = tmp_err; } } } @@ -5069,8 +5186,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -5079,7 +5196,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -5097,11 +5214,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // Matrix is not positive definite!! Fall through to @@ -5123,10 +5246,12 @@ F77_XFCN (zpbcon, ZPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nr, n_lower, F77_DBLE_CMPLX_ARG (tmp_data), ldm, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5150,7 +5275,7 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (Complex, Bx, b_nr); @@ -5164,15 +5289,17 @@ for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) Bx[i] = b(i,j); F77_XFCN (zpbtrs, ZPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, F77_DBLE_CMPLX_ARG (Bx), b_nr, err + tmp_nr, n_lower, 1, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, F77_DBLE_CMPLX_ARG (Bx), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Probably should be a warning. @@ -5215,9 +5342,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; ComplexMatrix m_band (ldm, nc); Complex *tmp_data = m_band.fortran_vec (); @@ -5226,7 +5353,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -5249,12 +5376,18 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (zgbtrf, ZGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, err)); + ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -5279,12 +5412,16 @@ Array<double> iz (dim_vector (nr, 1)); double *piz = iz.fortran_vec (); + F77_INT tmp_nc = to_f77_int (nc); + F77_XFCN (zgbcon, ZGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, - anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, err + tmp_nc, n_lower, n_upper, F77_DBLE_CMPLX_ARG (tmp_data), ldm, pipvt, + anorm, rcond, F77_DBLE_CMPLX_ARG (pz), piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5310,6 +5447,7 @@ { char job = 'N'; volatile octave_idx_type x_nz = b.nnz (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); retval = SparseComplexMatrix (nr, b_nc, x_nz); retval.xcidx (0) = 0; @@ -5328,10 +5466,12 @@ F77_XFCN (zgbtrs, ZGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, F77_DBLE_CMPLX_ARG (tmp_data), - ldm, pipvt, F77_DBLE_CMPLX_ARG (Bx), b.rows (), err + tmp_nr, n_lower, n_upper, 1, F77_DBLE_CMPLX_ARG (tmp_data), + ldm, pipvt, F77_DBLE_CMPLX_ARG (Bx), b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0;
--- a/liboctave/array/dSparse.cc Wed Dec 28 13:33:13 2016 -0500 +++ b/liboctave/array/dSparse.cc Wed Dec 28 17:14:00 2016 -0500 @@ -3762,12 +3762,20 @@ } } - octave_idx_type b_nc = b.cols (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + retval = b; double *result = retval.fortran_vec (); - F77_XFCN (dptsv, DPTSV, (nr, b_nc, D, DL, result, - b.rows (), err)); + F77_INT tmp_err = 0; + + F77_XFCN (dptsv, DPTSV, (tmp_nr, b_nc, D, DL, result, + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -3819,12 +3827,20 @@ } } - octave_idx_type b_nc = b.cols (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + retval = b; double *result = retval.fortran_vec (); - F77_XFCN (dgtsv, DGTSV, (nr, b_nc, DL, D, DU, result, - b.rows (), err)); + F77_INT tmp_err = 0; + + F77_XFCN (dgtsv, DGTSV, (tmp_nr, b_nc, DL, D, DU, result, + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -3884,8 +3900,8 @@ OCTAVE_LOCAL_BUFFER (double, DU, nr - 1); OCTAVE_LOCAL_BUFFER (double, D, nr); OCTAVE_LOCAL_BUFFER (double, DL, nr - 1); - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) { @@ -3921,7 +3937,11 @@ } } - F77_XFCN (dgttrf, DGTTRF, (nr, DL, D, DU, DU2, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (dgttrf, DGTTRF, (tmp_nr, DL, D, DU, DU2, pipvt, tmp_err)); if (err != 0) { @@ -3955,12 +3975,16 @@ for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++) work[b.ridx (i)] = b.data (i); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_XFCN (dgttrs, DGTTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, 1, DL, D, DU, DU2, pipvt, - work, b.rows (), err + tmp_nr, 1, DL, D, DU, DU2, pipvt, + work, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0; @@ -4058,16 +4082,23 @@ } } - octave_idx_type b_nr = b.rows (); - octave_idx_type b_nc = b.cols (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + rcond = 1.; retval = b; Complex *result = retval.fortran_vec (); - F77_XFCN (zptsv, ZPTSV, (nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), + F77_INT tmp_err = 0; + + F77_XFCN (zptsv, ZPTSV, (tmp_nr, b_nc, D, F77_DBLE_CMPLX_ARG (DL), F77_DBLE_CMPLX_ARG (result), - b_nr, err)); + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4117,16 +4148,25 @@ } } - octave_idx_type b_nr = b.rows (); - octave_idx_type b_nc = b.cols (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); + rcond = 1.; retval = b; Complex *result = retval.fortran_vec (); - F77_XFCN (zgtsv, ZGTSV, (nr, b_nc, F77_DBLE_CMPLX_ARG (DL), - F77_DBLE_CMPLX_ARG (D), F77_DBLE_CMPLX_ARG (DU), F77_DBLE_CMPLX_ARG (result), - b_nr, err)); + F77_INT tmp_err = 0; + + F77_XFCN (zgtsv, ZGTSV, (tmp_nr, b_nc, F77_DBLE_CMPLX_ARG (DL), + F77_DBLE_CMPLX_ARG (D), + F77_DBLE_CMPLX_ARG (DU), + F77_DBLE_CMPLX_ARG (result), + b_nr, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4184,8 +4224,8 @@ OCTAVE_LOCAL_BUFFER (double, DU, nr - 1); OCTAVE_LOCAL_BUFFER (double, D, nr); OCTAVE_LOCAL_BUFFER (double, DL, nr - 1); - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) { @@ -4221,7 +4261,13 @@ } } - F77_XFCN (dgttrf, DGTTRF, (nr, DL, D, DU, DU2, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + + F77_XFCN (dgttrf, DGTTRF, (tmp_nr, DL, D, DU, DU2, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4240,7 +4286,7 @@ { rcond = 1.; char job = 'N'; - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (double, Bx, b_nr); OCTAVE_LOCAL_BUFFER (double, Bz, b_nr); @@ -4255,7 +4301,7 @@ for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) { Complex c = b(i,j); Bx[i] = c.real (); @@ -4264,10 +4310,12 @@ F77_XFCN (dgttrs, DGTTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, 1, DL, D, DU, DU2, pipvt, - Bx, b_nr, err + tmp_nr, 1, DL, D, DU, DU2, pipvt, + Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -4280,10 +4328,12 @@ F77_XFCN (dgttrs, DGTTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, 1, DL, D, DU, DU2, pipvt, - Bz, b_nr, err + tmp_nr, 1, DL, D, DU, DU2, pipvt, + Bz, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -4356,8 +4406,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -4383,11 +4433,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, err + tmp_nr, n_lower, tmp_data, ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // Matrix is not positive definite!! Fall through to @@ -4403,15 +4459,17 @@ { Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, - anorm, rcond, pz, piz, err + tmp_nr, n_lower, tmp_data, ldm, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4438,14 +4496,17 @@ retval = b; double *result = retval.fortran_vec (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, b_nc, tmp_data, - ldm, result, b.rows (), err + tmp_nr, n_lower, b_nc, tmp_data, + ldm, result, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -4460,9 +4521,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -4471,7 +4532,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4494,11 +4555,17 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, - ldm, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_err = 0; + + F77_XFCN (dgbtrf, DGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, + tmp_data, ldm, pipvt, tmp_err)); + + err = tmp_err; // Throw-away extra info LAPACK gives so as to not // change output. @@ -4522,15 +4589,19 @@ char job = '1'; Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); + + F77_INT tmp_nc = to_f77_int (nc); F77_XFCN (dgbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, tmp_data, ldm, pipvt, - anorm, rcond, pz, piz, err + tmp_nc, n_lower, n_upper, tmp_data, ldm, pipvt, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4557,14 +4628,17 @@ retval = b; double *result = retval.fortran_vec (); - octave_idx_type b_nc = b.cols (); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_INT b_nc = to_f77_int (b.cols ()); char job = 'N'; F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, b_nc, tmp_data, - ldm, pipvt, result, b.rows (), err + tmp_nr, n_lower, n_upper, b_nc, tmp_data, + ldm, pipvt, result, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + + err = tmp_err; } } } @@ -4601,8 +4675,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = to_f77_int (n_lower + 1); Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -4611,7 +4685,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4629,11 +4703,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, err + tmp_nr, n_lower, tmp_data, ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { mattype.mark_as_unsymmetric (); @@ -4647,15 +4727,17 @@ { Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, - anorm, rcond, pz, piz, err + tmp_nr, n_lower, tmp_data, ldm, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4679,7 +4761,7 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (double, Bx, b_nr); @@ -4692,15 +4774,17 @@ retval.xcidx (0) = 0; for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) Bx[i] = b.elem (i, j); F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, tmp_data, - ldm, Bx, b_nr, err + tmp_nr, n_lower, 1, tmp_data, + ldm, Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -4710,7 +4794,7 @@ break; } - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) { double tmp = Bx[i]; if (tmp != 0.0) @@ -4739,9 +4823,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = to_f77_int (n_upper + 2 * n_lower + 1); Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -4773,11 +4857,17 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, - ldm, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_err = 0; + + F77_XFCN (dgbtrf, DGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, + tmp_data, ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -4799,15 +4889,19 @@ char job = '1'; Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); + + F77_INT tmp_nc = to_f77_int (nc); F77_XFCN (dgbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, tmp_data, ldm, pipvt, - anorm, rcond, pz, piz, err + tmp_nc, n_lower, n_upper, tmp_data, ldm, pipvt, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4848,12 +4942,16 @@ i < b.cidx (j+1); i++) work[b.ridx (i)] = b.data (i); + F77_INT b_nr = to_f77_int (b.rows ()); + F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, tmp_data, - ldm, pipvt, work, b.rows (), err + tmp_nr, n_lower, n_upper, 1, tmp_data, + ldm, pipvt, work, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0; @@ -4915,8 +5013,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -4925,7 +5023,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -4943,11 +5041,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, err + tmp_nr, n_lower, tmp_data, ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // Matrix is not positive definite!! Fall through to @@ -4963,15 +5067,17 @@ { Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, - anorm, rcond, pz, piz, err + tmp_nr, n_lower, tmp_data, ldm, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -4995,7 +5101,7 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (double, Bx, b_nr); @@ -5005,7 +5111,7 @@ for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) { Complex c = b(i,j); Bx[i] = c.real (); @@ -5014,10 +5120,12 @@ F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, tmp_data, - ldm, Bx, b_nr, err + tmp_nr, n_lower, 1, tmp_data, + ldm, Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -5029,10 +5137,12 @@ F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, tmp_data, - ldm, Bz, b.rows (), err + tmp_nr, n_lower, 1, tmp_data, + ldm, Bz, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -5052,9 +5162,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -5063,7 +5173,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -5086,11 +5196,17 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, - ldm, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_err = 0; + + F77_XFCN (dgbtrf, DGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, + tmp_data, ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -5112,15 +5228,19 @@ char job = '1'; Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); - - F77_XFCN (dpbcon, DPBCON, + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); + + F77_INT tmp_nc = to_f77_int (nc); + + F77_XFCN (dgbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, - anorm, rcond, pz, piz, err + tmp_nc, n_lower, n_upper, tmp_data, ldm, pipvt, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5145,6 +5265,7 @@ if (err == 0) { char job = 'N'; + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); retval.resize (nr,b_nc); @@ -5162,16 +5283,20 @@ F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, tmp_data, - ldm, pipvt, Bx, b.rows (), err + tmp_nr, n_lower, n_upper, 1, tmp_data, + ldm, pipvt, Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, tmp_data, - ldm, pipvt, Bz, b.rows (), err + tmp_nr, n_lower, n_upper, 1, tmp_data, + ldm, pipvt, Bz, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + for (octave_idx_type i = 0; i < nr; i++) retval(i, j) = Complex (Bx[i], Bz[i]); } @@ -5211,8 +5336,8 @@ if (typ == MatrixType::Banded_Hermitian) { - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_lower + 1; + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -5221,7 +5346,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -5239,11 +5364,17 @@ if (calc_cond) anorm = m_band.abs ().sum ().row (0).max (); + F77_INT tmp_nr = to_f77_int (nr); + + F77_INT tmp_err = 0; + char job = 'L'; F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, err + tmp_nr, n_lower, tmp_data, ldm, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // Matrix is not positive definite!! Fall through to @@ -5260,15 +5391,17 @@ { Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, tmp_data, ldm, - anorm, rcond, pz, piz, err + tmp_nr, n_lower, tmp_data, ldm, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5292,7 +5425,7 @@ if (err == 0) { - octave_idx_type b_nr = b.rows (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); OCTAVE_LOCAL_BUFFER (double, Bx, b_nr); OCTAVE_LOCAL_BUFFER (double, Bz, b_nr); @@ -5307,7 +5440,7 @@ for (volatile octave_idx_type j = 0; j < b_nc; j++) { - for (octave_idx_type i = 0; i < b_nr; i++) + for (F77_INT i = 0; i < b_nr; i++) { Complex c = b(i,j); Bx[i] = c.real (); @@ -5316,10 +5449,12 @@ F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, tmp_data, - ldm, Bx, b_nr, err + tmp_nr, n_lower, 1, tmp_data, + ldm, Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -5331,10 +5466,12 @@ F77_XFCN (dpbtrs, DPBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, 1, tmp_data, - ldm, Bz, b_nr, err + tmp_nr, n_lower, 1, tmp_data, + ldm, Bz, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) { // FIXME: Should this be a warning? @@ -5379,9 +5516,9 @@ if (typ == MatrixType::Banded) { // Create the storage for the banded form of the sparse matrix - octave_idx_type n_upper = mattype.nupper (); - octave_idx_type n_lower = mattype.nlower (); - octave_idx_type ldm = n_upper + 2 * n_lower + 1; + F77_INT n_upper = to_f77_int (mattype.nupper ()); + F77_INT n_lower = to_f77_int (mattype.nlower ()); + F77_INT ldm = n_upper + 2 * n_lower + 1; Matrix m_band (ldm, nc); double *tmp_data = m_band.fortran_vec (); @@ -5390,7 +5527,7 @@ { octave_idx_type ii = 0; - for (octave_idx_type j = 0; j < ldm; j++) + for (F77_INT j = 0; j < ldm; j++) for (octave_idx_type i = 0; i < nc; i++) tmp_data[ii++] = 0.; } @@ -5413,11 +5550,17 @@ } } - Array<octave_idx_type> ipvt (dim_vector (nr, 1)); - octave_idx_type *pipvt = ipvt.fortran_vec (); - - F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, - ldm, pipvt, err)); + F77_INT tmp_nr = to_f77_int (nr); + + Array<F77_INT> ipvt (dim_vector (nr, 1)); + F77_INT *pipvt = ipvt.fortran_vec (); + + F77_INT tmp_err = 0; + + F77_XFCN (dgbtrf, DGBTRF, (tmp_nr, tmp_nr, n_lower, n_upper, + tmp_data, ldm, pipvt, tmp_err)); + + err = tmp_err; if (err != 0) { @@ -5439,15 +5582,19 @@ char job = '1'; Array<double> z (dim_vector (3 * nr, 1)); double *pz = z.fortran_vec (); - Array<octave_idx_type> iz (dim_vector (nr, 1)); - octave_idx_type *piz = iz.fortran_vec (); + Array<F77_INT> iz (dim_vector (nr, 1)); + F77_INT *piz = iz.fortran_vec (); + + F77_INT tmp_nc = to_f77_int (nc); F77_XFCN (dgbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, n_lower, n_upper, tmp_data, ldm, pipvt, - anorm, rcond, pz, piz, err + tmp_nc, n_lower, n_upper, tmp_data, ldm, pipvt, + anorm, rcond, pz, piz, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + if (err != 0) err = -2; @@ -5473,6 +5620,7 @@ { char job = 'N'; volatile octave_idx_type x_nz = b.nnz (); + F77_INT b_nr = to_f77_int (b.rows ()); octave_idx_type b_nc = b.cols (); retval = SparseComplexMatrix (nr, b_nc, x_nz); retval.xcidx (0) = 0; @@ -5498,16 +5646,20 @@ F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, tmp_data, - ldm, pipvt, Bx, b.rows (), err + tmp_nr, n_lower, n_upper, 1, tmp_data, + ldm, pipvt, Bx, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + F77_XFCN (dgbtrs, DGBTRS, (F77_CONST_CHAR_ARG2 (&job, 1), - nr, n_lower, n_upper, 1, tmp_data, - ldm, pipvt, Bz, b.rows (), err + tmp_nr, n_lower, n_upper, 1, tmp_data, + ldm, pipvt, Bz, b_nr, tmp_err F77_CHAR_ARG_LEN (1))); + err = tmp_err; + // Count nonzeros in work vector and adjust // space in retval if needed octave_idx_type new_nnz = 0;