SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ pdbla1tstinfo()

subroutine pdbla1tstinfo ( character*( * )  summry,
integer  nout,
integer  nmat,
integer, dimension( ldval )  nval,
integer, dimension( ldval )  mxval,
integer, dimension( ldval )  nxval,
integer, dimension( ldval )  imbxval,
integer, dimension( ldval )  mbxval,
integer, dimension( ldval )  inbxval,
integer, dimension( ldval )  nbxval,
integer, dimension( ldval )  rscxval,
integer, dimension( ldval )  cscxval,
integer, dimension( ldval )  ixval,
integer, dimension( ldval )  jxval,
integer, dimension( ldval )  incxval,
integer, dimension( ldval )  myval,
integer, dimension( ldval )  nyval,
integer, dimension( ldval )  imbyval,
integer, dimension( ldval )  mbyval,
integer, dimension( ldval )  inbyval,
integer, dimension( ldval )  nbyval,
integer, dimension( ldval )  rscyval,
integer, dimension( ldval )  cscyval,
integer, dimension( ldval )  iyval,
integer, dimension( ldval )  jyval,
integer, dimension( ldval )  incyval,
integer  ldval,
integer  ngrids,
integer, dimension( ldpval )  pval,
integer  ldpval,
integer, dimension( ldqval )  qval,
integer  ldqval,
logical, dimension( * )  ltest,
logical  sof,
logical  tee,
integer  iam,
integer  igap,
integer  iverb,
integer  nprocs,
double precision  alpha,
integer, dimension( * )  work 
)

Definition at line 768 of file pdblas1tst.f.

