bbcsd Interface

public interface bbcsd

BBCSD computes the CS decomposition of a unitary matrix in bidiagonal-block form, [ B11 | B12 0 0 ] [ 0 | 0 -I 0 ] X = [----------------] [ B21 | B22 0 0 ] [ 0 | 0 0 I ] [ C | -S 0 0 ]

[ U1 |    ] [  0 |  0 -I  0 ] [ V1 |    ]**H

= [---------] [---------------] [---------] . [ | U2 ] [ S | C 0 0 ] [ | V2 ] [ 0 | 0 0 I ] X is M-by-M, its top-left block is P-by-Q, and Q must be no larger than P, M-P, or M-Q. (If Q is not the smallest index, then X must be transposed and/or permuted. This can be done in constant time using the TRANS and SIGNS options. See CUNCSD for details.) The bidiagonal matrices B11, B12, B21, and B22 are represented implicitly by angles THETA(1:Q) and PHI(1:Q-1). The unitary matrices U1, U2, V1T, and V2T are input/output. The input matrices are pre- or post-multiplied by the appropriate singular vector matrices.


Subroutines

public pure subroutine cbbcsd(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, theta, phi, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork, lrwork, info)

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(in) :: jobu1
character(len=1), intent(in) :: jobu2
character(len=1), intent(in) :: jobv1t
character(len=1), intent(in) :: jobv2t
character(len=1), intent(in) :: trans
integer(kind=ilp), intent(in) :: m
integer(kind=ilp), intent(in) :: p
integer(kind=ilp), intent(in) :: q
real(kind=sp), intent(inout) :: theta(*)
real(kind=sp), intent(inout) :: phi(*)
complex(kind=sp), intent(inout) :: u1(ldu1,*)
integer(kind=ilp), intent(in) :: ldu1
complex(kind=sp), intent(inout) :: u2(ldu2,*)
integer(kind=ilp), intent(in) :: ldu2
complex(kind=sp), intent(inout) :: v1t(ldv1t,*)
integer(kind=ilp), intent(in) :: ldv1t
complex(kind=sp), intent(inout) :: v2t(ldv2t,*)
integer(kind=ilp), intent(in) :: ldv2t
real(kind=sp), intent(out) :: b11d(*)
real(kind=sp), intent(out) :: b11e(*)
real(kind=sp), intent(out) :: b12d(*)
real(kind=sp), intent(out) :: b12e(*)
real(kind=sp), intent(out) :: b21d(*)
real(kind=sp), intent(out) :: b21e(*)
real(kind=sp), intent(out) :: b22d(*)
real(kind=sp), intent(out) :: b22e(*)
real(kind=sp), intent(out) :: rwork(*)
integer(kind=ilp), intent(in) :: lrwork
integer(kind=ilp), intent(out) :: info

public pure subroutine dbbcsd(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, theta, phi, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork, lrwork, info)

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(in) :: jobu1
character(len=1), intent(in) :: jobu2
character(len=1), intent(in) :: jobv1t
character(len=1), intent(in) :: jobv2t
character(len=1), intent(in) :: trans
integer(kind=ilp), intent(in) :: m
integer(kind=ilp), intent(in) :: p
integer(kind=ilp), intent(in) :: q
real(kind=dp), intent(inout) :: theta(*)
real(kind=dp), intent(inout) :: phi(*)
real(kind=dp), intent(inout) :: u1(ldu1,*)
integer(kind=ilp), intent(in) :: ldu1
real(kind=dp), intent(inout) :: u2(ldu2,*)
integer(kind=ilp), intent(in) :: ldu2
real(kind=dp), intent(inout) :: v1t(ldv1t,*)
integer(kind=ilp), intent(in) :: ldv1t
real(kind=dp), intent(inout) :: v2t(ldv2t,*)
integer(kind=ilp), intent(in) :: ldv2t
real(kind=dp), intent(out) :: b11d(*)
real(kind=dp), intent(out) :: b11e(*)
real(kind=dp), intent(out) :: b12d(*)
real(kind=dp), intent(out) :: b12e(*)
real(kind=dp), intent(out) :: b21d(*)
real(kind=dp), intent(out) :: b21e(*)
real(kind=dp), intent(out) :: b22d(*)
real(kind=dp), intent(out) :: b22e(*)
real(kind=dp), intent(out) :: rwork(*)
integer(kind=ilp), intent(in) :: lrwork
integer(kind=ilp), intent(out) :: info

