PDGETRS solves one of the following systems of equations for multiple right-hand sides:
PZGETRS solves one of the following systems of equations for multiple right-hand sides:
In the formulas above:
These subroutines use the results of the factorization of matrix A, produced by a preceding call to PDGETRF or PZGETRF, respectively. For details on the factorization, see PDGETRF and PZGETRF--General Matrix Factorization.
If n = 0 or nrhs = 0, no computation is
performed and the subroutine returns after doing some parameter
checking. See references [16], [18], [22],
[36], and [37].
| A, B | ipvt | Subroutine |
| Long-precision real | Integer | PDGETRS |
| Long-precision complex | Integer | PZGETRS |
| Fortran | CALL PDGETRS | PZGETRS (transa, n, nrhs, a, ia, ja, desc_a, ipvt, b, ib, jb, desc_b, info) |
| C and C++ | pdgetrs | pzgetrs (transa, n, nrhs, a, ia, ja, desc_a, ipvt, b, ib, jb, desc_b, info); |
If transa = 'N', A is used in the computation, resulting in solution 1.
If transa = 'T', AT is used in the computation, resulting in solution 2.
If transa = 'C', AH is used in the computation, resulting in solution 3.
Scope: global
Specified as: a single character; transa = 'N', 'T', or 'C'.
Scope: global
Specified as: a fullword integer; n >= 0.
Scope: global
Specified as: a fullword integer; nrhs >= 0.
Scope: local
Specified as: an LLD_A by (at least) LOCq(N_A) array, containing numbers of the data type indicated in Table 60. 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+n-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 n = 0: M_A >= 0 Otherwise: M_A >= 1 | Global |
| 4 | N_A | Number of columns in the global matrix |
If 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.
A copy of the vector ipvt, with a block size of MB_A and global index ia, is contained in each column of the process grid. The process row over which the first row of ipvt is distributed is RSRC_A.
Scope: local
Specified as: an array of (at least) length LOCp(ia+n-1), containing fullword integers, where ia <= (pivoting index values) <= ia+n-1. Details about the block-cyclic data distribution of global vector ipvt are stored in desc_a.
Scope: local
Specified as: an LLD_B by (at least) LOCq(N_B) array, containing numbers of the data type indicated in Table 60. Details about the block-cyclic data distribution of global matrix B are stored in desc_b.
Scope: global
Specified as: a fullword integer; 1 <= ib <= M_B and ib+n-1 <= M_B.
Scope: global
Specified as: a fullword integer; 1 <= jb <= N_B and jb+nrhs-1 <= N_B.
| desc_b | Name | Description | Limits | Scope |
|---|---|---|---|---|
| 1 | DTYPE_B | Descriptor type | DTYPE_B=1 | Global |
| 2 | CTXT_B | BLACS context | Valid value, as returned by BLACS_GRIDINIT or BLACS_GRIDMAP | Global |
| 3 | M_B | Number of rows in the global matrix |
If n = 0 or nrhs = 0: M_B >= 0 Otherwise: M_B >= 1 | Global |
| 4 | N_B | Number of columns in the global matrix |
If n = 0 or nrhs = 0: N_B >= 0 Otherwise: N_B >= 1 | Global |
| 5 | MB_B | Row block size | MB_B >= 1 | Global |
| 6 | NB_B | Column block size | NB_B >= 1 | Global |
| 7 | RSRC_B | The process row of the p × q grid over which the first row of the global matrix is distributed | 0 <= RSRC_B < p | Global |
| 8 | CSRC_B | The process column of the p × q grid over which the first column of the global matrix is distributed | 0 <= CSRC_B < q | Global |
| 9 | LLD_B | The leading dimension of the local array | LLD_B >= max(1,LOCp(M_B)) | Local |
Specified as: an array of (at least) length 9, containing fullword integers.
Scope: local
Returned as: an LLD_B by (at least) LOCq(N_B) array, containing numbers of the data type indicated in Table 60.
Scope: global
Returned as: a fullword integer; info = 0.
If, however, you do not plan to call PDGETRS/PZGETRS after calling PDGETRF/PZGETRF, then input arguments m and n in PDGETRF/PZGETRF do not need to be equal.
None
Unable to allocate work space
If n <> 0:
If n <> 0 and nrhs <> 0:
In all cases:
Each of the following global input arguments are checked to determine whether its value differs from the value specified on process P00:
This example solves the real system AX = B with 5 right-hand sides using a 2 × 2 process grid. The input ipvt vector and transformed matrix A are the output from Example 1.
This example uses a global submatrix B within a global matrix B by specifying ib = 1 and jb = 2.
By specifying RSRC_B = 1, the rows of global matrix B are distributed over the process grid starting in the second row of the process grid. In addition, by specifying CSRC_B = 1, the columns of global matrix B are distributed over the process grid starting in the second column of the 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)
TRANSA N NRHS A IA JA DESC_A IPVT B IB JB DESC_B INFO
| | | | | | | | | | | | |
CALL PDGETRS( 'N' , 9 , 5 , A , 1 , 1 , DESC_A , IPVT , B , 1 , 2 , DESC_B , INFO )
|
| Desc_A | Desc_B |
|---|---|---|
| DTYPE_ | 1 | 1 |
| CTXT_ | icontxt(IOBG47) | icontxt(IOBG47) |
| M_ | 9 | 9 |
| N_ | 9 | 6 |
| MB_ | 3 | 3 |
| NB_ | 3 | 2 |
| RSRC_ | 1 | 1 |
| CSRC_ | 0 | 1 |
| LLD_ | See below(EPSSL47) | See below(EPSSL47) |
|
Notes: | ||
After the global matrix B is distributed over the process grid, only a portion of the global data structure is used--that is, global submatrix B. Following is the global 9 × 5 submatrix B, starting at row 1 and column 2 in global general 9 × 6 matrix B with block size 3 × 2:
B,D 0 1 2
* *
| . 93.0 | 186.0 279.0 | 372.0 465.0 |
0 | . 84.4 | 168.8 253.2 | 337.6 422.0 |
| . 76.6 | 153.2 229.8 | 306.4 383.0 |
| -------------|-----------------|--------------- |
| . 70.0 | 140.0 210.0 | 280.0 350.0 |
1 | . 65.0 | 130.0 195.0 | 260.0 325.0 |
| . 62.0 | 124.0 186.0 | 248.0 310.0 |
| -------------|-----------------|--------------- |
| . 61.4 | 122.8 184.2 | 245.6 307.0 |
2 | . 63.6 | 127.2 190.8 | 254.4 318.0 |
| . 69.0 | 138.0 207.0 | 276.0 345.0 |
* *
The following is the 2 × 2 process grid:
B,D | 1 | 0 2 -----| ------- |----- 1 | P00 | P01 -----| ------- |----- 0 | P10 | P11 2 | |
Local arrays for B:
p,q | 0 | 1
-----|----------------|----------------------------
| 140.0 210.0 | . 70.0 280.0 350.0
0 | 130.0 195.0 | . 65.0 260.0 325.0
| 124.0 186.0 | . 62.0 248.0 310.0
-----|----------------|----------------------------
| 186.0 279.0 | . 93.0 372.0 465.0
| 168.8 253.2 | . 84.4 337.6 422.0
| 153.2 229.8 | . 76.6 306.4 383.0
1 | 122.8 184.2 | . 61.4 245.6 307.0
| 127.2 190.8 | . 63.6 254.4 318.0
| 138.0 207.0 | . 69.0 276.0 345.0
Output:
After the global matrix B is distributed over the process grid, only a portion of the global data structure is used--that is, global submatrix B. Following is the global 9 × 5 submatrix B, starting at row 1 and column 2 in global general 9 × 6 matrix B with block size 3 × 2:
B,D 0 1 2
* *
| . 1.0 | 2.0 3.0 | 4.0 5.0 |
0 | . 2.0 | 4.0 6.0 | 8.0 10.0 |
| . 3.0 | 6.0 9.0 | 12.0 15.0 |
| -----------|---------------|------------- |
| . 4.0 | 8.0 12.0 | 16.0 20.0 |
1 | . 5.0 | 10.0 15.0 | 20.0 25.0 |
| . 6.0 | 12.0 18.0 | 24.0 30.0 |
| -----------|---------------|------------- |
| . 7.0 | 14.0 21.0 | 28.0 35.0 |
2 | . 8.0 | 16.0 24.0 | 32.0 40.0 |
| . 9.0 | 18.0 27.0 | 36.0 45.0 |
* *
The following is the 2 × 2 process grid:
B,D | 1 | 0 2 -----| ------- |----- 1 | P00 | P01 -----| ------- |----- 0 | P10 | P11 2 | |
Local arrays for B:
p,q | 0 | 1
-----|--------------|------------------------
| 8.0 12.0 | . 4.0 16.0 20.0
0 | 10.0 15.0 | . 5.0 20.0 25.0
| 12.0 18.0 | . 6.0 24.0 30.0
-----|--------------|------------------------
| 2.0 3.0 | . 1.0 4.0 5.0
| 4.0 6.0 | . 2.0 8.0 10.0
| 6.0 9.0 | . 3.0 12.0 15.0
1 | 14.0 21.0 | . 7.0 28.0 35.0
| 16.0 24.0 | . 8.0 32.0 40.0
| 18.0 27.0 | . 9.0 36.0 45.0
The value of info is 0 on all processes.
This example solves the complex system AX = B with 5 right-hand sides using a 2 × 2 process grid. The input ipvt vector and transformed matrix A are the output from Example 2.
This example uses a global submatrix B within a global matrix B by specifying ib = 1 and jb = 2.
By specifying RSRC_B = 1, the rows of global matrix B are distributed over the process grid starting in the second row of the process grid. In addition, by specifying CSRC_B = 1, the columns of global matrix B are distributed over the process grid starting in the second column of the 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)
TRANSA N NRHS A IA JA DESC_A IPVT B IB JB DESC_B INFO
| | | | | | | | | | | | |
CALL PZGETRS( 'N' , 9 , 5 , A , 1 , 1 , DESC_A , IPVT , B , 1 , 2 , DESC_B , INFO )
|
| Desc_A | Desc_B |
|---|---|---|
| DTYPE_ | 1 | 1 |
| CTXT_ | icontxt(IOBG48) | icontxt(IOBG48) |
| M_ | 9 | 9 |
| N_ | 9 | 6 |
| MB_ | 3 | 3 |
| NB_ | 3 | 2 |
| RSRC_ | 1 | 1 |
| CSRC_ | 0 | 1 |
| LLD_ | See below(EPSSL48) | See below(EPSSL48) |
|
Notes: | ||
After the global matrix B is distributed over the process grid, only a portion of the global data structure is used--that is, global submatrix B. Following is the global 9 × 5 submatrix B, starting at row 1 and column 2 in global general 9 × 6 matrix B with block size 3 × 2:
B,D 0 1 2
* *
| . (193.0,-10.6) | (200.0, 21.8) (207.0, 54.2) | (214.0, 86.6) (221.0,119.0) |
0 | . (173.8, -9.4) | (178.8, 20.2) (183.8, 49.8) | (188.8, 79.4) (193.8,109.0) |
| . (156.2, -5.4) | (159.2, 22.2) (162.2, 49.8) | (165.2, 77.4) (168.2,105.0) |
| ----------------------|---------------------------------|------------------------------- |
| . (141.0, 1.4) | (142.0, 27.8) (143.0, 54.2) | (144.0, 80.6) (145.0,107.0) |
1 | . (129.0, 11.0) | (128.0, 37.0) (127.0, 63.0) | (126.0, 89.0) (125.0,115.0) |
| . (121.0, 23.4) | (118.0, 49.8) (115.0, 76.2) | (112.0,102.6) (109.0,129.0) |
| ----------------------|---------------------------------|------------------------------- |
| . (117.8, 38.6) | (112.8, 66.2) (107.8, 93.8) | (102.8,121.4) (97.8,149.0) |
2 | . (120.2, 56.6) | (113.2, 86.2) (106.2,115.8) | (99.2,145.4) (92.2,175.0) |
| . (129.0, 77.4) | (120.0,109.8) (111.0,142.2) | (102.0,174.6) (93.0,207.0) |
* *
The following is the 2 × 2 process grid:
B,D | 1 | 0 2 -----| ------- |----- 1 | P00 | P01 -----| ------- |----- 0 | P10 | P11 2 | |
Local arrays for B:
p,q | 0 | 1
-----|--------------------------------|-----------------------------------------------------
| (142.0, 27.8) (143.0, 54.2) | . (141.0, 1.4) (144.0, 80.6) (145.0,107.0)
0 | (128.0, 37.0) (127.0, 63.0) | . (129.0, 11.0) (126.0, 89.0) (125.0,115.0)
| (118.0, 49.8) (115.0, 76.2) | . (121.0, 23.4) (112.0,102.6) (109.0,129.0)
-----|--------------------------------|-----------------------------------------------------
| (200.0, 21.8) (207.0, 54.2) | . (193.0,-10.6) (214.0, 86.6) (221.0,119.0)
| (178.8, 20.2) (183.8, 49.8) | . (173.8, -9.4) (188.8, 79.4) (193.8,109.0)
| (159.2, 22.2) (162.2, 49.8) | . (156.2, -5.4) (165.2, 77.4) (168.2,105.0)
1 | (112.8, 66.2) (107.8, 93.8) | . (117.8, 38.6) (102.8,121.4) (97.8,149.0)
| (113.2, 86.2) (106.2,115.8) | . (120.2, 56.6) (99.2,145.4) (92.2,175.0)
| (120.0,109.8) (111.0,142.2) | . (129.0, 77.4) (102.0,174.6) (93.0,207.0)
Output:
After the global matrix B is distributed over the process grid, only a portion of the global data structure is used--that is, global submatrix B. Following is the global 9 × 5 submatrix B, starting at row 1 and column 2 in global general 9 × 6 matrix B with block size 3 × 2:
B,D 0 1 2
* *
| . (1.0, 1.0) | (1.0, 2.0) (1.0, 3.0) | (1.0, 4.0) (1.0, 5.0) |
0 | . (2.0, 1.0) | (2.0, 2.0) (2.0, 3.0) | (2.0, 4.0) (2.0, 5.0) |
| . (3.0, 1.0) | (3.0, 2.0) (3.0, 3.0) | (3.0, 4.0) (3.0, 5.0) |
| ------------------|---------------------------|------------------------- |
| . (4.0, 1.0) | (4.0, 2.0) (4.0, 3.0) | (4.0, 4.0) (4.0, 5.0) |
1 | . (5.0, 1.0) | (5.0, 2.0) (5.0, 3.0) | (5.0, 4.0) (5.0, 5.0) |
| . (6.0, 1.0) | (6.0, 2.0) (6.0, 3.0) | (6.0, 4.0) (6.0, 5.0) |
| ------------------|---------------------------|------------------------- |
| . (7.0, 1.0) | (7.0, 2.0) (7.0, 3.0) | (7.0, 4.0) (7.0, 5.0) |
2 | . (8.0, 1.0) | (8.0, 2.0) (8.0, 3.0) | (8.0, 4.0) (8.0, 5.0) |
| . (9.0, 1.0) | (9.0, 2.0) (9.0, 3.0) | (9.0, 4.0) (9.0, 5.0) |
* *
The following is the 2 × 2 process grid:
B,D | 1 | 0 2 -----| ------- |----- 1 | P00 | P01 -----| ------- |----- 0 | P10 | P11 2 | |
Local arrays for B:
p,q | 0 | 1
-----|--------------------------|-------------------------------------------
| (3.0, 2.0) (3.0, 3.0) | . (3.0, 1.0) (3.0, 4.0) (3.0, 5.0)
0 | (4.0, 2.0) (4.0, 3.0) | . (4.0, 1.0) (4.0, 4.0) (4.0, 5.0)
| (5.0, 2.0) (5.0, 3.0) | . (5.0, 1.0) (5.0, 4.0) (5.0, 5.0)
-----|--------------------------|-------------------------------------------
| (1.0, 2.0) (1.0, 3.0) | . (1.0, 1.0) (1.0, 4.0) (1.0, 5.0)
| (2.0, 2.0) (2.0, 3.0) | . (2.0, 1.0) (2.0, 4.0) (2.0, 5.0)
| (3.0, 2.0) (3.0, 3.0) | . (3.0, 1.0) (3.0, 4.0) (3.0, 5.0)
1 | (7.0, 2.0) (7.0, 3.0) | . (7.0, 1.0) (7.0, 4.0) (7.0, 5.0)
| (8.0, 2.0) (8.0, 3.0) | . (8.0, 1.0) (8.0, 4.0) (8.0, 5.0)
| (9.0, 2.0) (9.0, 3.0) | . (9.0, 1.0) (9.0, 4.0) (9.0, 5.0)
The value of info is 0 on all processes.