777*
778* -- PBLAS test routine (version 2.0) --
779* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
780* and University of California, Berkeley.
781* April 1, 1998
782*
783* .. Scalar Arguments ..
784 LOGICAL SOF, TEE
785 INTEGER IAM, IGAP, IVERB, LDPVAL, LDQVAL, LDVAL,
786 $ NGRIDS, NMAT, NOUT, NPROCS
787 DOUBLE PRECISION ALPHA
788* ..
789* .. Array Arguments ..
790 CHARACTER*( * ) SUMMRY
791 LOGICAL LTEST( * )
792 INTEGER CSCXVAL( LDVAL ), CSCYVAL( LDVAL ),
793 $ IMBXVAL( LDVAL ), IMBYVAL( LDVAL ),
794 $ INBXVAL( LDVAL ), INBYVAL( LDVAL ),
795 $ INCXVAL( LDVAL ), INCYVAL( LDVAL ),
796 $ IXVAL( LDVAL ), IYVAL( LDVAL ), JXVAL( LDVAL ),
797 $ JYVAL( LDVAL ), MBXVAL( LDVAL ),
798 $ MBYVAL( LDVAL ), MXVAL( LDVAL ),
799 $ MYVAL( LDVAL ), NBXVAL( LDVAL ),
800 $ NBYVAL( LDVAL ), NVAL( LDVAL ), NXVAL( LDVAL ),
801 $ NYVAL( LDVAL ), PVAL( LDPVAL ), QVAL( LDQVAL ),
802 $ RSCXVAL( LDVAL ), RSCYVAL( LDVAL ), WORK( * )
803* ..
804*
805* Purpose
806* =======
807*
808* PDBLA1TSTINFO get the needed startup information for testing various
809* Level 1 PBLAS routines, and transmits it to all processes.
810*
811* Notes
812* =====
813*
814* For packing the information we assumed that the length in bytes of an
815* integer is equal to the length in bytes of a real single precision.
816*
817* Arguments
818* =========
819*
820* SUMMRY (global output) CHARACTER*(*)
821* On exit, SUMMRY is the name of output (summary) file (if
822* any). SUMMRY is only defined for process 0.
823*
824* NOUT (global output) INTEGER
825* On exit, NOUT specifies the unit number for the output file.
826* When NOUT is 6, output to screen, when NOUT is 0, output to
827* stderr. NOUT is only defined for process 0.
828*
829* NMAT (global output) INTEGER
830* On exit, NMAT specifies the number of different test cases.
831*
832* NVAL (global output) INTEGER array
833* On entry, NVAL is an array of dimension LDVAL. On exit, this
834* array contains the values of N to run the code with.
835*
836* MXVAL (global output) INTEGER array
837* On entry, MXVAL is an array of dimension LDVAL. On exit, this
838* array contains the values of DESCX( M_ ) to run the code
839* with.
840*
841* NXVAL (global output) INTEGER array
842* On entry, NXVAL is an array of dimension LDVAL. On exit, this
843* array contains the values of DESCX( N_ ) to run the code
844* with.
845*
846* IMBXVAL (global output) INTEGER array
847* On entry, IMBXVAL is an array of dimension LDVAL. On exit,
848* this array contains the values of DESCX( IMB_ ) to run the
849* code with.
850*
851* MBXVAL (global output) INTEGER array
852* On entry, MBXVAL is an array of dimension LDVAL. On exit,
853* this array contains the values of DESCX( MB_ ) to run the
854* code with.
855*
856* INBXVAL (global output) INTEGER array
857* On entry, INBXVAL is an array of dimension LDVAL. On exit,
858* this array contains the values of DESCX( INB_ ) to run the
859* code with.
860*
861* NBXVAL (global output) INTEGER array
862* On entry, NBXVAL is an array of dimension LDVAL. On exit,
863* this array contains the values of DESCX( NB_ ) to run the
864* code with.
865*
866* RSCXVAL (global output) INTEGER array
867* On entry, RSCXVAL is an array of dimension LDVAL. On exit,
868* this array contains the values of DESCX( RSRC_ ) to run the
869* code with.
870*
871* CSCXVAL (global output) INTEGER array
872* On entry, CSCXVAL is an array of dimension LDVAL. On exit,
873* this array contains the values of DESCX( CSRC_ ) to run the
874* code with.
875*
876* IXVAL (global output) INTEGER array
877* On entry, IXVAL is an array of dimension LDVAL. On exit, this
878* array contains the values of IX to run the code with.
879*
880* JXVAL (global output) INTEGER array
881* On entry, JXVAL is an array of dimension LDVAL. On exit, this
882* array contains the values of JX to run the code with.
883*
884* INCXVAL (global output) INTEGER array
885* On entry, INCXVAL is an array of dimension LDVAL. On exit,
886* this array contains the values of INCX to run the code with.
887*
888* MYVAL (global output) INTEGER array
889* On entry, MYVAL is an array of dimension LDVAL. On exit, this
890* array contains the values of DESCY( M_ ) to run the code
891* with.
892*
893* NYVAL (global output) INTEGER array
894* On entry, NYVAL is an array of dimension LDVAL. On exit, this
895* array contains the values of DESCY( N_ ) to run the code
896* with.
897*
898* IMBYVAL (global output) INTEGER array
899* On entry, IMBYVAL is an array of dimension LDVAL. On exit,
900* this array contains the values of DESCY( IMB_ ) to run the
901* code with.
902*
903* MBYVAL (global output) INTEGER array
904* On entry, MBYVAL is an array of dimension LDVAL. On exit,
905* this array contains the values of DESCY( MB_ ) to run the
906* code with.
907*
908* INBYVAL (global output) INTEGER array
909* On entry, INBYVAL is an array of dimension LDVAL. On exit,
910* this array contains the values of DESCY( INB_ ) to run the
911* code with.
912*
913* NBYVAL (global output) INTEGER array
914* On entry, NBYVAL is an array of dimension LDVAL. On exit,
915* this array contains the values of DESCY( NB_ ) to run the
916* code with.
917*
918* RSCYVAL (global output) INTEGER array
919* On entry, RSCYVAL is an array of dimension LDVAL. On exit,
920* this array contains the values of DESCY( RSRC_ ) to run the
921* code with.
922*
923* CSCYVAL (global output) INTEGER array
924* On entry, CSCYVAL is an array of dimension LDVAL. On exit,
925* this array contains the values of DESCY( CSRC_ ) to run the
926* code with.
927*
928* IYVAL (global output) INTEGER array
929* On entry, IYVAL is an array of dimension LDVAL. On exit, this
930* array contains the values of IY to run the code with.
931*
932* JYVAL (global output) INTEGER array
933* On entry, JYVAL is an array of dimension LDVAL. On exit, this
934* array contains the values of JY to run the code with.
935*
936* INCYVAL (global output) INTEGER array
937* On entry, INCYVAL is an array of dimension LDVAL. On exit,
938* this array contains the values of INCY to run the code with.
939*
940* LDVAL (global input) INTEGER
941* On entry, LDVAL specifies the maximum number of different va-
942* lues that can be used for DESCX(:), IX, JX, INCX, DESCY(:),
943* IY, JY and INCY. This is also the maximum number of test
944* cases.
945*
946* NGRIDS (global output) INTEGER
947* On exit, NGRIDS specifies the number of different values that
948* can be used for P and Q.
949*
950* PVAL (global output) INTEGER array
951* On entry, PVAL is an array of dimension LDPVAL. On exit, this
952* array contains the values of P to run the code with.
953*
954* LDPVAL (global input) INTEGER
955* On entry, LDPVAL specifies the maximum number of different
956* values that can be used for P.
957*
958* QVAL (global output) INTEGER array
959* On entry, QVAL is an array of dimension LDQVAL. On exit, this
960* array contains the values of Q to run the code with.
961*
962* LDQVAL (global input) INTEGER
963* On entry, LDQVAL specifies the maximum number of different
964* values that can be used for Q.
965*
966* LTEST (global output) LOGICAL array
967* On entry, LTEST is an array of dimension at least eight. On
968* exit, if LTEST( i ) is .TRUE., the i-th Level 1 PBLAS routine
969* will be tested. See the input file for the ordering of the
970* routines.
971*
972* SOF (global output) LOGICAL
973* On exit, if SOF is .TRUE., the tester will stop on the first
974* detected failure. Otherwise, it won't.
975*
976* TEE (global output) LOGICAL
977* On exit, if TEE is .TRUE., the tester will perform the error
978* exit tests. These tests won't be performed otherwise.
979*
980* IAM (local input) INTEGER
981* On entry, IAM specifies the number of the process executing
982* this routine.
983*
984* IGAP (global output) INTEGER
985* On exit, IGAP specifies the user-specified gap used for pad-
986* ding. IGAP must be at least zero.
987*
988* IVERB (global output) INTEGER
989* On exit, IVERB specifies the output verbosity level: 0 for
990* pass/fail, 1, 2 or 3 for matrix dump on errors.
991*
992* NPROCS (global input) INTEGER
993* On entry, NPROCS specifies the total number of processes.
994*
995* ALPHA (global output) DOUBLE PRECISION
996* On exit, ALPHA specifies the value of alpha to be used in all
997* the test cases.
998*
999* WORK (local workspace) INTEGER array
1000* On entry, WORK is an array of dimension at least
1001* MAX( 2, 2*NGRIDS+23*NMAT+NSUBS+4 ) with NSUBS equal to 8.
1002* This array is used to pack all output arrays in order to send
1003* the information in one message.
1004*
1005* -- Written on April 1, 1998 by
1006* Antoine Petitet, University of Tennessee, Knoxville 37996, USA.
1007*
1008* =====================================================================
1009*
1010* .. Parameters ..
1011 INTEGER NIN, NSUBS
1012 parameter( nin = 11, nsubs = 8 )
1013* ..
1014* .. Local Scalars ..
1015 LOGICAL LTESTT
1016 INTEGER I, ICTXT, J
1017 DOUBLE PRECISION EPS
1018* ..
1019* .. Local Arrays ..
1020 CHARACTER*7 SNAMET
1021 CHARACTER*79 USRINFO
1022* ..
1023* .. External Subroutines ..
1024 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
1025 $ blacs_gridinit, blacs_setup, dgebr2d, dgebs2d,
1026 $ icopy, igebr2d, igebs2d, sgebr2d, sgebs2d
1027* ..
1028* .. External Functions ..
1029 DOUBLE PRECISION PDLAMCH
1030 EXTERNAL pdlamch
1031* ..
1032* .. Intrinsic Functions ..
1033 INTRINSIC max, min
1034* ..
1035* .. Common Blocks ..
1036 CHARACTER*7 SNAMES( NSUBS )
1037 COMMON /snamec/snames
1038* ..
1039* .. Executable Statements ..
1040*
1041* Process 0 reads the input data, broadcasts to other processes and
1042* writes needed information to NOUT
1043*
1044 IF( iam.EQ.0 ) THEN
1045*
1046* Open file and skip data file header
1047*
1048 OPEN( nin, file='PDBLAS1TST.dat', status='OLD' )
1049 READ( nin, fmt = * ) summry
1050 summry = ' '
1051*
1052* Read in user-supplied info about machine type, compiler, etc.
1053*
1054 READ( nin, fmt = 9999 ) usrinfo
1055*
1056* Read name and unit number for summary output file
1057*
1058 READ( nin, fmt = * ) summry
1059 READ( nin, fmt = * ) nout
1060 IF( nout.NE.0 .AND. nout.NE.6 )
1061 $ OPEN( nout, file = summry, status = 'UNKNOWN' )
1062*
1063* Read and check the parameter values for the tests.
1064*
1065* Read the flag that indicates if Stop on Failure
1066*
1067 READ( nin, fmt = * ) sof
1068*
1069* Read the flag that indicates if Test Error Exits
1070*
1071 READ( nin, fmt = * ) tee
1072*
1073* Read the verbosity level
1074*
1075 READ( nin, fmt = * ) iverb
1076 IF( iverb.LT.0 .OR. iverb.GT.3 )
1077 $ iverb = 0
1078*
1079* Read the leading dimension gap
1080*
1081 READ( nin, fmt = * ) igap
1082 IF( igap.LT.0 )
1083 $ igap = 0
1084*
1085* Get number of grids
1086*
1087 READ( nin, fmt = * ) ngrids
1088 IF( ngrids.LT.1 .OR. ngrids.GT.ldpval ) THEN
1089 WRITE( nout, fmt = 9998 ) 'Grids', ldpval
1090 GO TO 100
1091 ELSE IF( ngrids.GT.ldqval ) THEN
1092 WRITE( nout, fmt = 9998 ) 'Grids', ldqval
1093 GO TO 100
1094 END IF
1095*
1096* Get values of P and Q
1097*
1098 READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
1099 READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
1100*
1101* Read ALPHA
1102*
1103 READ( nin, fmt = * ) alpha
1104*
1105* Read number of tests.
1106*
1107 READ( nin, fmt = * ) nmat
1108 IF( nmat.LT.1 .OR. nmat.GT.ldval ) THEN
1109 WRITE( nout, fmt = 9998 ) 'Tests', ldval
1110 GO TO 100
1111 END IF
1112*
1113* Read in input data into arrays.
1114*
1115 READ( nin, fmt = * ) ( nval( i ), i = 1, nmat )
1116 READ( nin, fmt = * ) ( mxval( i ), i = 1, nmat )
1117 READ( nin, fmt = * ) ( nxval( i ), i = 1, nmat )
1118 READ( nin, fmt = * ) ( imbxval( i ), i = 1, nmat )
1119 READ( nin, fmt = * ) ( inbxval( i ), i = 1, nmat )
1120 READ( nin, fmt = * ) ( mbxval( i ), i = 1, nmat )
1121 READ( nin, fmt = * ) ( nbxval( i ), i = 1, nmat )
1122 READ( nin, fmt = * ) ( rscxval( i ), i = 1, nmat )
1123 READ( nin, fmt = * ) ( cscxval( i ), i = 1, nmat )
1124 READ( nin, fmt = * ) ( ixval( i ), i = 1, nmat )
1125 READ( nin, fmt = * ) ( jxval( i ), i = 1, nmat )
1126 READ( nin, fmt = * ) ( incxval( i ), i = 1, nmat )
1127 READ( nin, fmt = * ) ( myval( i ), i = 1, nmat )
1128 READ( nin, fmt = * ) ( nyval( i ), i = 1, nmat )
1129 READ( nin, fmt = * ) ( imbyval( i ), i = 1, nmat )
1130 READ( nin, fmt = * ) ( inbyval( i ), i = 1, nmat )
1131 READ( nin, fmt = * ) ( mbyval( i ), i = 1, nmat )
1132 READ( nin, fmt = * ) ( nbyval( i ), i = 1, nmat )
1133 READ( nin, fmt = * ) ( rscyval( i ), i = 1, nmat )
1134 READ( nin, fmt = * ) ( cscyval( i ), i = 1, nmat )
1135 READ( nin, fmt = * ) ( iyval( i ), i = 1, nmat )
1136 READ( nin, fmt = * ) ( jyval( i ), i = 1, nmat )
1137 READ( nin, fmt = * ) ( incyval( i ), i = 1, nmat )
1138*
1139* Read names of subroutines and flags which indicate
1140* whether they are to be tested.
1141*
1142 DO 10 i = 1, nsubs
1143 ltest( i ) = .false.
1144 10 CONTINUE
1145 20 CONTINUE
1146 READ( nin, fmt = 9996, END = 50 ) SNAMET, ltestt
1147 DO 30 i = 1, nsubs
1148 IF( snamet.EQ.snames( i ) )
1149 $ GO TO 40
1150 30 CONTINUE
1151*
1152 WRITE( nout, fmt = 9995 )snamet
1153 GO TO 100
1154*
1155 40 CONTINUE
1156 ltest( i ) = ltestt
1157 GO TO 20
1158*
1159 50 CONTINUE
1160*
1161* Close input file
1162*
1163 CLOSE ( nin )
1164*
1165* For pvm only: if virtual machine not set up, allocate it and
1166* spawn the correct number of processes.
1167*
1168 IF( nprocs.LT.1 ) THEN
1169 nprocs = 0
1170 DO 60 i = 1, ngrids
1171 nprocs = max( nprocs, pval( i )*qval( i ) )
1172 60 CONTINUE
1173 CALL blacs_setup( iam, nprocs )
1174 END IF
1175*
1176* Temporarily define blacs grid to include all processes so
1177* information can be broadcast to all processes
1178*
1179 CALL blacs_get( -1, 0, ictxt )
1180 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
1181*
1182* Compute machine epsilon
1183*
1184 eps = pdlamch( ictxt, 'eps' )
1185*
1186* Pack information arrays and broadcast
1187*
1188 CALL dgebs2d( ictxt, 'All', ' ', 1, 1, alpha, 1 )
1189*
1190 work( 1 ) = ngrids
1191 work( 2 ) = nmat
1192 CALL igebs2d( ictxt, 'All', ' ', 2, 1, work, 2 )
1193*
1194 i = 1
1195 IF( sof ) THEN
1196 work( i ) = 1
1197 ELSE
1198 work( i ) = 0
1199 END IF
1200 i = i + 1
1201 IF( tee ) THEN
1202 work( i ) = 1
1203 ELSE
1204 work( i ) = 0
1205 END IF
1206 i = i + 1
1207 work( i ) = iverb
1208 i = i + 1
1209 work( i ) = igap
1210 i = i + 1
1211 CALL icopy( ngrids, pval, 1, work( i ), 1 )
1212 i = i + ngrids
1213 CALL icopy( ngrids, qval, 1, work( i ), 1 )
1214 i = i + ngrids
1215 CALL icopy( nmat, nval, 1, work( i ), 1 )
1216 i = i + nmat
1217 CALL icopy( nmat, mxval, 1, work( i ), 1 )
1218 i = i + nmat
1219 CALL icopy( nmat, nxval, 1, work( i ), 1 )
1220 i = i + nmat
1221 CALL icopy( nmat, imbxval, 1, work( i ), 1 )
1222 i = i + nmat
1223 CALL icopy( nmat, inbxval, 1, work( i ), 1 )
1224 i = i + nmat
1225 CALL icopy( nmat, mbxval, 1, work( i ), 1 )
1226 i = i + nmat
1227 CALL icopy( nmat, nbxval, 1, work( i ), 1 )
1228 i = i + nmat
1229 CALL icopy( nmat, rscxval, 1, work( i ), 1 )
1230 i = i + nmat
1231 CALL icopy( nmat, cscxval, 1, work( i ), 1 )
1232 i = i + nmat
1233 CALL icopy( nmat, ixval, 1, work( i ), 1 )
1234 i = i + nmat
1235 CALL icopy( nmat, jxval, 1, work( i ), 1 )
1236 i = i + nmat
1237 CALL icopy( nmat, incxval, 1, work( i ), 1 )
1238 i = i + nmat
1239 CALL icopy( nmat, myval, 1, work( i ), 1 )
1240 i = i + nmat
1241 CALL icopy( nmat, nyval, 1, work( i ), 1 )
1242 i = i + nmat
1243 CALL icopy( nmat, imbyval, 1, work( i ), 1 )
1244 i = i + nmat
1245 CALL icopy( nmat, inbyval, 1, work( i ), 1 )
1246 i = i + nmat
1247 CALL icopy( nmat, mbyval, 1, work( i ), 1 )
1248 i = i + nmat
1249 CALL icopy( nmat, nbyval, 1, work( i ), 1 )
1250 i = i + nmat
1251 CALL icopy( nmat, rscyval, 1, work( i ), 1 )
1252 i = i + nmat
1253 CALL icopy( nmat, cscyval, 1, work( i ), 1 )
1254 i = i + nmat
1255 CALL icopy( nmat, iyval, 1, work( i ), 1 )
1256 i = i + nmat
1257 CALL icopy( nmat, jyval, 1, work( i ), 1 )
1258 i = i + nmat
1259 CALL icopy( nmat, incyval, 1, work( i ), 1 )
1260 i = i + nmat
1261*
1262 DO 70 j = 1, nsubs
1263 IF( ltest( j ) ) THEN
1264 work( i ) = 1
1265 ELSE
1266 work( i ) = 0
1267 END IF
1268 i = i + 1
1269 70 CONTINUE
1270 i = i - 1
1271 CALL igebs2d( ictxt, 'All', ' ', i, 1, work, i )
1272*
1273* regurgitate input
1274*
1275 WRITE( nout, fmt = 9999 ) 'Level 1 PBLAS testing program.'
1276 WRITE( nout, fmt = 9999 ) usrinfo
1277 WRITE( nout, fmt = * )
1278 WRITE( nout, fmt = 9999 )
1279 $ 'Tests of the real double precision '//
1280 $ 'Level 1 PBLAS'
1281 WRITE( nout, fmt = * )
1282 WRITE( nout, fmt = 9999 )
1283 $ 'The following parameter values will be used:'
1284 WRITE( nout, fmt = * )
1285 WRITE( nout, fmt = 9993 ) nmat
1286 WRITE( nout, fmt = 9992 ) ngrids
1287 WRITE( nout, fmt = 9990 )
1288 $ 'P', ( pval(i), i = 1, min(ngrids, 5) )
1289 IF( ngrids.GT.5 )
1290 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
1291 $ min( 10, ngrids ) )
1292 IF( ngrids.GT.10 )
1293 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
1294 $ min( 15, ngrids ) )
1295 IF( ngrids.GT.15 )
1296 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
1297 WRITE( nout, fmt = 9990 )
1298 $ 'Q', ( qval(i), i = 1, min(ngrids, 5) )
1299 IF( ngrids.GT.5 )
1300 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
1301 $ min( 10, ngrids ) )
1302 IF( ngrids.GT.10 )
1303 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
1304 $ min( 15, ngrids ) )
1305 IF( ngrids.GT.15 )
1306 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 16, ngrids )
1307 WRITE( nout, fmt = 9988 ) sof
1308 WRITE( nout, fmt = 9987 ) tee
1309 WRITE( nout, fmt = 9983 ) igap
1310 WRITE( nout, fmt = 9986 ) iverb
1311 WRITE( nout, fmt = 9982 ) alpha
1312 IF( ltest( 1 ) ) THEN
1313 WRITE( nout, fmt = 9985 ) snames( 1 ), ' ... Yes'
1314 ELSE
1315 WRITE( nout, fmt = 9985 ) snames( 1 ), ' ... No '
1316 END IF
1317 DO 80 i = 2, nsubs
1318 IF( ltest( i ) ) THEN
1319 WRITE( nout, fmt = 9984 ) snames( i ), ' ... Yes'
1320 ELSE
1321 WRITE( nout, fmt = 9984 ) snames( i ), ' ... No '
1322 END IF
1323 80 CONTINUE
1324 WRITE( nout, fmt = 9994 ) eps
1325 WRITE( nout, fmt = * )
1326*
1327 ELSE
1328*
1329* If in pvm, must participate setting up virtual machine
1330*
1331 IF( nprocs.LT.1 )
1332 $ CALL blacs_setup( iam, nprocs )
1333*
1334* Temporarily define blacs grid to include all processes so
1335* information can be broadcast to all processes
1336*
1337 CALL blacs_get( -1, 0, ictxt )
1338 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
1339*
1340* Compute machine epsilon
1341*
1342 eps = pdlamch( ictxt, 'eps' )
1343*
1344 CALL dgebr2d( ictxt, 'All', ' ', 1, 1, alpha, 1, 0, 0 )
1345*
1346 CALL igebr2d( ictxt, 'All', ' ', 2, 1, work, 2, 0, 0 )
1347 ngrids = work( 1 )
1348 nmat = work( 2 )
1349*
1350 i = 2*ngrids + 23*nmat + nsubs + 4
1351 CALL igebr2d( ictxt, 'All', ' ', i, 1, work, i, 0, 0 )
1352*
1353 i = 1
1354 IF( work( i ).EQ.1 ) THEN
1355 sof = .true.
1356 ELSE
1357 sof = .false.
1358 END IF
1359 i = i + 1
1360 IF( work( i ).EQ.1 ) THEN
1361 tee = .true.
1362 ELSE
1363 tee = .false.
1364 END IF
1365 i = i + 1
1366 iverb = work( i )
1367 i = i + 1
1368 igap = work( i )
1369 i = i + 1
1370 CALL icopy( ngrids, work( i ), 1, pval, 1 )
1371 i = i + ngrids
1372 CALL icopy( ngrids, work( i ), 1, qval, 1 )
1373 i = i + ngrids
1374 CALL icopy( nmat, work( i ), 1, nval, 1 )
1375 i = i + nmat
1376 CALL icopy( nmat, work( i ), 1, mxval, 1 )
1377 i = i + nmat
1378 CALL icopy( nmat, work( i ), 1, nxval, 1 )
1379 i = i + nmat
1380 CALL icopy( nmat, work( i ), 1, imbxval, 1 )
1381 i = i + nmat
1382 CALL icopy( nmat, work( i ), 1, inbxval, 1 )
1383 i = i + nmat
1384 CALL icopy( nmat, work( i ), 1, mbxval, 1 )
1385 i = i + nmat
1386 CALL icopy( nmat, work( i ), 1, nbxval, 1 )
1387 i = i + nmat
1388 CALL icopy( nmat, work( i ), 1, rscxval, 1 )
1389 i = i + nmat
1390 CALL icopy( nmat, work( i ), 1, cscxval, 1 )
1391 i = i + nmat
1392 CALL icopy( nmat, work( i ), 1, ixval, 1 )
1393 i = i + nmat
1394 CALL icopy( nmat, work( i ), 1, jxval, 1 )
1395 i = i + nmat
1396 CALL icopy( nmat, work( i ), 1, incxval, 1 )
1397 i = i + nmat
1398 CALL icopy( nmat, work( i ), 1, myval, 1 )
1399 i = i + nmat
1400 CALL icopy( nmat, work( i ), 1, nyval, 1 )
1401 i = i + nmat
1402 CALL icopy( nmat, work( i ), 1, imbyval, 1 )
1403 i = i + nmat
1404 CALL icopy( nmat, work( i ), 1, inbyval, 1 )
1405 i = i + nmat
1406 CALL icopy( nmat, work( i ), 1, mbyval, 1 )
1407 i = i + nmat
1408 CALL icopy( nmat, work( i ), 1, nbyval, 1 )
1409 i = i + nmat
1410 CALL icopy( nmat, work( i ), 1, rscyval, 1 )
1411 i = i + nmat
1412 CALL icopy( nmat, work( i ), 1, cscyval, 1 )
1413 i = i + nmat
1414 CALL icopy( nmat, work( i ), 1, iyval, 1 )
1415 i = i + nmat
1416 CALL icopy( nmat, work( i ), 1, jyval, 1 )
1417 i = i + nmat
1418 CALL icopy( nmat, work( i ), 1, incyval, 1 )
1419 i = i + nmat
1420*
1421 DO 90 j = 1, nsubs
1422 IF( work( i ).EQ.1 ) THEN
1423 ltest( j ) = .true.
1424 ELSE
1425 ltest( j ) = .false.
1426 END IF
1427 i = i + 1
1428 90 CONTINUE
1429*
1430 END IF
1431*
1432 CALL blacs_gridexit( ictxt )
1433*
1434 RETURN
1435*
1436 100 WRITE( nout, fmt = 9997 )
1437 CLOSE( nin )
1438 IF( nout.NE.6 .AND. nout.NE.0 )
1439 $ CLOSE( nout )
1440 CALL blacs_abort( ictxt, 1 )
1441*
1442 stop
1443*
1444 9999 FORMAT( a )
1445 9998 FORMAT( ' Number of values of ',5a, ' is less than 1 or greater ',
1446 $ 'than ', i2 )
1447 9997 FORMAT( ' Illegal input in file ',40a,'. Aborting run.' )
1448 9996 FORMAT( a7, l2 )
1449 9995 FORMAT( ' Subprogram name ', a7, ' not recognized',
1450 $ /' ******* TESTS ABANDONED *******' )
1451 9994 FORMAT( 2x, 'Relative machine precision (eps) is taken to be ',
1452 $ e18.6 )
1453 9993 FORMAT( 2x, 'Number of Tests : ', i6 )
1454 9992 FORMAT( 2x, 'Number of process grids : ', i6 )
1455 9991 FORMAT( 2x, ' : ', 5i6 )
1456 9990 FORMAT( 2x, a1, ' : ', 5i6 )
1457 9988 FORMAT( 2x, 'Stop on failure flag : ', l6 )
1458 9987 FORMAT( 2x, 'Test for error exits flag : ', l6 )
1459 9986 FORMAT( 2x, 'Verbosity level : ', i6 )
1460 9985 FORMAT( 2x, 'Routines to be tested : ', a, a8 )
1461 9984 FORMAT( 2x, ' ', a, a8 )
1462 9983 FORMAT( 2x, 'Leading dimension gap : ', i6 )
1463 9982 FORMAT( 2x, 'Alpha : ', g16.6 )
1464*
1465* End of PDBLA1TSTINFO
1466*
subroutine icopy(n, sx, incx, sy, incy)
Definition pblastst.f:1525
#define max(A, B)
Definition pcgemr.c:180
#define min(A, B)
Definition pcgemr.c:181
double precision function pdlamch(ictxt, cmach)
Definition pdblastst.f:6769
Here is the call graph for this function:
Here is the caller graph for this function: