874
885 IMPLICIT NONE
886 TYPE (ZMUMPS_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 DOUBLE PRECISION 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 COMPLEX(kind=8), 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 COMPLEX(kind=8) :: 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 COMPLEX(kind=8) 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 COMPLEX(kind=8), 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 COMPLEX(kind=8) ZERO
986 DOUBLE PRECISION RZERO
987 parameter( rzero = 0.0d0 )
988 parameter( zero = (0.0d0,0.0d0) )
989 logical :: force_cand
990 INTEGER ETATASS
991 INTEGER(8) :: APOSMAX
992 DOUBLE PRECISION 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 ZMUMPS_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))=
cmplx(
1572 &
max(dble(a(aposmax+int(j-1,8))),
1573 & abs(dblarr(ainput8))),
1574 & kind=kind(a)
1575 & )
1576 ENDIF
1577 ainput8=ainput8+1_8
1578 ENDDO
1579 ENDIF
1580 aii8 = aii8 + j28 - ii8 + 1_8
1581 cycle
1582 ELSE
1583 IF (keep(219).NE.0) THEN
1584 maxarr = rzero
1585 ENDIF
1586 DO jj8=ii8,j28
1587 j = intarr(jj8)
1588 IF ( j .LE. nass1) THEN
1589 IF (i.LT.j) THEN
1590 apos2 = ict12 + int(j,8)*ldafs8
1591 ELSE
1592 apos2 = ict21 + int(j,8)
1593 ENDIF
1594 a(apos2) = a(apos2) + dblarr(aii8)
1595 ELSE IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1596 maxarr =
max(maxarr,abs(dblarr(aii8)))
1597 ENDIF
1598 aii8 = aii8 + 1_8
1599 END DO
1600 IF(keep(219).NE.0.AND.keep(50) .EQ. 2) THEN
1601 a(aposmax+int(i-1,8)) =
cmplx(
1602 &
max( maxarr, dble(a(aposmax+int(i-1,8)))),
1603 & kind=kind(a)
1604 & )
1605 ENDIF
1606 ENDIF
1607 END IF
1608 END DO
1609 END DO
1610 IF (keep(253).GT.0) THEN
1611 poselt = ptrast(step(inode))
1612 ibrot = inode
1613 ijrow = pos_first_numorg
1614 DO iorg = 1, numorg
1615 IF (keep(50).EQ.0) THEN
1616 DO j253 = 1, keep(253)
1617 apos = poselt +
1618 & int(ijrow-1,8) * int(ldafs,8) +
1619 & int(ldafs-keep(253)+j253-1,8)
1620 a(apos) = a(apos) + rhs_mumps( (j253-1)*keep(254)+ibrot )
1621 ENDDO
1622 ENDIF
1623 ibrot = fils(ibrot)
1624 ijrow = ijrow+1
1625 ENDDO
1626 ENDIF
1627 ptrcol = ioldps + hf + nfront
1628 ptrrow = ioldps + hf + nass1
1629 pdest = ioldps + 6 + keep(ixsz)
1631 DO islave = 1, nslaves
1633 & keep,keep8, inode, step, n, slavef,
1634 & istep_to_iniv2, tab_pos_in_pere,
1635 & islave, ncb,
1636 & nslaves,
1637 & nblig, first_index )
1638 shift_index = first_index - 1
1639 ierr = -1
1640 DO WHILE (ierr .EQ.-1)
1641 IF ( keep(50) .eq. 0 ) THEN
1642 nbcol = nfront
1644 & sum(sonrows_per_row(first_index:first_index+nblig-1)),
1645 & nblig, iw(ptrrow), nbcol, iw(ptrcol), nass1,
1646 & izero, idummy,
1647 & nslaves,
1648 & estim_nfs4father_atson,
1649 & iw(pdest), ibc_source, nfront, comm, keep, ierr
1650 & , iw(ioldps+xxlr)
1651 & )
1652 ELSE
1653 nbcol = nass1+shift_index+nblig
1655 & sum(sonrows_per_row(first_index:first_index+nblig-1)),
1656 & nblig, iw(ptrrow), nbcol, iw(ptrcol), nass1,
1657 & nslaves-islave,
1658 & iw( ptlust(step(inode))+6+keep(ixsz)+islave),
1659 & nslaves,
1660 & estim_nfs4father_atson,
1661 & iw(pdest), ibc_source, nfront, comm, keep, ierr
1662 & , iw(ioldps+xxlr)
1663 & )
1664 ENDIF
1665 IF (ierr.EQ.-1) THEN
1666 blocking = .false.
1667 set_irecv = .true.
1668 message_received = .false.
1670 & blocking, set_irecv, message_received,
1671 & mpi_any_source, mpi_any_tag,
1672 & status, bufr, lbufr,
1673 & lbufr_bytes,
1674 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1675 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1676 & ptlust, ptrfac,
1677 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1678 & info(2), comm,
1679 & perm,
1680 & ipool, lpool, leaf, nbfin,
myid, slavef,
1681 & root, opassw, opeliw, itloc, rhs_mumps,
1682 & fils, dad, ptrarw, ptraiw,
1683 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1684 & nelt+1, nelt, frt_ptr, frt_elt,
1685 & istep_to_iniv2, tab_pos_in_pere, .true.
1686 & , lrgroups
1687 & )
1688 IF ( info(1) .LT. 0 ) GOTO 500
1689 IF (message_received) THEN
1690 ioldps = ptlust(step(inode))
1691 ptrcol = ioldps + hf + nfront
1692 ptrrow = ioldps + hf + nass1 + shift_index
1693 ENDIF
1694 ENDIF
1695 ENDDO
1696 IF (ierr .EQ. -2) GOTO 300
1697 IF (ierr .EQ. -3) GOTO 305
1698 ptrrow = ptrrow + nblig
1699 pdest = pdest + 1
1700 ENDDO
1701 DEALLOCATE(sonrows_per_row)
1702 IF (numstk.EQ.0) GOTO 500
1703 ison = ifson
1704 DO iell = 1, numstk
1705 istchk = pimaster(step(ison))
1706 nelim = iw(istchk + 1 + keep(ixsz))
1707 lstk = iw(istchk + keep(ixsz))
1708 npivs = iw(istchk + 3 + keep(ixsz))
1709 IF ( npivs .LT. 0 ) npivs = 0
1710 nslson = iw(istchk + 5 + keep(ixsz))
1711 hs = 6 + nslson + keep(ixsz)
1712 ncols = npivs + lstk
1713 same_proc = (istchk.LT.iwpos)
1714 IF (.NOT.same_proc) THEN
1715 nrows = iw(istchk + 2 + keep(ixsz) )
1716 ELSE
1717 nrows = ncols
1718 ENDIF
1719 pdest = istchk + 6 + keep(ixsz)
1720 ncbson = lstk - nelim
1721 ptrcol = istchk + hs + nrows + npivs + nelim
1722 IF (keep(219).NE.0.AND.keep(50).EQ.2) THEN
1723 nfs4father = ncbson
1724 DO i=0,ncbson-1
1725 IF(iw(ptrcol+i) .GT. nass1) THEN
1726 nfs4father = i
1727 EXIT
1728 ENDIF
1729 ENDDO
1730 nfs4father = nfs4father + nelim
1731 ELSE
1732 nfs4father = 0
1733 ENDIF
1734 IF (nslson.EQ.0) THEN
1735 nslson = 1
1737 & keep(199))
1738 IF (pdest1(1).EQ.
myid)
THEN
1740 & bufr, lbufr, lbufr_bytes,
1741 & inode, ison, nslaves,
1742 & iw( ptlust(step(inode)) + 6 +keep(ixsz)),
1743 & nfront, nass1, nfs4father, ncbson, iw( ptrcol ),
1744 & procnode_steps,
1745 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
1746 & lrlus, n, iw, liw, a, la,
1747 & ptrist, ptlust, ptrfac, ptrast, step,
1748 & pimaster, pamaster, nstk_s,
comp,
1749 & info(1), info(2),
myid, comm, perm,
1750 & ipool, lpool, leaf,
1751 & nbfin, icntl, keep, keep8, dkeep, root,
1752 & opassw, opeliw,
1753 & itloc, rhs_mumps, fils, dad,
1754 & ptrarw, ptraiw, intarr, dblarr, nd, frere, nelt+1, nelt,
1755 & frt_ptr, frt_elt,
1756 & istep_to_iniv2, tab_pos_in_pere,
1757 & lrgroups )
1758 IF ( info(1) .LT. 0 ) GOTO 500
1759 ELSE
1760 ierr = -1
1761 DO WHILE (ierr.EQ.-1)
1762 ptrcol = pimaster(step(ison)) + hs + nrows + npivs + nelim
1764 & inode, nfront,nass1,nfs4father,
1766 & nslaves, iw( ptlust(step(inode)) + 6 +keep(ixsz)),
1767 & iw(ptrcol), ncbson,
1768 & comm, ierr, pdest1, nslson, slavef,
1769 & keep,keep8, step, n,
1770 & istep_to_iniv2, tab_pos_in_pere
1771 & )
1772 IF (ierr.EQ.-1) THEN
1773 blocking = .false.
1774 set_irecv = .true.
1775 message_received = .false.
1777 & blocking, set_irecv, message_received,
1778 & mpi_any_source, mpi_any_tag,
1779 & status, bufr, lbufr, lbufr_bytes,
1780 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1781 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1782 & ptlust, ptrfac,
1783 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1784 & info(2), comm,
1785 & perm,
1786 & ipool, lpool, leaf, nbfin,
myid, slavef,
1787 & root,opassw, opeliw, itloc, rhs_mumps, fils, dad,
1788 & ptrarw, ptraiw,
1789 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1790 & nelt+1, nelt, frt_ptr, frt_elt,
1791 & istep_to_iniv2, tab_pos_in_pere, .true.
1792 & , lrgroups
1793 & )
1794 IF ( info(1) .LT. 0 ) GOTO 500
1795 ENDIF
1796 ENDDO
1797 IF (ierr .EQ. -2) GOTO 290
1798 IF (ierr .EQ. -3) GOTO 295
1799 ENDIF
1800 ELSE
1801 IF (pimaster(step(ison)).GT.0) THEN
1802 ierr = -1
1803 DO WHILE (ierr.EQ.-1)
1804 ptrcol = pimaster(step(ison)) + hs + nrows + npivs + nelim
1805 pdest = pimaster(step(ison)) + 6 + keep(ixsz)
1807 & inode, nfront, nass1, nfs4father,
1809 & nslaves, iw(ptlust(step(inode))+6+keep(ixsz)),
1810 & iw(ptrcol), ncbson,
1811 & comm, ierr, iw(pdest), nslson, slavef,
1812 & keep,keep8, step, n,
1813 & istep_to_iniv2, tab_pos_in_pere
1814 & )
1815 IF (ierr.EQ.-1) THEN
1816 blocking = .false.
1817 set_irecv = .true.
1818 message_received = .false.
1820 & blocking, set_irecv, message_received,
1821 & mpi_any_source, mpi_any_tag,
1822 & status, bufr, lbufr,
1823 & lbufr_bytes,
1824 & procnode_steps, posfac, iwpos, iwposcb, iptrlu,
1825 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
1826 & ptlust, ptrfac,
1827 & ptrast, step, pimaster, pamaster, nstk_s,
comp, info(1),
1828 & info(2), comm,
1829 & perm,
1830 & ipool, lpool, leaf, nbfin,
myid, slavef,
1831 & root,opassw, opeliw, itloc, rhs_mumps,
1832 & fils, dad, ptrarw, ptraiw,
1833 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
1834 & nelt+1, nelt, frt_ptr, frt_elt,
1835 & istep_to_iniv2, tab_pos_in_pere, .true.
1836 & , lrgroups
1837 & )
1838 IF ( info(1) .LT. 0 ) GOTO 500
1839 ENDIF
1840 ENDDO
1841 IF (ierr .EQ. -2) GOTO 290
1842 IF (ierr .EQ. -3) GOTO 295
1843 ENDIF
1844 DO islave = 0, nslson-1
1845 IF (iw(pdest+islave).EQ.
myid)
THEN
1847 & keep,keep8, ison, step, n, slavef,
1848 & istep_to_iniv2, tab_pos_in_pere,
1849 & islave+1, ncbson,
1850 & nslson,
1851 & trow_size, first_index )
1852 shift_index = first_index - 1
1853 indx = ptrcol + shift_index
1855 & bufr, lbufr, lbufr_bytes,
1856 & inode, ison, nslaves,
1857 & iw( ptlust(step(inode))+6+keep(ixsz)),
1858 & nfront, nass1,nfs4father,
1859 & trow_size, iw( indx ),
1860 & procnode_steps,
1861 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
1862 & lrlus, n, iw, liw, a, la,
1863 & ptrist, ptlust, ptrfac, ptrast, step,
1864 & pimaster, pamaster, nstk_s,
comp, info(1), info(2),
1865 &
myid, comm, perm, ipool, lpool, leaf,
1866 & nbfin, icntl, keep,keep8,dkeep, root,
1867 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
1868 & ptrarw, ptraiw, intarr, dblarr, nd, frere,
1869 & nelt+1, nelt, frt_ptr, frt_elt,
1870 &
1871 & istep_to_iniv2, tab_pos_in_pere, lrgroups)
1872 IF ( info(1) .LT. 0 ) GOTO 500
1873 EXIT
1874 ENDIF
1875 ENDDO
1876 ENDIF
1877 ison = frere(step(ison))
1878 ENDDO
1879 GOTO 500
1880 250 CONTINUE
1881 IF (info(1).EQ.-13) THEN
1882 IF (lpok) THEN
1883 WRITE( lp, * )
1884 &' FAILURE IN INTEGER DYNAMIC ALLOCATION DURING
1885 & ZMUMPS_FAC_ASM_NIV2_ELT'
1886 ENDIF
1887 info(2) = numstk + 1
1888 ENDIF
1889 GOTO 490
1890 245 CONTINUE
1891 IF (lpok) THEN
1892 WRITE( lp, * ) ' FAILURE ALLOCATING COPY_CAND',
1893 & ' DURING ZMUMPS_FAC_ASM_NIV2_ELT'
1894 ENDIF
1895 info(1) = -13
1896 info(2) = slavef+1
1897 GOTO 490
1898 265 CONTINUE
1899 IF (lpok) THEN
1900 WRITE( lp, * ) ' FAILURE ALLOCATING TMP_SLAVES_LIST',
1901 & ' DURING ZMUMPS_FAC_ASM_NIV2_ELT'
1902 ENDIF
1903 info(1) = -13
1904 info(2) = size_tmp_slaves_list
1905 GOTO 490
1906 270 CONTINUE
1907 info(1) = -8
1908 info(2) = lreq
1909 IF (lpok) THEN
1910 WRITE( lp, * )
1911 & ' FAILURE IN INTEGER ALLOCATION DURING ZMUMPS_ASM_NIV2_ELT'
1912 ENDIF
1913 GOTO 490
1914 275 CONTINUE
1915 IF (lpok) THEN
1916 WRITE( lp, * ) ' FAILURE ALLOCATING SONROWS_PER_ROW',
1917 & ' DURING ZMUMPS_ASM_NIV2_ELT'
1918 ENDIF
1919 info(1) = -13
1920 info(2) = nfront-nass1
1921 GOTO 490
1922 290 CONTINUE
1923 IF (lpok) THEN
1924 WRITE( lp, * )
1925 &' FAILURE, SEND BUFFER TOO SMALL (1) DURING ZMUMPS_ASM_NIV2_ELT'
1926 ENDIF
1927 info(1) = -17
1928 lreq = ncbson + 6 + nslson+keep(ixsz)
1929 info(2) = lreq * keep( 34 )
1930 GOTO 490
1931 295 CONTINUE
1932 IF (lpok) THEN
1933 WRITE( lp, * )
1934 &' FAILURE, RECV BUFFER TOO SMALL (1) DURING ZMUMPS_ASM_NIV2_ELT'
1935 ENDIF
1936 info(1) = -20
1937 lreq = ncbson + 6 + nslson+keep(ixsz)
1938 info(2) = lreq * keep( 34 )
1939 GOTO 490
1940 300 CONTINUE
1941 IF (lpok) THEN
1942 WRITE( lp, * )
1943 &' FAILURE, SEND BUFFER TOO SMALL (2)',
1944 &' DURING ZMUMPS_FAC_ASM_NIV2_ELT'
1945 ENDIF
1946 info(1) = -17
1947 lreq = nblig + nbcol + 4 + keep(ixsz)
1948 info(2) = lreq * keep( 34 )
1949 GOTO 490
1950 305 CONTINUE
1951 IF (lpok) THEN
1952 WRITE( lp, * )
1953 &' FAILURE, RECV BUFFER TOO SMALL (2)',
1954 &' DURING ZMUMPS_FAC_ASM_NIV2_ELT'
1955 ENDIF
1956 info(1) = -20
1957 lreq = nblig + nbcol + 4 + keep(ixsz)
1958 info(2) = lreq * keep( 34 )
1959 GOTO 490
1961 500 CONTINUE
1962 RETURN
subroutine, public zmumps_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 zmumps_dm_is_dynamic(ixxd)
subroutine, public zmumps_load_send_md_info(slavef, nmb_of_cand, list_of_cand, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
subroutine, public zmumps_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 zmumps_load_master_2_all(myid, slavef, comm, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
subroutine, public zmumps_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 zmumps_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, public zmumps_split_post_partition(inode, step, n, slavef, nbsplit, ncb, procnode_steps, keep, dad, fils, icntl, tab_pos, nslaves_node)
subroutine zmumps_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)