IBM Books

Parallel Engineering and Scientific Subroutine Library for AIX Version 2 Release 3: Guide and Reference

PDSYR2K, PZSYR2K, and PZHER2K--Rank-2K Update of a Real or Complex Symmetric or a Complex Hermitian Matrix

PDSYR2K and PZSYR2K compute one of the following rank-2k updates:

1. C <-- alphaABT+alphaBAT+betaC
2. C <-- alphaATB+alphaBTA+betaC

PZHER2K computes one of the following rank-2k updates:



Rank-2K Update Graphic

where, in the formulas above:

A represents the global general submatrix:
B represents the global general submatrix:
C represents the global submatrix Cic:ic+n-1, jc:jc+n-1.
alpha and beta are scalars.

Note:
No data should be moved to form AT, AH, BT, or BH; that is, the A and B matrices should always be stored in their untransposed forms.

In the following two cases, no computation is performed and the subroutine returns after doing some parameter checking:

See references [14] and [15].

Table 52. Data Types

A, B, C, alpha beta Subprogram
Long-precision real Long-precision real PDSYR2K
Long-precision complex Long-precision complex PZSYR2K
Long-precision complex Long-precision real PZHER2K

Syntax

Fortran CALL PDSYR2K | PZSYR2K | PZHER2K (uplo, trans, n, k, alpha, a, ia, ja, desc_a, b, ib, jb, desc_b, beta, c, ic, jc, desc_c)
C and C++ pdsyr2k | pzsyr2k | pzher2k (uplo, trans, n, k, alpha, a, ia, ja, desc_a, b, ib, jb, desc_b, beta, c, ic, jc, desc_c);

On Entry

uplo
indicates whether the upper or lower triangular part of the global submatrix C is referenced, where:

If uplo = 'U', the upper triangular part is referenced.

If uplo = 'L', the lower triangular part is referenced.

Scope: global

Specified as: a single character; uplo = 'U' or 'L'.

trans
indicates which computation is performed, where:

If trans = 'N', A and B are used.

If trans = 'T', AT and BT are used.

If trans = 'C', AH and BH are used.

Scope: global

Specified as: a single character, where:

For PDSYR2K, it must be 'N', 'T', or 'C'.

For PZSYR2K, it must be 'N' or 'T'.

For PZHER2K, it must be 'N' or 'C'.

n
is the order of the global submatrix C used in the computation, and:

If trans = 'N', it is the number of rows in submatrices A and B used in the computation.

If trans = 'T' or 'C', it is the number of columns in submatrices A and B used in the computation.

Scope: global

Specified as: a fullword integer; n >= 0.

k
has the following meaning:

If trans = 'N', it is the number of columns in submatrices A and B used in the computation.

If trans = 'T' or 'C', it is the number of rows in submatrices A and B used in the computation.

Scope: global

Specified as: a fullword integer; k >= 0.

alpha
is the scalar alpha.

Scope: global

Specified as: a number of the data type indicated in Table 52.

a
is the local part of the global general matrix A. This identifies the first element of the local array A. This subroutine computes the location of the first element of the local subarray used, based on ia, ja, desc_a, p, q, myrow, and mycol; therefore:

Note:
No data should be moved to form AT or AH; that is, the matrix A should always be stored in its untransposed form.

Scope: local

Specified as: an LLD_A by (at least) LOCq(N_A) array, containing numbers of the data type indicated in Table 52. Details about the block-cyclic data distribution of global matrix A are stored in desc_a.

ia
is the row index of the global matrix A, identifying the first row of the submatrix A.

Scope: global

Specified as: a fullword integer; 1 <= ia <= M_A, and:

If trans = 'N', then ia+n-1 <= M_A.

If trans = 'T' or 'C', then ia+k-1 <= M_A.

ja
is the column index of the global matrix A, identifying the first column of the submatrix A.

Scope: global

Specified as: a fullword integer; 1 <= ja <= N_A, and:

If trans = 'N', then ja+k-1 <= N_A.

If trans = 'T' or 'C', then ja+n-1 <= N_A.

desc_a
is the array descriptor for global matrix A, described in the following table:
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 or k = 0:
M_A >= 0
Otherwise:
M_A >= 1
Global
4 N_A Number of columns in the global matrix If n = 0 or k = 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.

b
is the local part of the global general matrix B. This identifies the first element of the local array B. This subroutine computes the location of the first element of the local subarray used, based on ib, jb, desc_b, p, q, myrow, and mycol; therefore:

Note:
No data should be moved to form BT or BH; that is, the matrix B should always be stored in its untransposed form.

Scope: local

