comparison liboctave/numeric/EIG.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
51 (*current_liboctave_error_handler) ("EIG requires square matrix"); 51 (*current_liboctave_error_handler) ("EIG requires square matrix");
52 52
53 F77_INT info = 0; 53 F77_INT info = 0;
54 54
55 Matrix atmp = a; 55 Matrix atmp = a;
56 double *tmp_data = atmp.fortran_vec (); 56 double *tmp_data = atmp.rwdata ();
57 57
58 Array<double> wr (dim_vector (n, 1)); 58 Array<double> wr (dim_vector (n, 1));
59 double *pwr = wr.fortran_vec (); 59 double *pwr = wr.rwdata ();
60 60
61 Array<double> wi (dim_vector (n, 1)); 61 Array<double> wi (dim_vector (n, 1));
62 double *pwi = wi.fortran_vec (); 62 double *pwi = wi.rwdata ();
63 63
64 F77_INT tnvr = (calc_rev ? n : 0); 64 F77_INT tnvr = (calc_rev ? n : 0);
65 Matrix vr (tnvr, tnvr); 65 Matrix vr (tnvr, tnvr);
66 double *pvr = vr.fortran_vec (); 66 double *pvr = vr.rwdata ();
67 67
68 F77_INT tnvl = (calc_lev ? n : 0); 68 F77_INT tnvl = (calc_lev ? n : 0);
69 Matrix vl (tnvl, tnvl); 69 Matrix vl (tnvl, tnvl);
70 double *pvl = vl.fortran_vec (); 70 double *pvl = vl.rwdata ();
71 71
72 F77_INT lwork = -1; 72 F77_INT lwork = -1;
73 double dummy_work; 73 double dummy_work;
74 74
75 F77_INT ilo; 75 F77_INT ilo;
76 F77_INT ihi; 76 F77_INT ihi;
77 77
78 Array<double> scale (dim_vector (n, 1)); 78 Array<double> scale (dim_vector (n, 1));
79 double *pscale = scale.fortran_vec (); 79 double *pscale = scale.rwdata ();
80 80
81 double abnrm; 81 double abnrm;
82 82
83 Array<double> rconde (dim_vector (n, 1)); 83 Array<double> rconde (dim_vector (n, 1));
84 double *prconde = rconde.fortran_vec (); 84 double *prconde = rconde.rwdata ();
85 85
86 Array<double> rcondv (dim_vector (n, 1)); 86 Array<double> rcondv (dim_vector (n, 1));
87 double *prcondv = rcondv.fortran_vec (); 87 double *prcondv = rcondv.rwdata ();
88 88
89 F77_INT dummy_iwork; 89 F77_INT dummy_iwork;
90 90
91 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), 91 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
92 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 92 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
104 if (info != 0) 104 if (info != 0)
105 (*current_liboctave_error_handler) ("dgeevx workspace query failed"); 105 (*current_liboctave_error_handler) ("dgeevx workspace query failed");
106 106
107 lwork = static_cast<F77_INT> (dummy_work); 107 lwork = static_cast<F77_INT> (dummy_work);
108 Array<double> work (dim_vector (lwork, 1)); 108 Array<double> work (dim_vector (lwork, 1));
109 double *pwork = work.fortran_vec (); 109 double *pwork = work.rwdata ();
110 110
111 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), 111 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
112 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 112 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
113 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 113 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
114 F77_CONST_CHAR_ARG2 ("N", 1), 114 F77_CONST_CHAR_ARG2 ("N", 1),
184 (*current_liboctave_error_handler) ("EIG requires square matrix"); 184 (*current_liboctave_error_handler) ("EIG requires square matrix");
185 185
186 F77_INT info = 0; 186 F77_INT info = 0;
187 187
188 Matrix atmp = a; 188 Matrix atmp = a;
189 double *tmp_data = atmp.fortran_vec (); 189 double *tmp_data = atmp.rwdata ();
190 190
191 ColumnVector wr (n); 191 ColumnVector wr (n);
192 double *pwr = wr.fortran_vec (); 192 double *pwr = wr.rwdata ();
193 193
194 F77_INT lwork = -1; 194 F77_INT lwork = -1;
195 double dummy_work; 195 double dummy_work;
196 196
197 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 197 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
203 if (info != 0) 203 if (info != 0)
204 (*current_liboctave_error_handler) ("dsyev workspace query failed"); 204 (*current_liboctave_error_handler) ("dsyev workspace query failed");
205 205
206 lwork = static_cast<F77_INT> (dummy_work); 206 lwork = static_cast<F77_INT> (dummy_work);
207 Array<double> work (dim_vector (lwork, 1)); 207 Array<double> work (dim_vector (lwork, 1));
208 double *pwork = work.fortran_vec (); 208 double *pwork = work.rwdata ();
209 209
210 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 210 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
211 F77_CONST_CHAR_ARG2 ("U", 1), 211 F77_CONST_CHAR_ARG2 ("U", 1),
212 n, tmp_data, n, pwr, pwork, lwork, info 212 n, tmp_data, n, pwr, pwork, lwork, info
213 F77_CHAR_ARG_LEN (1) 213 F77_CHAR_ARG_LEN (1)
243 (*current_liboctave_error_handler) ("EIG requires square matrix"); 243 (*current_liboctave_error_handler) ("EIG requires square matrix");
244 244
245 F77_INT info = 0; 245 F77_INT info = 0;
246 246
247 ComplexMatrix atmp = a; 247 ComplexMatrix atmp = a;
248 Complex *tmp_data = atmp.fortran_vec (); 248 Complex *tmp_data = atmp.rwdata ();
249 249
250 ComplexColumnVector wr (n); 250 ComplexColumnVector wr (n);
251 Complex *pw = wr.fortran_vec (); 251 Complex *pw = wr.rwdata ();
252 252
253 F77_INT nvr = (calc_rev ? n : 0); 253 F77_INT nvr = (calc_rev ? n : 0);
254 ComplexMatrix vrtmp (nvr, nvr); 254 ComplexMatrix vrtmp (nvr, nvr);
255 Complex *pvr = vrtmp.fortran_vec (); 255 Complex *pvr = vrtmp.rwdata ();
256 256
257 F77_INT nvl = (calc_lev ? n : 0); 257 F77_INT nvl = (calc_lev ? n : 0);
258 ComplexMatrix vltmp (nvl, nvl); 258 ComplexMatrix vltmp (nvl, nvl);
259 Complex *pvl = vltmp.fortran_vec (); 259 Complex *pvl = vltmp.rwdata ();
260 260
261 F77_INT lwork = -1; 261 F77_INT lwork = -1;
262 Complex dummy_work; 262 Complex dummy_work;
263 263
264 F77_INT lrwork = 2*n; 264 F77_INT lrwork = 2*n;
265 Array<double> rwork (dim_vector (lrwork, 1)); 265 Array<double> rwork (dim_vector (lrwork, 1));
266 double *prwork = rwork.fortran_vec (); 266 double *prwork = rwork.rwdata ();
267 267
268 F77_INT ilo; 268 F77_INT ilo;
269 F77_INT ihi; 269 F77_INT ihi;
270 270
271 Array<double> scale (dim_vector (n, 1)); 271 Array<double> scale (dim_vector (n, 1));
272 double *pscale = scale.fortran_vec (); 272 double *pscale = scale.rwdata ();
273 273
274 double abnrm; 274 double abnrm;
275 275
276 Array<double> rconde (dim_vector (n, 1)); 276 Array<double> rconde (dim_vector (n, 1));
277 double *prconde = rconde.fortran_vec (); 277 double *prconde = rconde.rwdata ();
278 278
279 Array<double> rcondv (dim_vector (n, 1)); 279 Array<double> rcondv (dim_vector (n, 1));
280 double *prcondv = rcondv.fortran_vec (); 280 double *prcondv = rcondv.rwdata ();
281 281
282 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), 282 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
283 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 283 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
284 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 284 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
285 F77_CONST_CHAR_ARG2 ("N", 1), 285 F77_CONST_CHAR_ARG2 ("N", 1),
297 if (info != 0) 297 if (info != 0)
298 (*current_liboctave_error_handler) ("zgeevx workspace query failed"); 298 (*current_liboctave_error_handler) ("zgeevx workspace query failed");
299 299
300 lwork = static_cast<F77_INT> (dummy_work.real ()); 300 lwork = static_cast<F77_INT> (dummy_work.real ());
301 Array<Complex> work (dim_vector (lwork, 1)); 301 Array<Complex> work (dim_vector (lwork, 1));
302 Complex *pwork = work.fortran_vec (); 302 Complex *pwork = work.rwdata ();
303 303
304 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1), 304 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
305 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 305 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
306 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 306 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
307 F77_CONST_CHAR_ARG2 ("N", 1), 307 F77_CONST_CHAR_ARG2 ("N", 1),
338 (*current_liboctave_error_handler) ("EIG requires square matrix"); 338 (*current_liboctave_error_handler) ("EIG requires square matrix");
339 339
340 F77_INT info = 0; 340 F77_INT info = 0;
341 341
342 ComplexMatrix atmp = a; 342 ComplexMatrix atmp = a;
343 Complex *tmp_data = atmp.fortran_vec (); 343 Complex *tmp_data = atmp.rwdata ();
344 344
345 ColumnVector wr (n); 345 ColumnVector wr (n);
346 double *pwr = wr.fortran_vec (); 346 double *pwr = wr.rwdata ();
347 347
348 F77_INT lwork = -1; 348 F77_INT lwork = -1;
349 Complex dummy_work; 349 Complex dummy_work;
350 350
351 F77_INT lrwork = 3*n; 351 F77_INT lrwork = 3*n;
352 Array<double> rwork (dim_vector (lrwork, 1)); 352 Array<double> rwork (dim_vector (lrwork, 1));
353 double *prwork = rwork.fortran_vec (); 353 double *prwork = rwork.rwdata ();
354 354
355 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 355 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
356 F77_CONST_CHAR_ARG2 ("U", 1), 356 F77_CONST_CHAR_ARG2 ("U", 1),
357 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr, 357 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr,
358 F77_DBLE_CMPLX_ARG (&dummy_work), lwork, 358 F77_DBLE_CMPLX_ARG (&dummy_work), lwork,
363 if (info != 0) 363 if (info != 0)
364 (*current_liboctave_error_handler) ("zheev workspace query failed"); 364 (*current_liboctave_error_handler) ("zheev workspace query failed");
365 365
366 lwork = static_cast<F77_INT> (dummy_work.real ()); 366 lwork = static_cast<F77_INT> (dummy_work.real ());
367 Array<Complex> work (dim_vector (lwork, 1)); 367 Array<Complex> work (dim_vector (lwork, 1));
368 Complex *pwork = work.fortran_vec (); 368 Complex *pwork = work.rwdata ();
369 369
370 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 370 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
371 F77_CONST_CHAR_ARG2 ("U", 1), 371 F77_CONST_CHAR_ARG2 ("U", 1),
372 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr, 372 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr,
373 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info 373 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info
408 (*current_liboctave_error_handler) ("EIG requires same size matrices"); 408 (*current_liboctave_error_handler) ("EIG requires same size matrices");
409 409
410 F77_INT info = 0; 410 F77_INT info = 0;
411 411
412 Matrix tmp = b; 412 Matrix tmp = b;
413 double *tmp_data = tmp.fortran_vec (); 413 double *tmp_data = tmp.rwdata ();
414 414
415 if (! force_qz) 415 if (! force_qz)
416 { 416 {
417 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), 417 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1),
418 n, tmp_data, n, 418 n, tmp_data, n,
422 if (a.issymmetric () && b.issymmetric () && info == 0) 422 if (a.issymmetric () && b.issymmetric () && info == 0)
423 return symmetric_init (a, b, calc_rev, calc_lev); 423 return symmetric_init (a, b, calc_rev, calc_lev);
424 } 424 }
425 425
426 Matrix atmp = a; 426 Matrix atmp = a;
427 double *atmp_data = atmp.fortran_vec (); 427 double *atmp_data = atmp.rwdata ();
428 428
429 Matrix btmp = b; 429 Matrix btmp = b;
430 double *btmp_data = btmp.fortran_vec (); 430 double *btmp_data = btmp.rwdata ();
431 431
432 Array<double> ar (dim_vector (n, 1)); 432 Array<double> ar (dim_vector (n, 1));
433 double *par = ar.fortran_vec (); 433 double *par = ar.rwdata ();
434 434
435 Array<double> ai (dim_vector (n, 1)); 435 Array<double> ai (dim_vector (n, 1));
436 double *pai = ai.fortran_vec (); 436 double *pai = ai.rwdata ();
437 437
438 Array<double> beta (dim_vector (n, 1)); 438 Array<double> beta (dim_vector (n, 1));
439 double *pbeta = beta.fortran_vec (); 439 double *pbeta = beta.rwdata ();
440 440
441 F77_INT tnvr = (calc_rev ? n : 0); 441 F77_INT tnvr = (calc_rev ? n : 0);
442 Matrix vr (tnvr, tnvr); 442 Matrix vr (tnvr, tnvr);
443 double *pvr = vr.fortran_vec (); 443 double *pvr = vr.rwdata ();
444 444
445 F77_INT tnvl = (calc_lev ? n : 0); 445 F77_INT tnvl = (calc_lev ? n : 0);
446 Matrix vl (tnvl, tnvl); 446 Matrix vl (tnvl, tnvl);
447 double *pvl = vl.fortran_vec (); 447 double *pvl = vl.rwdata ();
448 448
449 F77_INT lwork = -1; 449 F77_INT lwork = -1;
450 double dummy_work; 450 double dummy_work;
451 451
452 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 452 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
461 if (info != 0) 461 if (info != 0)
462 (*current_liboctave_error_handler) ("dggev workspace query failed"); 462 (*current_liboctave_error_handler) ("dggev workspace query failed");
463 463
464 lwork = static_cast<F77_INT> (dummy_work); 464 lwork = static_cast<F77_INT> (dummy_work);
465 Array<double> work (dim_vector (lwork, 1)); 465 Array<double> work (dim_vector (lwork, 1));
466 double *pwork = work.fortran_vec (); 466 double *pwork = work.rwdata ();
467 467
468 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 468 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
469 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 469 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
470 n, atmp_data, n, btmp_data, n, 470 n, atmp_data, n, btmp_data, n,
471 par, pai, pbeta, 471 par, pai, pbeta,
545 (*current_liboctave_error_handler) ("EIG requires same size matrices"); 545 (*current_liboctave_error_handler) ("EIG requires same size matrices");
546 546
547 F77_INT info = 0; 547 F77_INT info = 0;
548 548
549 Matrix atmp = a; 549 Matrix atmp = a;
550 double *atmp_data = atmp.fortran_vec (); 550 double *atmp_data = atmp.rwdata ();
551 551
552 Matrix btmp = b; 552 Matrix btmp = b;
553 double *btmp_data = btmp.fortran_vec (); 553 double *btmp_data = btmp.rwdata ();
554 554
555 ColumnVector wr (n); 555 ColumnVector wr (n);
556 double *pwr = wr.fortran_vec (); 556 double *pwr = wr.rwdata ();
557 557
558 F77_INT lwork = -1; 558 F77_INT lwork = -1;
559 double dummy_work; 559 double dummy_work;
560 560
561 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 561 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
569 if (info != 0) 569 if (info != 0)
570 (*current_liboctave_error_handler) ("dsygv workspace query failed"); 570 (*current_liboctave_error_handler) ("dsygv workspace query failed");
571 571
572 lwork = static_cast<F77_INT> (dummy_work); 572 lwork = static_cast<F77_INT> (dummy_work);
573 Array<double> work (dim_vector (lwork, 1)); 573 Array<double> work (dim_vector (lwork, 1));
574 double *pwork = work.fortran_vec (); 574 double *pwork = work.rwdata ();
575 575
576 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 576 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
577 F77_CONST_CHAR_ARG2 ("U", 1), 577 F77_CONST_CHAR_ARG2 ("U", 1),
578 n, atmp_data, n, 578 n, atmp_data, n,
579 btmp_data, n, 579 btmp_data, n,
615 (*current_liboctave_error_handler) ("EIG requires same size matrices"); 615 (*current_liboctave_error_handler) ("EIG requires same size matrices");
616 616
617 F77_INT info = 0; 617 F77_INT info = 0;
618 618
619 ComplexMatrix tmp = b; 619 ComplexMatrix tmp = b;
620 Complex *tmp_data = tmp.fortran_vec (); 620 Complex *tmp_data = tmp.rwdata ();
621 621
622 if (! force_qz) 622 if (! force_qz)
623 { 623 {
624 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), 624 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1),
625 n, F77_DBLE_CMPLX_ARG (tmp_data), n, 625 n, F77_DBLE_CMPLX_ARG (tmp_data), n,
629 if (a.ishermitian () && b.ishermitian () && info == 0) 629 if (a.ishermitian () && b.ishermitian () && info == 0)
630 return hermitian_init (a, b, calc_rev, calc_lev); 630 return hermitian_init (a, b, calc_rev, calc_lev);
631 } 631 }
632 632
633 ComplexMatrix atmp = a; 633 ComplexMatrix atmp = a;
634 Complex *atmp_data = atmp.fortran_vec (); 634 Complex *atmp_data = atmp.rwdata ();
635 635
636 ComplexMatrix btmp = b; 636 ComplexMatrix btmp = b;
637 Complex *btmp_data = btmp.fortran_vec (); 637 Complex *btmp_data = btmp.rwdata ();
638 638
639 ComplexColumnVector alpha (n); 639 ComplexColumnVector alpha (n);
640 Complex *palpha = alpha.fortran_vec (); 640 Complex *palpha = alpha.rwdata ();
641 641
642 ComplexColumnVector beta (n); 642 ComplexColumnVector beta (n);
643 Complex *pbeta = beta.fortran_vec (); 643 Complex *pbeta = beta.rwdata ();
644 644
645 F77_INT nvr = (calc_rev ? n : 0); 645 F77_INT nvr = (calc_rev ? n : 0);
646 ComplexMatrix vrtmp (nvr, nvr); 646 ComplexMatrix vrtmp (nvr, nvr);
647 Complex *pvr = vrtmp.fortran_vec (); 647 Complex *pvr = vrtmp.rwdata ();
648 648
649 F77_INT nvl = (calc_lev ? n : 0); 649 F77_INT nvl = (calc_lev ? n : 0);
650 ComplexMatrix vltmp (nvl, nvl); 650 ComplexMatrix vltmp (nvl, nvl);
651 Complex *pvl = vltmp.fortran_vec (); 651 Complex *pvl = vltmp.rwdata ();
652 652
653 F77_INT lwork = -1; 653 F77_INT lwork = -1;
654 Complex dummy_work; 654 Complex dummy_work;
655 655
656 F77_INT lrwork = 8*n; 656 F77_INT lrwork = 8*n;
657 Array<double> rwork (dim_vector (lrwork, 1)); 657 Array<double> rwork (dim_vector (lrwork, 1));
658 double *prwork = rwork.fortran_vec (); 658 double *prwork = rwork.rwdata ();
659 659
660 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 660 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
661 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 661 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
662 n, F77_DBLE_CMPLX_ARG (atmp_data), n, 662 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
663 F77_DBLE_CMPLX_ARG (btmp_data), n, 663 F77_DBLE_CMPLX_ARG (btmp_data), n,
673 if (info != 0) 673 if (info != 0)
674 (*current_liboctave_error_handler) ("zggev workspace query failed"); 674 (*current_liboctave_error_handler) ("zggev workspace query failed");
675 675
676 lwork = static_cast<F77_INT> (dummy_work.real ()); 676 lwork = static_cast<F77_INT> (dummy_work.real ());
677 Array<Complex> work (dim_vector (lwork, 1)); 677 Array<Complex> work (dim_vector (lwork, 1));
678 Complex *pwork = work.fortran_vec (); 678 Complex *pwork = work.rwdata ();
679 679
680 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1), 680 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
681 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 681 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
682 n, F77_DBLE_CMPLX_ARG (atmp_data), n, 682 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
683 F77_DBLE_CMPLX_ARG (btmp_data), n, 683 F77_DBLE_CMPLX_ARG (btmp_data), n,
723 (*current_liboctave_error_handler) ("EIG requires same size matrices"); 723 (*current_liboctave_error_handler) ("EIG requires same size matrices");
724 724
725 F77_INT info = 0; 725 F77_INT info = 0;
726 726
727 ComplexMatrix atmp = a; 727 ComplexMatrix atmp = a;
728 Complex *atmp_data = atmp.fortran_vec (); 728 Complex *atmp_data = atmp.rwdata ();
729 729
730 ComplexMatrix btmp = b; 730 ComplexMatrix btmp = b;
731 Complex *btmp_data = btmp.fortran_vec (); 731 Complex *btmp_data = btmp.rwdata ();
732 732
733 ColumnVector wr (n); 733 ColumnVector wr (n);
734 double *pwr = wr.fortran_vec (); 734 double *pwr = wr.rwdata ();
735 735
736 F77_INT lwork = -1; 736 F77_INT lwork = -1;
737 Complex dummy_work; 737 Complex dummy_work;
738 738
739 F77_INT lrwork = 3*n; 739 F77_INT lrwork = 3*n;
740 Array<double> rwork (dim_vector (lrwork, 1)); 740 Array<double> rwork (dim_vector (lrwork, 1));
741 double *prwork = rwork.fortran_vec (); 741 double *prwork = rwork.rwdata ();
742 742
743 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 743 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
744 F77_CONST_CHAR_ARG2 ("U", 1), 744 F77_CONST_CHAR_ARG2 ("U", 1),
745 n, F77_DBLE_CMPLX_ARG (atmp_data), n, 745 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
746 F77_DBLE_CMPLX_ARG (btmp_data), n, 746 F77_DBLE_CMPLX_ARG (btmp_data), n,
752 if (info != 0) 752 if (info != 0)
753 (*current_liboctave_error_handler) ("zhegv workspace query failed"); 753 (*current_liboctave_error_handler) ("zhegv workspace query failed");
754 754
755 lwork = static_cast<F77_INT> (dummy_work.real ()); 755 lwork = static_cast<F77_INT> (dummy_work.real ());
756 Array<Complex> work (dim_vector (lwork, 1)); 756 Array<Complex> work (dim_vector (lwork, 1));
757 Complex *pwork = work.fortran_vec (); 757 Complex *pwork = work.rwdata ();
758 758
759 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1), 759 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
760 F77_CONST_CHAR_ARG2 ("U", 1), 760 F77_CONST_CHAR_ARG2 ("U", 1),
761 n, F77_DBLE_CMPLX_ARG (atmp_data), n, 761 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
762 F77_DBLE_CMPLX_ARG (btmp_data), n, 762 F77_DBLE_CMPLX_ARG (btmp_data), n,