libflame  revision_anchor
Functions
dorcsd.c File Reference

(r)

Functions

int dorcsd_ (char *jobu1, char *jobu2, char *jobv1t, char *jobv2t, char *trans, char *signs, integer *m, integer *p, integer *q, doublereal *x11, integer *ldx11, doublereal *x12, integer *ldx12, doublereal *x21, integer *ldx21, doublereal *x22, integer *ldx22, doublereal *theta, doublereal *u1, integer *ldu1, doublereal *u2, integer *ldu2, doublereal *v1t, integer *ldv1t, doublereal *v2t, integer *ldv2t, doublereal *work, integer *lwork, integer *iwork, integer *info)
 

Function Documentation

◆ dorcsd_()

int dorcsd_ ( char *  jobu1,
char *  jobu2,
char *  jobv1t,
char *  jobv2t,
char *  trans,
char *  signs,
integer m,
integer p,
integer q,
doublereal x11,
integer ldx11,
doublereal x12,
integer ldx12,
doublereal x21,
integer ldx21,
doublereal x22,
integer ldx22,
doublereal theta,
doublereal u1,
integer ldu1,
doublereal u2,
integer ldu2,
doublereal v1t,
integer ldv1t,
doublereal v2t,
integer ldv2t,
doublereal work,
integer lwork,
integer iwork,
integer info 
)

References dorglq_fla(), and dorgqr_fla().