Specified as: an LLD_B by (at least) LOCq(N_B) array, containing numbers of the data type indicated in Table 52. Details about the block-cyclic data distribution of global matrix B are stored in desc_b.

ib
is the row index of the global matrix B, identifying the first row of the submatrix B.

Scope: global

Specified as: a fullword integer; 1 <= ib <= M_B, and:

If trans = 'N', then ib+n-1 <= M_B.

If trans = 'T' or 'C', then ib+k-1 <= M_B.

jb
is the column index of the global matrix B, identifying the first column of the submatrix B.

Scope: global

Specified as: a fullword integer; 1 <= jb <= N_B, and:

If trans = 'N', then jb+k-1 <= N_B.

If trans = 'T' or 'C', then jb+n-1 <= N_B.

desc_b
is the array descriptor for global matrix B, described in the following table:
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 k = 0:
M_B >= 0
Otherwise:
M_B >= 1
Global
4 N_B Number of columns in the global matrix If n = 0 or k = 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.

beta
is the scalar beta.

Scope: global

Specified as: a number of the data type indicated in Table 52.

c
is the local part of the global real symmetric, complex symmetric, or complex Hermitian matrix C. This identifies the first element of the local array C. This subroutine computes the location of the first element of the local subarray used, based on ic, jc, desc_c, p, q, myrow, and mycol; therefore, the leading LOCp(ic+n-1) by LOCq(jc+n-1) part of the local array C must contain the local pieces of the leading ic+n-1 by jc+n-1 part of the global matrix, and:

When beta is zero, C need not be set on input.

Scope: local

Specified as: an LLD_C by (at least) LOCq(N_C) array, containing numbers of the data type indicated in Table 52. Details about the block-cyclic data distribution of global matrix C are stored in desc_c.

ic
is the row index of the global matrix C, identifying the first row of the submatrix C.

Scope: global

Specified as: a fullword integer; 1 <= ic <= M_C and ic+n-1 <= M_C.

jc
is the column index of the global matrix C, identifying the first column of the submatrix C.

Scope: global

Specified as: a fullword integer; 1 <= jc <= N_C and jc+n-1 <= N_C.

desc_c
is the array descriptor for global matrix C, described in the following table:
desc_c Name Description Limits Scope
1 DTYPE_C Descriptor type DTYPE_C=1 Global
2 CTXT_C BLACS context Valid value, as returned by BLACS_GRIDINIT or BLACS_GRIDMAP Global
3 M_C Number of rows in the global matrix If n = 0:
M_C >= 0
Otherwise:
M_C >= 1
Global
4 N_C Number of columns in the global matrix If n = 0:
N_C >= 0
Otherwise:
N_C >= 1
Global
5 MB_C Row block size MB_C >= 1 Global
6 NB_C Column block size NB_C >= 1 Global
7 RSRC_C The process row of the p × q grid over which the first row of the global matrix is distributed 0 <= RSRC_C < p Global
8 CSRC_C The process column of the p × q grid over which the first column of the global matrix is distributed 0 <= CSRC_C < q Global
9 LLD_C The leading dimension of the local array LLD_C >= max(1,LOCp(M_C)) Local

Specified as: an array of (at least) length 9, containing fullword integers.

On Return

c
is the updated local part of the global real symmetric, complex symmetric, or complex Hermitian matrix C, containing the results of the computation.

Scope: local

Returned as: an LLD_C by (at least) LOCq(N_C) array, containing numbers of the data type indicated in Table 52.

Notes and Coding Rules
  1. These subroutines accept lowercase letters for the uplo and trans arguments.
  2. For PDSYR2K, if you specify 'C' for the trans argument, it is interpreted as though you specified 'T'.
  3. The imaginary parts of the diagonal elements of a complex Hermitian matrix C are assumed to be zero, so you do not have to set these values. On output, they are set to zero, except when beta is one and alpha or k is zero, in which case no computation is performed.
  4. The matrices must have no common elements; otherwise, results are unpredictable.
  5. The NUMROC utility subroutine can be used to determine the values of LOCp(M_) and LOCq(N_) used in the argument descriptions above. For details, see Determining the Number of Rows and Columns in Your Local Arrays and NUMROC--Compute the Number of Rows or Columns of a Block-Cyclically Distributed Matrix Contained in a Process.
  6. For suggested block sizes, see Coding Tips for Optimizing Parallel Performance.
  7. The following values must be equal: CTXT_A = CTXT_B = CTXT_C.
  8. If trans = 'N':
  9. If trans = 'T' or 'C':
  10. If all the following are true:

    then you must follow these rules:

  11. If the following is true:

    or if all the following are true:

    then you must follow these rules:

Error Conditions

Computational Errors

None

