@@ -271,22 +271,21 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
271271 $ JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
272272 $ NPCOL, NPROW, RSRC
273273 REAL BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
274- $ XBND, XJ
274+ $ XBND, XJ, CR, CI
275275 REAL XMAX( 1 )
276276 COMPLEX CSUMJ, TJJS, USCAL, XJTMP, ZDUM
277277* ..
278278* .. External Functions ..
279279 LOGICAL LSAME
280280 INTEGER ISAMAX
281281 REAL PSLAMCH
282- COMPLEX CLADIV
283- EXTERNAL LSAME, ISAMAX, PSLAMCH, CLADIV
282+ EXTERNAL LSAME, ISAMAX, PSLAMCH
284283* ..
285284* .. External Subroutines ..
286285 EXTERNAL BLACS_GRIDINFO, SGSUM2D, SSCAL, INFOG2L,
287286 $ PSCASUM, PSLABAD, PXERBLA, PCAMAX, PCAXPY,
288287 $ PCDOTC, PCDOTU, PCSSCAL, PCLASET, PCSCAL,
289- $ PCTRSV, CGEBR2D, CGEBS2D
288+ $ PCTRSV, CGEBR2D, CGEBS2D, SLADIV
290289* ..
291290* .. Intrinsic Functions ..
292291 INTRINSIC ABS, REAL , CMPLX, CONJG, AIMAG, MAX, MIN
@@ -657,7 +656,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
657656 END IF
658657* X( J ) = CLADIV( X( J ), TJJS )
659658* XJ = CABS1( X( J ) )
660- XJTMP = CLADIV( XJTMP, TJJS )
659+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
660+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
661+ XJTMP = CMPLX ( CR, CI )
661662 XJ = CABS1( XJTMP )
662663 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
663664 $ THEN
@@ -687,7 +688,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
687688 END IF
688689* X( J ) = CLADIV( X( J ), TJJS )
689690* XJ = CABS1( X( J ) )
690- XJTMP = CLADIV( XJTMP, TJJS )
691+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
692+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
693+ XJTMP = CMPLX ( CR, CI )
691694 XJ = CABS1( XJTMP )
692695 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
693696 $ THEN
@@ -815,7 +818,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
815818* Divide by A(j,j) when scaling x if A(j,j) > 1.
816819*
817820 REC = MIN ( ONE, REC* TJJ )
818- USCAL = CLADIV( USCAL, TJJS )
821+ CALL SLADIV( REAL ( USCAL ), AIMAG ( USCAL ),
822+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
823+ USCAL = CMPLX ( CR, CI )
819824 END IF
820825 IF ( REC.LT. ONE ) THEN
821826 CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
@@ -857,7 +862,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
857862 CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
858863 CALL PCDOTU( J-1 , CSUMJ, A, IA, JA+ J-1 , DESCA, 1 ,
859864 $ X, IX, JX, DESCX, 1 )
860- ZDUM = CLADIV( ZDUM, USCAL )
865+ CALL SLADIV( REAL ( ZDUM ), AIMAG ( ZDUM ),
866+ $ REAL ( USCAL ), AIMAG ( USCAL ), CR, CI)
867+ ZDUM = CMPLX ( CR, CI )
861868 CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
862869 ELSE IF ( J.LT. N ) THEN
863870* DO 140 I = J + 1, N
@@ -867,7 +874,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
867874 CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
868875 CALL PCDOTU( N- J, CSUMJ, A, IA+ J, JA+ J-1 , DESCA, 1 ,
869876 $ X, IX+ J, JX, DESCX, 1 )
870- ZDUM = CLADIV( ZDUM, USCAL )
877+ CALL SLADIV( REAL ( ZDUM ), AIMAG ( ZDUM ),
878+ $ REAL ( USCAL ), AIMAG ( USCAL ), CR, CI)
879+ ZDUM = CMPLX ( CR, CI )
871880 CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
872881 END IF
873882 IF ( MYCOL.EQ. ITMP2X ) THEN
@@ -929,7 +938,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
929938 END IF
930939 END IF
931940* X( J ) = CLADIV( X( J ), TJJS )
932- XJTMP = CLADIV( XJTMP, TJJS )
941+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
942+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
943+ XJTMP = CMPLX ( CR, CI )
933944 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
934945 $ THEN
935946 X( IROWX ) = XJTMP
@@ -949,7 +960,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
949960 XMAX( 1 ) = XMAX( 1 )* REC
950961 END IF
951962* X( J ) = CLADIV( X( J ), TJJS )
952- XJTMP = CLADIV( XJTMP, TJJS )
963+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
964+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
965+ XJTMP = CMPLX ( CR, CI )
953966 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
954967 $ THEN
955968 X( IROWX ) = XJTMP
@@ -976,7 +989,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
976989* product has already been divided by 1/A(j,j).
977990*
978991* X( J ) = CLADIV( X( J ), TJJS ) - CSUMJ
979- XJTMP = CLADIV( XJTMP, TJJS ) - CSUMJ
992+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
993+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
994+ XJTMP = CMPLX ( CR, CI )
980995 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
981996 $ THEN
982997 X( IROWX ) = XJTMP
@@ -1034,7 +1049,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
10341049* Divide by A(j,j) when scaling x if A(j,j) > 1.
10351050*
10361051 REC = MIN ( ONE, REC* TJJ )
1037- USCAL = CLADIV( USCAL, TJJS )
1052+ CALL SLADIV( REAL ( USCAL ), AIMAG ( USCAL ),
1053+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
1054+ USCAL = CMPLX ( CR, CI )
10381055 END IF
10391056 IF ( REC.LT. ONE ) THEN
10401057 CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
@@ -1077,7 +1094,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
10771094 CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
10781095 CALL PCDOTC( J-1 , CSUMJ, A, IA, JA+ J-1 , DESCA, 1 ,
10791096 $ X, IX, JX, DESCX, 1 )
1080- ZDUM = CLADIV( CONE, ZDUM )
1097+ CALL SLADIV( ONE, ZERO,
1098+ $ REAL ( ZDUM ), AIMAG ( ZDUM ), CR, CI )
1099+ ZDUM = CMPLX ( CR, CI )
10811100 CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
10821101 ELSE IF ( J.LT. N ) THEN
10831102* DO 190 I = J + 1, N
@@ -1088,7 +1107,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
10881107 CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
10891108 CALL PCDOTC( N- J, CSUMJ, A, IA+ J, JA+ J-1 , DESCA, 1 ,
10901109 $ X, IX+ J, JX, DESCX, 1 )
1091- ZDUM = CLADIV( CONE, ZDUM )
1110+ CALL SLADIV( ONE, ZERO,
1111+ $ REAL ( ZDUM ), AIMAG ( ZDUM ), CR, CI )
1112+ ZDUM = CMPLX ( CR, CI )
10921113 CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
10931114 END IF
10941115 IF ( MYCOL.EQ. ITMP2X ) THEN
@@ -1150,7 +1171,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
11501171 END IF
11511172 END IF
11521173* X( J ) = CLADIV( X( J ), TJJS )
1153- XJTMP = CLADIV( XJTMP, TJJS )
1174+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
1175+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
1176+ XJTMP = CMPLX ( CR, CI )
11541177 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
11551178 $ X( IROWX ) = XJTMP
11561179 ELSE IF ( TJJ.GT. ZERO ) THEN
@@ -1168,7 +1191,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
11681191 XMAX( 1 ) = XMAX( 1 )* REC
11691192 END IF
11701193* X( J ) = CLADIV( X( J ), TJJS )
1171- XJTMP = CLADIV( XJTMP, TJJS )
1194+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
1195+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
1196+ XJTMP = CMPLX ( CR, CI )
11721197 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
11731198 $ X( IROWX ) = XJTMP
11741199 ELSE
@@ -1191,7 +1216,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
11911216* product has already been divided by 1/A(j,j).
11921217*
11931218* X( J ) = CLADIV( X( J ), TJJS ) - CSUMJ
1194- XJTMP = CLADIV( XJTMP, TJJS ) - CSUMJ
1219+ CALL SLADIV( REAL ( XJTMP ), AIMAG ( XJTMP ),
1220+ $ REAL ( TJJS ), AIMAG ( TJJS ), CR, CI )
1221+ XJTMP = CMPLX ( CR, CI )
11951222 IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
11961223 $ X( IROWX ) = XJTMP
11971224 END IF
0 commit comments