comparison libinterp/corefcn/qz.cc @ 32660:f53ac65ffba6

maint: New method rwdata() as clearer alternative to fortran_vec(). * etc/NEWS.10.md: Announce new method and recommend its use in future code. * doc/interpreter/external.txi: Update Octave manual to use rwdata. * liboctave/array/Array.h (rwdata): New function prototype. * liboctave/array/Array.h (fortran_vec): Make inline function that calls rwdata(). * liboctave/array/DiagArray2.h (rwdata): New function prototype. * liboctave/array/DiagArray2.h (fortran_vec): Make inline function that calls rwdata(). * examples/code/fortrandemo.cc, libgui/graphics/QtHandlesUtils.cc, libinterp/corefcn/Cell.cc, libinterp/corefcn/__dsearchn__.cc, libinterp/corefcn/__ichol__.cc, libinterp/corefcn/__ilu__.cc, libinterp/corefcn/__lin_interpn__.cc, libinterp/corefcn/__magick_read__.cc, libinterp/corefcn/__pchip_deriv__.cc, libinterp/corefcn/amd.cc, libinterp/corefcn/data.cc, libinterp/corefcn/dot.cc, libinterp/corefcn/ellipj.cc, libinterp/corefcn/filter.cc, libinterp/corefcn/gcd.cc, libinterp/corefcn/gl-render.cc, libinterp/corefcn/graphics.cc, libinterp/corefcn/graphics.in.h, libinterp/corefcn/kron.cc, libinterp/corefcn/ls-mat4.cc, libinterp/corefcn/ls-mat5.cc, libinterp/corefcn/mex.cc, libinterp/corefcn/oct-map.cc, libinterp/corefcn/oct-stream.cc, libinterp/corefcn/ordqz.cc, libinterp/corefcn/ordschur.cc, libinterp/corefcn/perms.cc, libinterp/corefcn/psi.cc, libinterp/corefcn/quadcc.cc, libinterp/corefcn/qz.cc, libinterp/corefcn/rand.cc, libinterp/corefcn/sqrtm.cc, libinterp/corefcn/strfind.cc, libinterp/corefcn/symrcm.cc, libinterp/corefcn/tril.cc, libinterp/corefcn/typecast.cc, libinterp/corefcn/xdiv.cc, libinterp/dldfcn/__delaunayn__.cc, libinterp/dldfcn/__glpk__.cc, libinterp/dldfcn/__ode15__.cc, libinterp/dldfcn/__voronoi__.cc, libinterp/dldfcn/audioread.cc, libinterp/dldfcn/convhulln.cc, libinterp/octave-value/ov-base-int.cc, libinterp/octave-value/ov-bool-mat.cc, libinterp/octave-value/ov-ch-mat.cc, libinterp/octave-value/ov-cx-diag.cc, libinterp/octave-value/ov-cx-mat.cc, libinterp/octave-value/ov-flt-cx-diag.cc, libinterp/octave-value/ov-flt-cx-mat.cc, libinterp/octave-value/ov-flt-re-diag.cc, libinterp/octave-value/ov-flt-re-mat.cc, libinterp/octave-value/ov-intx.h, libinterp/octave-value/ov-java.cc, libinterp/octave-value/ov-perm.cc, libinterp/octave-value/ov-re-diag.cc, libinterp/octave-value/ov-re-mat.cc, libinterp/octave-value/ov-str-mat.cc, liboctave/array/Array-base.cc, liboctave/array/Array-util.cc, liboctave/array/CColVector.cc, liboctave/array/CDiagMatrix.cc, liboctave/array/CMatrix.cc, liboctave/array/CNDArray.cc, liboctave/array/CRowVector.cc, liboctave/array/CSparse.cc, liboctave/array/DiagArray2.h, liboctave/array/MArray.cc, liboctave/array/PermMatrix.cc, liboctave/array/Range.h, liboctave/array/Sparse.cc, liboctave/array/boolSparse.cc, liboctave/array/dColVector.cc, liboctave/array/dDiagMatrix.cc, liboctave/array/dMatrix.cc, liboctave/array/dNDArray.cc, liboctave/array/dRowVector.cc, liboctave/array/dSparse.cc, liboctave/array/fCColVector.cc, liboctave/array/fCDiagMatrix.cc, liboctave/array/fCMatrix.cc, liboctave/array/fCNDArray.cc, liboctave/array/fCRowVector.cc, liboctave/array/fColVector.cc, liboctave/array/fMatrix.cc, liboctave/array/fNDArray.cc, liboctave/array/fRowVector.cc, liboctave/array/idx-vector.cc, liboctave/numeric/CollocWt.cc, liboctave/numeric/DASPK.cc, liboctave/numeric/DASRT.cc, liboctave/numeric/DASSL.cc, liboctave/numeric/EIG.cc, liboctave/numeric/LSODE.cc, liboctave/numeric/Quad.cc, liboctave/numeric/aepbalance.cc, liboctave/numeric/bsxfun-defs.cc, liboctave/numeric/chol.cc, liboctave/numeric/eigs-base.cc, liboctave/numeric/fEIG.cc, liboctave/numeric/gepbalance.cc, liboctave/numeric/gsvd.cc, liboctave/numeric/hess.cc, liboctave/numeric/lu.cc, liboctave/numeric/oct-convn.cc, liboctave/numeric/oct-rand.cc, liboctave/numeric/qr.cc, liboctave/numeric/qrp.cc, liboctave/numeric/schur.cc, liboctave/numeric/sparse-dmsolve.cc, liboctave/numeric/sparse-lu.cc, liboctave/numeric/sparse-qr.cc, liboctave/numeric/svd.cc, liboctave/operators/mx-inlines.cc, liboctave/operators/mx-op-defs.h, liboctave/util/oct-base64.cc, liboctave/util/oct-binmap.h, liboctave/util/str-vec.cc: Replace calls to fortran_vec() with calls to rwdata().
author Rik <rik@octave.org>
date Wed, 27 Dec 2023 16:55:14 -0800
parents 2e484f9f1f18
children
comparison
equal deleted inserted replaced
32659:71a23564ceca 32660:f53ac65ffba6
217 char comp_z = (nargout >= 4 ? 'V' : 'N'); 217 char comp_z = (nargout >= 4 ? 'V' : 'N');
218 218
219 // Initialize Q, Z to identity matrix if either is needed 219 // Initialize Q, Z to identity matrix if either is needed
220 if (comp_q == 'V' || comp_z == 'V') 220 if (comp_q == 'V' || comp_z == 'V')
221 { 221 {
222 double *QQptr = QQ.fortran_vec (); 222 double *QQptr = QQ.rwdata ();
223 double *ZZptr = ZZ.fortran_vec (); 223 double *ZZptr = ZZ.rwdata ();
224 std::fill_n (QQptr, QQ.numel (), 0.0); 224 std::fill_n (QQptr, QQ.numel (), 0.0);
225 std::fill_n (ZZptr, ZZ.numel (), 0.0); 225 std::fill_n (ZZptr, ZZ.numel (), 0.0);
226 for (F77_INT i = 0; i < nn; i++) 226 for (F77_INT i = 0; i < nn; i++)
227 { 227 {
228 QQ(i, i) = 1.0; 228 QQ(i, i) = 1.0;
252 if (comp_z == 'V') 252 if (comp_z == 'V')
253 CZ = ComplexMatrix (ZZ); 253 CZ = ComplexMatrix (ZZ);
254 254
255 F77_XFCN (zggbal, ZGGBAL, 255 F77_XFCN (zggbal, ZGGBAL,
256 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 256 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
257 nn, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn, 257 nn, F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
258 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), 258 F77_DBLE_CMPLX_ARG (cbb.rwdata ()),
259 nn, ilo, ihi, lscale.fortran_vec (), 259 nn, ilo, ihi, lscale.rwdata (),
260 rscale.fortran_vec (), work.fortran_vec (), info 260 rscale.rwdata (), work.rwdata (), info
261 F77_CHAR_ARG_LEN (1))); 261 F77_CHAR_ARG_LEN (1)));
262 } 262 }
263 else 263 else
264 { 264 {
265 #if defined (DEBUG) 265 #if defined (DEBUG)
267 octave_stdout << "qz: performing balancing; QQ =\n" << QQ << std::endl; 267 octave_stdout << "qz: performing balancing; QQ =\n" << QQ << std::endl;
268 #endif 268 #endif
269 269
270 F77_XFCN (dggbal, DGGBAL, 270 F77_XFCN (dggbal, DGGBAL,
271 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 271 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
272 nn, aa.fortran_vec (), nn, bb.fortran_vec (), 272 nn, aa.rwdata (), nn, bb.rwdata (),
273 nn, ilo, ihi, lscale.fortran_vec (), 273 nn, ilo, ihi, lscale.rwdata (),
274 rscale.fortran_vec (), work.fortran_vec (), info 274 rscale.rwdata (), work.rwdata (), info
275 F77_CHAR_ARG_LEN (1))); 275 F77_CHAR_ARG_LEN (1)));
276 } 276 }
277 277
278 // Only permutation balance above is done. Skip scaling balance. 278 // Only permutation balance above is done. Skip scaling balance.
279 279
292 CQ = CQ * cbqr.Q (); 292 CQ = CQ * cbqr.Q ();
293 293
294 F77_XFCN (zgghrd, ZGGHRD, 294 F77_XFCN (zgghrd, ZGGHRD,
295 (F77_CONST_CHAR_ARG2 (&comp_q, 1), 295 (F77_CONST_CHAR_ARG2 (&comp_q, 1),
296 F77_CONST_CHAR_ARG2 (&comp_z, 1), 296 F77_CONST_CHAR_ARG2 (&comp_z, 1),
297 nn, ilo, ihi, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), 297 nn, ilo, ihi, F77_DBLE_CMPLX_ARG (caa.rwdata ()),
298 nn, F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn, 298 nn, F77_DBLE_CMPLX_ARG (cbb.rwdata ()), nn,
299 F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn, 299 F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn,
300 F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn, info 300 F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn, info
301 F77_CHAR_ARG_LEN (1) 301 F77_CHAR_ARG_LEN (1)
302 F77_CHAR_ARG_LEN (1))); 302 F77_CHAR_ARG_LEN (1)));
303 303
304 ComplexRowVector cwork (nn); 304 ComplexRowVector cwork (nn);
305 305
306 F77_XFCN (zhgeqz, ZHGEQZ, 306 F77_XFCN (zhgeqz, ZHGEQZ,
307 (F77_CONST_CHAR_ARG2 (&qz_job, 1), 307 (F77_CONST_CHAR_ARG2 (&qz_job, 1),
308 F77_CONST_CHAR_ARG2 (&comp_q, 1), 308 F77_CONST_CHAR_ARG2 (&comp_q, 1),
309 F77_CONST_CHAR_ARG2 (&comp_z, 1), 309 F77_CONST_CHAR_ARG2 (&comp_z, 1),
310 nn, ilo, ihi, 310 nn, ilo, ihi,
311 F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn, 311 F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
312 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn, 312 F77_DBLE_CMPLX_ARG (cbb.rwdata ()), nn,
313 F77_DBLE_CMPLX_ARG (xalpha.fortran_vec ()), 313 F77_DBLE_CMPLX_ARG (xalpha.rwdata ()),
314 F77_DBLE_CMPLX_ARG (xbeta.fortran_vec ()), 314 F77_DBLE_CMPLX_ARG (xbeta.rwdata ()),
315 F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn, 315 F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn,
316 F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn, 316 F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn,
317 F77_DBLE_CMPLX_ARG (cwork.fortran_vec ()), nn, 317 F77_DBLE_CMPLX_ARG (cwork.rwdata ()), nn,
318 rwork.fortran_vec (), info 318 rwork.rwdata (), info
319 F77_CHAR_ARG_LEN (1) 319 F77_CHAR_ARG_LEN (1)
320 F77_CHAR_ARG_LEN (1) 320 F77_CHAR_ARG_LEN (1)
321 F77_CHAR_ARG_LEN (1))); 321 F77_CHAR_ARG_LEN (1)));
322 322
323 if (comp_q == 'V') 323 if (comp_q == 'V')
325 // Left eigenvector. 325 // Left eigenvector.
326 F77_XFCN (zggbak, ZGGBAK, 326 F77_XFCN (zggbak, ZGGBAK,
327 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 327 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
328 F77_CONST_CHAR_ARG2 ("L", 1), 328 F77_CONST_CHAR_ARG2 ("L", 1),
329 nn, ilo, ihi, lscale.data (), rscale.data (), 329 nn, ilo, ihi, lscale.data (), rscale.data (),
330 nn, F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn, info 330 nn, F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn, info
331 F77_CHAR_ARG_LEN (1) 331 F77_CHAR_ARG_LEN (1)
332 F77_CHAR_ARG_LEN (1))); 332 F77_CHAR_ARG_LEN (1)));
333 } 333 }
334 334
335 if (comp_z == 'V') 335 if (comp_z == 'V')
337 // Right eigenvector. 337 // Right eigenvector.
338 F77_XFCN (zggbak, ZGGBAK, 338 F77_XFCN (zggbak, ZGGBAK,
339 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 339 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
340 F77_CONST_CHAR_ARG2 ("R", 1), 340 F77_CONST_CHAR_ARG2 ("R", 1),
341 nn, ilo, ihi, lscale.data (), rscale.data (), 341 nn, ilo, ihi, lscale.data (), rscale.data (),
342 nn, F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn, info 342 nn, F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn, info
343 F77_CHAR_ARG_LEN (1) 343 F77_CHAR_ARG_LEN (1)
344 F77_CHAR_ARG_LEN (1))); 344 F77_CHAR_ARG_LEN (1)));
345 } 345 }
346 346
347 } 347 }
389 389
390 // Reduce to generalized Hessenberg form. 390 // Reduce to generalized Hessenberg form.
391 F77_XFCN (dgghrd, DGGHRD, 391 F77_XFCN (dgghrd, DGGHRD,
392 (F77_CONST_CHAR_ARG2 (&comp_q, 1), 392 (F77_CONST_CHAR_ARG2 (&comp_q, 1),
393 F77_CONST_CHAR_ARG2 (&comp_z, 1), 393 F77_CONST_CHAR_ARG2 (&comp_z, 1),
394 nn, ilo, ihi, aa.fortran_vec (), 394 nn, ilo, ihi, aa.rwdata (),
395 nn, bb.fortran_vec (), nn, QQ.fortran_vec (), nn, 395 nn, bb.rwdata (), nn, QQ.rwdata (), nn,
396 ZZ.fortran_vec (), nn, info 396 ZZ.rwdata (), nn, info
397 F77_CHAR_ARG_LEN (1) 397 F77_CHAR_ARG_LEN (1)
398 F77_CHAR_ARG_LEN (1))); 398 F77_CHAR_ARG_LEN (1)));
399 399
400 // Check if just computing generalized eigenvalues, 400 // Check if just computing generalized eigenvalues,
401 // or if we're actually computing the decomposition. 401 // or if we're actually computing the decomposition.
403 // Reduce to generalized Schur form. 403 // Reduce to generalized Schur form.
404 F77_XFCN (dhgeqz, DHGEQZ, 404 F77_XFCN (dhgeqz, DHGEQZ,
405 (F77_CONST_CHAR_ARG2 (&qz_job, 1), 405 (F77_CONST_CHAR_ARG2 (&qz_job, 1),
406 F77_CONST_CHAR_ARG2 (&comp_q, 1), 406 F77_CONST_CHAR_ARG2 (&comp_q, 1),
407 F77_CONST_CHAR_ARG2 (&comp_z, 1), 407 F77_CONST_CHAR_ARG2 (&comp_z, 1),
408 nn, ilo, ihi, aa.fortran_vec (), nn, bb.fortran_vec (), 408 nn, ilo, ihi, aa.rwdata (), nn, bb.rwdata (),
409 nn, alphar.fortran_vec (), alphai.fortran_vec (), 409 nn, alphar.rwdata (), alphai.rwdata (),
410 betar.fortran_vec (), QQ.fortran_vec (), nn, 410 betar.rwdata (), QQ.rwdata (), nn,
411 ZZ.fortran_vec (), nn, work.fortran_vec (), nn, info 411 ZZ.rwdata (), nn, work.rwdata (), nn, info
412 F77_CHAR_ARG_LEN (1) 412 F77_CHAR_ARG_LEN (1)
413 F77_CHAR_ARG_LEN (1) 413 F77_CHAR_ARG_LEN (1)
414 F77_CHAR_ARG_LEN (1))); 414 F77_CHAR_ARG_LEN (1)));
415 415
416 if (comp_q == 'V') 416 if (comp_q == 'V')
417 { 417 {
418 F77_XFCN (dggbak, DGGBAK, 418 F77_XFCN (dggbak, DGGBAK,
419 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 419 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
420 F77_CONST_CHAR_ARG2 ("L", 1), 420 F77_CONST_CHAR_ARG2 ("L", 1),
421 nn, ilo, ihi, lscale.data (), rscale.data (), 421 nn, ilo, ihi, lscale.data (), rscale.data (),
422 nn, QQ.fortran_vec (), nn, info 422 nn, QQ.rwdata (), nn, info
423 F77_CHAR_ARG_LEN (1) 423 F77_CHAR_ARG_LEN (1)
424 F77_CHAR_ARG_LEN (1))); 424 F77_CHAR_ARG_LEN (1)));
425 425
426 #if defined (DEBUG) 426 #if defined (DEBUG)
427 if (comp_q == 'V') 427 if (comp_q == 'V')
434 { 434 {
435 F77_XFCN (dggbak, DGGBAK, 435 F77_XFCN (dggbak, DGGBAK,
436 (F77_CONST_CHAR_ARG2 (&bal_job, 1), 436 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
437 F77_CONST_CHAR_ARG2 ("R", 1), 437 F77_CONST_CHAR_ARG2 ("R", 1),
438 nn, ilo, ihi, lscale.data (), rscale.data (), 438 nn, ilo, ihi, lscale.data (), rscale.data (),
439 nn, ZZ.fortran_vec (), nn, info 439 nn, ZZ.rwdata (), nn, info
440 F77_CHAR_ARG_LEN (1) 440 F77_CHAR_ARG_LEN (1)
441 F77_CHAR_ARG_LEN (1))); 441 F77_CHAR_ARG_LEN (1)));
442 442
443 #if defined (DEBUG) 443 #if defined (DEBUG)
444 if (comp_z == 'V') 444 if (comp_z == 'V')
467 F77_INT m; 467 F77_INT m;
468 468
469 F77_XFCN (ztgevc, ZTGEVC, 469 F77_XFCN (ztgevc, ZTGEVC,
470 (F77_CONST_CHAR_ARG2 (&side, 1), 470 (F77_CONST_CHAR_ARG2 (&side, 1),
471 F77_CONST_CHAR_ARG2 (&howmany, 1), 471 F77_CONST_CHAR_ARG2 (&howmany, 1),
472 select, nn, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn, 472 select, nn, F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
473 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), 473 F77_DBLE_CMPLX_ARG (cbb.rwdata ()),
474 nn, F77_DBLE_CMPLX_ARG (CVL.fortran_vec ()), nn, 474 nn, F77_DBLE_CMPLX_ARG (CVL.rwdata ()), nn,
475 F77_DBLE_CMPLX_ARG (CVR.fortran_vec ()), nn, nn, 475 F77_DBLE_CMPLX_ARG (CVR.rwdata ()), nn, nn,
476 m, F77_DBLE_CMPLX_ARG (cwork2.fortran_vec ()), 476 m, F77_DBLE_CMPLX_ARG (cwork2.rwdata ()),
477 rwork2.fortran_vec (), info 477 rwork2.rwdata (), info
478 F77_CHAR_ARG_LEN (1) 478 F77_CHAR_ARG_LEN (1)
479 F77_CHAR_ARG_LEN (1))); 479 F77_CHAR_ARG_LEN (1)));
480 } 480 }
481 else 481 else
482 { 482 {
489 F77_INT m; 489 F77_INT m;
490 490
491 F77_XFCN (dtgevc, DTGEVC, 491 F77_XFCN (dtgevc, DTGEVC,
492 (F77_CONST_CHAR_ARG2 (&side, 1), 492 (F77_CONST_CHAR_ARG2 (&side, 1),
493 F77_CONST_CHAR_ARG2 (&howmany, 1), 493 F77_CONST_CHAR_ARG2 (&howmany, 1),
494 select, nn, aa.fortran_vec (), nn, bb.fortran_vec (), 494 select, nn, aa.rwdata (), nn, bb.rwdata (),
495 nn, VL.fortran_vec (), nn, VR.fortran_vec (), nn, nn, 495 nn, VL.rwdata (), nn, VR.rwdata (), nn, nn,
496 m, work.fortran_vec (), info 496 m, work.rwdata (), info
497 F77_CHAR_ARG_LEN (1) 497 F77_CHAR_ARG_LEN (1)
498 F77_CHAR_ARG_LEN (1))); 498 F77_CHAR_ARG_LEN (1)));
499 } 499 }
500 } 500 }
501 501