Resource Errors

Unable to allocate work space

Input-Argument and Miscellaneous Errors

Stage 1 

  1. DTYPE_A is invalid.
  2. DTYPE_B is invalid.
  3. DTYPE_C is invalid.

Stage 2 

  1. CTXT_A is invalid.

Stage 3 

  1. This subroutine was called from outside the process grid.

Stage 4 

  1. uplo <> 'U' or 'L'
  2. trans <> 
  3. n < 0 and trans = 'N'; n < 0 and trans = 'T' or 'C'; n < 0 and trans is invalid.
  4. k < 0 and trans = 'N'; k < 0 and trans = 'T' or 'C'; k < 0 and trans is invalid.
  5. M_A < 0 and (n = 0 or k = 0); M_A < 1 otherwise
  6. N_A < 0 and (n = 0 or k = 0); N_A < 1 otherwise
  7. MB_A < 1
  8. NB_A < 1
  9. RSRC_A < 0 or RSRC_A >= p
  10. CSRC_A < 0 or CSRC_A >= q
  11. ia < 1
  12. ja < 1
  13. M_B < 0 and (n = 0 or k = 0); M_B < 1 otherwise
  14. N_B < 0 and (n = 0 or k = 0); N_B < 1 otherwise
  15. MB_B < 1
  16. NB_B < 1
  17. RSRC_B < 0 or RSRC_B >= p
  18. CSRC_B < 0 or CSRC_B >= q
  19. ib < 1
  20. jb < 1
  21. M_C < 0 and n = 0; M_C < 1 otherwise
  22. N_C < 0 and n = 0; N_C < 1 otherwise
  23. MB_C < 1
  24. NB_C < 1
  25. RSRC_C < 0 or RSRC_C >= p
  26. CSRC_C < 0 or CSRC_C >= q
  27. ic < 1
  28. jc < 1
  29. CTXT_A <> CTXT_B
  30. CTXT_A <> CTXT_C

Stage 5  If n <> 0 and k <> 0:

  1. ia > M_A
  2. ja > N_A
  3. trans = 'N' and ia+n-1 > M_A
  4. trans = 'N' and ja+k-1 > N_A
  5. trans = 'T' or 'C' and ia+k-1 > M_A
  6. trans = 'T' or 'C' and ja+n-1 > N_A
  7. ib > M_B
  8. jb > N_B
  9. trans = 'N' and ib+n-1 > M_B
  10. trans = 'N' and jb+k-1 > N_B
  11. trans = 'T' or 'C' and ib+k-1 > M_B
  12. trans = 'T' or 'C' and jb+n-1 > N_B

    If n <> 0:

  13. ic > M_C
  14. jc > N_C
  15. ic+n-1 > M_C
  16. jc+n-1 > N_C

Stage 6  If C is contained within a single block, that is:

n+mod(ic-1, MB_C) <= MB_C
n+mod(jc-1, NB_C) <= NB_C

and:

then:

If C is not contained within a single block, or if C is contained within a single block and:

then:

  1. MB_C <> NB_C
  2. mod(ic-1, MB_C) <> 0
  3. mod(jc-1, NB_C) <> 0

    If trans = 'N':

  4. NB_C <> MB_A
  5. NB_C <> MB_B
  6. NB_A <> NB_B
  7. mod(ia-1, MB_A) <> 0
  8. mod(ib-1, MB_B) <> 0

    If trans = 'T' or 'C':

  9. MB_C <> NB_A
  10. MB_C <> NB_B
  11. MB_A <> MB_B
  12. mod(ja-1, NB_A) <> 0
  13. mod(jb-1, NB_B) <> 0

In all cases:

  1. LLD_A < max(1, LOCp(M_A))
  2. LLD_B < max(1, LOCp(M_B))
  3. LLD_C < max(1, LOCp(M_C))

    If trans = 'N':

  4. Looping is required and mod(ja-1, NB_A) <> mod(jb-1, NB_B).
  5. In the process grid, the process row containing the first row of the submatrix C does not contain the first row of the submatrix A; that is, icrow <> iarow, where:
    icrow = mod((((ic-1)/MB_C)+RSRC_C), p)
    iarow = mod((((ia-1)/MB_A)+RSRC_A), p)
  6. In the process grid, the process row containing the first row of the submatrix C does not contain the first row of the submatrix B; that is, icrow <> ibrow, where:
    icrow = mod((((ic-1)/MB_C)+RSRC_C), p)
    ibrow = mod((((ib-1)/MB_B)+RSRC_B), p)

    If trans = 'T' or 'C':

  7. Looping is required and mod(ia-1, MB_A) <> mod(ib-1, MB_B).
  8. In the process grid, the process column containing the first column of the submatrix C does not contain the first column of the submatrix A; that is, iccol <> iacol, where:
    iccol = mod((((jc-1)/NB_C)+CSRC_C), q)
    iacol = mod((((ja-1)/NB_A)+CSRC_A), q)
  9. In the process grid, the process column containing the first column of the submatrix C does not contain the first column of the submatrix B; that is, iccol <> ibcol, where:
    iccol = mod((((jc-1)/NB_C)+CSRC_C), q)
    ibcol = mod((((jb-1)/NB_B)+CSRC_B), q)