public pure subroutine sbbcsd(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, theta, phi, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork, lrwork, info)

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(in) :: jobu1
character(len=1), intent(in) :: jobu2
character(len=1), intent(in) :: jobv1t
character(len=1), intent(in) :: jobv2t
character(len=1), intent(in) :: trans
integer(kind=ilp), intent(in) :: m
integer(kind=ilp), intent(in) :: p
integer(kind=ilp), intent(in) :: q
real(kind=sp), intent(inout) :: theta(*)
real(kind=sp), intent(inout) :: phi(*)
real(kind=sp), intent(inout) :: u1(ldu1,*)
integer(kind=ilp), intent(in) :: ldu1
real(kind=sp), intent(inout) :: u2(ldu2,*)
integer(kind=ilp), intent(in) :: ldu2
real(kind=sp), intent(inout) :: v1t(ldv1t,*)
integer(kind=ilp), intent(in) :: ldv1t
real(kind=sp), intent(inout) :: v2t(ldv2t,*)
integer(kind=ilp), intent(in) :: ldv2t
real(kind=sp), intent(out) :: b11d(*)
real(kind=sp), intent(out) :: b11e(*)
real(kind=sp), intent(out) :: b12d(*)
real(kind=sp), intent(out) :: b12e(*)
real(kind=sp), intent(out) :: b21d(*)
real(kind=sp), intent(out) :: b21e(*)
real(kind=sp), intent(out) :: b22d(*)
real(kind=sp), intent(out) :: b22e(*)
real(kind=sp), intent(out) :: rwork(*)
integer(kind=ilp), intent(in) :: lrwork
integer(kind=ilp), intent(out) :: info

public pure subroutine zbbcsd(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, theta, phi, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork, lrwork, info)

Arguments

Type IntentOptional Attributes Name
character(len=1), intent(in) :: jobu1
character(len=1), intent(in) :: jobu2
character(len=1), intent(in) :: jobv1t
character(len=1), intent(in) :: jobv2t
character(len=1), intent(in) :: trans
integer(kind=ilp), intent(in) :: m
integer(kind=ilp), intent(in) :: p
integer(kind=ilp), intent(in) :: q
real(kind=dp), intent(inout) :: theta(*)
real(kind=dp), intent(inout) :: phi(*)
complex(kind=dp), intent(inout) :: u1(ldu1,*)
integer(kind=ilp), intent(in) :: ldu1
complex(kind=dp), intent(inout) :: u2(ldu2,*)
integer(kind=ilp), intent(in) :: ldu2
complex(kind=dp), intent(inout) :: v1t(ldv1t,*)
integer(kind=ilp), intent(in) :: ldv1t
complex(kind=dp), intent(inout) :: v2t(ldv2t,*)
integer(kind=ilp), intent(in) :: ldv2t
real(kind=dp), intent(out) :: b11d(*)
real(kind=dp), intent(out) :: b11e(*)
real(kind=dp), intent(out) :: b12d(*)
real(kind=dp), intent(out) :: b12e(*)
real(kind=dp), intent(out) :: b21d(*)
real(kind=dp), intent(out) :: b21e(*)
real(kind=dp), intent(out) :: b22d(*)
real(kind=dp), intent(out) :: b22e(*)
real(kind=dp), intent(out) :: rwork(*)
integer(kind=ilp), intent(in) :: lrwork
integer(kind=ilp), intent(out) :: info

Module Procedures

public interface stdlib_sbbcsd()

Arguments

None

public interface stdlib_dbbcsd()

Arguments

None

public interface stdlib_cbbcsd()

Arguments

None

public interface stdlib_zbbcsd()

Arguments

None