This subroutine reduces a real general matrix A of order m by n to upper or lower bidiagonal form B by an orthogonal transformation:
where:
If min(m, n) = 0, no computation is performed and the subroutine returns after doing some parameter checking.
A, d, e, tauq, taup, work | Subroutine |
Long-precision real | PDGEBRD |
Fortran | CALL PDGEBRD (m, n, a, ia, ja, desc_a, d, e, tauq, taup, work, lwork, info) |
C and C++ | pdgebrd (m, n, a, ia, ja, desc_a, d, e, tauq, taup, work, lwork, info); |
Scope: global
Specified as: a fullword integer; m >= 0
Scope: global
Specified as: a fullword integer; n >= 0.
Scope: local
Specified as: an LLD_A by (at least) LOCq(N_A) array, containing numbers of the data type indicated in Table 107. Details about the square block-cyclic data distribution of global matrix A are stored in desc_a.
Scope: global
Specified as: a fullword integer; 1 <= ia <= M_A and ia+m-1 <= M_A.
Scope: global
Specified as: a fullword integer; 1 <= ja <= N_A and ja+n-1 <= N_A.
desc_a | Name | Description | Limits | Scope |
---|---|---|---|---|
1 | DTYPE_A | Descriptor type | DTYPE_A=1 | Global |
2 | CTXT_A | BLACS context | Valid value, as returned by BLACS_GRIDINIT or BLACS_GRIDMAP | Global |
3 | M_A | Number of rows in the global matrix | If m = 0 or n = 0:
M_A >= 0
Otherwise: M_A >= 1 | Global |
4 | N_A | Number of columns in the global matrix | If m = 0 or n = 0:
N_A >= 0
Otherwise: N_A >= 1 | Global |
5 | MB_A | Row block size | MB_A >= 1 | Global |
6 | NB_A | Column block size | NB_A >= 1 | Global |
7 | RSRC_A | The process row of the p × q grid over which the first row of the global matrix is distributed | 0 <= RSRC_A < p | Global |
8 | CSRC_A | The process column of the p × q grid over which the first column of the global matrix is distributed | 0 <= CSRC_A < q | Global |
9 | LLD_A | The leading dimension of the local array | LLD_A >= max(1,LOCp(M_A)) | Local |
Specified as: an array of (at least) length 9, containing fullword integers.
If lwork = 0, work is ignored.
If lwork <> 0, work is the work area used by this subroutine, where:
Scope: local
Specified as: an area of storage containing numbers of data type indicated in Table 107.
Scope:
Specified as: a fullword integer; where:
lwork >= nb(mp0+nq0+1)+nq0
where:
See Function, for more information.
Scope: local
Returned as: an LLD_A by (at least) LOCq(N_A) array, containing numbers of the data type indicated in Table 107. Details about the square block-cyclic data distribution of global matrix A are stored in desc_a.
This identifies the first element of the local array D. This subroutine computes the location of the first element of the local subarray used, based on ja, desc_a, p, q, myrow, and mycol; therefore, the leading 1 by LOCq(ja+n-1) part of the local array D must contain the local pieces of the leading 1 by ja+n-1 part of the global matrix D.
A copy of the vector d, with a block size of NB_A and global index ja, is returned to each row of the process grid. The process column over which the first column of d is distributed is CSRC_A.
This identifies the first element of the local array D. This subroutine computes the location of the first element of the local subarray used, based on ia, desc_a, p, q, myrow, and mycol; therefore, the leading LOCp(ia+m-1) by 1 part of the local array D must contain the local pieces of the leading ia+m-1 by 1 part of the global matrix D.
A copy of the vector d, with a block size of MB_A and global index ia, is returned to each column of the process grid. The process row over which the first row of d is distributed is RSRC_A.
Scope: local
Returned as: a 1 by (at least) LOCq(N_A) array if m >= n, and a LOCp(M_A) by 1 array if m < n, containing numbers of the data type indicated in Table 107.
This identifies the first element of the local array E. This subroutine computes the location of the first element of the local subarray used, based on ia, desc_a, p, q, myrow, and mycol; therefore, the leading LOCp(ia+n-2) by 1 part of the local array E must contain the local pieces of the leading ia+n-2 by 1 part of the global matrix E.
A copy of the vector e, with a block size of MB_A and global index ia, is returned to each column of the process grid. The process row over which the first row of e is distributed is RSRC_A.
This identifies the first element of the local array D. This subroutine computes the location of the first element of the local subarray used, based on ja, desc_a, p, q, myrow, and mycol; therefore, the leading 1 by LOCq(ja+m-2) part of the local array E must contain the local pieces of the leading 1 by ja+m-2 part of the global matrix E.
A copy of the vector e, with a block size of NB_A and global index ja, is returned to each row of the process grid. The process column over which the first column of e is distributed is CSRC_A.
Scope: local
Returned as: an (at least) LOCp(N_A-1) by 1 array if m >= n and a 1 by (at least) LOCq(M_A-1) array if m < n, containing numbers of the data type indicated in Table 107.
contains the scalar factors of the elementary reflectors which represent the orthogonal matrix Q. See Function for more details.
This identifies the first element of the local array tauq. This subroutine computes the location of the first element of the local subarray used, based on ja, desc_a, p, q, myrow, and mycol; therefore, the leading 1 by LOCq(ja+min(m, n)-1) part of the local array tauq must contain the local pieces of the leading 1 by ja+min(m, n)-1 part of the global matrix tauq.
A copy of the vector tauq, with a block size of NB_A and global index ja, is returned to each row of the process grid. The process column over which the first column of tauq is distributed is CSRC_A.
Scope: local
Returned as: a 1 by (at least) LOCq(min(M_A, N_A)) array, containing numbers of the data type indicated in Table 107.
contains the scalar factors of the elementary reflectors which represent the orthogonal matrix P. See Function for more details.
This identifies the first element of the local array taup. This subroutine computes the location of the first element of the local subarray used, based on ia, desc_a, p, q, myrow, and mycol; therefore, the leading LOCp(ia+min(m, n)-1) by 1 part of the local array taup must contain the local pieces of the leading ia+min(m, n)-1 by 1 part of the global matrix taup.
A copy of the vector taup, with a block size of MB_A and global index ia, is returned to each column of the process grid. The process row over which the first row of taup is distributed is RSRC_A.
Scope: local
Returned as: an (at least) LOCp(min(M_A, N_A)) by 1 array, containing numbers of the data type indicated in Table 107.
If lwork <> 0 and lwork <> -1, its size is (at least) of length lwork.
If lwork = -1, its size is (at least) of length 1.
Scope: local
Returned as: an area of storage, where:
If lwork >= 1 or lwork = -1, then work1 is set to the minimum lwork value and contains numbers of the data type indicated in Table 107. Except for work1, the contents of work are overwritten on return.
Scope: global
Returned as: a fullword integer; info = 0.
This subroutine reduces a real general matrix A of order m by n to upper or lower bidiagonal form B by an orthogonal transformation:
where:
where:
The following example shows the contents of A on return with ia = ja = 1, m = 6, and n = 5:
where:
where:
The following example shows the contents of A on return with ia = ja = 1, m = 5, and n = 6:
where:
None
Stage 5: If m <> 0 and n <> 0:
In all cases:
where:
Each of the following global input arguments are checked to determine whether its value differs from the value specified on process P00:
Also:
This example shows the reduction of a general matrix of order 4 by 3 to bidiagonal form using a 2 × 2 process grid.
ORDER = 'R' NPROW = 2 NPCOL = 2 CALL BLACS_GET(0, 0, ICONTXT) CALL BLACS_GRIDINIT(ICONTXT, ORDER, NPROW, NPCOL) CALL BLACS_GRIDINFO(ICONTXT, NPROW, NPCOL, MYROW, MYCOL) M N A IA JA DESC_A D E TAUQ TAUP WORK LWORK INFO | | | | | | | | | | | | | CALL PDGEBRD( 4 , 3 , A , 1 , 1 , DESC_A , D , E , TAUQ , TAUP , WORK , 0 , INFO )
| DESC_A |
---|---|
DTYPE_ | 1 |
CTXT_ | icontxt(IITOOT6) |
M_ | 4 |
N_ | 3 |
MB_ | 2 |
NB_ | 2 |
RSRC_ | 0 |
CSRC_ | 0 |
LLD_ | See below(EPSSTL6) |
Notes: |
Global general matrix A of order 4 × 3 with block sizes 2 × 2:
B,D 0 1 * * 0 | 10.0 5.0 | 9.0 | | 2.0 16.0 | 10.0 | | -----------|------ | 1 | 3.0 7.0 | 21.0 | | 4.0 8.0 | 12.0 | * *
The following is the 2 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- 0 | P00 | P01 -----| ------- |----- 1 | P10 | P11
Local arrays for A:
p,q | 0 | 1 -----|------------|------- 0 | 10.0 5.0 | 9.0 | 2.0 16.0 | 10.0 -----|------------|------- 1 | 3.0 7.0 | 21.0 | 4.0 8.0 | 12.0
Output:
Global general matrix A of order 4 × 3 with block sizes 2 × 2:
B,D 0 1 * * 0 | -11.36 22.80 | 0.56 | | 0.09 23.32 | 1.67 | | ---------------|-------- | 1 | 0.14 0.46 | -9.68 | | 0.19 0.22 | 0.08 | * *
The following is the 2 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- 0 | P00 | P01 -----| ------- |----- 1 | P10 | P11
Local arrays for A:
p,q | 0 | 1 -----|----------------|--------- 0 | -11.36 22.80 | 0.56 | 0.09 23.32 | 1.67 -----|----------------|--------- 1 | 0.14 0.46 | -9.68 | 0.19 0.22 | 0.08
Global row vector D of length 3 with block size 2:
B,D 0 1 * * 0 | -11.36 23.32 | -9.68 | * *
The following is the 2 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- | P00 | P01 -----| ------- |----- | P10 | P11
Local arrays for D:
p,q | 0 | 1 -----|----------------|--------- 0 | -11.36 23.32 | -9.68 -----|----------------|--------- 1 | -11.36 23.32 | -9.68
Global column vector E of length 2 with block size 2:
B,D 0 * * 0 | 22.80 | | 1.67 | * *
The following is the 2 × 2 process grid:
B,D | | -----| ------- |----- 0 | P00 | P01 -----| ------- |----- | P10 | P11
Local arrays for E:
p,q | 0 | 1 -----|--------|-------- 0 | 22.80 | 22.80 | 1.67 | 1.67 -----|--------|-------- 1 | . | .
Global row vector tauq of length 3 with block size 2:
B,D 0 1 * * 0 | 1.88 1.59 | 1.99 | * *
The following is the 2 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- | P00 | P01 -----| ------- |----- | P10 | P11
Local arrays for tauq:
p,q | 0 | 1 -----|--------------|-------- 0 | 1.88 1.59 | 1.99 -----|--------------|-------- 1 | 1.88 1.59 | 1.99
Global column vector taup of length 3 with block size 2:
B,D 0 * * 0 | 1.52 | | 0.00 | | ----- | 1 | 0.00 | * *
The following is the 2 × 2 process grid:
B,D | | -----| ------- |----- 0 | P00 | P01 -----| ------- |----- 1 | P10 | P11
Local arrays for taup:
p,q | 0 | 1 -----|--------|-------- 0 | 1.52 | 1.52 | 0.00 | 0.00 -----|--------|-------- 1 | 0.00 | 0.00
The value of info is 0 on all processes.