Example 1

This example computes C = alphaATB+alphaBTA+betaC using a 2 × 2 process grid.

Call Statements and Input


 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)
 
              UPLO   TRANS   N    K     ALPHA    A  IA  JA    DESC_A   B  IB  JB
                |      |     |    |       |      |   |   |      |      |   |   |
 CALL PDSYR2K( 'U' ,  'T' ,  9  , 8  ,  1.0D0  , A , 1 , 1 ,  DESC_A , B , 1 , 1 ,
 
               DESC_B    BETA    C  IC  JC   DESC_C
                 |         |     |   |   |     |
               DESC_B ,  0.0D0 , C , 1 , 1 , DESC_C )


Desc_A Desc_B Desc_C
DTYPE_ 1 1 1
CTXT_ icontxt(IOBG29) icontxt(IOBG29) icontxt(IOBG29)
M_ 8 8 9
N_ 9 9 9
MB_ 2 2 4
NB_ 4 4 4
RSRC_ 0 0 0
CSRC_ 0 0 0
LLD_ See below(EPSSL29) See below(EPSSL29) See below(EPSSL29)

Notes:

  1. icontxt is the output of the BLACS_GRIDINIT call.

  2. Each process should set the LLD_ as follows:
    LLD_A = MAX(1,NUMROC(M_A, MB_A, MYROW, RSRC_A, NPROW))
    LLD_B = MAX(1,NUMROC(M_B, MB_B, MYROW, RSRC_B, NPROW))
    LLD_C = MAX(1,NUMROC(M_C, MB_C, MYROW, RSRC_C, NPROW))
    

    In this example, LLD_A = LLD_B = 4 on all processes, LLD_C = 5 on P00 and P01, and LLD_C = 4 on P10 and P11.

Global general 8 × 9 matrix A with block size 2 × 4:

B,D             0                       1               2
     *                                                      *
 0   |  0.0 -1.0 -1.0  0.0  |   0.0  0.0  0.0  0.0  |   1.0 |
     |  0.0  1.0  0.0  1.0  |   0.0  1.0  0.0  1.0  |   1.0 |
     | ---------------------|-----------------------|------ |
 1   |  0.0  0.0 -1.0 -1.0  |   0.0  0.0  1.0  0.0  |   1.0 |
     |  0.0  1.0  0.0 -1.0  |   1.0  1.0  0.0  1.0  |   1.0 |
     | ---------------------|-----------------------|------ |
 2   |  1.0  0.0  0.0  0.0  |  -1.0  0.0  0.0  0.0  |   1.0 |
     |  1.0  0.0  0.0  0.0  |   1.0  1.0  0.0  0.0  |   1.0 |
     | ---------------------|-----------------------|------ |
 3   |  0.0  0.0 -1.0  0.0  |  -1.0  0.0  0.0  0.0  |   1.0 |
     | -1.0  0.0  0.0  0.0  |   0.0  0.0 -1.0  0.0  |   1.0 |
     *                                                      *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for A:

p,q  |            0              |           1
-----|---------------------------|----------------------
     |  0.0 -1.0 -1.0  0.0  1.0  |   0.0  0.0  0.0  0.0
     |  0.0  1.0  0.0  1.0  1.0  |   0.0  1.0  0.0  1.0
 0   |  1.0  0.0  0.0  0.0  1.0  |  -1.0  0.0  0.0  0.0
     |  1.0  0.0  0.0  0.0  1.0  |   1.0  1.0  0.0  0.0
-----|---------------------------|----------------------
     |  0.0  0.0 -1.0 -1.0  1.0  |   0.0  0.0  1.0  0.0
     |  0.0  1.0  0.0 -1.0  1.0  |   1.0  1.0  0.0  1.0
 1   |  0.0  0.0 -1.0  0.0  1.0  |  -1.0  0.0  0.0  0.0
     | -1.0  0.0  0.0  0.0  1.0  |   0.0  0.0 -1.0  0.0

Global general 8 × 9 matrix B with block size 2 × 4:

