SUBROUTINE ZAXPYI ( NZ, A, X, INDX, Y ) C C ================================================================== C ================================================================== C ==== ZAXPYI -- INDEXED COMPLEX*16 ELEMENTARY VECTOR OPERATION === C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZAXPYI ADDS A COMPLEX*16 SCALAR MULTIPLE OF C A COMPLEX*16 SPARSE VECTOR X C STORED IN COMPRESSED FORM (X,INDX) C TO C A COMPLEX*16 VECTOR Y IN FULL STORAGE FORM. C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE REFERENCED OR MODIFIED. THE VALUES IN INDX MUST BE C DISTINCT TO ALLOW CONSISTENT VECTOR OR PARALLEL EXECUTION. C C ALTHOUGH DISTINCT INDICES WILL ALLOW VECTOR OR PARALLEL C EXECUTION, MOST COMPILERS FOR HIGH-PERFORMANCE MACHINES WILL C BE UNABLE TO GENERATE BEST POSSIBLE CODE WITHOUT SOME C MODIFICATION, SUCH AS COMPILER DIRECTIVES, TO THIS CODE. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS IN THE COMPRESSED FORM. C A COMPLEX*16 SCALAR MULTIPLIER OF X. C X COMPLEX*16 ARRAY CONTAINING THE VALUES OF THE C COMPRESSED FORM. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE C COMPRESSED FORM. IT IS ASSUMED THAT C THE ELEMENTS IN INDX ARE DISTINCT. C C UPDATED ... C C Y COMPLEX*16 ARRAY, ON INPUT, WHICH CONTAINS THE VECTOR C Y IN FULL STORAGE FORM. ON OUTPUT C ONLY THE ELEMENTS CORRESPONDING TO THE C INDICES IN INDX HAVE BEEN MODIFIED. C C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C INTEGER NZ, INDX (*) C COMPLEX*16 Y (*), X (*), A C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C IF ( NZ .LE. 0 ) RETURN C IF ( A .EQ. ( 0.0D0, 0.0D0 ) ) RETURN C DO 10 I = 1, NZ Y(INDX(I)) = Y(INDX(I)) + A * X(I) 10 CONTINUE C RETURN END FUNCTION ZDOTCI ( NZ, X, INDX, Y ) C C ================================================================== C ================================================================== C ==== ZDOTCI -- COMPLEX*16 CONJUGATED INDEXED DOT PRODUCT ==== C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZDOTCI COMPUTES THE CONJUGATED VECTOR INNER PRODUCT OF C A COMPLEX*16 SPARSE VECTOR X C STORED IN COMPRESSED FORM (X,INDX) C WITH C A COMPLEX*16 VECTOR Y IN FULL STORAGE FORM. C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE REFERENCED. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS IN THE COMPRESSED FORM. C X COMPLEX*16 ARRAY CONTAINING THE VALUES OF THE C COMPRESSED FORM. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE C COMPRESSED FORM. C Y COMPLEX*16 ARRAY, ON INPUT, WHICH CONTAINS THE C VECTOR Y IN FULL STORAGE FORM. ONLY C THE ELEMENTS CORRESPONDING TO THE C INDICES IN INDX WILL BE ACCESSED. C C OUTPUT ... C C ZDOTCI COMPLEX*16 COMPLEX*16 FUNCTION VALUE EQUAL TO THE C CONJUGATED VECTOR INNER PRODUCT. C IF NZ .LE. 0 ZDOTCI IS SET TO ZERO. C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C INTEGER NZ, INDX (*) C COMPLEX*16 X (*), Y (*), ZDOTCI C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C ZDOTCI = ( 0.0D0, 0.0D0 ) IF ( NZ .LE. 0 ) RETURN C DO 10 I = 1, NZ ZDOTCI = ZDOTCI + DCONJG ( X(I) ) * Y(INDX(I)) 10 CONTINUE C RETURN END FUNCTION ZDOTUI ( NZ, X, INDX, Y ) C C ================================================================== C ================================================================== C ==== ZDOTUI -- COMPLEX*16 UNCONJUGATED INDEXED DOT PRODUCT ==== C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZDOTUI COMPUTES THE UNCONJUGATED VECTOR INNER PRODUCT OF C A COMPLEX*16 SPARSE VECTOR X C STORED IN COMPRESSED FORM (X,INDX) C WITH C A COMPLEX*16 VECTOR Y IN FULL STORAGE FORM. C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE REFERENCED. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS IN THE COMPRESSED FORM. C X COMPLEX*16 ARRAY CONTAINING THE VALUES OF THE C COMPRESSED FORM. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE C COMPRESSED FORM. C Y COMPLEX*16 ARRAY, ON INPUT, WHICH CONTAINS THE C VECTOR Y IN FULL STORAGE FORM. ONLY C THE ELEMENTS CORRESPONDING TO THE C INDICES IN INDX WILL BE ACCESSED. C C OUTPUT ... C C ZDOTUI COMPLEX*16 COMPLEX*16 FUNCTION VALUE EQUAL TO THE C UNCONJUGATED VECTOR INNER PRODUCT. C IF NZ .LE. 0 ZDOTCI IS SET TO ZERO. C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C INTEGER NZ, INDX (*) C COMPLEX*16 X (*), Y (*), ZDOTUI C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C ZDOTUI = ( 0.0D0, 0.0D0 ) IF ( NZ .LE. 0 ) RETURN C DO 10 I = 1, NZ ZDOTUI = ZDOTUI + X(I) * Y(INDX(I)) 10 CONTINUE C RETURN END SUBROUTINE ZGTHR ( NZ, Y, X, INDX ) C C ================================================================== C ================================================================== C ==== ZGTHR -- COMPLEX*16 GATHER ==== C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZGTHR GATHERS THE SPECIFIED ELEMENTS FROM C A COMPLEX*16 VECTOR Y IN FULL STORAGE FORM C INTO C A COMPLEX*16 VECTOR X IN COMPRESSED FORM (X,INDX). C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE REFERENCED. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS TO BE GATHERED INTO C COMPRESSED FORM. C Y COMPLEX*16 ARRAY, ON INPUT, WHICH CONTAINS THE C VECTOR Y IN FULL STORAGE FORM. ONLY C THE ELEMENTS CORRESPONDING TO THE INDICES C IN INDX WILL BE ACCESSED. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE VALUES C TO BE GATHERED INTO COMPRESSED FORM. C C OUTPUT ... C C X COMPLEX*16 ARRAY CONTAINING THE VALUES GATHERED INTO C THE COMPRESSED FORM. C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C C INTEGER NZ, INDX (*) C COMPLEX*16 Y (*), X (*) C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C IF ( NZ .LE. 0 ) RETURN C DO 10 I = 1, NZ X(I) = Y(INDX(I)) 10 CONTINUE C RETURN END SUBROUTINE ZGTHRZ ( NZ, Y, X, INDX ) C C ================================================================== C ================================================================== C ==== ZGTHRZ -- COMPLEX*16 GATHER AND ZERO ==== C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZGTHRZ GATHERS THE SPECIFIED ELEMENTS FROM C A COMPLEX*16 VECTOR Y IN FULL STORAGE FORM C INTO C A COMPLEX*16 VECTOR X IN COMPRESSED FORM (X,INDX). C FURTHERMORE THE GATHERED ELEMENTS OF Y ARE SET TO ZERO. C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE REFERENCED OR MODIFIED. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS TO BE GATHERED INTO C COMPRESSED FORM. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE VALUES C TO BE GATHERED INTO COMPRESSED FORM. C C UPDATED ... C C Y COMPLEX*16 ARRAY, ON INPUT, WHICH CONTAINS THE VECTOR C Y IN FULL STORAGE FORM. THE GATHERED C COMPONENTS IN Y ARE SET TO ZERO. C ONLY THE ELEMENTS CORRESPONDING TO THE C INDICES IN INDX HAVE BEEN ACCESSED. C C OUTPUT ... C C X COMPLEX*16 ARRAY CONTAINING THE VALUES GATHERED INTO C THE COMPRESSED FORM. C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C INTEGER NZ, INDX (*) C COMPLEX*16 Y (*), X (*) C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C IF ( NZ .LE. 0 ) RETURN C DO 10 I = 1, NZ X(I) = Y(INDX(I)) Y(INDX(I)) = ( 0.0D0, 0.0D0 ) 10 CONTINUE C RETURN END SUBROUTINE ZSCTR ( NZ, X, INDX, Y ) C C ================================================================== C ================================================================== C ==== ZSCTR -- COMPLEX*16 SCATTER ==== C ================================================================== C ================================================================== C C PURPOSE C ------- C C ZSCTR SCATTERS THE COMPONENTS OF C A SPARSE VECTOR X STORED IN COMPRESSED FORM (X,INDX) C INTO C SPECIFIED COMPONENTS OF A COMPLEX*16 VECTOR Y C IN FULL STORAGE FORM. C C ONLY THE ELEMENTS OF Y WHOSE INDICES ARE LISTED IN INDX C ARE MODIFIED. THE VALUES IN INDX MUST BE DISTINCT TO C ALLOW CONSISTENT VECTOR OR PARALLEL EXECUTION. C C ALTHOUGH DISTINCT INDICES WILL ALLOW VECTOR OR PARALLEL C EXECUTION, MOST COMPILERS FOR HIGH-PERFORMANCE MACHINES WILL C BE UNABLE TO GENERATE BEST POSSIBLE CODE WITHOUT SOME C MODIFICATION, SUCH AS COMPILER DIRECTIVES, TO THIS CODE. C C ARGUMENTS C --------- C C INPUT ... C C NZ INTEGER NUMBER OF ELEMENTS TO BE SCATTERED FROM C COMPRESSED FORM. C X COMPLEX*16 ARRAY CONTAINING THE VALUES TO BE C SCATTERED FROM COMPRESSED FORM INTO FULL C STORAGE FORM. C INDX INTEGER ARRAY CONTAINING THE INDICES OF THE VALUES C TO BE SCATTERED FROM COMPRESSED FORM. C IT IS ASSUMED THAT THE ELEMENTS IN INDX C ARE DISTINCT. C C OUTPUT ... C C Y COMPLEX*16 ARRAY WHOSE ELEMENTS SPECIFIED BY INDX C HAVE BEEN SET TO THE CORRESPONDING C ENTRIES OF X. ONLY THE ELEMENTS C CORRESPONDING TO THE INDICES IN INDX C HAVE BEEN MODIFIED. C C SPARSE BASIC LINEAR ALGEBRA SUBPROGRAM C C FORTRAN VERSION WRITTEN OCTOBER 1984 C ROGER G GRIMES, BOEING COMPUTER SERVICES C C ================================================================== C C ------------- C ... ARGUMENTS C ------------- C INTEGER NZ, INDX (*) C COMPLEX*16 X (*), Y (*) C C ------------------- C ... LOCAL VARIABLES C ------------------- C INTEGER I C C ================================================================== C IF ( NZ .LE. 0 ) RETURN C DO 10 I = 1, NZ Y(INDX(I)) = X(I) 10 CONTINUE C RETURN END