Mercurial > octave
changeset 22954:6cd3e9acf443
* lo-specfun.cc: Use F77_INT in calls to Fortran subroutines.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 26 Dec 2016 22:17:44 -0500 |
parents | fd649fd3db75 |
children | 3c72c72233e3 |
files | liboctave/numeric/lo-slatec-proto.h liboctave/numeric/lo-specfun.cc |
diffstat | 2 files changed, 138 insertions(+), 90 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/numeric/lo-slatec-proto.h Mon Dec 26 21:44:04 2016 -0500 +++ b/liboctave/numeric/lo-slatec-proto.h Mon Dec 26 22:17:44 2016 -0500 @@ -106,28 +106,28 @@ // PCHIM F77_RET_T - F77_FUNC (dpchim, DPCHIM) (const F77_INT& n, const F77_DBLE *x, - const F77_DBLE *f, F77_DBLE *d, + F77_FUNC (dpchim, DPCHIM) (const F77_INT& n, const F77_DBLE& x, + const F77_DBLE& f, F77_DBLE& d, const F77_INT &incfd, - F77_INT *ierr); + F77_INT& ierr); F77_RET_T - F77_FUNC (pchim, PCHIM) (const F77_INT& n, const F77_REAL *x, - const F77_REAL *f, F77_REAL *d, + F77_FUNC (pchim, PCHIM) (const F77_INT& n, const F77_REAL& x, + const F77_REAL& f, F77_REAL& d, const F77_INT& incfd, - F77_INT *ierr); + F77_INT& ierr); // PSIFN F77_RET_T - F77_FUNC (psifn, PSIFN) (const F77_REAL*, const F77_INT&, + F77_FUNC (psifn, PSIFN) (const F77_REAL&, const F77_INT&, const F77_INT&, const F77_INT&, - F77_REAL*, F77_INT*, F77_INT*); + F77_REAL&, F77_INT&, F77_INT&); F77_RET_T - F77_FUNC (dpsifn, DPSIFN) (const F77_DBLE*, const F77_INT&, + F77_FUNC (dpsifn, DPSIFN) (const F77_DBLE&, const F77_INT&, const F77_INT&, const F77_INT&, - F77_DBLE*, F77_INT*, F77_INT*); + F77_DBLE&, F77_INT&, F77_INT&); } #endif
--- a/liboctave/numeric/lo-specfun.cc Mon Dec 26 21:44:04 2016 -0500 +++ b/liboctave/numeric/lo-specfun.cc Mon Dec 26 22:17:44 2016 -0500 @@ -775,12 +775,14 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double zr = z.real (); double zi = z.imag (); - F77_FUNC (zbesj, ZBESJ) (zr, zi, alpha, 2, 1, &yr, &yi, nz, ierr); + F77_FUNC (zbesj, ZBESJ) (zr, zi, alpha, 2, 1, &yr, &yi, nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -833,7 +835,7 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double wr, wi; @@ -850,7 +852,9 @@ else { F77_FUNC (zbesy, ZBESY) (zr, zi, alpha, 2, 1, &yr, &yi, nz, - &wr, &wi, ierr); + &wr, &wi, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -904,12 +908,14 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double zr = z.real (); double zi = z.imag (); - F77_FUNC (zbesi, ZBESI) (zr, zi, alpha, 2, 1, &yr, &yi, nz, ierr); + F77_FUNC (zbesi, ZBESI) (zr, zi, alpha, 2, 1, &yr, &yi, nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -969,7 +975,7 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double zr = z.real (); double zi = z.imag (); @@ -983,7 +989,10 @@ } else { - F77_FUNC (zbesk, ZBESK) (zr, zi, alpha, 2, 1, &yr, &yi, nz, ierr); + F77_FUNC (zbesk, ZBESK) (zr, zi, alpha, 2, 1, &yr, &yi, nz, + t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1024,12 +1033,15 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double zr = z.real (); double zi = z.imag (); - F77_FUNC (zbesh, ZBESH) (zr, zi, alpha, 2, 1, 1, &yr, &yi, nz, ierr); + F77_FUNC (zbesh, ZBESH) (zr, zi, alpha, 2, 1, 1, &yr, &yi, nz, + t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1070,12 +1082,15 @@ double yr = 0.0; double yi = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; double zr = z.real (); double zi = z.imag (); - F77_FUNC (zbesh, ZBESH) (zr, zi, alpha, 2, 2, 1, &yr, &yi, nz, ierr); + F77_FUNC (zbesh, ZBESH) (zr, zi, alpha, 2, 2, 1, &yr, &yi, nz, + t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1413,10 +1428,12 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; F77_FUNC (cbesj, CBESJ) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 1, - F77_CMPLX_ARG (&y), nz, ierr); + F77_CMPLX_ARG (&y), nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1469,7 +1486,7 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; FloatComplex w; @@ -1482,7 +1499,10 @@ else { F77_FUNC (cbesy, CBESY) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 1, - F77_CMPLX_ARG (&y), nz, F77_CMPLX_ARG (&w), ierr); + F77_CMPLX_ARG (&y), nz, + F77_CMPLX_ARG (&w), t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1536,10 +1556,12 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; F77_FUNC (cbesi, CBESI) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 1, - F77_CMPLX_ARG (&y), nz, ierr); + F77_CMPLX_ARG (&y), nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1591,7 +1613,7 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; ierr = 0; @@ -1602,7 +1624,9 @@ else { F77_FUNC (cbesk, CBESK) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 1, - F77_CMPLX_ARG (&y), nz, ierr); + F77_CMPLX_ARG (&y), nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1642,10 +1666,12 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; F77_FUNC (cbesh, CBESH) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 1, 1, - F77_CMPLX_ARG (&y), nz, ierr); + F77_CMPLX_ARG (&y), nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1686,10 +1712,12 @@ { FloatComplex y = 0.0; - octave_idx_type nz; + F77_INT nz, t_ierr; F77_FUNC (cbesh, CBESH) (F77_CONST_CMPLX_ARG (&z), alpha, 2, 2, 1, - F77_CMPLX_ARG (&y), nz, ierr); + F77_CMPLX_ARG (&y), nz, t_ierr); + + ierr = t_ierr; if (kode != 2) { @@ -1877,11 +1905,12 @@ return retval; } -#define SS_BESSEL(name, fcn) \ - FloatComplex \ - name (float alpha, const FloatComplex& x, bool scaled, octave_idx_type& ierr) \ - { \ - return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ +#define SS_BESSEL(name, fcn) \ + FloatComplex \ + name (float alpha, const FloatComplex& x, bool scaled, \ + octave_idx_type& ierr) \ + { \ + return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } #define SM_BESSEL(name, fcn) \ @@ -1902,8 +1931,8 @@ #define MM_BESSEL(name, fcn) \ FloatComplexMatrix \ - name (const FloatMatrix& alpha, const FloatComplexMatrix& x, bool scaled, \ - Array<octave_idx_type>& ierr) \ + name (const FloatMatrix& alpha, const FloatComplexMatrix& x, \ + bool scaled, Array<octave_idx_type>& ierr) \ { \ return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } @@ -1916,28 +1945,29 @@ return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } -#define NS_BESSEL(name, fcn) \ - FloatComplexNDArray \ - name (const FloatNDArray& alpha, const FloatComplex& x, bool scaled, \ - Array<octave_idx_type>& ierr) \ - { \ - return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ +#define NS_BESSEL(name, fcn) \ + FloatComplexNDArray \ + name (const FloatNDArray& alpha, const FloatComplex& x, \ + bool scaled, Array<octave_idx_type>& ierr) \ + { \ + return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } #define NN_BESSEL(name, fcn) \ FloatComplexNDArray \ - name (const FloatNDArray& alpha, const FloatComplexNDArray& x, bool scaled, \ - Array<octave_idx_type>& ierr) \ + name (const FloatNDArray& alpha, const FloatComplexNDArray& x, \ + bool scaled, Array<octave_idx_type>& ierr) \ { \ return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } -#define RC_BESSEL(name, fcn) \ - FloatComplexMatrix \ - name (const FloatRowVector& alpha, const FloatComplexColumnVector& x, bool scaled, \ - Array<octave_idx_type>& ierr) \ - { \ - return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ +#define RC_BESSEL(name, fcn) \ + FloatComplexMatrix \ + name (const FloatRowVector& alpha, \ + const FloatComplexColumnVector& x, bool scaled, \ + Array<octave_idx_type>& ierr) \ + { \ + return do_bessel (fcn, #name, alpha, x, scaled, ierr); \ } #define ALL_BESSEL(name, fcn) \ @@ -1973,14 +2003,15 @@ double ar = 0.0; double ai = 0.0; - octave_idx_type nz; - double zr = z.real (); double zi = z.imag (); - octave_idx_type id = deriv ? 1 : 0; - - F77_FUNC (zairy, ZAIRY) (zr, zi, id, 2, ar, ai, nz, ierr); + F77_INT id = deriv ? 1 : 0; + F77_INT nz, t_ierr; + + F77_FUNC (zairy, ZAIRY) (zr, zi, id, 2, ar, ai, nz, t_ierr); + + ierr = t_ierr; if (! scaled) { @@ -2010,9 +2041,12 @@ double zr = z.real (); double zi = z.imag (); - octave_idx_type id = deriv ? 1 : 0; - - F77_FUNC (zbiry, ZBIRY) (zr, zi, id, 2, ar, ai, ierr); + F77_INT id = deriv ? 1 : 0; + F77_INT t_ierr; + + F77_FUNC (zbiry, ZBIRY) (zr, zi, id, 2, ar, ai, t_ierr); + + ierr = t_ierr; if (! scaled) { @@ -2102,16 +2136,18 @@ } FloatComplex - airy (const FloatComplex& z, bool deriv, bool scaled, octave_idx_type& ierr) + airy (const FloatComplex& z, bool deriv, bool scaled, + octave_idx_type& ierr) { FloatComplex a; - octave_idx_type nz; - - octave_idx_type id = deriv ? 1 : 0; - - F77_FUNC (cairy, CAIRY) (F77_CONST_CMPLX_ARG (&z), id, 2, F77_CMPLX_ARG (&a), - nz, ierr); + F77_INT id = deriv ? 1 : 0; + F77_INT nz, t_ierr; + + F77_FUNC (cairy, CAIRY) (F77_CONST_CMPLX_ARG (&z), id, 2, + F77_CMPLX_ARG (&a), nz, t_ierr); + + ierr = t_ierr; float ar = a.real (); float ai = a.imag (); @@ -2136,21 +2172,26 @@ } FloatComplex - biry (const FloatComplex& z, bool deriv, bool scaled, octave_idx_type& ierr) + biry (const FloatComplex& z, bool deriv, bool scaled, + octave_idx_type& ierr) { FloatComplex a; - octave_idx_type id = deriv ? 1 : 0; - - F77_FUNC (cbiry, CBIRY) (F77_CONST_CMPLX_ARG (&z), id, 2, F77_CMPLX_ARG (&a), - ierr); + F77_INT id = deriv ? 1 : 0; + F77_INT t_ierr; + + F77_FUNC (cbiry, CBIRY) (F77_CONST_CMPLX_ARG (&z), id, 2, + F77_CMPLX_ARG (&a), t_ierr); + + ierr = t_ierr; float ar = a.real (); float ai = a.imag (); if (! scaled) { - FloatComplex expz = exp (std::abs (std::real (2.0f / 3.0f * z * sqrt (z)))); + FloatComplex expz + = exp (std::abs (std::real (2.0f / 3.0f * z * sqrt (z)))); float rexpz = expz.real (); float iexpz = expz.imag (); @@ -2381,7 +2422,8 @@ } Array<double> - betainc (const Array<double>& x, const Array<double>& a, const Array<double>& b) + betainc (const Array<double>& x, const Array<double>& a, + const Array<double>& b) { Array<double> retval; dim_vector dv = x.dims (); @@ -2521,7 +2563,8 @@ } Array<float> - betainc (const Array<float>& x, const Array<float>& a, const Array<float>& b) + betainc (const Array<float>& x, const Array<float>& a, + const Array<float>& b) { Array<float> retval; dim_vector dv = x.dims (); @@ -3765,34 +3808,39 @@ template <typename T> static inline void - fortran_psifn (const T z, const octave_idx_type n, T* ans, - octave_idx_type* ierr); + fortran_psifn (T z, octave_idx_type n, T& ans, octave_idx_type& ierr); template <> inline void - fortran_psifn<double> (const double z, const octave_idx_type n, - double* ans, octave_idx_type* ierr) + fortran_psifn<double> (double z, octave_idx_type n_arg, + double& ans, octave_idx_type& ierr) { - octave_idx_type flag = 0; - F77_XFCN (dpsifn, DPSIFN, (&z, n, 1, 1, ans, &flag, ierr)); + F77_INT n = to_f77_int (n_arg); + F77_INT flag = 0; + F77_INT t_ierr; + F77_XFCN (dpsifn, DPSIFN, (z, n, 1, 1, ans, flag, t_ierr)); + ierr = t_ierr; } template <> inline void - fortran_psifn<float> (const float z, const octave_idx_type n, - float* ans, octave_idx_type* ierr) + fortran_psifn<float> (float z, octave_idx_type n_arg, + float& ans, octave_idx_type& ierr) { - octave_idx_type flag = 0; - F77_XFCN (psifn, PSIFN, (&z, n, 1, 1, ans, &flag, ierr)); + F77_INT n = to_f77_int (n_arg); + F77_INT flag = 0; + F77_INT t_ierr; + F77_XFCN (psifn, PSIFN, (z, n, 1, 1, ans, flag, t_ierr)); + ierr = t_ierr; } template <typename T> T - xpsi (const octave_idx_type n, T z) + xpsi (octave_idx_type n, T z) { T ans; octave_idx_type ierr = 0; - fortran_psifn<T> (z, n, &ans, &ierr); + fortran_psifn<T> (z, n, ans, ierr); if (ierr == 0) { // Remember that psifn and dpsifn return scales values