B,D             0                       1               2
     *                                                      *
 0   |  0.0  1.0  1.0  0.0  |   0.0  0.0  0.0  0.0  |  -1.0 |
     |  0.0 -1.0  0.0 -1.0  |   0.0 -1.0  0.0 -1.0  |  -1.0 |
     | ---------------------|-----------------------|------ |
 1   |  0.0  0.0  1.0  1.0  |   0.0  0.0 -1.0  0.0  |  -1.0 |
     |  0.0 -1.0  0.0  1.0  |  -1.0 -1.0  0.0 -1.0  |  -1.0 |
     | ---------------------|-----------------------|------ |
 2   | -1.0  0.0  0.0  0.0  |   1.0  0.0  0.0  0.0  |  -1.0 |
     | -1.0  0.0  0.0  0.0  |  -1.0 -1.0  0.0  0.0  |  -1.0 |
     | ---------------------|-----------------------|------ |
 3   |  0.0  0.0  1.0  0.0  |   1.0  0.0  0.0  0.0  |  -1.0 |
     |  1.0  0.0  0.0  0.0  |   0.0  0.0  1.0  0.0  |  -1.0 |
     *                                                      *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for B:

p,q  |            0              |           1
-----|---------------------------|----------------------
     |  0.0  1.0  1.0  0.0 -1.0  |   0.0  0.0  0.0  0.0
     |  0.0 -1.0  0.0 -1.0 -1.0  |   0.0 -1.0  0.0 -1.0
 0   | -1.0  0.0  0.0  0.0 -1.0  |   1.0  0.0  0.0  0.0
     | -1.0  0.0  0.0  0.0 -1.0  |  -1.0 -1.0  0.0  0.0
-----|---------------------------|----------------------
     |  0.0  0.0  1.0  1.0 -1.0  |   0.0  0.0 -1.0  0.0
     |  0.0 -1.0  0.0  1.0 -1.0  |  -1.0 -1.0  0.0 -1.0
 1   |  0.0  0.0  1.0  0.0 -1.0  |   1.0  0.0  0.0  0.0
     |  1.0  0.0  0.0  0.0 -1.0  |   0.0  0.0  1.0  0.0

Output:

Global real symmetric matrix C of order 9 with block size 4 × 4:

B,D             0                       1                2
     *                                                       *
     | -6.0  0.0  0.0  0.0  |   0.0 -2.0 -2.0  0.0  |  -2.0  |
     |   .  -6.0 -2.0  0.0  |  -2.0 -4.0  0.0 -4.0  |  -2.0  |
 0   |   .    .  -6.0 -2.0  |  -2.0  0.0  2.0  0.0  |   6.0  |
     |   .    .    .  -6.0  |   2.0  0.0  2.0  0.0  |   2.0  |
     | ---------------------|-----------------------|------- |
     |   .    .    .    .   |  -8.0 -4.0  0.0 -2.0  |   0.0  |
     |   .    .    .    .   |    .  -6.0  0.0 -4.0  |  -6.0  |
 1   |   .    .    .    .   |    .    .  -4.0  0.0  |   0.0  |
     |   .    .    .    .   |    .    .    .  -4.0  |  -4.0  |
     | ---------------------|-----------------------|------- |
 2   |   .    .    .    .   |    .    .    .    .   |  -16.0 |
     *                                                       *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11

Local arrays for C:

p,q  |             0              |           1
-----|----------------------------|----------------------
     | -6.0  0.0  0.0  0.0  -2.0  |   0.0 -2.0 -2.0  0.0
     |   .  -6.0 -2.0  0.0  -2.0  |  -2.0 -4.0  0.0 -4.0
 0   |   .    .  -6.0 -2.0   6.0  |  -2.0  0.0  2.0  0.0
     |   .    .    .  -6.0   2.0  |   2.0  0.0  2.0  0.0
     |   .    .    .    .  -16.0  |    .    .    .    .
-----|----------------------------|----------------------
     |   .    .    .    .    0.0  |  -8.0 -4.0  0.0 -2.0
     |   .    .    .    .   -6.0  |    .  -6.0  0.0 -4.0
 1   |   .    .    .    .    0.0  |    .    .  -4.0  0.0
     |   .    .    .    .   -4.0  |    .    .    .  -4.0

Example 2

This example computes C = alphaATB+alphaBTA+betaC using a 2 × 2 process grid.

Call Statements and Input


 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)
 
              UPLO   TRANS   N    K     ALPHA    A  IA  JA    DESC_A   B  IB  JB
                |      |     |    |       |      |   |   |      |      |   |   |
 CALL PZSYR2K( 'U' ,  'T' ,  7  , 8  ,  ALPHA  , A , 1 , 1 ,  DESC_A , B , 1 , 1 ,
 
               DESC_B    BETA    C  IC  JC   DESC_C
                 |         |     |   |   |     |
               DESC_B ,  BETA  , C , 1 , 1 , DESC_C )
 
               ALPHA = (1.0,0.0)
 
               BETA  = (0.0,0.0)