295 {
296  /* System generated locals */
297  integer u1_dim1, u1_offset, u2_dim1, u2_offset, v1t_dim1, v1t_offset, v2t_dim1, v2t_offset, x11_dim1, x11_offset, x12_dim1, x12_offset, x21_dim1, x21_offset, x22_dim1, x22_offset, i__1, i__2, i__3, i__4, i__5, i__6;
298  /* Local variables */
299  logical colmajor;
300  integer lworkmin, lworkopt, i__, j, childinfo, lbbcsdwork, lorbdbwork, lorglqwork, lorgqrwork, ib11d, ib11e, ib12d, ib12e, ib21d, ib21e, ib22d, ib22e, iphi;
301  logical defaultsigns;
302  extern logical lsame_(char *, char *);
303  integer lbbcsdworkmin, itaup1, itaup2, itauq1, itauq2, lorbdbworkmin, lbbcsdworkopt;
304  logical wantu1, wantu2;
305  extern /* Subroutine */
306  int dbbcsd_(char *, char *, char *, char *, char * , integer *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *, doublereal *, integer *, doublereal *, integer *, doublereal *, integer *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, integer *, integer *);
307  integer ibbcsd, lorbdbworkopt;
308  extern /* Subroutine */
310  integer iorbdb, lorglqworkmin, lorgqrworkmin;
311  extern /* Subroutine */
312  int dlacpy_(char *, integer *, integer *, doublereal *, integer *, doublereal *, integer *), dlapmr_(logical *, integer *, integer *, doublereal *, integer *, integer *), xerbla_(char *, integer *), dlapmt_(logical *, integer *, integer *, doublereal *, integer *, integer *);
313  integer lorglqworkopt;
314  extern /* Subroutine */
316  integer lorgqrworkopt, iorglq;
317  extern /* Subroutine */
319  integer iorgqr;
320  char signst[1], transt[1];
321  logical lquery, wantv1t, wantv2t;
322  /* -- LAPACK computational routine (version 3.5.0) -- */
323  /* -- LAPACK is a software package provided by Univ. of Tennessee, -- */
324  /* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- */
325  /* November 2013 */
326  /* .. Scalar Arguments .. */
327  /* .. */
328  /* .. Array Arguments .. */
329  /* .. */
330  /* =================================================================== */
331  /* .. Parameters .. */
332  /* .. */
333  /* .. Local Scalars .. */
334  /* .. */
335  /* .. External Subroutines .. */
336  /* .. */
337  /* .. External Functions .. */
338  /* .. */
339  /* .. Intrinsic Functions */
340  /* .. */
341  /* .. Executable Statements .. */
342  /* Test input arguments */
343  /* Parameter adjustments */
344  x11_dim1 = *ldx11;
345  x11_offset = 1 + x11_dim1;
346  x11 -= x11_offset;
347  x12_dim1 = *ldx12;
348  x12_offset = 1 + x12_dim1;
349  x12 -= x12_offset;
350  x21_dim1 = *ldx21;
351  x21_offset = 1 + x21_dim1;
352  x21 -= x21_offset;
353  x22_dim1 = *ldx22;
354  x22_offset = 1 + x22_dim1;
355  x22 -= x22_offset;
356  --theta;
357  u1_dim1 = *ldu1;
358  u1_offset = 1 + u1_dim1;
359  u1 -= u1_offset;
360  u2_dim1 = *ldu2;
361  u2_offset = 1 + u2_dim1;
362  u2 -= u2_offset;
363  v1t_dim1 = *ldv1t;
364  v1t_offset = 1 + v1t_dim1;
365  v1t -= v1t_offset;
366  v2t_dim1 = *ldv2t;
367  v2t_offset = 1 + v2t_dim1;
368  v2t -= v2t_offset;
369  --work;
370  --iwork;
371  /* Function Body */
372  *info = 0;
373  wantu1 = lsame_(jobu1, "Y");
374  wantu2 = lsame_(jobu2, "Y");
375  wantv1t = lsame_(jobv1t, "Y");
376  wantv2t = lsame_(jobv2t, "Y");
377  colmajor = ! lsame_(trans, "T");
378  defaultsigns = ! lsame_(signs, "O");
379  lquery = *lwork == -1;
380  if (*m < 0)
381  {
382  *info = -7;
383  }
384  else if (*p < 0 || *p > *m)
385  {
386  *info = -8;
387  }
388  else if (*q < 0 || *q > *m)
389  {
390  *info = -9;
391  }
392  else if (colmajor && *ldx11 < max(1,*p))
393  {
394  *info = -11;
395  }
396  else if (! colmajor && *ldx11 < max(1,*q))
397  {
398  *info = -11;
399  }
400  else if (colmajor && *ldx12 < max(1,*p))
401  {
402  *info = -13;
403  }
404  else /* if(complicated condition) */
405  {
406  /* Computing MAX */
407  i__1 = 1;
408  i__2 = *m - *q; // , expr subst
409  if (! colmajor && *ldx12 < max(i__1,i__2))
410  {
411  *info = -13;
412  }
413  else /* if(complicated condition) */
414  {
415  /* Computing MAX */
416  i__1 = 1;
417  i__2 = *m - *p; // , expr subst
418  if (colmajor && *ldx21 < max(i__1,i__2))
419  {
420  *info = -15;
421  }
422  else if (! colmajor && *ldx21 < max(1,*q))
423  {
424  *info = -15;
425  }
426  else /* if(complicated condition) */
427  {
428  /* Computing MAX */
429  i__1 = 1;
430  i__2 = *m - *p; // , expr subst
431  if (colmajor && *ldx22 < max(i__1,i__2))
432  {
433  *info = -17;
434  }
435  else /* if(complicated condition) */
436  {
437  /* Computing MAX */
438  i__1 = 1;
439  i__2 = *m - *q; // , expr subst
440  if (! colmajor && *ldx22 < max(i__1,i__2))
441  {
442  *info = -17;
443  }
444  else if (wantu1 && *ldu1 < *p)
445  {
446  *info = -20;
447  }
448  else if (wantu2 && *ldu2 < *m - *p)
449  {
450  *info = -22;
451  }
452  else if (wantv1t && *ldv1t < *q)
453  {
454  *info = -24;
455  }
456  else if (wantv2t && *ldv2t < *m - *q)
457  {
458  *info = -26;
459  }
460  }
461  }
462  }
463  }
464  /* Work with transpose if convenient */
465  /* Computing MIN */
466  i__1 = *p;
467  i__2 = *m - *p; // , expr subst
468  /* Computing MIN */
469  i__3 = *q;
470  i__4 = *m - *q; // , expr subst
471  if (*info == 0 && min(i__1,i__2) < min(i__3,i__4))
472  {
473  if (colmajor)
474  {
475  *(unsigned char *)transt = 'T';
476  }
477  else
478  {
479  *(unsigned char *)transt = 'N';
480  }
481  if (defaultsigns)
482  {
483  *(unsigned char *)signst = 'O';
484  }
485  else
486  {
487  *(unsigned char *)signst = 'D';
488  }
489  dorcsd_(jobv1t, jobv2t, jobu1, jobu2, transt, signst, m, q, p, &x11[ x11_offset], ldx11, &x21[x21_offset], ldx21, &x12[x12_offset], ldx12, &x22[x22_offset], ldx22, &theta[1], &v1t[v1t_offset], ldv1t, &v2t[v2t_offset], ldv2t, &u1[u1_offset], ldu1, &u2[ u2_offset], ldu2, &work[1], lwork, &iwork[1], info);
490  return 0;
491  }
492  /* Work with permutation [ 0 I;
493  I 0 ] * X * [ 0 I;
494  I 0 ] if */
495  /* convenient */
496  if (*info == 0 && *m - *q < *q)
497  {
498  if (defaultsigns)
499  {
500  *(unsigned char *)signst = 'O';
501  }
502  else
503  {
504  *(unsigned char *)signst = 'D';
505  }
506  i__1 = *m - *p;
507  i__2 = *m - *q;
508  dorcsd_(jobu2, jobu1, jobv2t, jobv1t, trans, signst, m, &i__1, &i__2, &x22[x22_offset], ldx22, &x21[x21_offset], ldx21, &x12[ x12_offset], ldx12, &x11[x11_offset], ldx11, &theta[1], &u2[ u2_offset], ldu2, &u1[u1_offset], ldu1, &v2t[v2t_offset], ldv2t, &v1t[v1t_offset], ldv1t, &work[1], lwork, &iwork[1], info);
509  return 0;
510  }
511  /* Compute workspace */
512  if (*info == 0)
513  {
514  iphi = 2;
515  /* Computing MAX */
516  i__1 = 1;
517  i__2 = *q - 1; // , expr subst
518  itaup1 = iphi + max(i__1,i__2);
519  itaup2 = itaup1 + max(1,*p);
520  /* Computing MAX */
521  i__1 = 1;
522  i__2 = *m - *p; // , expr subst
523  itauq1 = itaup2 + max(i__1,i__2);
524  itauq2 = itauq1 + max(1,*q);
525  /* Computing MAX */
526  i__1 = 1;
527  i__2 = *m - *q; // , expr subst
528  iorgqr = itauq2 + max(i__1,i__2);
529  i__1 = *m - *q;
530  i__2 = *m - *q;
531  i__3 = *m - *q;
532  /* Computing MAX */
533  i__5 = 1;
534  i__6 = *m - *q; // , expr subst
535  i__4 = max(i__5,i__6);
536  dorgqr_fla(&i__1, &i__2, &i__3, &u1[u1_offset], &i__4, &u1[u1_offset], & work[1], &c_n1, &childinfo);
537  lorgqrworkopt = (integer) work[1];
538  /* Computing MAX */
539  i__1 = 1;
540  i__2 = *m - *q; // , expr subst
541  lorgqrworkmin = max(i__1,i__2);
542  /* Computing MAX */
543  i__1 = 1;
544  i__2 = *m - *q; // , expr subst
545  iorglq = itauq2 + max(i__1,i__2);
546  i__1 = *m - *q;
547  i__2 = *m - *q;
548  i__3 = *m - *q;
549  /* Computing MAX */
550  i__5 = 1;
551  i__6 = *m - *q; // , expr subst
552  i__4 = max(i__5,i__6);
553  dorglq_fla(&i__1, &i__2, &i__3, &u1[u1_offset], &i__4, &u1[u1_offset], & work[1], &c_n1, &childinfo);
554  lorglqworkopt = (integer) work[1];
555  /* Computing MAX */
556  i__1 = 1;
557  i__2 = *m - *q; // , expr subst
558  lorglqworkmin = max(i__1,i__2);
559  /* Computing MAX */
560  i__1 = 1;
561  i__2 = *m - *q; // , expr subst
562  iorbdb = itauq2 + max(i__1,i__2);
563  dorbdb_(trans, signs, m, p, q, &x11[x11_offset], ldx11, &x12[ x12_offset], ldx12, &x21[x21_offset], ldx21, &x22[x22_offset], ldx22, &theta[1], &v1t[v1t_offset], &u1[u1_offset], &u2[ u2_offset], &v1t[v1t_offset], &v2t[v2t_offset], &work[1], & c_n1, &childinfo);
564  lorbdbworkopt = (integer) work[1];
565  lorbdbworkmin = lorbdbworkopt;
566  /* Computing MAX */
567  i__1 = 1;
568  i__2 = *m - *q; // , expr subst
569  ib11d = itauq2 + max(i__1,i__2);
570  ib11e = ib11d + max(1,*q);
571  /* Computing MAX */
572  i__1 = 1;
573  i__2 = *q - 1; // , expr subst
574  ib12d = ib11e + max(i__1,i__2);
575  ib12e = ib12d + max(1,*q);
576  /* Computing MAX */
577  i__1 = 1;
578  i__2 = *q - 1; // , expr subst
579  ib21d = ib12e + max(i__1,i__2);
580  ib21e = ib21d + max(1,*q);
581  /* Computing MAX */
582  i__1 = 1;
583  i__2 = *q - 1; // , expr subst
584  ib22d = ib21e + max(i__1,i__2);
585  ib22e = ib22d + max(1,*q);
586  /* Computing MAX */
587  i__1 = 1;
588  i__2 = *q - 1; // , expr subst
589  ibbcsd = ib22e + max(i__1,i__2);
590  dbbcsd_(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, &theta[1], & theta[1], &u1[u1_offset], ldu1, &u2[u2_offset], ldu2, &v1t[ v1t_offset], ldv1t, &v2t[v2t_offset], ldv2t, &u1[u1_offset], & u1[u1_offset], &u1[u1_offset], &u1[u1_offset], &u1[u1_offset], &u1[u1_offset], &u1[u1_offset], &u1[u1_offset], &work[1], & c_n1, &childinfo);
591  lbbcsdworkopt = (integer) work[1];
592  lbbcsdworkmin = lbbcsdworkopt;
593  /* Computing MAX */
594  i__1 = iorgqr + lorgqrworkopt, i__2 = iorglq + lorglqworkopt, i__1 = max(i__1,i__2), i__2 = iorbdb + lorbdbworkopt;
595  i__1 = max( i__1,i__2);
596  i__2 = ibbcsd + lbbcsdworkopt; // ; expr subst
597  lworkopt = max(i__1,i__2) - 1;
598  /* Computing MAX */
599  i__1 = iorgqr + lorgqrworkmin, i__2 = iorglq + lorglqworkmin, i__1 = max(i__1,i__2), i__2 = iorbdb + lorbdbworkopt;
600  i__1 = max( i__1,i__2);
601  i__2 = ibbcsd + lbbcsdworkmin; // ; expr subst
602  lworkmin = max(i__1,i__2) - 1;
603  work[1] = (doublereal) max(lworkopt,lworkmin);
604  if (*lwork < lworkmin && ! lquery)
605  {
606  *info = -22;
607  }
608  else
609  {
610  lorgqrwork = *lwork - iorgqr + 1;
611  lorglqwork = *lwork - iorglq + 1;
612  lorbdbwork = *lwork - iorbdb + 1;
613  lbbcsdwork = *lwork - ibbcsd + 1;
614  }
615  }
616  /* Abort if any illegal arguments */
617  if (*info != 0)
618  {
619  i__1 = -(*info);
620  xerbla_("DORCSD", &i__1);
621  return 0;
622  }
623  else if (lquery)
624  {
625  return 0;
626  }
627  /* Transform to bidiagonal block form */
628  dorbdb_(trans, signs, m, p, q, &x11[x11_offset], ldx11, &x12[x12_offset], ldx12, &x21[x21_offset], ldx21, &x22[x22_offset], ldx22, &theta[1] , &work[iphi], &work[itaup1], &work[itaup2], &work[itauq1], &work[ itauq2], &work[iorbdb], &lorbdbwork, &childinfo);
629  /* Accumulate Householder reflectors */
630  if (colmajor)
631  {
632  if (wantu1 && *p > 0)
633  {
634  dlacpy_("L", p, q, &x11[x11_offset], ldx11, &u1[u1_offset], ldu1);
635  dorgqr_fla(p, p, q, &u1[u1_offset], ldu1, &work[itaup1], &work[ iorgqr], &lorgqrwork, info);
636  }
637  if (wantu2 && *m - *p > 0)
638  {
639  i__1 = *m - *p;
640  dlacpy_("L", &i__1, q, &x21[x21_offset], ldx21, &u2[u2_offset], ldu2);
641  i__1 = *m - *p;
642  i__2 = *m - *p;
643  dorgqr_fla(&i__1, &i__2, q, &u2[u2_offset], ldu2, &work[itaup2], & work[iorgqr], &lorgqrwork, info);
644  }
645  if (wantv1t && *q > 0)
646  {
647  i__1 = *q - 1;
648  i__2 = *q - 1;
649  dlacpy_("U", &i__1, &i__2, &x11[(x11_dim1 << 1) + 1], ldx11, &v1t[ (v1t_dim1 << 1) + 2], ldv1t);
650  v1t[v1t_dim1 + 1] = 1.;
651  i__1 = *q;
652  for (j = 2;
653  j <= i__1;
654  ++j)
655  {
656  v1t[j * v1t_dim1 + 1] = 0.;
657  v1t[j + v1t_dim1] = 0.;
658  }
659  i__1 = *q - 1;
660  i__2 = *q - 1;
661  i__3 = *q - 1;
662  dorglq_fla(&i__1, &i__2, &i__3, &v1t[(v1t_dim1 << 1) + 2], ldv1t, & work[itauq1], &work[iorglq], &lorglqwork, info);
663  }
664  if (wantv2t && *m - *q > 0)
665  {
666  i__1 = *m - *q;
667  dlacpy_("U", p, &i__1, &x12[x12_offset], ldx12, &v2t[v2t_offset], ldv2t);
668  if (*m - *p > *q)
669  {
670  i__1 = *m - *p - *q;
671  i__2 = *m - *p - *q;
672  dlacpy_("U", &i__1, &i__2, &x22[*q + 1 + (*p + 1) * x22_dim1], ldx22, &v2t[*p + 1 + (*p + 1) * v2t_dim1], ldv2t);
673  }
674  if (*m > *q)
675  {
676  i__1 = *m - *q;
677  i__2 = *m - *q;
678  i__3 = *m - *q;
679  dorglq_fla(&i__1, &i__2, &i__3, &v2t[v2t_offset], ldv2t, &work[ itauq2], &work[iorglq], &lorglqwork, info);
680  }
681  }
682  }
683  else
684  {
685  if (wantu1 && *p > 0)
686  {
687  dlacpy_("U", q, p, &x11[x11_offset], ldx11, &u1[u1_offset], ldu1);
688  dorglq_fla(p, p, q, &u1[u1_offset], ldu1, &work[itaup1], &work[ iorglq], &lorglqwork, info);
689  }
690  if (wantu2 && *m - *p > 0)
691  {
692  i__1 = *m - *p;
693  dlacpy_("U", q, &i__1, &x21[x21_offset], ldx21, &u2[u2_offset], ldu2);
694  i__1 = *m - *p;
695  i__2 = *m - *p;
696  dorglq_fla(&i__1, &i__2, q, &u2[u2_offset], ldu2, &work[itaup2], & work[iorglq], &lorglqwork, info);
697  }
698  if (wantv1t && *q > 0)
699  {
700  i__1 = *q - 1;
701  i__2 = *q - 1;
702  dlacpy_("L", &i__1, &i__2, &x11[x11_dim1 + 2], ldx11, &v1t[( v1t_dim1 << 1) + 2], ldv1t);
703  v1t[v1t_dim1 + 1] = 1.;
704  i__1 = *q;
705  for (j = 2;
706  j <= i__1;
707  ++j)
708  {
709  v1t[j * v1t_dim1 + 1] = 0.;
710  v1t[j + v1t_dim1] = 0.;
711  }
712  i__1 = *q - 1;
713  i__2 = *q - 1;
714  i__3 = *q - 1;
715  dorgqr_fla(&i__1, &i__2, &i__3, &v1t[(v1t_dim1 << 1) + 2], ldv1t, & work[itauq1], &work[iorgqr], &lorgqrwork, info);
716  }
717  if (wantv2t && *m - *q > 0)
718  {
719  i__1 = *m - *q;
720  dlacpy_("L", &i__1, p, &x12[x12_offset], ldx12, &v2t[v2t_offset], ldv2t);
721  i__1 = *m - *p - *q;
722  i__2 = *m - *p - *q;
723  dlacpy_("L", &i__1, &i__2, &x22[*p + 1 + (*q + 1) * x22_dim1], ldx22, &v2t[*p + 1 + (*p + 1) * v2t_dim1], ldv2t);
724  i__1 = *m - *q;
725  i__2 = *m - *q;
726  i__3 = *m - *q;
727  dorgqr_fla(&i__1, &i__2, &i__3, &v2t[v2t_offset], ldv2t, &work[ itauq2], &work[iorgqr], &lorgqrwork, info);
728  }
729  }
730  /* Compute the CSD of the matrix in bidiagonal-block form */
731  dbbcsd_(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, &theta[1], &work[ iphi], &u1[u1_offset], ldu1, &u2[u2_offset], ldu2, &v1t[ v1t_offset], ldv1t, &v2t[v2t_offset], ldv2t, &work[ib11d], &work[ ib11e], &work[ib12d], &work[ib12e], &work[ib21d], &work[ib21e], & work[ib22d], &work[ib22e], &work[ibbcsd], &lbbcsdwork, info);
732  /* Permute rows and columns to place identity submatrices in top- */
733  /* left corner of (1,1)-block and/or bottom-right corner of (1,2)- */
734  /* block and/or bottom-right corner of (2,1)-block and/or top-left */
735  /* corner of (2,2)-block */
736  if (*q > 0 && wantu2)
737  {
738  i__1 = *q;
739  for (i__ = 1;
740  i__ <= i__1;
741  ++i__)
742  {
743  iwork[i__] = *m - *p - *q + i__;
744  }
745  i__1 = *m - *p;
746  for (i__ = *q + 1;
747  i__ <= i__1;
748  ++i__)
749  {
750  iwork[i__] = i__ - *q;
751  }
752  if (colmajor)
753  {
754  i__1 = *m - *p;
755  i__2 = *m - *p;
756  dlapmt_(&c_false, &i__1, &i__2, &u2[u2_offset], ldu2, &iwork[1]);
757  }
758  else
759  {
760  i__1 = *m - *p;
761  i__2 = *m - *p;
762  dlapmr_(&c_false, &i__1, &i__2, &u2[u2_offset], ldu2, &iwork[1]);
763  }
764  }
765  if (*m > 0 && wantv2t)
766  {
767  i__1 = *p;
768  for (i__ = 1;
769  i__ <= i__1;
770  ++i__)
771  {
772  iwork[i__] = *m - *p - *q + i__;
773  }
774  i__1 = *m - *q;
775  for (i__ = *p + 1;
776  i__ <= i__1;
777  ++i__)
778  {
779  iwork[i__] = i__ - *p;
780  }
781  if (! colmajor)
782  {
783  i__1 = *m - *q;
784  i__2 = *m - *q;
785  dlapmt_(&c_false, &i__1, &i__2, &v2t[v2t_offset], ldv2t, &iwork[1] );
786  }
787  else
788  {
789  i__1 = *m - *q;
790  i__2 = *m - *q;
791  dlapmr_(&c_false, &i__1, &i__2, &v2t[v2t_offset], ldv2t, &iwork[1] );
792  }
793  }
794  return 0;
795  /* End DORCSD */
796 }
int dorgqr_fla(integer *m, integer *n, integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, integer *info)
Definition: dorgqr.c:123
int dorcsd_(char *jobu1, char *jobu2, char *jobv1t, char *jobv2t, char *trans, char *signs, integer *m, integer *p, integer *q, doublereal *x11, integer *ldx11, doublereal *x12, integer *ldx12, doublereal *x21, integer *ldx21, doublereal *x22, integer *ldx22, doublereal *theta, doublereal *u1, integer *ldu1, doublereal *u2, integer *ldu2, doublereal *v1t, integer *ldv1t, doublereal *v2t, integer *ldv2t, doublereal *work, integer *lwork, integer *iwork, integer *info)
Definition: dorcsd.c:294
double doublereal
Definition: FLA_f2c.h:31
int logical
Definition: FLA_f2c.h:36
int integer
Definition: FLA_f2c.h:25
int dorglq_fla(integer *m, integer *n, integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, integer *info)
Definition: dorglq.c:122