@@ -271,22 +271,21 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
271
271
$ JINC, JLAST, LDA, LDX, MB, MYCOL, MYROW, NB,
272
272
$ NPCOL, NPROW, RSRC
273
273
REAL BIGNUM, GROW, REC, SMLNUM, TJJ, TMAX, TSCAL,
274
- $ XBND, XJ
274
+ $ XBND, XJ, CR, CI
275
275
REAL XMAX( 1 )
276
276
COMPLEX CSUMJ, TJJS, USCAL, XJTMP, ZDUM
277
277
* ..
278
278
* .. External Functions ..
279
279
LOGICAL LSAME
280
280
INTEGER ISAMAX
281
281
REAL PSLAMCH
282
- COMPLEX CLADIV
283
- EXTERNAL LSAME, ISAMAX, PSLAMCH, CLADIV
282
+ EXTERNAL LSAME, ISAMAX, PSLAMCH
284
283
* ..
285
284
* .. External Subroutines ..
286
285
EXTERNAL BLACS_GRIDINFO, SGSUM2D, SSCAL, INFOG2L,
287
286
$ PSCASUM, PSLABAD, PXERBLA, PCAMAX, PCAXPY,
288
287
$ PCDOTC, PCDOTU, PCSSCAL, PCLASET, PCSCAL,
289
- $ PCTRSV, CGEBR2D, CGEBS2D
288
+ $ PCTRSV, CGEBR2D, CGEBS2D, SLADIV
290
289
* ..
291
290
* .. Intrinsic Functions ..
292
291
INTRINSIC ABS, REAL , CMPLX, CONJG, AIMAG, MAX, MIN
@@ -657,7 +656,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
657
656
END IF
658
657
* X( J ) = CLADIV( X( J ), TJJS )
659
658
* 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 )
661
662
XJ = CABS1( XJTMP )
662
663
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
663
664
$ THEN
@@ -687,7 +688,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
687
688
END IF
688
689
* X( J ) = CLADIV( X( J ), TJJS )
689
690
* 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 )
691
694
XJ = CABS1( XJTMP )
692
695
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
693
696
$ THEN
@@ -815,7 +818,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
815
818
* Divide by A(j,j) when scaling x if A(j,j) > 1.
816
819
*
817
820
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 )
819
824
END IF
820
825
IF ( REC.LT. ONE ) THEN
821
826
CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
@@ -857,7 +862,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
857
862
CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
858
863
CALL PCDOTU( J-1 , CSUMJ, A, IA, JA+ J-1 , DESCA, 1 ,
859
864
$ 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 )
861
868
CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
862
869
ELSE IF ( J.LT. N ) THEN
863
870
* DO 140 I = J + 1, N
@@ -867,7 +874,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
867
874
CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
868
875
CALL PCDOTU( N- J, CSUMJ, A, IA+ J, JA+ J-1 , DESCA, 1 ,
869
876
$ 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 )
871
880
CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
872
881
END IF
873
882
IF ( MYCOL.EQ. ITMP2X ) THEN
@@ -929,7 +938,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
929
938
END IF
930
939
END IF
931
940
* 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 )
933
944
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
934
945
$ THEN
935
946
X( IROWX ) = XJTMP
@@ -949,7 +960,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
949
960
XMAX( 1 ) = XMAX( 1 )* REC
950
961
END IF
951
962
* 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 )
953
966
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
954
967
$ THEN
955
968
X( IROWX ) = XJTMP
@@ -976,7 +989,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
976
989
* product has already been divided by 1/A(j,j).
977
990
*
978
991
* 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 )
980
995
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
981
996
$ THEN
982
997
X( IROWX ) = XJTMP
@@ -1034,7 +1049,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1034
1049
* Divide by A(j,j) when scaling x if A(j,j) > 1.
1035
1050
*
1036
1051
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 )
1038
1055
END IF
1039
1056
IF ( REC.LT. ONE ) THEN
1040
1057
CALL PCSSCAL( N, REC, X, IX, JX, DESCX, 1 )
@@ -1077,7 +1094,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1077
1094
CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
1078
1095
CALL PCDOTC( J-1 , CSUMJ, A, IA, JA+ J-1 , DESCA, 1 ,
1079
1096
$ 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 )
1081
1100
CALL PCSCAL( J-1 , ZDUM, A, IA, JA+ J-1 , DESCA, 1 )
1082
1101
ELSE IF ( J.LT. N ) THEN
1083
1102
* DO 190 I = J + 1, N
@@ -1088,7 +1107,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1088
1107
CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
1089
1108
CALL PCDOTC( N- J, CSUMJ, A, IA+ J, JA+ J-1 , DESCA, 1 ,
1090
1109
$ 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 )
1092
1113
CALL PCSCAL( N- J, ZDUM, A, IA+ J, JA+ J-1 , DESCA, 1 )
1093
1114
END IF
1094
1115
IF ( MYCOL.EQ. ITMP2X ) THEN
@@ -1150,7 +1171,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1150
1171
END IF
1151
1172
END IF
1152
1173
* 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 )
1154
1177
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
1155
1178
$ X( IROWX ) = XJTMP
1156
1179
ELSE IF ( TJJ.GT. ZERO ) THEN
@@ -1168,7 +1191,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1168
1191
XMAX( 1 ) = XMAX( 1 )* REC
1169
1192
END IF
1170
1193
* 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 )
1172
1197
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
1173
1198
$ X( IROWX ) = XJTMP
1174
1199
ELSE
@@ -1191,7 +1216,9 @@ SUBROUTINE PCLATTRS( UPLO, TRANS, DIAG, NORMIN, N, A, IA, JA,
1191
1216
* product has already been divided by 1/A(j,j).
1192
1217
*
1193
1218
* 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 )
1195
1222
IF ( ( MYROW.EQ. ITMP1X ) .AND. ( MYCOL.EQ. ITMP2X ) )
1196
1223
$ X( IROWX ) = XJTMP
1197
1224
END IF
0 commit comments