15 & N, INODE, TYPE, TYPEF,
17 & IFLAG, IERROR, OPELIW, NELVAW, NMAXNPIV,
20 & STEP, PIMASTER, PAMASTER, NE,
21 & POSFAC, LRLU, LRLUS, LRLUSM, IPTRLU, ICNTL, KEEP,KEEP8,DKEEP,
22 & COMP, IWPOS, IWPOSCB, PROCNODE_STEPS, SLAVEF,
23 & FPERE, COMM, MYID, IPOOL, LPOOL, LEAF, NSTK_S,
24 & PERM, BUFR, LBUFR, LBUFR_BYTES, NBFIN, root,
25 & OPASSW, ITLOC, RHS_MUMPS,
26 & FILS, DAD, PTRARW, PTRAIW, INTARR, DBLARR,
27 & ND, FRERE, LPTRAR, NELT, FRTPTR, FRTELT,
28 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
36 TYPE (ZMUMPS_ROOT_STRUC) :: root
37 INTEGER COMM_LOAD, ASS_IRECV
38 INTEGER COMM, MYID,
TYPE, TYPEF
39 INTEGER N, LIW, INODE,IFLAG,IERROR
40 INTEGER ICNTL(60), KEEP(500)
41 DOUBLE PRECISION DKEEP(230)
43 INTEGER(8) :: LA, POSFAC, LRLU, LRLUS, LRLUSM, IPTRLU
44 INTEGER IWPOSCB, IWPOS,
45 & FPERE, SLAVEF, NELVAW, NMAXNPIV
46 INTEGER IW(LIW),PROCNODE_STEPS(KEEP(28))
47 INTEGER(8) :: PTRAST (KEEP(28))
48 INTEGER(8) :: PTRFAC (KEEP(28))
49 INTEGER(8) :: PAMASTER(KEEP(28))
50 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
51 INTEGER STEP(N), PIMASTER(KEEP(28)), NE(KEEP(28))
53 INTEGER,
intent(in) :: LRGROUPS(N)
54 DOUBLE PRECISION OPASSW, OPELIW
55 COMPLEX(kind=8) DBLARR(KEEP8(26))
56 INTEGER INTARR(KEEP8(27))
57 INTEGER ITLOC( N + KEEP(253) ), FILS( N ), DAD( KEEP(28) ),
58 & nd( keep(28) ), frere( keep(28) )
59 COMPLEX(kind=8) :: RHS_MUMPS(KEEP(255))
60 INTEGER ISTEP_TO_INIV2(KEEP(71)),
61 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
63 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
64 INTEGER(8),
INTENT(IN) :: PTRAIW( LPTRAR ), PTRARW( LPTRAR )
65 INTEGER LPOOL, LEAF, COMP
66 INTEGER IPOOL( LPOOL )
67 INTEGER NSTK_S( KEEP(28) )
69 INTEGER LBUFR, LBUFR_BYTES
72 INTEGER NFRONT_ESTIM,NELIM_ESTIM
73 DOUBLE PRECISION FLOP_ESTIM_ACC
74 INTEGER MUMPS_PROCNODE
75 EXTERNAL MUMPS_PROCNODE
77 INCLUDE 'mumps_tags.h
'
78 INTEGER :: STATUS(MPI_STATUS_SIZE)
80 INTEGER NBROWS_ALREADY_SENT
81 INTEGER(8) :: POSELT, OPSFAC
82 INTEGER(8) :: IOLD, INEW, FACTOR_POS
84 & H_INODE, IERR, NBCOL, NBROW, NBROW_SEND,
86 INTEGER NBROW_STACK, NBROW_INDICES, NBCOL_STACK
87 INTEGER NCBROW_ALREADY_MOVED, NCBROW_PREVIOUSLY_MOVED,
89 INTEGER(8) :: LAST_ALLOWED_POS
90 INTEGER(8) :: LREQCB, MIN_SPACE_IN_PLACE
91 INTEGER(8) :: SHIFT_VAL_SON
92 INTEGER SHIFT_LIST_ROW_SON,
94 & LIST_ROW_SON, LIST_COL_SON, LIST_SLAVES
95 INTEGER IOLDPS,NFRONT,NPIV,NASS,IOLDP1,PTROWEND,
98 INTEGER MSGDEST, MSGTAG, CHK_LOAD
99 INCLUDE 'mumps_headers.h
'
100 LOGICAL MUST_COMPACT_FACTORS
101 LOGICAL PACKED_CB, COMPRESS_PANEL, COMPRESS_CB, LR_SOLVE
103 INTEGER(8) :: SIZE_INPLACE, FAC_ENTRIES, COUNT_EXTRA_IP_COPIES
105 DOUBLE PRECISION FLOP1, FLOP1_EFFECTIVE
106 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
107 LOGICAL SSARBR, SSARBR_ROOT, MUMPS_INSSARBR,
108 & MUMPS_IN_OR_ROOT_SSARBR, MUMPS_ROOTSSARBR
109 EXTERNAL MUMPS_INSSARBR, MUMPS_IN_OR_ROOT_SSARBR,
112.LE.
IF (ICNTL(4) 0) LP = -1
114 MIN_SPACE_IN_PLACE = 0_8
115 IOLDPS = PTLUST_S(STEP(INODE))
116 INTSIZ = IW(IOLDPS+XXI)
117 NFRONT = IW(IOLDPS+KEEP(IXSZ))
118 NPIV = IW(IOLDPS + 1+KEEP(IXSZ))
119 NMAXNPIV = max(NPIV, NMAXNPIV)
120 NASS = iabs(IW(IOLDPS + 2+KEEP(IXSZ)))
121 NSLAVES= IW(IOLDPS+5+KEEP(IXSZ))
122 H_INODE= 6 + NSLAVES + KEEP(IXSZ)
123 LCONT = NFRONT - NPIV
125 SSARBR = MUMPS_INSSARBR(PROCNODE_STEPS(STEP(INODE)),KEEP(199))
126 SSARBR_ROOT = MUMPS_IN_OR_ROOT_SSARBR
127 & (PROCNODE_STEPS(STEP(INODE)),KEEP(199))
130.EQ.
PACKED_CB = ((KEEP(215)0)
131.AND..NE.
& (KEEP(50)0)
136.GE.
COMPRESS_PANEL = (IW(IOLDPS+XXLR)2)
137.EQ..OR..EQ.
COMPRESS_CB = (IW(IOLDPS+XXLR)1IW(IOLDPS+XXLR)3)
138.EQ.
LR_SOLVE = (KEEP(486)2)
139 MUST_COMPACT_FACTORS = .TRUE.
140.EQ..OR..EQ.
IF (KEEP(201)1 KEEP(201)-1
141.OR..AND.
& (COMPRESS_PANELLR_SOLVE)
143 MUST_COMPACT_FACTORS = .FALSE.
145.EQ..AND..NE.
IF ((FPERE0)(NASSNPIV)) THEN
150.EQ.
IF (TYPE2) NBROW = NASS - NPIV
151.NE..AND..EQ.
IF ((KEEP(50)0)(TYPE2)) THEN
158.EQ.
IF (TYPEF2) NBROW_SEND = NELIM
159 POSELT = PTRAST(STEP(INODE))
160.ne.
IF (POSELT PTRFAC(STEP(INODE))) THEN
161 WRITE(*,*) MYID,":Error 1 in ZMUMPS_FAC_STACK:"
162 WRITE(*,*) "INODE, PTRAST, PTRFAC =",
163 & INODE, PTRAST(STEP(INODE)), PTRFAC(STEP(INODE))
164 WRITE(*,*) "PACKED_CB, NFRONT, NPIV, NASS, NSLAVES",
165 & PACKED_CB, NFRONT, NPIV, NASS, NSLAVES
166 WRITE(*,*) "TYPE, TYPEF, FPERE ",
170 NELVAW = NELVAW + NASS - NPIV
171.eq.
IF (KEEP(50) 0) THEN
172 FAC_ENTRIES = int(NPIV,8) * int(NFRONT,8)
174 FAC_ENTRIES = ( int(NPIV,8)*int(NPIV+1,8) )/ 2_8
176 FAC_ENTRIES = FAC_ENTRIES + int(NBROW,8) * int(NPIV,8)
177.EQ.
IF ( KEEP(405) 0 ) THEN
178 KEEP8(10) = KEEP8(10) + FAC_ENTRIES
179 KEEP(429) = KEEP(429) - 1
182 KEEP8(10) = KEEP8(10) + FAC_ENTRIES
185 CALL MUMPS_GET_FLOPS_COST( NFRONT, NPIV, NASS,
186 & KEEP(50), TYPE,FLOP1 )
187.NOT..and.
IF ( ( SSARBR_ROOT) TYPE == 1) THEN
188 IF (NE(STEP(INODE))==0) THEN
193 CALL ZMUMPS_LOAD_UPDATE(CHK_LOAD, .FALSE., -FLOP1,
196 FLOP1_EFFECTIVE = FLOP1
197 OPELIW = OPELIW + FLOP1
198.NE.
IF ( NPIV NASS ) THEN
199 CALL MUMPS_GET_FLOPS_COST( NFRONT, NASS, NASS,
200 & KEEP(50), TYPE,FLOP1 )
201.NOT.
IF ( SSARBR_ROOT ) THEN
202 IF (NE(STEP(INODE))==0) THEN
207 CALL ZMUMPS_LOAD_UPDATE(CHK_LOAD, .FALSE.,
208 & FLOP1_EFFECTIVE-FLOP1,
212 IF ( SSARBR_ROOT ) THEN
213 NFRONT_ESTIM=ND(STEP(INODE)) + KEEP(253)
214 NELIM_ESTIM=NASS-(NFRONT-NFRONT_ESTIM)
215 CALL MUMPS_GET_FLOPS_COST(NFRONT_ESTIM,NELIM_ESTIM,NELIM_ESTIM,
219.GT.
IF (KEEP(400)0) THEN
220 FLOP_ESTIM_ACC = FLOP_ESTIM_ACC + FLOP1
222 IF (SSARBR_ROOT) THEN
223 CALL ZMUMPS_LOAD_UPDATE(0,.FALSE.,FLOP1,KEEP,KEEP8)
225 CALL ZMUMPS_LOAD_UPDATE(2,.FALSE.,FLOP1,KEEP,KEEP8)
227.EQ.
IF ( FPERE 0 ) THEN
228.NE..AND..NE.
IF ( KEEP(253) 0 KEEP(201)-1
229.AND..NE.
& KEEP(201)1
230.AND..NOT..OR..NOT.
& (COMPRESS_PANELLR_SOLVE)
232 MUST_COMPACT_FACTORS = .TRUE.
234.NE..AND..GT.
ELSE IF ( KEEP(50) 0 KEEP(459)1) THEN
235 MUST_COMPACT_FACTORS = .TRUE.
238 MUST_COMPACT_FACTORS = .FALSE.
242.EQ.
IF ( FPEREKEEP(38) ) THEN
244 SHIFT_LIST_ROW_SON = H_INODE + NASS
245 SHIFT_LIST_COL_SON = H_INODE + NFRONT + NASS
246 SHIFT_VAL_SON = int(NASS,8)*int(NFRONT+1,8)
248 CALL ZMUMPS_BUILD_AND_SEND_CB_ROOT(
249 & COMM_LOAD, ASS_IRECV,
252 & root, NCB, NCB, SHIFT_LIST_ROW_SON,
253 & SHIFT_LIST_COL_SON , SHIFT_VAL_SON, NFRONT,
254 & ROOT_CONT_STATIC, MYID, COMM,
256 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
257 & IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, IW, LIW, A, LA,
258 & PTRIST, PTLUST_S, PTRFAC,
259 & PTRAST, STEP, PIMASTER, PAMASTER,
260 & NSTK_S, COMP, IFLAG, IERROR, PERM,
261 & IPOOL, LPOOL, LEAF, NBFIN, SLAVEF,
262 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD, PTRARW, PTRAIW,
263 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,.FALSE., ND, FRERE,
264 & LPTRAR, NELT, FRTPTR, FRTELT,
265 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
268 IF (IFLAG < 0 ) GOTO 500
270 MSGDEST= MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),KEEP(199))
271 IOLDPS = PTLUST_S(STEP(INODE))
272 LIST_ROW_SON = IOLDPS + H_INODE + NPIV
273 LIST_COL_SON = IOLDPS + H_INODE + NFRONT + NPIV
274 LIST_SLAVES = IOLDPS + 6 + KEEP(IXSZ)
275.EQ.
IF (MSGDESTMYID) THEN
276 CALL ZMUMPS_PROCESS_RTNELIND( root,
277 & INODE, NELIM, NSLAVES, IW(LIST_ROW_SON),
278 & IW(LIST_COL_SON), IW(LIST_SLAVES),
280 & PROCNODE_STEPS, IWPOS, IWPOSCB, IPTRLU,
281 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
283 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S,
284 & ITLOC, RHS_MUMPS, COMP,
286 & IPOOL, LPOOL, LEAF, MYID, SLAVEF,
287 & KEEP, KEEP8, DKEEP,
288 & COMM, COMM_LOAD, FILS, DAD, ND)
289.LT.
IF (IFLAG0) GOTO 600
292.EQ.
DO WHILE (IERR-1)
293 CALL ZMUMPS_BUF_SEND_RTNELIND( INODE, NELIM,
294 & IW(LIST_ROW_SON), IW(LIST_COL_SON), NSLAVES,
295 & IW(LIST_SLAVES), MSGDEST, COMM, KEEP, IERR)
296.EQ.
IF ( IERR -1 ) THEN
299 MESSAGE_RECEIVED = .FALSE.
300 CALL ZMUMPS_TRY_RECVTREAT( COMM_LOAD, ASS_IRECV,
301 & BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
302 & MPI_ANY_SOURCE, MPI_ANY_TAG, STATUS,
303 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
304 & IWPOS, IWPOSCB, IPTRLU,
305 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST, PTLUST_S, PTRFAC,
306 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
307 & IFLAG, IERROR, COMM, PERM,
308 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
309 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
310 & FILS, DAD, PTRARW, PTRAIW,
311 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP,
312 & ND, FRERE, LPTRAR, NELT,
314 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
317.LT.
IF ( IFLAG 0 ) GOTO 500
318 IOLDPS = PTLUST_S(STEP(INODE))
319 LIST_ROW_SON = IOLDPS + H_INODE + NPIV
320 LIST_COL_SON = IOLDPS + H_INODE + NFRONT + NPIV
321 LIST_SLAVES = IOLDPS + 6 + KEEP(IXSZ)
324.EQ.
IF ( IERR -2 ) THEN
325 IERROR = ( 3 + NSLAVES + 2 * NELIM ) * KEEP( 34 )
328.EQ.
ELSE IF ( IERR -3 ) THEN
329 IERROR = ( 3 + NSLAVES + 2 * NELIM ) * KEEP( 34 )
335 POSELT = PTRAST(STEP(INODE))
336 OPSFAC = POSELT + int(NPIV,8) * int(NFRONT,8) + int(NPIV,8)
342 OPSFAC = POSELT + int(NPIV,8) * int(LDA,8) + int(NPIV,8)
343 IF ( MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
344.NE.
& KEEP(199)) MYID ) THEN
346 MSGDEST=MUMPS_PROCNODE( PROCNODE_STEPS(STEP(FPERE)), KEEP(199) )
348 NBROWS_ALREADY_SENT = 0
349.EQ.
DO WHILE (IERR-1)
350.EQ..AND..EQ.
IF ( (TYPE1) (TYPEF1) ) THEN
351 CALL ZMUMPS_BUF_SEND_CB( NBROWS_ALREADY_SENT,
352 & INODE, FPERE, NFRONT,
353 & LCONT, NASS, NPIV, IW( IOLDPS + H_INODE + NPIV ),
354 & IW( IOLDPS + H_INODE + NPIV + NFRONT ),
355 & A( OPSFAC ), PACKED_CB,
356 & MSGDEST, MSGTAG, COMM, KEEP, IERR )
358.EQ.
IF ( TYPE2 ) THEN
359 INIV2 = ISTEP_TO_INIV2 ( STEP(INODE) )
363 CALL ZMUMPS_BUF_SEND_MAITRE2( NBROWS_ALREADY_SENT,
365 & NBROW_SEND, IW(IOLDPS + H_INODE + NPIV ),
366 & NBCOL, IW(IOLDPS + H_INODE + NPIV + NFRONT ),
367 & A(OPSFAC), LDA, NELIM, TYPE,
368 & NSLAVES, IW(IOLDPS+6+KEEP(IXSZ)), MSGDEST,
371 & SLAVEF, KEEP,KEEP8, INIV2, TAB_POS_IN_PERE )
373.EQ.
IF ( IERR -1 ) THEN
376 MESSAGE_RECEIVED = .FALSE.
377 CALL ZMUMPS_TRY_RECVTREAT( COMM_LOAD, ASS_IRECV,
378 & BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
379 & MPI_ANY_SOURCE, MPI_ANY_TAG,
381 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
382 & IWPOS, IWPOSCB, IPTRLU,
383 & LRLU, LRLUS, N, IW, LIW, A, LA,
384 & PTRIST, PTLUST_S, PTRFAC,
385 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
386 & IFLAG, IERROR, COMM,
387 & PERM, IPOOL, LPOOL, LEAF,
388 & NBFIN, MYID, SLAVEF,
390 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
391 & FILS, DAD, PTRARW, PTRAIW,
392 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
393 & LPTRAR, NELT, FRTPTR, FRTELT,
394 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, .TRUE.
396.LT.
IF ( IFLAG 0 ) GOTO 500
398 IOLDPS = PTLUST_S(STEP( INODE ))
399 OPSFAC = POSELT + int(NPIV,8) * int(LDA,8) + int(NPIV,8)
401.EQ..OR..EQ.
IF ( IERR -2 IERR -3 ) THEN
402.EQ..AND..EQ.
IF ( (TYPE1) (TYPEF1) ) THEN
403 IERROR = ( 2*LCONT + 9 ) * KEEP( 34 ) +
404 & LCONT*LCONT * KEEP( 35 )
405.ne..AND..eq.
ELSE IF (KEEP(50)0 TYPE 2 ) THEN
406 IERROR = ( NBROW_SEND + NBCOL+ 5 + NSLAVES)
408 & NBROW_SEND*NBROW_SEND*KEEP( 35 )
410 IERROR = ( NBROW_SEND + NBCOL+ 5 + NSLAVES) * KEEP( 34 ) +
411 & NBROW_SEND*NBCOL*KEEP( 35 )
413.EQ.
IF (IERR -2) THEN
417 & ": FAILURE, SEND BUFFER TOO SMALL DURING
418 & ZMUMPS_FAC_STACK", TYPE, TYPEF
421.EQ.
IF (IERR -3) THEN
425 & ": FAILURE, RECV BUFFER TOO SMALL DURING
426 & ZMUMPS_FAC_STACK", TYPE, TYPEF
432 IF ( MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
433.EQ.
& KEEP(199)) MYID ) THEN
435 LREQI = 2 + KEEP(IXSZ)
437 NBROW_INDICES = NBROW
438.NE..AND..EQ.
IF ((KEEP(50)0)(TYPE2)) THEN
443 IF (COMPRESS_CB) THEN
445.NE.
IF (KEEP(50)0) NBCOL_STACK = NELIM
448 NBROW_STACK = NBROW-NBROW_SEND
449 NBROW_INDICES = NBROW-NBROW_SEND
451 IF (COMPRESS_CB) THEN
455 LREQI = 6 + NBROW_INDICES + NBCOL + KEEP(IXSZ)
456.NOT..EQ..AND..EQ.
IF ( (TYPE1 TYPEF2 ) ) GOTO 190
457.EQ.
IF (FPERE0) GOTO 190
460.EQ..OR..EQ.
IF (NBROW_STACK0NBCOL_STACK0) THEN
463 LREQCB = ( int(NBCOL_STACK,8) * int( NBCOL_STACK + 1, 8) ) / 2_8
464 & - ( int(NBROW_SEND ,8) * int( NBROW_SEND + 1, 8) ) / 2_8
467 LREQCB = int(NBROW_STACK,8) * int(NBCOL_STACK,8)
469.NE.
INPLACE = ( KEEP(234)0 )
470.NE..AND..EQ.
IF (KEEP(50)0 TYPE 2) INPLACE = .FALSE.
471.OR..NOT.
INPLACE = INPLACE MUST_COMPACT_FACTORS
472.AND.
INPLACE = INPLACE
473.EQ.
& ( PTLUST_S(STEP(INODE)) + INTSIZ IWPOS )
474 MIN_SPACE_IN_PLACE = 0_8
475.AND..eq..AND.
IF ( INPLACE KEEP(50) 0
476 & MUST_COMPACT_FACTORS) THEN
477 MIN_SPACE_IN_PLACE = int(NBCOL_STACK,8)
479.GT.
IF ( MIN_SPACE_IN_PLACE LREQCB ) THEN
482 CALL ZMUMPS_ALLOC_CB( INPLACE, MIN_SPACE_IN_PLACE,
484 & MYID,N,KEEP,KEEP8,DKEEP,IW, LIW, A, LA,
485 & LRLU, IPTRLU,IWPOS,IWPOSCB, SLAVEF, PROCNODE_STEPS, DAD,
486 & PTRIST,PTRAST,STEP, PIMASTER,PAMASTER,
487 & LREQI, LREQCB, INODE, S_NOTFREE, .TRUE.,
488 & COMP, LRLUS, LRLUSM, IFLAG, IERROR )
489.LT.
IF (IFLAG0) GOTO 600
490 IW(IWPOSCB+1+XXF) = IW(IOLDPS+XXF)
491 IW(IWPOSCB+1+XXLR) = IW(IOLDPS+XXLR)
492 PTRIST(STEP(INODE)) = IWPOSCB+1
493 IF ( MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
494.EQ.
& KEEP(199)) MYID ) THEN
495 PIMASTER (STEP(INODE)) = PTLUST_S(STEP(INODE))
496 PAMASTER(STEP(INODE)) = IPTRLU + 1_8
497 PTRAST(STEP(INODE)) = -99999999_8
498 IW(IWPOSCB+1+KEEP(IXSZ)) = min(-NBCOL_STACK,-1)
499 IW(IWPOSCB+2+KEEP(IXSZ)) = NBROW_STACK
500 IF (PACKED_CB) IW(IWPOSCB+1+XXS) = S_CB1COMP
502 PTRAST(STEP(INODE)) = IPTRLU+1_8
503 IF (PACKED_CB) IW(IWPOSCB+1+XXS)=S_CB1COMP
504 IW(IWPOSCB+1+KEEP(IXSZ)) = NBCOL
505 IW(IWPOSCB+2+KEEP(IXSZ)) = 0
506 IW(IWPOSCB+3+KEEP(IXSZ)) = NBROW_STACK
507 IW(IWPOSCB+4+KEEP(IXSZ)) = 0
508 IW(IWPOSCB+5+KEEP(IXSZ)) = 1
509 IW(IWPOSCB+6+KEEP(IXSZ)) = 0
510 IOLDP1 = PTLUST_S(STEP(INODE))+H_INODE
511 PTROWEND = IWPOSCB+6+NBROW_STACK+KEEP(IXSZ)
512 DO I = 1, NBROW_STACK
513 IW(IWPOSCB+7+KEEP(IXSZ)+I-1) =
514 & IW(IOLDP1+NFRONT-NBROW_STACK+I-1)
517 IW(PTROWEND+I)=IW(IOLDP1+NFRONT+NPIV+I-1)
520.NE..AND..EQ.
IF ( KEEP(50)0 TYPE 1
521.AND.
& MUST_COMPACT_FACTORS ) THEN
522 POSELT = PTRFAC(STEP(INODE))
523 CALL ZMUMPS_COMPACT_FACTORS( A(POSELT), LDA,
525 & int(LDA,8)*int(NBROW+NPIV,8),
526 & IW( PTLUST_S(STEP(INODE)) + H_INODE + NFRONT ) )
527 MUST_COMPACT_FACTORS = .FALSE.
529.AND..EQ.
IF (COMPRESS_CB(LREQCB0)) GOTO 190
530.EQ..AND.
IF ( KEEP(50)0 MUST_COMPACT_FACTORS )
532 LAST_ALLOWED_POS = POSELT + int(LDA,8)*int(NPIV+NBROW-1,8)
535 LAST_ALLOWED_POS = -1_8
537 NCBROW_ALREADY_MOVED = 0
538 COUNT_EXTRA_IP_COPIES = 0_8
540 NCBROW_PREVIOUSLY_MOVED = NCBROW_ALREADY_MOVED
541.LT.
IF (IPTRLU POSFAC ) THEN
542 CALL ZMUMPS_COPY_CB_RIGHT_TO_LEFT( A, LA, LDA,
543 & POSELT, IPTRLU, NPIV, NBCOL_STACK, NBROW_STACK,
544 & NBROW_SEND, LREQCB, KEEP, PACKED_CB,
545 & LAST_ALLOWED_POS, NCBROW_ALREADY_MOVED )
547 CALL ZMUMPS_COPY_CB_LEFT_TO_RIGHT( A, LA, LDA,
548 & POSELT, IPTRLU, NPIV, NBCOL_STACK, NBROW_STACK,
549 & NBROW_SEND, LREQCB, KEEP, PACKED_CB )
550 NCBROW_ALREADY_MOVED = NBROW_STACK
552.NE.
IF (LAST_ALLOWED_POS -1_8) THEN
553 MUST_COMPACT_FACTORS =.FALSE.
554.EQ.
IF ( NCBROW_ALREADY_MOVED NBROW_STACK ) THEN
555 IF (COMPRESS_CB) THEN
556 NCBROW_ALREADY_MOVED = NBROW
558 NCBROW_ALREADY_MOVED = NCBROW_ALREADY_MOVED + NBROW_SEND
561 NCBROW_NEWLY_MOVED = NCBROW_ALREADY_MOVED
562 & - NCBROW_PREVIOUSLY_MOVED
563 FACTOR_POS = POSELT +
564 & int(LDA,8)*int(NPIV+NBROW-NCBROW_ALREADY_MOVED,8)
565 CALL ZMUMPS_COMPACT_FACTORS_UNSYM( A(FACTOR_POS), LDA, NPIV,
566 & NCBROW_NEWLY_MOVED,
567 & int(NCBROW_NEWLY_MOVED,8) * int(LDA,8) )
568 INEW = FACTOR_POS + int(NPIV,8) * int(NCBROW_NEWLY_MOVED,8)
569 IOLD = INEW + int(NCBROW_NEWLY_MOVED,8) * int(NBCOL_STACK,8)
570 DO I = 1, NCBROW_PREVIOUSLY_MOVED*NPIV
575 COUNT_EXTRA_IP_COPIES = COUNT_EXTRA_IP_COPIES +
576 & int(NCBROW_PREVIOUSLY_MOVED,8)
578 LAST_ALLOWED_POS = INEW
579.LT.
IF (NCBROW_ALREADY_MOVEDNBROW_STACK) THEN
583.GT.
IF ( COUNT_EXTRA_IP_COPIES 0_8 ) THEN
585 KEEP8(8) = KEEP8(8) + COUNT_EXTRA_IP_COPIES
587 COUNT_EXTRA_IP_COPIES = 0_8
590 IF (MUST_COMPACT_FACTORS) THEN
591 POSELT = PTRFAC(STEP(INODE))
592 CALL ZMUMPS_COMPACT_FACTORS( A(POSELT), LDA,
594 & int(LDA,8)*int(NBROW+NPIV,8),
595 & IW( PTLUST_S(STEP(INODE)) + H_INODE + NFRONT ) )
596 MUST_COMPACT_FACTORS = .FALSE.
598 IOLDPS = PTLUST_S(STEP(INODE))
599 IW(IOLDPS+KEEP(IXSZ)) = NBCOL
600 IW(IOLDPS + 1+KEEP(IXSZ)) = NASS - NPIV
602 IW(IOLDPS + 2+KEEP(IXSZ)) = NASS
604 IW(IOLDPS + 2+KEEP(IXSZ)) = NFRONT
606 IW(IOLDPS + 3+KEEP(IXSZ)) = NPIV
608 SIZE_INPLACE = LREQCB - MIN_SPACE_IN_PLACE
612 CALL ZMUMPS_COMPRESS_LU(SIZE_INPLACE,MYID,N,IOLDPS,TYPE, IW, LIW,
613 & A, LA, POSFAC, LRLU, LRLUS,
614 & IWPOS, PTRAST, PTRFAC, STEP, KEEP,KEEP8, SSARBR,INODE,IERR
625.NE..AND..EQ.
IF (IFLAG -1 KEEP(405) 0) THEN
626 CALL ZMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
subroutine zmumps_fac_stack(comm_load, ass_irecv, n, inode, type, typef, la, iw, liw, a, iflag, ierror, opeliw, nelvaw, nmaxnpiv, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, ne, posfac, lrlu, lrlus, lrlusm, iptrlu, icntl, keep, keep8, dkeep, comp, iwpos, iwposcb, procnode_steps, slavef, fpere, comm, myid, ipool, lpool, leaf, nstk_s, perm, bufr, lbufr, lbufr_bytes, nbfin, root, opassw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups, flop_estim_acc)