234{
235
236 integer u1_dim1,
u1_offset,
u2_dim1,
u2_offset,
v1t_dim1,
v1t_offset,
x11_dim1,
x11_offset,
x21_dim1,
x21_offset,
i__1,
i__2,
i__3,
i__4,
i__5,
i__6,
i__7,
i__8,
i__9;
237
238 integer lworkmin,
lworkopt,
i__,
j,
r__,
childinfo,
lorglqmin,
lorgqrmin,
lorglqopt,
lorgqropt,
ib11d,
ib11e,
ib12d,
ib12e,
ib21d,
ib21e,
ib22d,
ib22e,
iphi;
240 extern
244 extern
247 extern
248 int dlacpy_(
char *,
integer *,
integer *,
doublereal *,
integer *,
doublereal *,
integer *),
xerbla_(
char *,
integer *),
dlapmr_(
logical *,
integer *,
integer *,
doublereal *,
integer *,
integer *),
dlapmt_(
logical *,
integer *,
integer *,
doublereal *,
integer *,
integer *);
250 extern int
254 extern
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
297
303 if (*m < 0)
304 {
306 }
308 {
310 }
312 {
314 }
316 {
318 }
319 else
320 {
321
325 {
327 }
329 {
331 }
333 {
335 }
337 {
339 }
340 }
341
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
364 {
366
371
376
381
386
390
395
403 {
404 dorbdb1_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &c__0, &c__0, &c__0, &c__0, &
work[1], & c_n1, &
childinfo);
407 {
411 }
412 else
413 {
417
422 }
423
427
431
436
441 dbbcsd_(
jobu1,
jobu2,
jobv1t,
"N",
"N", m,
p,
q, &
theta[1], &c__0, &
u1[
u1_offset],
ldu1, &
u2[
u2_offset],
ldu2, &
v1t[
v1t_offset],
ldv1t, &c__0, &c__1, &c__0, &c__0, &c__0, & c__0, &c__0, &c__0, &c__0, &c__0, &
work[1], &c_n1, &
childinfo);
443 }
445 {
446 dorbdb2_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &c__0, &c__0, &c__0, &c__0, &
work[1], & c_n1, &
childinfo);
448 if (*
p - 1 >= *m - *
p)
449 {
454
459 }
460 else
461 {
465
470 }
474 dbbcsd_(
jobv1t,
"N",
jobu1,
jobu2,
"T", m,
q,
p, &
theta[1], &c__0, &
v1t[
v1t_offset],
ldv1t, &c__0, &c__1, &
u1[
u1_offset],
ldu1, &
u2[
u2_offset],
ldu2, &c__0, &c__0, &c__0, &c__0, & c__0, &c__0, &c__0, &c__0, &
work[1], &c_n1, &
childinfo);
476 }
477 else if (
r__ == *m - *
p)
478 {
479 dorbdb3_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &c__0, &c__0, &c__0, &c__0, &
work[1], & c_n1, &
childinfo);
481 if (*
p >= *m - *
p - 1)
482 {
486 }
487 else
488 {
493
498 }
504 dbbcsd_(
"N",
jobv1t,
jobu2,
jobu1,
"T", m, &
i__1, &
i__2, &
theta[1] , &c__0, &c__0, &c__1, &
v1t[
v1t_offset],
ldv1t, &
u2[
u2_offset],
ldu2, &
u1[
u1_offset],
ldu1, &c__0, &c__0, & c__0, &c__0, &c__0, &c__0, &c__0, &c__0, &
work[1], &c_n1, &
childinfo);
506 }
507 else
508 {
509 dorbdb4_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &c__0, &c__0, &c__0, &c__0, &c__0, &
work[1], &c_n1, &
childinfo);
512 {
517 }
518 else
519 {
524
529 }
535 dbbcsd_(
jobu2,
jobu1,
"N",
jobv1t,
"N", m, &
i__1, &
i__2, &
theta[1] , &c__0, &
u2[
u2_offset],
ldu2, &
u1[
u1_offset],
ldu1, & c__0, &c__1, &
v1t[
v1t_offset],
ldv1t, &c__0, &c__0, &c__0, &c__0, &c__0, &c__0, &c__0, &c__0, &
work[1], &c_n1, &
childinfo);
537 }
538
543
550 {
552 }
553 }
555 {
558 return 0;
559 }
561 {
562 return 0;
563 }
566
567
569 {
570
571
572 dorbdb1_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &
work[
iphi], &
work[
itaup1], &
work[
itaup2], &
work[
itauq1], &
work[
iorbdb], &
lorbdb, &
childinfo);
573
575 {
578 }
580 {
586 }
588 {
594 {
597 }
605 }
606
607 dbbcsd_(
jobu1,
jobu2,
jobv1t,
"N",
"N", m,
p,
q, &
theta[1], &
work[
iphi], &
u1[
u1_offset],
ldu1, &
u2[
u2_offset],
ldu2, &
v1t[
v1t_offset],
ldv1t, &c__0, &c__1, &
work[
ib11d], &
work[
ib11e], &
work[
ib12d], &
work[
ib12e], &
work[
ib21d], &
work[
ib21e], &
work[
ib22d], &
work[
ib22e], &
work[
ibbcsd], &
lbbcsd, &
childinfo);
608
609
611 {
616 {
618 }
623 {
625 }
629 }
630 }
632 {
633
634
635 dorbdb2_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &
work[
iphi], &
work[
itaup1], &
work[
itaup2], &
work[
itauq1], &
work[
iorbdb], &
lorbdb, &
childinfo);
636
638 {
644 {
647 }
655 }
657 {
663 }
665 {
668 }
669
670 dbbcsd_(
jobv1t,
"N",
jobu1,
jobu2,
"T", m,
q,
p, &
theta[1], &
work[
iphi], &
v1t[
v1t_offset],
ldv1t, &c__0, &c__1, &
u1[
u1_offset],
ldu1, &
u2[
u2_offset],
ldu2, &
work[
ib11d], &
work[
ib11e], &
work[
ib12d], &
work[
ib12e], &
work[
ib21d], &
work[
ib21e], &
work[
ib22d] , &
work[
ib22e], &
work[
ibbcsd], &
lbbcsd, &
childinfo);
671
672
674 {
679 {
681 }
686 {
688 }
692 }
693 }
694 else if (
r__ == *m - *
p)
695 {
696
697
698 dorbdb3_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &
work[
iphi], &
work[
itaup1], &
work[
itaup2], &
work[
itauq1], &
work[
iorbdb], &
lorbdb, &
childinfo);
699
701 {
704 }
706 {
712 {
715 }
723 }
725 {
729 }
730
733 dbbcsd_(
"N",
jobv1t,
jobu2,
jobu1,
"T", m, &
i__1, &
i__2, &
theta[1], &
work[
iphi], &c__0, &c__1, &
v1t[
v1t_offset],
ldv1t, &
u2[
u2_offset],
ldu2, &
u1[
u1_offset],
ldu1, &
work[
ib11d], &
work[
ib11e], &
work[
ib12d], &
work[
ib12e], &
work[
ib21d], &
work[
ib21e] , &
work[
ib22d], &
work[
ib22e], &
work[
ibbcsd], &
lbbcsd, &
childinfo);
734
735
737 {
742 {
744 }
749 {
751 }
753 {
755 }
757 {
759 }
760 }
761 }
762 else
763 {
764
765
767 dorbdb4_(m,
p,
q, &
x11[
x11_offset],
ldx11, &
x21[
x21_offset],
ldx21, &
theta[1], &
work[
iphi], &
work[
itaup1], &
work[
itaup2], &
work[
itauq1], &
work[
iorbdb], &
work[
iorbdb + *m], &
i__1, &
childinfo) ;
768
770 {
776 {
778 }
784 }
786 {
793 {
795 }
803 }
805 {
815 }
816
819 dbbcsd_(
jobu2,
jobu1,
"N",
jobv1t,
"N", m, &
i__1, &
i__2, &
theta[1], &
work[
iphi], &
u2[
u2_offset],
ldu2, &
u1[
u1_offset],
ldu1, &c__0, &c__1, &
v1t[
v1t_offset],
ldv1t, &
work[
ib11d], &
work[
ib11e], &
work[
ib12d], &
work[
ib12e], &
work[
ib21d], &
work[
ib21e], &
work[
ib22d], &
work[
ib22e], &
work[
ibbcsd], &
lbbcsd, &
childinfo);
820
821
823 {
828 {
830 }
835 {
837 }
839 {
841 }
843 {
845 }
846 }
847 }
848 return 0;
849
850}
double doublereal
Definition FLA_f2c.h:31
int integer
Definition FLA_f2c.h:25
int logical
Definition FLA_f2c.h:36
int i
Definition bl1_axmyv2.c:145
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
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