874
885 IMPLICIT NONE
886 TYPE (SMUMPS_ROOT_STRUC) :: root
887 INTEGER COMM_LOAD, ASS_IRECV
888 INTEGER N,LIW,NSTEPS, NBFIN
889 INTEGER NELT
890 INTEGER KEEP(500), ICNTL(60)
891 INTEGER(8) KEEP8(150)
892 REAL DKEEP(230)
893 INTEGER(8) :: LRLUS, LRLU, IPTRLU, POSFAC, LA
894 INTEGER, INTENT(INOUT) :: INFO(2)
895 INTEGER INODE, MAXFRW, LPOOL, LEAF,
896 & IWPOS, IWPOSCB, COMP, SLAVEF
897 REAL, TARGET :: A(LA)
898 INTEGER, intent(in) :: LRGROUPS(N)
899 DOUBLE PRECISION OPASSW, OPELIW
900 INTEGER, DIMENSION(0:SLAVEF - 1) :: MEM_DISTRIB
901 INTEGER IPOOL(LPOOL)
902 INTEGER(8) :: PTRAST(KEEP(28))
903 INTEGER(8) :: PTRFAC(KEEP(28))
904 INTEGER(8) :: PAMASTER(KEEP(28))
905 INTEGER(8), INTENT(IN) :: PTRARW(NELT+1), PTRAIW(NELT+1)
906 INTEGER IW(LIW), ITLOC(N+KEEP(253)),
907 & ND(KEEP(28)),
908 & FILS(N), FRERE(KEEP(28)), DAD (KEEP(28)),
909 & PTRIST(KEEP(28)), PTLUST(KEEP(28)),
910 & STEP(N),
911 & PIMASTER(KEEP(28)),
912 & NSTK_S(KEEP(28)), PERM(N)
913 REAL :: RHS_MUMPS(KEEP(255))
914 INTEGER CAND(SLAVEF+1, max(1,KEEP(56)))
915 INTEGER ISTEP_TO_INIV2(KEEP(71)),
916 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
917 INTEGER FRT_PTR(N+1), FRT_ELT(NELT)
918 INTEGER(8), INTENT(IN) :: LINTARR,LDBLARR
919 REAL DBLARR(LDBLARR)
920 INTEGER INTARR(LINTARR)
921 INTEGER MYID, COMM
922 INTEGER IFATH
923 INTEGER LBUFR, LBUFR_BYTES
924 INTEGER PROCNODE_STEPS(KEEP(28))
925 INTEGER BUFR( LBUFR )
926 include 'mumps_headers.h'
927 include 'mpif.h'
928 INTEGER :: IERR
929 INTEGER :: STATUS(MPI_STATUS_SIZE)
930
931 INTEGER LP, HS, HF, HF_OLD, NCBSON, NSLAVES_OLD
932 LOGICAL LPOK
933 INTEGER NCBSON_MAX
934 INTEGER IN,NUMSTK,NASS,ISON,IFSON,NASS1,IELL
935 INTEGER :: IBC_SOURCE
936 REAL, DIMENSION(:), POINTER :: SON_A
937 INTEGER NFS4FATHER, ESTIM_NFS4FATHER_ATSON
938 INTEGER NFRONT,NFRONT_EFF,ISTCHK,ISTCHK_CB_RIGHT,LSTK,LREQ
939 INTEGER :: SON_XXS
940 INTEGER(8) :: LAELL8
941 INTEGER LREQ_OOC
942 INTEGER NBPANELS_L, NBPANELS_U
943 LOGICAL PACKED_CB, IS_CB_LR
944 INTEGER(8) :: LCB
945 LOGICAL :: IS_DYNAMIC_CB
946 INTEGER(8) :: DYN_SIZE
947 INTEGER NCB
948 INTEGER MP
949 INTEGER :: K1, K2, KK, KK1
950 INTEGER :: J253
951 INTEGER(8) :: AII8, AINPUT8, II8
952 INTEGER(8) :: J18,J28,JJ8
953 INTEGER(8) :: LAPOS2, JJ2, JJ3
954 INTEGER(8) :: NFRONT8, POSELT, POSEL1, LDAFS8,
955 & IACHK, ICT12, ICT21
956 INTEGER(8) APOS, APOS2
957#if
958 INTEGER :: TOPDIAG
959#endif
960
961
962 INTEGER NELIM,NPIVS,NCOLS,NROWS,
963 & IORG
964 INTEGER LDAFS, LDA_SON, IJROW, IBROT
965 INTEGER Pos_First_NUMORG,NBCOL,NUMORG,IOLDPS
966 INTEGER NSLAVES, NSLSON
967 INTEGER NBLIG, PTRCOL, PTRROW, PDEST
968 INTEGER PDEST1(1)
969 INTEGER :: ISLAVE
970 INTEGER ELTI
971 INTEGER(8) :: SIZE_ELTI8
972 INTEGER :: I, J
973 INTEGER :: ELBEG, NUMELT
974 LOGICAL SAME_PROC, NIV1, SON_LEVEL2
975 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
976 INTEGER TROW_SIZE, INDX, FIRST_INDEX, SHIFT_INDEX
977 INTEGER LRSTATUS
978 LOGICAL COMPRESS_PANEL, LR_ACTIVATED, COMPRESS_CB,
979 & OOCWRITE_COMPATIBLE_WITH_BLR
980 INTEGER IZERO
981 INTEGER IDUMMY(1)
982 parameter( izero = 0 )
983 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE, MUMPS_TYPESPLIT
985 REAL ZERO
986 REAL RZERO
987 parameter( rzero = 0.0e0 )
988 parameter( zero = 0.0e0 )
989 logical :: force_cand
990 INTEGER ETATASS
991 INTEGER(8) :: APOSMAX
992 REAL MAXARR
993 INTEGER INIV2, SIZE_TMP_SLAVES_LIST, allocok
994 INTEGER NCB_SPLIT, SIZE_LIST_SPLIT, NBSPLIT,
995 & NUMORG_SPLIT, TYPESPLIT
996 INTEGER, ALLOCATABLE, DIMENSION(:) :: TMP_SLAVES_LIST, COPY_CAND
997 INTEGER, ALLOCATABLE, DIMENSION(:) :: SONROWS_PER_ROW
998 INTEGER, POINTER, DIMENSION(:) :: BEGS_BLR
999 INTEGER :: NB_BLR, NPARTSCB, NPARTSASS, MAXI_CLUSTER,
1000 & IBCKSZ2, MINSIZE
1001 INTEGER :: NMB_OF_CAND, NMB_OF_CAND_ORIG
1002 LOGICAL :: IS_ofType5or6, SPLIT_MAP_RESTART
1003
1004 mp = icntl(2)
1005 lp = icntl(1)
1006 lpok = ((lp.GT.0).AND.(icntl(4).GE.1))
1007 is_oftype5or6 = .false.
1008 packed_cb = .false.
1009 etatass = 0
1010 in = inode
1011 nsteps = nsteps + 1
1012 keep(429) = keep(429)+1
1013 numelt = frt_ptr(inode+1) - frt_ptr(inode)
1014 IF ( numelt .NE. 0 ) THEN
1015 elbeg = frt_ptr(inode)
1016 ELSE
1017 elbeg = 1
1018 END IF
1019 numorg = 0
1020 DO WHILE (in.GT.0)
1021 numorg = numorg + 1
1022 in = fils(in)
1023 ENDDO
1024 numstk = 0
1025 nass = 0
1026 ifson = -in
1027 ison = ifson
1028 ncbson_max = 0
1029 DO WHILE (ison .GT. 0)
1030 numstk = numstk + 1
1031 IF ( keep(48)==5 .AND.
1033 & keep(199)) .EQ. 1) THEN
1034 ncbson_max =
1035 &
max(ncbson_max,iw(pimaster(step(ison))+keep(ixsz)))
1036 ENDIF
1037 nass = nass + iw(pimaster(step(ison)) + 1 + keep(ixsz))
1038 ison = frere(step(ison))
1039 ENDDO
1040 nfront = nd(step(inode)) + nass + keep(253)
1041 nass1 = nass + numorg
1042 ncb = nfront - nass1
1044 & keep(489), keep(490), keep(491), keep(492),
1045 & keep(20), keep(60), dad(step(inode)), keep(38),
1046 & lrstatus, n, lrgroups)
1047 compress_panel = (lrstatus.GE.2)
1048 compress_cb = ((lrstatus.EQ.1).OR.
1049 & (lrstatus.EQ.3))
1050 lr_activated = (lrstatus.GT.0)
1051 IF (compress_cb.AND.(.NOT.compress_panel)) THEN
1052 compress_panel = .true.
1053 lrstatus = 3
1054 ENDIF
1055 oocwrite_compatible_with_blr =
1056 & ( .NOT.lr_activated.OR.(.NOT.compress_panel).OR.
1057 & (keep(486).NE.2)
1058 & )
1059 IF((keep(24).eq.0).or.(keep(24).eq.1)) then
1060 force_cand=.false.
1061 ELSE
1062 force_cand=(mod(keep(24),2).eq.0)
1063 end if
1065 & keep(199))
1066 is_oftype5or6 = (typesplit.EQ.5 .OR. typesplit.EQ.6)
1067 istchk = pimaster(step(ifson))
1068 pdest = istchk + 6 + keep(ixsz)
1069 nslson = iw(istchk + keep(ixsz) + 5)
1070 split_map_restart = .false.
1071 IF (force_cand) THEN
1072 iniv2 = istep_to_iniv2( step( inode ))
1073 nmb_of_cand = cand( slavef+1, iniv2 )
1074 nmb_of_cand_orig = nmb_of_cand
1075 size_tmp_slaves_list = nmb_of_cand
1076 IF (is_oftype5or6) THEN
1077 DO i=nmb_of_cand+1,slavef
1078 IF ( cand( i, iniv2 ).LT.0) EXIT
1079 nmb_of_cand = nmb_of_cand +1
1080 ENDDO
1081 size_tmp_slaves_list = nslson-1
1082 WRITE(6,*) "NMB_OF_CAND, SIZE_TMP_SLAVES_LIST ",
1083 & nmb_of_cand, size_tmp_slaves_list
1084 IF (inode.EQ.-999999) THEN
1085 split_map_restart = .true.
1086 ENDIF
1087 ENDIF
1088 IF (is_oftype5or6.AND.split_map_restart) THEN
1089 typesplit = 4
1090 is_oftype5or6 = .false.
1091 size_tmp_slaves_list = nmb_of_cand
1092 cand(slavef+1, iniv2) = size_tmp_slaves_list
1093 ENDIF
1094 ELSE
1095 iniv2 = 1
1096 size_tmp_slaves_list = slavef - 1
1097 nmb_of_cand = slavef - 1
1098 nmb_of_cand_orig = slavef - 1
1099 ENDIF
1100 ALLOCATE(tmp_slaves_list(size_tmp_slaves_list),stat=allocok)
1101 IF (allocok > 0 ) THEN
1102 GOTO 265
1103 ENDIF
1105 & keep(199))
1106 IF ( (typesplit.EQ.4)
1107 & .OR.(typesplit.EQ.5).OR.(typesplit.EQ.6)
1108 & ) THEN
1109 IF (typesplit.EQ.4) THEN
1110 ALLOCATE(copy_cand(slavef+1),stat=allocok)
1111 IF (allocok > 0 ) THEN
1112 GOTO 245
1113 ENDIF
1115 & inode, step, n, slavef,
1116 & procnode_steps, keep, dad, fils,
1117 & cand(1,iniv2), icntl, copy_cand,
1118 & nbsplit, numorg_split, tmp_slaves_list(1),
1119 & size_tmp_slaves_list
1120 & )
1121 ncb_split = ncb-numorg_split
1122 size_list_split = size_tmp_slaves_list - nbsplit
1124 & icntl, copy_cand,
1125 & mem_distrib(0), ncb_split, nfront, nslaves,
1126 & tab_pos_in_pere(1,iniv2),
1127 & tmp_slaves_list(nbsplit+1),
1128 & size_list_split,inode
1129 & )
1130 DEALLOCATE (copy_cand)
1132 & inode, step, n, slavef, nbsplit, ncb,
1133 & procnode_steps, keep, dad, fils,
1134 & icntl,
1135 & tab_pos_in_pere(1,iniv2),
1136 & nslaves
1137 & )
1138 IF (split_map_restart) THEN
1139 is_oftype5or6 = .true.
1141 & keep(199))
1142 cand( slavef+1, iniv2 ) = nmb_of_cand_orig
1143 ENDIF
1144 ELSE
1145 istchk = pimaster(step(ifson))
1146 pdest = istchk + 6 + keep(ixsz)
1147 nslson = iw(istchk + keep(ixsz) + 5)
1148 IF (keep(376) .EQ. 1) THEN
1149 nfront = iw( pimaster(step(ifson)) + keep(ixsz))
1150 ENDIF
1152 & inode, typesplit, ifson,
1153 & cand(1,iniv2), nmb_of_cand_orig,
1154 & iw(pdest), nslson,
1155 & step, n, slavef,
1156 & procnode_steps, keep, dad, fils,
1157 & icntl, istep_to_iniv2, iniv2,
1158 & tab_pos_in_pere, nslaves,
1159 & tmp_slaves_list,
1160 & size_tmp_slaves_list
1161 & )
1162 ENDIF
1163 ELSE
1165 & icntl, cand(1,iniv2),
1166 & mem_distrib(0), ncb, nfront, nslaves,
1167 & tab_pos_in_pere(1,iniv2),
1168 & tmp_slaves_list,
1169 & size_tmp_slaves_list,inode
1170 & )
1171 ENDIF
1172 hf = nslaves + 6 + keep(ixsz)
1173 lreq_ooc = 0
1174 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr) THEN
1176 & nbpanels_l, nbpanels_u, lreq_ooc)
1177 ENDIF
1178 lreq = hf + 2 * nfront + lreq_ooc
1179 IF ((iwpos + lreq -1) .GT. iwposcb) THEN
1181 & iw, liw, a, la,
1182 & lrlu, iptrlu,
1183 & iwpos, iwposcb, ptrist, ptrast,
1184 & step, pimaster, pamaster,
1185 & lrlus,keep(ixsz),
1187 & procnode_steps, dad)
1188 IF (lrlu .NE. lrlus) THEN
1189 IF (lpok) THEN
1190 WRITE(lp, * ) 'PB compress SMUMPS_FAC_ASM_NIV2_ELT',
1191 & 'LRLU,LRLUS=',lrlu,lrlus
1192 ENDIF
1193 GOTO 270
1194 ENDIF
1195 IF ((iwpos + lreq -1) .GT. iwposcb) GOTO 270
1196 ENDIF
1197 ioldps = iwpos
1198 iwpos = iwpos + lreq
1199 niv1 = .false.
1200 ALLOCATE(sonrows_per_row(nfront-nass1), stat=allocok)
1201 IF (allocok > 0) THEN
1202 GOTO 275
1203 ENDIF
1205 & numelt, frt_elt(elbeg),
1206 &
myid, inode, n, ioldps, hf,
1207 & nfront, nfront_eff, perm,
1208 & nass1, nass, numstk, numorg, iwposcb, iwpos,
1209 & ifson, step, pimaster, ptrist, ptraiw, nelt, iw, liw,
1210 & intarr, lintarr, itloc, fils, frere,
1211 & keep, son_level2, niv1, info(1),
1212 & dad,procnode_steps, slavef,
1213 & frt_ptr, frt_elt, pos_first_numorg,
1214 & sonrows_per_row, nfront - nass1)
1215 IF (info(1).LT.0) GOTO 250
1216 IF ( nfront .NE. nfront_eff ) THEN
1217 IF (
1218 & (typesplit.EQ.5) .OR. (typesplit.EQ.6)) THEN
1219 WRITE(6,*) ' Internal error 1 in fac_ass due to splitting ',
1220 & ' INODE, NFRONT, NFRONT_EFF =', inode, nfront, nfront_eff
1221 WRITE(6,*) ' SPLITTING NOT YET READY FOR THAT'
1223 ENDIF
1224 IF (nfront.GT.nfront_eff) THEN
1225 ncb = nfront_eff - nass1
1226 nslaves_old = nslaves
1227 hf_old = hf
1228 IF (typesplit.EQ.4) THEN
1229 ALLOCATE(copy_cand(slavef+1),stat=allocok)
1230 IF (allocok > 0 ) THEN
1231 GOTO 245
1232 ENDIF
1234 & inode, step, n, slavef,
1235 & procnode_steps, keep, dad, fils,
1236 & cand(1,iniv2), icntl, copy_cand,
1237 & nbsplit, numorg_split, tmp_slaves_list(1),
1238 & size_tmp_slaves_list
1239 & )
1240 ncb_split = ncb-numorg_split
1241 size_list_split = size_tmp_slaves_list - nbsplit
1243 & slavef, keep,keep8,
1244 & icntl, copy_cand,
1245 & mem_distrib(0), ncb_split, nfront_eff, nslaves,
1246 & tab_pos_in_pere(1,iniv2),
1247 & tmp_slaves_list(nbsplit+1),
1248 & size_list_split,inode
1249 & )
1250 DEALLOCATE (copy_cand)
1252 & inode, step, n, slavef, nbsplit, ncb,
1253 & procnode_steps, keep, dad, fils,
1254 & icntl,
1255 & tab_pos_in_pere(1,iniv2),
1256 & nslaves
1257 & )
1258 ELSE
1260 & slavef, keep, keep8, icntl,
1261 & cand(1,iniv2),
1262 & mem_distrib(0), ncb, nfront_eff, nslaves,
1263 & tab_pos_in_pere(1,iniv2),
1264 & tmp_slaves_list, size_tmp_slaves_list,inode
1265 & )
1266 ENDIF
1267 hf = nslaves + 6 + keep(ixsz)
1268 iwpos = iwpos - ((2*nfront)-(2*nfront_eff)) -
1269 & (nslaves_old - nslaves)
1270 IF (nslaves_old .NE. nslaves) THEN
1271 IF (nslaves_old > nslaves) THEN
1272 DO kk=0,2*nfront_eff-1
1273 iw(ioldps+hf+kk)=iw(ioldps+hf_old+kk)
1274 ENDDO
1275 ELSE
1276 IF (iwpos - 1 > iwposcb ) GOTO 270
1277 DO kk=2*nfront_eff-1, 0, -1
1278 iw(ioldps+hf+kk) = iw(ioldps+hf_old+kk)
1279 ENDDO
1280 END IF
1281 END IF
1282 nfront = nfront_eff
1283 lreq = hf + 2 * nfront + lreq_ooc
1284 ELSE
1285 IF (lpok) THEN
1286 WRITE(lp,*) ' INTERNAL ERROR 2 during ass_niv2'
1287 ENDIF
1288 GOTO 270
1289 ENDIF
1290 ENDIF
1291 nfront8=int(nfront,8)
1292 IF (keep(201).EQ.1.AND.keep(50).NE.1.AND.
1293 & oocwrite_compatible_with_blr) THEN
1295 & nbpanels_l, nbpanels_u, nass1,
1296 & ioldps + hf + 2 * nfront, iw, liw)
1297 ENDIF
1298 maxfrw = max0(maxfrw, nfront)
1299 ptlust(step(inode)) = ioldps
1300 iw(ioldps+keep(ixsz)) = nfront
1301 iw(ioldps + 1+keep(ixsz)) = 0
1302 iw(ioldps + 2+keep(ixsz)) = -nass1
1303 iw(ioldps + 3+keep(ixsz)) = -nass1
1304 iw(ioldps + 4+keep(ixsz)) = step(inode)
1305 iw(ioldps+5+keep(ixsz)) = nslaves
1306 iw(ioldps+6+keep(ixsz):ioldps+5+nslaves+keep(ixsz))=
1307 & tmp_slaves_list(1:nslaves)
1308 estim_nfs4father_atson = -9999
1309 IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1310 ifath = dad( step( inode) )
1311 IF (ifath.NE.0) THEN
1312 IF (compress_cb.AND.
1314 & .EQ. 2 ) THEN
1315 ioldps = ptlust(step(inode))
1317 & n, inode, ifath, fils, perm, keep,
1318 & ioldps, hf, iw, liw, nfront, nass1,
1319 & estim_nfs4father_atson
1320 & )
1321 ENDIF
1322 ENDIF
1323 ENDIF
1325 & tab_pos_in_pere(1,istep_to_iniv2(step(inode))),
1326 & nass1, keep, keep8, iw(ioldps+6+keep(ixsz)), nslaves,inode)
1327 IF(keep(86).EQ.1)THEN
1328 IF(mod(keep(24),2).eq.0)THEN
1330 & cand(slavef+1,iniv2),
1331 & cand(1,iniv2),
1332 & tab_pos_in_pere(1,istep_to_iniv2(step(inode))),
1333 & nass1, keep,keep8, tmp_slaves_list,
1334 & nslaves,inode)
1335 ELSEIF((keep(24).EQ.0).OR.(keep(24).EQ.1))THEN
1337 & slavef-1,
1338 & tmp_slaves_list,
1339 & tab_pos_in_pere(1,istep_to_iniv2(step(inode))),
1340 & nass1, keep,keep8, tmp_slaves_list,
1341 & nslaves,inode)
1342 ENDIF
1343 ENDIF
1344 DEALLOCATE(tmp_slaves_list)
1345 IF (keep(50).EQ.0) THEN
1346 laell8 = int(nass1,8) * nfront8
1347 ldafs = nfront
1348 ldafs8 = nfront8
1349 ELSE
1350 laell8 = int(nass1,8)*int(nass1,8)
1351 IF(keep(219).NE.0.AND.keep(50) .EQ. 2)
1352 & laell8 = laell8+int(nass1,8)
1353 ldafs = nass1
1354 ldafs8 = int(nass1,8)
1355 ENDIF
1357 & (0, laell8, .false.,
1358 & keep(1), keep8(1),
1359 & n,iw,liw,a,la,
1360 & lrlu,iptrlu,iwpos,iwposcb,
1361 & ptrist,ptrast,
1362 & step, pimaster,pamaster,lrlus,
1363 & keep(ixsz),
comp, dkeep(97),
myid,
1364 & slavef, procnode_steps, dad,
1365 & info(1), info(2))
1366 IF (info(1).LT.0) GOTO 490
1367 lrlu = lrlu - laell8
1368 lrlus = lrlus - laell8
1369 keep8(67) =
min(lrlus, keep8(67))
1370 keep8(69) = keep8(69) + laell8
1371 keep8(68) =
max(keep8(69), keep8(68))
1372 poselt = posfac
1373 ptrast(step(inode)) = poselt
1374 ptrfac(step(inode)) = poselt
1375 posfac = posfac + laell8
1376 iw(ioldps+xxi) = lreq
1379 iw(ioldps+xxs) = -9999
1380 iw(ioldps+xxn) = -99999
1381 iw(ioldps+xxp) = -99999
1382 iw(ioldps+xxa) = -99999
1383 iw(ioldps+xxf) = -99999
1384 iw(ioldps+xxlr)= lrstatus
1385 iw(ioldps+xxg) = memnotpinned
1387 & keep,keep8,lrlus)
1388 posel1 = poselt - ldafs8
1389#if defined(ZERO_TRIANGLE)
1390 lapos2 = poselt + laell8 - 1_8
1391 a(poselt:lapos2) = zero
1392#else
1393 IF ( keep(50) .eq. 0 .OR. ldafs .lt. keep(63) ) THEN
1394 lapos2 = poselt + laell8 - 1_8
1395
1396
1397
1398#if defined(__ve__)
1399
1400#endif
1401 DO jj8 = poselt, lapos2
1402 a(jj8) = zero
1403 ENDDO
1404
1405 ELSE
1406 topdiag =
max(keep(7), keep(8))-1
1407 IF (lr_activated) THEN
1408 NULLIFY(begs_blr)
1409 CALL get_cut(iw(ioldps+hf:ioldps+hf+nfront-1), nass1,
1410 & 0, lrgroups, npartscb,
1411 & npartsass, begs_blr)
1412 nb_blr = npartsass + npartscb
1414 DEALLOCATE(begs_blr)
1416 minsize = int(ibcksz2 / 2)
1417 topdiag =
max(2*minsize + maxi_cluster-1, topdiag)
1418 ENDIF
1419
1420
1421 apos = poselt
1422#if defined(__ve__)
1423
1424#endif
1425
1426
1427 DO jj8 = 0_8, int(ldafs-1,8)
1428 apos = poselt + jj8 * int(ldafs,8)
1429 jj3 =
min( int(ldafs,8) - 1_8, jj8 + topdiag )
1430 a(apos:apos+jj3) = zero
1431 END DO
1432
1433 IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1434 aposmax = poselt + int(nass1,8)*int(nass1,8)
1435 a(aposmax:aposmax+int(ldafs-1,8))=zero
1436 ENDIF
1437 END IF
1438#endif
1439 IF ((numstk.NE.0).AND.(nass.NE.0)) THEN
1440 ison = ifson
1441 DO 220 iell = 1, numstk
1442 istchk = pimaster(step(ison))
1443 nelim = iw(istchk + keep(ixsz) + 1)
1444 IF (nelim.EQ.0) GOTO 210
1445 lstk = iw(istchk + keep(ixsz))
1446 npivs = iw(istchk + 3+keep(ixsz))
1447 IF (npivs.LT.0) npivs=0
1448 nslson = iw(istchk + 5+keep(ixsz))
1449 hs = 6 + nslson + keep(ixsz)
1450 ncols = npivs + lstk
1451 same_proc = (istchk.LT.iwpos)
1452 IF ( same_proc ) THEN
1453 istchk_cb_right=ptrist(step(ison))
1454 ELSE
1455 istchk_cb_right=istchk
1456 ENDIF
1457 son_xxs = iw(istchk_cb_right + xxs)
1458 packed_cb = ( son_xxs .EQ. s_cb1comp )
1459 IF (.NOT.same_proc) THEN
1460 nrows = iw(istchk + keep(ixsz) + 2)
1461 ELSE
1462 nrows = ncols
1463 ENDIF
1464 IF (keep(50).EQ.0) THEN
1465 lda_son = lstk
1466 lcb = int(nelim,8)*int(lstk,8)
1467 ELSE
1468 IF (nslson.EQ.0) THEN
1469 IF (same_proc) THEN
1470 is_cb_lr = iw(istchk_cb_right+xxlr).EQ. 1 .OR.
1471 & iw(istchk_cb_right+xxlr).EQ. 3
1472 IF (is_cb_lr) THEN
1473 lda_son = nelim
1474 ELSE
1475 lda_son = lstk
1476 ENDIF
1477 ELSE
1478 lda_son = lstk
1479 ENDIF
1480 ELSE
1481 lda_son = nelim
1482 ENDIF
1483 IF (packed_cb) THEN
1484 lcb = (int(nelim,8)*int(nelim+1,8))/2_8
1485 ELSE
1486 lcb = int(lda_son,8)*int(nelim,8)
1487 ENDIF
1488 ENDIF
1489 IF (keep(50) .EQ. 0) THEN
1490 opassw = opassw + dble(lcb)
1491 ELSE
1492 opassw = opassw + int(nelim,8)*int(nelim+1,8)/2_8
1493 ENDIF
1494 is_dynamic_cb =
1496 & istchk_cb_right+xxd+1))
1497 IF ( is_dynamic_cb ) THEN
1498 CALL mumps_geti8(dyn_size, iw(istchk_cb_right+xxd))
1500 & son_a )
1501 iachk = 1_8
1502 ELSE
1503 iachk = pamaster(step(ison))
1504 son_a=>a
1505 ENDIF
1506 k1 = istchk + hs + nrows + npivs
1507 k2 = k1 + nelim - 1
1508 IF (keep(50).eq.0) THEN
1509 IF (is_oftype5or6) THEN
1510 apos = poselt
1511 DO jj8 = 1_8, int(nelim,8)*int(lstk,8)
1512 a(apos+jj8-1_8) = a(apos+jj8-1_8) + son_a(iachk+jj8-1_8)
1513 ENDDO
1514 ELSE
1515 DO 170 kk = k1, k2
1516 apos = posel1 + int(iw(kk),8) * ldafs8
1517 DO 160 kk1 = 1, lstk
1518 jj2 = apos + int(iw(k1 + kk1 - 1),8) - 1_8
1519 a(jj2) = a(jj2) + son_a(iachk + int(kk1 - 1,8))
1520 160 CONTINUE
1521 iachk = iachk + int(lstk,8)
1522 170 CONTINUE
1523 ENDIF
1524 ELSE
1525 IF (lcb .GT. 0) THEN
1527 & poselt, ldafs, nass1,
1528 & lda_son, lcb,
1529 & iw( k1 ), nelim, nelim, etatass,
1530 & packed_cb
1531
1532 & )
1533 ENDIF
1534 ENDIF
1535 210 ison = frere(step(ison))
1536 220 CONTINUE
1537 ENDIF
1538 aposmax = poselt + int(nass1,8)*int(nass1,8)
1539 IF (keep(219).NE.0) THEN
1540 IF (keep(50).EQ.2) THEN
1541 a( aposmax: aposmax+int(nass1-1,8))=zero
1542 ENDIF
1543 ENDIF
1544 DO iell=elbeg,elbeg+numelt-1
1545 elti = frt_elt(iell)
1546 j18= ptraiw(elti)
1547 j28= ptraiw(elti+1) - 1_8
1548 aii8 = ptrarw(elti)
1549 size_elti8 = j28 - j18 + 1_8
1550 DO ii8=j18,j28
1551 i = intarr(ii8)
1552 IF (keep(50).EQ.0) THEN
1553 IF (i.LE.nass1) THEN
1554 ainput8 = aii8 + ii8 - j18
1555 ict12 = poselt + int(i-1,8) * ldafs8
1556 DO jj8=j18,j28
1557 apos2 = ict12 + int(intarr(jj8) - 1,8)
1558 a(apos2) = a(apos2) + dblarr(ainput8)
1559 ainput8 = ainput8 + size_elti8
1560 END DO
1561 ENDIF
1562 ELSE
1563 ict12 = poselt - ldafs8 + int(i,8) - 1_8
1564 ict21 = poselt + int(i-1,8)*ldafs8 - 1_8
1565 IF ( i .GT. nass1 ) THEN
1566 IF (keep(219).NE.0 .AND. keep(50).EQ.2) THEN
1567 ainput8=aii8
1568 DO jj8=ii8,j28
1569 j=intarr(jj8)
1570 IF (j.LE.nass1) THEN
1571 a(aposmax+int(j-1,8))=
1572 &
max(real(a(aposmax+int(j-1,8))),
1573 & abs(dblarr(ainput8)))
1574 ENDIF
1575 ainput8=ainput8+1_8
1576 ENDDO
1577 ENDIF
1578 aii8 = aii8 + j28 - ii8 + 1_8
1579 cycle
1580 ELSE
1581 IF (keep(219).NE.0) THEN
1582 maxarr = rzero
1583 ENDIF
1584 DO jj8=ii8,j28
1585 j = intarr(jj8)
1586 IF ( j .LE. nass1) THEN
1587 IF (i.LT.j) THEN
1588 apos2 = ict12 + int(j,8)*ldafs8
1589 ELSE
1590 apos2 = ict21 + int(j,8)
1591 ENDIF
1592 a(apos2) = a(apos2) + dblarr(aii8)
1593 ELSE IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1594 maxarr =
max(maxarr,abs(dblarr(aii8)))
1595 ENDIF
1596 aii8 = aii8 + 1_8
1597 END DO
1598 IF(keep(219).NE.0.AND.keep(50) .EQ. 2) THEN
1599 a(aposmax+int(i-1,8)) =
1600 &
max( maxarr, real(a(aposmax+int(i-1,8))))
1601 ENDIF
1602 ENDIF
1603 END IF
1604 END DO
1605 END DO
1606 IF (keep(253).GT.0) THEN
1607 poselt = ptrast(step(inode))
1608 ibrot = inode
1609 ijrow = pos_first_numorg
1610 DO iorg = 1, numorg
1611 IF (keep(50).EQ.0) THEN
1612 DO j253 = 1, keep(253)
1613 apos = poselt +
1614 & int(ijrow-1,8) * int(ldafs,8) +
1615 & int(ldafs-keep(253)+j253-1,8)
1616 a(apos) = a(apos) + rhs_mumps( (j253-1)*keep(254)+ibrot )
1617 ENDDO
1618 ENDIF
1619 ibrot = fils(ibrot)
1620 ijrow = ijrow+1
1621 ENDDO
1622 ENDIF
1623 ptrcol = ioldps + hf + nfront
1624 ptrrow = ioldps + hf + nass1
1625 pdest = ioldps + 6 + keep(ixsz)
1627 DO islave = 1, nslaves
1629 & keep,keep8, inode, step, n, slavef,
1630 & istep_to_iniv2, tab_pos_in_pere,
1631 & islave, ncb,
1632 & nslaves,
1633 & nblig, first_index )
1634 shift_index = first_index - 1
1635 ierr = -1
1636 DO WHILE (ierr .EQ.-1)
1637 IF ( keep(50) .eq. 0 ) THEN
1638 nbcol = nfront
1640 & sum(sonrows_per_row(first_index:first_index+nblig-1)),
1641 & nblig, iw(ptrrow), nbcol, iw(ptrcol), nass1,
1642 & izero, idummy,
1643 & nslaves,
1644 & estim_nfs4father_atson,
1645 & iw(pdest), ibc_source, nfront, comm, keep, ierr
1646 & , iw(ioldps+xxlr)
1647 & )
1648 ELSE
1649 nbcol = nass1+shift_index+nblig
1651 & sum(sonrows_per_row(first_index:first_index+nblig-1)),
1652 & nblig, iw(ptrrow), nbcol, iw(ptrcol), nass1,
1653 & nslaves-islave,
1654 & iw( ptlust(step(inode))+6+keep(ixsz)+islave),
1655 & nslaves,
1656 & estim_nfs4father_atson,
1657 & iw(pdest), ibc_source, nfront, comm, keep, ierr
1658 & , iw(ioldps+xxlr)
1659 & )
1660 ENDIF
1661 IF (ierr.EQ.-1) THEN
1662 blocking = .false.
1663 set_irecv = .true.
1664 message_received = .false.
1666 & blocking, set_irecv, message_received,
1667 & mpi_any_source, mpi_any_tag,
1668 & status, bufr, lbufr,
1669 & lbufr_bytes,
1670 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1671 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1672 & ptlust, ptrfac,
1673 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1674 & info(2), comm,
1675 & perm,
1676 & ipool, lpool, leaf, nbfin,
myid, slavef,
1677 & root, opassw, opeliw, itloc, rhs_mumps,
1678 & fils, dad, ptrarw, ptraiw,
1679 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1680 & nelt+1, nelt, frt_ptr, frt_elt,
1681 & istep_to_iniv2, tab_pos_in_pere, .true.
1682 & , lrgroups
1683 & )
1684 IF ( info(1) .LT. 0 ) GOTO 500
1685 IF (message_received) THEN
1686 ioldps = ptlust(step(inode))
1687 ptrcol = ioldps + hf + nfront
1688 ptrrow = ioldps + hf + nass1 + shift_index
1689 ENDIF
1690 ENDIF
1691 ENDDO
1692 IF (ierr .EQ. -2) GOTO 300
1693 IF (ierr .EQ. -3) GOTO 305
1694 ptrrow = ptrrow + nblig
1695 pdest = pdest + 1
1696 ENDDO
1697 DEALLOCATE(sonrows_per_row)
1698 IF (numstk.EQ.0) GOTO 500
1699 ison = ifson
1700 DO iell = 1, numstk
1701 istchk = pimaster(step(ison))
1702 nelim = iw(istchk + 1 + keep(ixsz))
1703 lstk = iw(istchk + keep(ixsz))
1704 npivs = iw(istchk + 3 + keep(ixsz))
1705 IF ( npivs .LT. 0 ) npivs = 0
1706 nslson = iw(istchk + 5 + keep(ixsz))
1707 hs = 6 + nslson + keep(ixsz)
1708 ncols = npivs + lstk
1709 same_proc = (istchk.LT.iwpos)
1710 IF (.NOT.same_proc) THEN
1711 nrows = iw(istchk + 2 + keep(ixsz) )
1712 ELSE
1713 nrows = ncols
1714 ENDIF
1715 pdest = istchk + 6 + keep(ixsz)
1716 ncbson = lstk - nelim
1717 ptrcol = istchk + hs + nrows + npivs + nelim
1718 IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1719 nfs4father = ncbson
1720 DO i=0,ncbson-1
1721 IF(iw(ptrcol+i) .GT. nass1) THEN
1722 nfs4father = i
1723 EXIT
1724 ENDIF
1725 ENDDO
1726 nfs4father = nfs4father + nelim
1727 ELSE
1728 nfs4father = 0
1729 ENDIF
1730 IF (nslson.EQ.0) THEN
1731 nslson = 1
1733 & keep(199))
1734 IF (pdest1(1).EQ.
myid)
THEN
1736 & bufr, lbufr, lbufr_bytes,
1737 & inode, ison, nslaves,
1738 & iw( ptlust(step(inode)) + 6 +keep(ixsz)),
1739 & nfront, nass1, nfs4father, ncbson, iw( ptrcol ),
1740 & procnode_steps,
1741 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
1742 & lrlus, n, iw, liw, a, la,
1743 & ptrist, ptlust, ptrfac, ptrast, step,
1744 & pimaster, pamaster, nstk_s,
comp,
1745 & info(1), info(2),
myid, comm, perm,
1746 & ipool, lpool, leaf,
1747 & nbfin, icntl, keep, keep8, dkeep, root,
1748 & opassw, opeliw,
1749 & itloc, rhs_mumps, fils, dad,
1750 & ptrarw, ptraiw, intarr, dblarr, nd, frere, nelt+1, nelt,
1751 & frt_ptr, frt_elt,
1752 & istep_to_iniv2, tab_pos_in_pere,
1753 & lrgroups )
1754 IF ( info(1) .LT. 0 ) GOTO 500
1755 ELSE
1756 ierr = -1
1757 DO WHILE (ierr.EQ.-1)
1758 ptrcol = pimaster(step(ison)) + hs + nrows + npivs + nelim
1760 & inode, nfront,nass1,nfs4father,
1762 & nslaves, iw( ptlust(step(inode)) + 6 +keep(ixsz)),
1763 & iw(ptrcol), ncbson,
1764 & comm, ierr, pdest1, nslson, slavef,
1765 & keep,keep8, step, n,
1766 & istep_to_iniv2, tab_pos_in_pere
1767 & )
1768 IF (ierr.EQ.-1) THEN
1769 blocking = .false.
1770 set_irecv = .true.
1771 message_received = .false.
1773 & blocking, set_irecv, message_received,
1774 & mpi_any_source, mpi_any_tag,
1775 & status, bufr, lbufr, lbufr_bytes,
1776 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1777 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1778 & ptlust, ptrfac,
1779 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1780 & info(2), comm,
1781 & perm,
1782 & ipool, lpool, leaf, nbfin,
myid, slavef,
1783 & root,opassw, opeliw, itloc, rhs_mumps, fils, dad,
1784 & ptrarw, ptraiw,
1785 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1786 & nelt+1, nelt, frt_ptr, frt_elt,
1787 & istep_to_iniv2, tab_pos_in_pere, .true.
1788 & , lrgroups
1789 & )
1790 IF ( info(1) .LT. 0 ) GOTO 500
1791 ENDIF
1792 ENDDO
1793 IF (ierr .EQ. -2) GOTO 290
1794 IF (ierr .EQ. -3) GOTO 295
1795 ENDIF
1796 ELSE
1797 IF (pimaster(step(ison)).GT.0) THEN
1798 ierr = -1
1799 DO WHILE (ierr.EQ.-1)
1800 ptrcol = pimaster(step(ison)) + hs + nrows + npivs + nelim
1801 pdest = pimaster(step(ison)) + 6 + keep(ixsz)
1803 & inode, nfront, nass1, nfs4father,
1805 & nslaves, iw(ptlust(step(inode))+6+keep(ixsz)),
1806 & iw(ptrcol), ncbson,
1807 & comm, ierr, iw(pdest), nslson, slavef,
1808 & keep,keep8, step, n,
1809 & istep_to_iniv2, tab_pos_in_pere
1810 & )
1811 IF (ierr.EQ.-1) THEN
1812 blocking = .false.
1813 set_irecv = .true.
1814 message_received = .false.
1816 & blocking, set_irecv, message_received,
1817 & mpi_any_source, mpi_any_tag,
1818 & status, bufr, lbufr,
1819 & lbufr_bytes,
1820 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1821 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1822 & ptlust, ptrfac,
1823 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1824 & info(2), comm,
1825 & perm,
1826 & ipool, lpool, leaf, nbfin,
myid, slavef,
1827 & root,opassw, opeliw, itloc, rhs_mumps,
1828 & fils, dad, ptrarw, ptraiw,
1829 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1830 & nelt+1, nelt, frt_ptr, frt_elt,
1831 & istep_to_iniv2, tab_pos_in_pere, .true.
1832 & , lrgroups
1833 & )
1834 IF ( info(1) .LT. 0 ) GOTO 500
1835 ENDIF
1836 ENDDO
1837 IF (ierr .EQ. -2) GOTO 290
1838 IF (ierr .EQ. -3) GOTO 295
1839 ENDIF
1840 DO islave = 0, nslson-1
1841 IF (iw(pdest+islave).EQ.
myid)
THEN
1843 & keep,keep8, ison, step, n, slavef,
1844 & istep_to_iniv2, tab_pos_in_pere,
1845 & islave+1, ncbson,
1846 & nslson,
1847 & trow_size, first_index )
1848 shift_index = first_index - 1
1849 indx = ptrcol + shift_index
1851 & bufr, lbufr, lbufr_bytes,
1852 & inode, ison, nslaves,
1853 & iw( ptlust(step(inode))+6+keep(ixsz)),
1854 & nfront, nass1,nfs4father,
1855 & trow_size, iw( indx ),
1856 & procnode_steps,
1857 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
1858 & lrlus, n, iw, liw, a, la,
1859 & ptrist, ptlust, ptrfac, ptrast, step,
1860 & pimaster, pamaster, nstk_s,
comp, info(1), info(2),
1861 &
myid, comm, perm, ipool, lpool, leaf,
1862 & nbfin, icntl, keep,keep8,dkeep, root,
1863 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
1864 & ptrarw, ptraiw, intarr, dblarr, nd, frere,
1865 & nelt+1, nelt, frt_ptr, frt_elt,
1866 &
1867 & istep_to_iniv2, tab_pos_in_pere, lrgroups)
1868 IF ( info(1) .LT. 0 ) GOTO 500
1869 EXIT
1870 ENDIF
1871 ENDDO
1872 ENDIF
1873 ison = frere(step(ison))
1874 ENDDO
1875 GOTO 500
1876 250 CONTINUE
1877 IF (info(1).EQ.-13) THEN
1878 IF (lpok) THEN
1879 WRITE( lp, * )
1880 &' FAILURE IN INTEGER DYNAMIC ALLOCATION DURING
1881 & SMUMPS_FAC_ASM_NIV2_ELT'
1882 ENDIF
1883 info(2) = numstk + 1
1884 ENDIF
1885 GOTO 490
1886 245 CONTINUE
1887 IF (lpok) THEN
1888 WRITE( lp, * ) ' FAILURE ALLOCATING COPY_CAND',
1889 & ' DURING SMUMPS_FAC_ASM_NIV2_ELT'
1890 ENDIF
1891 info(1) = -13
1892 info(2) = slavef+1
1893 GOTO 490
1894 265 CONTINUE
1895 IF (lpok) THEN
1896 WRITE( lp, * ) ' FAILURE ALLOCATING TMP_SLAVES_LIST',
1897 & ' DURING SMUMPS_FAC_ASM_NIV2_ELT'
1898 ENDIF
1899 info(1) = -13
1900 info(2) = size_tmp_slaves_list
1901 GOTO 490
1902 270 CONTINUE
1903 info(1) = -8
1904 info(2) = lreq
1905 IF (lpok) THEN
1906 WRITE( lp, * )
1907 & ' FAILURE IN INTEGER ALLOCATION DURING SMUMPS_ASM_NIV2_ELT'
1908 ENDIF
1909 GOTO 490
1910 275 CONTINUE
1911 IF (lpok) THEN
1912 WRITE( lp, * ) ' FAILURE ALLOCATING SONROWS_PER_ROW',
1913 & ' DURING SMUMPS_ASM_NIV2_ELT'
1914 ENDIF
1915 info(1) = -13
1916 info(2) = nfront-nass1
1917 GOTO 490
1918 290 CONTINUE
1919 IF (lpok) THEN
1920 WRITE( lp, * )
1921 &' FAILURE, SEND BUFFER TOO SMALL (1) DURING SMUMPS_ASM_NIV2_ELT'
1922 ENDIF
1923 info(1) = -17
1924 lreq = ncbson + 6 + nslson+keep(ixsz)
1925 info(2) = lreq * keep( 34 )
1926 GOTO 490
1927 295 CONTINUE
1928 IF (lpok) THEN
1929 WRITE( lp, * )
1930 &' FAILURE, RECV BUFFER TOO SMALL (1) DURING SMUMPS_ASM_NIV2_ELT'
1931 ENDIF
1932 info(1) = -20
1933 lreq = ncbson + 6 + nslson+keep(ixsz)
1934 info(2) = lreq * keep( 34 )
1935 GOTO 490
1936 300 CONTINUE
1937 IF (lpok) THEN
1938 WRITE( lp, * )
1939 &' FAILURE, SEND BUFFER TOO SMALL (2)',
1940 &' DURING SMUMPS_FAC_ASM_NIV2_ELT'
1941 ENDIF
1942 info(1) = -17
1943 lreq = nblig + nbcol + 4 + keep(ixsz)
1944 info(2) = lreq * keep( 34 )
1945 GOTO 490
1946 305 CONTINUE
1947 IF (lpok) THEN
1948 WRITE( lp, * )
1949 &' FAILURE, RECV BUFFER TOO SMALL (2)',
1950 &' DURING SMUMPS_FAC_ASM_NIV2_ELT'
1951 ENDIF
1952 info(1) = -20
1953 lreq = nblig + nbcol + 4 + keep(ixsz)
1954 info(2) = lreq * keep( 34 )
1955 GOTO 490
1957 500 CONTINUE
1958 RETURN
subroutine, public smumps_buf_send_desc_bande(inode, nbprocfils, nlig, ilig, ncol, icol, nass, nslaves_hdr, list_slaves, nslaves, estim_nfs4father_atson, dest, ibc_source, nfront, comm, keep, ierr, lrstatus)
logical function smumps_dm_is_dynamic(ixxd)
subroutine, public smumps_split_propagate_parti(inode, typesplit, ifson, cand, size_cand, son_slave_list, nslson, step, n, slavef, procnode_steps, keep, dad, fils, icntl, istep_to_iniv2, iniv2, tab_pos_in_pere, nslaves_node, slaves_list, size_slaves_list)
subroutine, public smumps_split_post_partition(inode, step, n, slavef, nbsplit, ncb, procnode_steps, keep, dad, fils, icntl, tab_pos, nslaves_node)
subroutine, public smumps_load_master_2_all(myid, slavef, comm, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
subroutine, public smumps_load_set_partition(ncbson_max, slavef, keep, keep8, icntl, cand_of_node, mem_distrib, ncb, nfront, nslaves_node, tab_pos, slaves_list, size_slaves_list, inode)
subroutine, public smumps_load_send_md_info(slavef, nmb_of_cand, list_of_cand, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
subroutine, public smumps_split_prep_partition(inode, step, n, slavef, procnode_steps, keep, dad, fils, cand, icntl, copy_cand, nbsplit, numorg_split, slaves_list, size_slaves_list)
subroutine smumps_maplig_fils_niv1(comm_load, ass_irecv, bufr, lbufr, lbufr_bytes inode_pere, ison, nslaves_pere, list_slaves_pere, nfront_pere, nass_pere, nfs4father, lmap, trow, procnode_steps, slavef, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, myid, comm, perm, ipool, lpool, leaf, nbfin, icntl, keep, keep8, dkeep, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)