1063
1064
1065 CHARACTER*1 TEST
1066 INTEGER CDESTPTR, CMEMLEN, CMEMUSED, CSRCPTR, DIAGPTR, LDDPTR,
1067 $ LDIPTR, LDSPTR, MEMLEN, MEMUSED, MPTR, NGRID, NMAT, NOP,
1068 $ NPTR, NSCOPE, NSHAPE, NSRC, NTOP, OPPTR, OUTNUM, PPTR,
1069 $ QPTR, RDESTPTR, RSRCPTR, SCOPEPTR, TCOH, TOPPTR, TREP,
1070 $ UPLOPTR
1071
1072
1073 CHARACTER*1 CMEM(CMEMLEN)
1074 INTEGER MEM(MEMLEN)
1075
1076
1077 INTEGER IBTMYPROC, IBTMSGID, IBTSIZEOF
1079
1080
1081 INTEGER IAM, ISIZE, DSIZE
1082
1083
1084 INTEGER ITMP(2)
1085
1086
1087
1089 IF( iam .EQ. 0 ) THEN
1090 IF( test .EQ. 'S' ) THEN
1091 CALL rdsdrv( memused, mem, memlen, cmemused, cmem, cmemlen,
1092 $ outnum )
1093 ELSE IF( test .EQ. 'B' ) THEN
1094 CALL rdbsbr( memused, mem, memlen, cmemused, cmem, cmemlen,
1095 $ outnum )
1096 ELSE
1097 CALL rdcomb( memused, mem, memlen, cmemused, cmem, cmemlen,
1098 $ outnum )
1099 END IF
1100 itmp(1) = memused
1101 itmp(2) = cmemused
1103 IF( memlen .GE. memused + cmemused ) THEN
1104 CALL bttranschar(
'I', cmemused, cmem, mem(memused+1) )
1105 ELSE
1108 WRITE(outnum,1000) ( (memused+cmemused)*isize + dsize-1 )
1109 $ / dsize
1110 CALL blacs_abort(-1, -1)
1111 END IF
1113 ELSE
1115 memused = itmp(1)
1116 cmemused = itmp(2)
1117 IF( memlen .GE. memused + cmemused ) THEN
1119 CALL bttranschar(
'C', cmemused, cmem, mem(memused+1) )
1120 ELSE
1123 WRITE(outnum,1000) ( (memused+cmemused)*isize + dsize-1 )
1124 $ / dsize
1125 CALL blacs_abort(-1, -1)
1126 END IF
1127 END IF
1128 CALL btunpack( test, mem, memused, nop, nscope, trep, tcoh, ntop,
1129 $ nshape, nmat, nsrc, ngrid, opptr, scopeptr, topptr,
1130 $ uploptr, diagptr, mptr, nptr, ldsptr, lddptr,
1131 $ ldiptr, rsrcptr, csrcptr, rdestptr, cdestptr, pptr,
1132 $ qptr)
1133
1134 1000 FORMAT('MEM array too short to pack CMEM; increase to at least',
1135 $ i7)
1136
1137 RETURN
1138
1139
1140
subroutine btunpack(test, mem, memlen, nop, nscope, trep, tcoh, ntop, nshape, nmat, nsrc, ngrid, opptr, scopeptr, topptr, uploptr, diagptr, mptr, nptr, ldsptr, lddptr, ldiptr, rsrcptr, csrcptr, rdestptr, cdestptr, pptr, qptr)
subroutine rdsdrv(memused, mem, memlen, cmemused, cmem, cmemlen, outnum)
subroutine bttranschar(transto, n, cmem, imem)
subroutine rdbsbr(memused, mem, memlen, cmemused, cmem, cmemlen, outnum)
subroutine rdcomb(memused, mem, memlen, cmemused, cmem, cmemlen, outnum)
integer function ibtmsgid()
subroutine btrecv(dtype, n, buff, src, msgid)
integer function ibtmyproc()
subroutine btsend(dtype, n, buff, dest, msgid)
integer function ibtsizeof(type)