Desc_A Desc_B Desc_C
DTYPE_ 1 1 1
CTXT_ icontxt(IOBG30) icontxt(IOBG30) icontxt(IOBG30)
M_ 8 8 7
N_ 7 7 7
MB_ 2 2 3
NB_ 3 3 3
RSRC_ 0 0 0
CSRC_ 0 0 0
LLD_ See below(EPSSL30) See below(EPSSL30) See below(EPSSL30)

Notes:

  1. icontxt is the output of the BLACS_GRIDINIT call.

  2. Each process should set the LLD_ as follows:
    LLD_A = MAX(1,NUMROC(M_A, MB_A, MYROW, RSRC_A, NPROW))
    LLD_B = MAX(1,NUMROC(M_B, MB_B, MYROW, RSRC_B, NPROW))
    LLD_C = MAX(1,NUMROC(M_C, MB_C, MYROW, RSRC_C, NPROW))
    

    In this example, LLD_A = LLD_B = 4 on all processes, LLD_C = 4 on P00 and P01, and LLD_C = 3 on P10 and P11.

Global general 8 × 7 matrix A with block size 2 × 3:



B,D                     0                                     1                          2
     *                                                                                          *
 0   | ( 0.0, 1.0) (-1.0, 0.0) (-1.0, 0.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) | ( 1.0, 2.0) ( 0.0, 1.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 1   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0)  | ( 1.0, 2.0) |
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) | (-1.0, 0.0) ( 1.0, 2.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 2   | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 1.0, 2.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 3   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)  | (-1.0, 0.0) |
     *                                                                                          *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for A:



p,q  |                        0                        |                  1
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0, 1.0) (-1.0, 0.0) (-1.0, 0.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 1.0, 2.0) ( 0.0, 1.0) ( 1.0, 2.0)
 0   | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)
     | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 1.0, 2.0) ( 1.0, 2.0)
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) ( 1.0, 2.0) | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0)
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | (-1.0, 0.0) ( 1.0, 2.0) ( 1.0, 2.0)
 1   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)
     | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)

Global general 8 × 7 matrix B with block size 2 × 3:



B,D                     0                                     1                          2
     *                                                                                          *
 0   | ( 0.0,-2.0) ( 1.0,-1.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) | (-1.0,-3.0) ( 0.0,-2.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 1   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0)  | (-1.0,-3.0) |
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) | ( 1.0,-1.0) (-1.0,-3.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 2   | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) (-1.0,-3.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 3   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)  | ( 1.0,-1.0) |
     *                                                                                          *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for B:



p,q  |                        0                        |                  1
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0,-2.0) ( 1.0,-1.0) ( 1.0,-1.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | (-1.0,-3.0) ( 0.0,-2.0) (-1.0,-3.0)
 0   | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)
     | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) (-1.0,-3.0) (-1.0,-3.0)
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) (-1.0,-3.0) | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0)
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 1.0,-1.0) (-1.0,-3.0) (-1.0,-3.0)
 1   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)
     | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)

Output:

Global complex symmetric matrix C of order 7 with block size 3 × 3:



B,D                        0                                           1                             2
     *                                                                                                       *
     | ( 38.0,-18.0) ( 38.0, -6.0) ( 26.0,  6.0) | ( 32.0,  0.0) ( 35.0, -3.0) ( 44.0,-16.0) | ( 35.0, -7.0) |
 0   |       .       ( 38.0,-18.0) ( 26.0,  2.0) | ( 32.0,  0.0) ( 35.0, -7.0) ( 44.0,-20.0) | ( 35.0, -3.0) |
     |       .             .       ( 14.0,  6.0) | ( 20.0,  8.0) ( 23.0,  5.0) ( 32.0,  0.0) | ( 23.0, 13.0) |
     | ------------------------------------------|-------------------------------------------|-------------- |
     |       .             .             .       | ( 26.0, -6.0) ( 29.0,  7.0) ( 38.0, -6.0) | ( 29.0,  7.0) |
 1   |       .             .             .       |       .       ( 32.0,-16.0) ( 41.0,-17.0) | ( 32.0,  0.0) |
     |       .             .             .       |       .             .       ( 50.0,-30.0) | ( 41.0, -9.0) |
     | ------------------------------------------|-------------------------------------------|-------------- |
 2   |       .             .             .       |       .             .             ,       | ( 32.0, -8.0) |
     *                                                                                                       *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11

Local arrays for C:



p,q  |                             0                            |                     1
-----|----------------------------------------------------------|-------------------------------------------
     | ( 38.0, -18.0) ( 38.0, -6.0) ( 26.0,  6.0) ( 35.0, -7.0) | ( 32.0,  0.0) ( 35.0, -3.0) ( 44.0,-16.0)
     |       .        ( 38.0,-18.0) ( 26.0,  2.0) ( 35.0, -3.0) | ( 32.0,  0.0) ( 35.0, -7.0) ( 44.0,-20.0)
 0   |       .              .       ( 14.0,  6.0) ( 23.0, 13.0) | ( 20.0,  8.0) ( 23.0,  5.0) ( 32.0,  0.0)
     |       .              .             .       ( 32.0, -8.0) |       .             .             .      
-----|----------------------------------------------------------|-------------------------------------------
     |       .              .             .       ( 29.0,  7.0) | ( 26.0, -6.0) ( 29.0,  7.0) ( 38.0, -6.0)
 1   |       .              .             .       ( 32.0,  0.0) |       .       ( 32.0,-16.0) ( 41.0,-17.0)
     |       .              .             .       ( 41.0, -9.0) |       .             .       ( 50.0,-30.0)

Example 3

This example computes:



Rank-2K Update Graphic

using a 2 × 2 process grid.

Note:
The imaginary parts of the diagonal elements of a complex Hermitian matrix are assumed to be zero, so you do not have to set these values. On output, they are set to zero except when beta is one and alpha or k is zero.

Call Statements and Input


 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)
 
              UPLO   TRANS   N    K     ALPHA    A  IA  JA    DESC_A   B  IB  JB
                |      |     |    |       |      |   |   |      |      |   |   |
 CALL PZHER2K( 'U' ,  'C' ,  7  , 8  ,  ALPHA  , A , 1 , 1 ,  DESC_A , B , 1 , 1 ,
 
               DESC_B    BETA    C  IC  JC   DESC_C
                 |         |     |   |   |     |
               DESC_B ,  BETA  , C , 1 , 1 , DESC_C )
 
               ALPHA = (1.0,0.0)
 
               BETA  = 0.0    


Desc_A Desc_B Desc_C
DTYPE_ 1 1 1
CTXT_ icontxt(IOBG31) icontxt(IOBG31) icontxt(IOBG31)
M_ 8 8 7
N_ 7 7 7
MB_ 2 2 3
NB_ 3 3 3
RSRC_ 0 0 0
CSRC_ 0 0 0
LLD_ See below(EPSSL31) See below(EPSSL31) See below(EPSSL31)

Notes:

  1. icontxt is the output of the BLACS_GRIDINIT call.

  2. Each process should set the LLD_ as follows:
    LLD_A = MAX(1,NUMROC(M_A, MB_A, MYROW, RSRC_A, NPROW))
    LLD_B = MAX(1,NUMROC(M_B, MB_B, MYROW, RSRC_B, NPROW))
    LLD_C = MAX(1,NUMROC(M_C, MB_C, MYROW, RSRC_C, NPROW))
    

    In this example, LLD_A = LLD_B = 4 on all processes, LLD_C = 4 on P00 and P01, and LLD_C = 3 on P10 and P11.

Global general 8 × 7 matrix A with block size 2 × 3:



B,D                     0                                     1                          2
     *                                                                                          *
 0   | ( 0.0, 1.0) (-1.0, 0.0) (-1.0, 0.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) | ( 1.0, 2.0) ( 0.0, 1.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 1   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0)  | ( 1.0, 2.0) |
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) | (-1.0, 0.0) ( 1.0, 2.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 2   | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 1.0, 2.0) ( 1.0, 2.0)  | ( 0.0, 1.0) |
     | ------------------------------------|--------------------------------------|------------ |
 3   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)  | ( 0.0, 1.0) |
     | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)  | (-1.0, 0.0) |
     *                                                                                          *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for A:



p,q  |                        0                        |                  1
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0, 1.0) (-1.0, 0.0) (-1.0, 0.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 1.0, 2.0) ( 0.0, 1.0) ( 1.0, 2.0)
 0   | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)
     | ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0) | ( 0.0, 1.0) ( 1.0, 2.0) ( 1.0, 2.0)
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) ( 1.0, 2.0) | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0)
     | ( 0.0, 1.0) ( 1.0, 2.0) ( 0.0, 1.0) ( 0.0, 1.0) | (-1.0, 0.0) ( 1.0, 2.0) ( 1.0, 2.0)
 1   | ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0) | ( 0.0, 1.0) (-1.0, 0.0) ( 0.0, 1.0)
     | (-1.0, 0.0) ( 0.0, 1.0) ( 0.0, 1.0) (-1.0, 0.0) | ( 0.0, 1.0) ( 0.0, 1.0) ( 0.0, 1.0)

Global general 8 × 7 matrix B with block size 2 × 3:



B,D                     0                                     1                          2
     *                                                                                          *
 0   | ( 0.0,-2.0) ( 1.0,-1.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) | (-1.0,-3.0) ( 0.0,-2.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 1   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0)  | (-1.0,-3.0) |
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) | ( 1.0,-1.0) (-1.0,-3.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 2   | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) (-1.0,-3.0) (-1.0,-3.0)  | ( 0.0,-2.0) |
     | ------------------------------------|--------------------------------------|------------ |
 3   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)  | ( 0.0,-2.0) |
     | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)  | ( 1.0,-1.0) |
     *                                                                                          *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11
3    |         |

Local arrays for B:



p,q  |                        0                        |                  1
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0,-2.0) ( 1.0,-1.0) ( 1.0,-1.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | (-1.0,-3.0) ( 0.0,-2.0) (-1.0,-3.0)
 0   | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)
     | (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 0.0,-2.0) (-1.0,-3.0) (-1.0,-3.0)
-----|-------------------------------------------------|-------------------------------------
     | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) (-1.0,-3.0) | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0)
     | ( 0.0,-2.0) (-1.0,-3.0) ( 0.0,-2.0) ( 0.0,-2.0) | ( 1.0,-1.0) (-1.0,-3.0) (-1.0,-3.0)
 1   | ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0) | ( 0.0,-2.0) ( 1.0,-1.0) ( 0.0,-2.0)
     | ( 1.0,-1.0) ( 0.0,-2.0) ( 0.0,-2.0) ( 1.0,-1.0) | ( 0.0,-2.0) ( 0.0,-2.0) ( 0.0,-2.0)

Output:

Global complex Hermitian matrix C of order 7 with block size 3 × 3:



B,D                        0                                           1                             2
     *                                                                                                       *
     | (-50.0,  0.0) (-38.0,  0.0) (-26.0,-12.0) | (-32.0, -6.0) (-35.0, -3.0) (-48.0,  6.0) | (-39.0, -3.0) |
 0   |       .       (-50.0,  0.0) (-30.0,-12.0) | (-32.0, -6.0) (-39.0, -3.0) (-52.0,  6.0) | (-35.0, -3.0) |
     |       .             .       (-26.0,  0.0) | (-24.0,  6.0) (-27.0,  9.0) (-32.0, 18.0) | (-19.0,  9.0) |
     | ------------------------------------------|-------------------------------------------|-------------- |
     |       .             .             .       | (-38.0,  0.0) (-25.0,  3.0) (-38.0, 12.0) | (-25.0,  3.0) |
 1   |       .             .             .       |       .       (-48.0,  0.0) (-49.0,  9.0) | (-32.0,  0.0) |
     |       .             .             .       |       .             .       (-62.0,  0.0) | (-41.0, -9.0) |
     | ------------------------------------------|-------------------------------------------|-------------- |
 2   |       .             .             .       |       .             .             ,       | (-40.0,  0.0) |
     *                                                                                                       *

The following is the 2 × 2 process grid:

B,D  |   0 2   |  1  
-----| ------- |-----
0    |   P00   |  P01
2    |         |
-----| ------- |-----
1    |   P10   |  P11

Local arrays for C:



p,q  |                             0                            |                     1
-----|----------------------------------------------------------|-------------------------------------------
     | (-50.0,   0.0) (-38.0,  0.0) (-26.0,-12.0) (-39.0, -3.0) | (-32.0, -6.0) (-35.0, -3.0) (-48.0,  6.0)
     |       .        (-50.0,  0.0) (-30.0,-12.0) (-35.0, -3.0) | (-32.0, -6.0) (-39.0, -3.0) (-52.0,  6.0)
 0   |       .              .       (-26.0,  0.0) (-19.0,  9.0) | (-24.0,  6.0) (-27.0,  9.0) (-32.0, 18.0)
     |       .              .             .       (-40.0,  0.0) |       .             .             .      
-----|----------------------------------------------------------|-------------------------------------------
     |       .              .             .       (-25.0,  3.0) | (-38.0,  0.0) (-25.0,  3.0) (-38.0, 12.0)
 1   |       .              .             .       (-32.0,  0.0) |       .       (-48.0,  0.0) (-49.0,  9.0)
     |       .              .             .       (-41.0, -9.0) |       .             .       (-62.0,  0.0)


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]