public interface orcsd
ORCSD computes the CS decomposition of an M-by-M partitioned
orthogonal matrix X:
[ I 0 0 | 0 0 0 ]
[ 0 C 0 | 0 -S 0 ]
[ X11 | X12 ] [ U1 | ] [ 0 0 0 | 0 0 -I ] [ V1 | ]**T
X = [-----------] = [---------] [---------------------] [---------] .
[ X21 | X22 ] [ | U2 ] [ 0 0 0 | I 0 0 ] [ | V2 ]
[ 0 S 0 | 0 C 0 ]
[ 0 0 I | 0 0 0 ]
X11 is P-by-Q. The orthogonal matrices U1, U2, V1, and V2 are P-by-P,
(M-P)-by-(M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively. C and S are
R-by-R nonnegative diagonal matrices satisfying C^2 + S^2 = I, in
which R = MIN(P,M-P,Q,M-Q).
Subroutines
Arguments
| Type |
Intent | Optional | 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 |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
signs |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
m |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
p |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
q |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
x11(ldx11,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx11 |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
x12(ldx12,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx12 |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
x21(ldx21,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx21 |
|
|
real(kind=dp),
|
intent(inout) |
|
|
:: |
x22(ldx22,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx22 |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
theta(*) |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
u1(ldu1,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu1 |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
u2(ldu2,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu2 |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
v1t(ldv1t,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldv1t |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
v2t(ldv2t,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldv2t |
|
|
real(kind=dp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
lwork |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Arguments
| Type |
Intent | Optional | 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 |
|
|
character(len=1),
|
intent(in) |
|
|
:: |
signs |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
m |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
p |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
q |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
x11(ldx11,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx11 |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
x12(ldx12,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx12 |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
x21(ldx21,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx21 |
|
|
real(kind=sp),
|
intent(inout) |
|
|
:: |
x22(ldx22,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldx22 |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
theta(*) |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
u1(ldu1,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu1 |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
u2(ldu2,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldu2 |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
v1t(ldv1t,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldv1t |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
v2t(ldv2t,*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
ldv2t |
|
|
real(kind=sp),
|
intent(out) |
|
|
:: |
work(*) |
|
|
integer(kind=ilp),
|
intent(in) |
|
|
:: |
lwork |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
iwork(*) |
|
|
integer(kind=ilp),
|
intent(out) |
|
|
:: |
info |
|
Module Procedures