17 & N, INODE, FPERE, IW, LIW, A, LA,
18 & UU, NNEGW, NPVW, NB22T2W, NBTINYW,
19 & DET_EXPW, DET_MANTW, DET_SIGNW,
20 & COMM, MYID, BUFR, LBUFR,LBUFR_BYTES,NBFIN,LEAF,
21 & IFLAG, IERROR, IPOOL,LPOOL,
22 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
24 & PTRIST, PTRAST, PTLUST_S, PTRFAC, STEP,
26 & NSTK_S,PERM,PROCNODE_STEPS, root,
27 & OPASSW, OPELIW, ITLOC, RHS_MUMPS,
28 & FILS, DAD, PTRARW, PTRAIW,
29 & INTARR, DBLARR, ICNTL, KEEP,KEEP8, ND, FRERE,
30 & LPTRAR, NELT, FRTPTR, FRTELT, SEUIL,
31 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, AVOID_DELAYED,
32 & DKEEP,PIVNUL_LIST,LPN_LIST
47 INTEGER COMM_LOAD, ASS_IRECV
48 INTEGER N, INODE, FPERE, LIW
49 INTEGER,
intent(inout) :: NNEGW, NPVW, NB22T2W,
50 INTEGER,
intent(inout) :: DET_EXPW, DET_SIGNW
51 COMPLEX,
intent(inout) :: DET_MANTW
53 INTEGER,
TARGET :: IW( LIW )
56 TYPE (CMUMPS_ROOT_STRUC) :: root
57 INTEGER COMM, MYID, LBUFR, LBUFR_BYTES
59 INTEGER ICNTL(60), KEEP(500)
61 INTEGER NBFIN, SLAVEF,
62 & iflag, ierror, leaf, lpool
63 INTEGER(8) :: POSFAC, IPTRLU, LRLU, LRLUS
64 INTEGER , IWPOSCB, COMP
66 INTEGER FRTPTR( N + 1 ), FRTELT( NELT )
67 INTEGER BUFR( LBUFR ), IPOOL(LPOOL),
68 & itloc(n+keep(253)), fils(n), dad( keep(28) ),
69 & nd( keep(28) ), frere( keep(28) )
70 INTEGER(8),
INTENT(IN) :: PTRARW(LPTRAR), PTRAIW(LPTRAR)
71 COMPLEX :: RHS_MUMPS((255))
72 INTEGER(8) :: PTRAST(KEEP(28))
73 INTEGER(8) :: PTRFAC(KEEP(28))
74 INTEGER(8) :: PAMASTER(KEEP(28))
75 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28)),
76 & step(n), pimaster(keep(28)),
77 & nstk_s(keep(28)), perm(n),
78 & procnode_steps(keep(28))
79 INTEGER ISTEP_TO_INIV2(KEEP(71)),
80 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
81 DOUBLE PRECISION OPASSW, OPELIW
82 COMPLEX DBLARR(KEEP8(26))
83 INTEGER INTARR(KEEP8(27))
86 INTEGER PIVNUL_LIST(LPN_LIST)
88 INTEGER :: LRGROUPS(N)
90 INTEGER IOLDPS, allocok, K263,J
91 INTEGER INOPV, IFINB, NFRONT, NPIV, IEND_BLOCK
92 INTEGER NASS, LDAFS, IBEG_BLOCK
93 INTEGER :: NB_POSTPONED
94 INTEGER :: IBEG_BLOCK_FOR_IPIV
95 LOGICAL , LR_ACTIVATED, COMPRESS_PANEL
96 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR,
97 & ooc_effective_on_front,
98 & ooc_eff_and_write_bypanel
99 INTEGER NBLR_ORIG, IBEG_BLR, IEND_BLR, CURRENT_BLR
103 INTEGER XSIZE, NBKJIB_ORIG
105 include
'mumps_headers.h'
106 INTEGER ,
ALLOCATABLE,
DIMENSION ( : ) :: IPIV
107 REAL ,
ALLOCATABLE,
DIMENSION ( : ) :: DIAG_ORIG
108 INTEGER :: SIZEDIAG_ORIG
110 INTEGER LIWFAC, STRAT, TYPEFile, NextPiv2beWritten,
112 TYPE(io_block) :: MonBloc
114 INTEGER PP_FIRST2SWAP_L, IFLAG_OOC
115 INTEGER PP_LastPIVRPTRFilled
118 INTEGER HF, NPARTSASS, NPARTSCB, NB_BLR
119 INTEGER MAXI_CLUSTER, LWORK
120 TYPE(
lrb_type),
DIMENSION(1),
TARGET :: BLR_DUMMY
121 INTEGER,
POINTER,
DIMENSION(:) :: PTDummy
122 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: ACC_LUA
123 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
124 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_L, BLR_SEND
125 COMPLEX,
POINTER,
DIMENSION(:) ::
126 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_PANEL
127 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_TMP, BEGS_BLR_STATIC
128 INTEGER :: DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, I, IP, MEM, MEM_TOT
129 INTEGER(8) :: POSELT_DIAG, APOSMAX
130 COMPLEX,
ALLOCATABLE :: WORK(:), TAU(:)
131 INTEGER,
ALLOCATABLE :: JPVT(:)
132 REAL,
ALLOCATABLE :: RWORK(:)
133 COMPLEX,
ALLOCATABLE :: BLOCK(:,:)
142 INTEGER PIVSIZ,IWPOSPIV
144 parameter(one=(1.0e0,0.0e0))
152 NULLIFY(begs_blr_tmp)
153 NULLIFY(begs_blr_static)
154 IF (keep(206).GE.1)
THEN
160 IF(keep(97) .EQ. 0)
THEN
165 IF (avoid_delayed)
THEN
168 seuil_loc = max(seuil,epsilon(seuil))
173 reset_to_one = ((keep(110).GT.0).AND.(dkeep(2).LE.0.0e0))
174 IF (reset_to_one)
THEN
175 k109_save = keep(109)
180 ioldps = ptlust_s(step( inode ))
181 poselt = ptrast(step( inode ))
182 nfront = iw(ioldps+xsize)
183 nass = iabs(iw(ioldps+2+xsize))
185 IF ((keep(219).EQ.1).AND.(keep(207).EQ.1).AND.(keep(50).EQ.2)
187 aposmax = poselt + int(ldafs,8)*int(ldafs,8)
188 nb_postponed = max(nfront - nd(step(inode)),0)
190 & keep, a(aposmax), nass, nb_postponed)
192 iw(ioldps+3+xsize) = -99999
193 lr_activated= .false.
194 lr_activated = (iw(ioldps+xxlr).GT.0)
195 compress_panel = (iw(ioldps+xxlr).GE.2)
196 oocwrite_compatible_with_blr =
197 & ( .NOT.lr_activated.OR. (.NOT.compress_panel).OR.
200 ooc_effective_on_front= ((keep(201).EQ.1).AND.
201 & oocwrite_compatible_with_blr)
202 IF (nass.LT.keep(4))
THEN
204 ELSE IF (nass .GT. keep(3))
THEN
205 nbkjib_orig =
min( keep(6), nass )
207 nbkjib_orig =
min( keep(5), nass )
209 IF (.not.lr_activated)
THEN
210 nblr_orig = keep(420)
214 IF (lr_activated)
THEN
218 IF (k263 .NE. 0 .AND. nass/nblr_orig < 4)
THEN
219 IF ( nblr_orig .GT. nbkjib_orig * 4 )
THEN
220 nblr_orig = max(nbkjib_orig, (nass+3)/4)
226 pivot_option =
min(2,keep(468))
227 IF ((uutemp == 0.0e0) .AND. ooc_effective_on_front)
THEN
228 IF (k263.EQ.1.AND.(.NOT.lr_activated))
THEN
235 ALLOCATE( ipiv( nass ), stat = allocok )
236 IF ( allocok .GT. 0 )
THEN
237 WRITE(*,*) myid,
' : CMUMPS_FAC2_LDLT failed to allocate ',
243.GE.
IF (KEEP(219)3) THEN
248 ALLOCATE ( DIAG_ORIG(SIZEDIAG_ORIG), stat = allocok )
249.GT.
IF ( allocok 0 ) THEN
251 & ' : fac_niv2 failed to
allocate ',
252 & NASS, ' real/
COMPLEX entries
'
257 CALL MUMPS_GETI8(LAFAC,IW(IOLDPS+XXR))
258 LIWFAC = IW(IOLDPS+XXI)
259 IF (OOC_EFFECTIVE_ON_FRONT) THEN
262 NextPiv2beWritten = 1
263 PP_FIRST2SWAP_L = NextPiv2beWritten
264 MonBloc%LastPanelWritten_L = 0
265 MonBloc%INODE = INODE
266 MonBloc%MASTER = .TRUE.
271 MonBloc%Last = .FALSE.
272 MonBloc%LastPiv = -66666
274 & IW(IOLDPS+6+NFRONT+XSIZE+IW(IOLDPS+5+XSIZE)
275 & :IOLDPS+5+2*NFRONT+XSIZE+IW(IOLDPS+5+XSIZE))
277 IF (LR_ACTIVATED) THEN
278.EQ.
IF (KEEP(475)3) THEN
279 IF (UUTEMP == 0.0E0) THEN
285 CNT_NODES = CNT_NODES + 1
287 HF = 6 + IW(IOLDPS+5+XSIZE)+XSIZE
288.GE..AND.
OOC_EFF_AND_WRITE_BYPANEL = ( (PIVOT_OPTION2)
289 & OOC_EFFECTIVE_ON_FRONT )
290 IF (LR_ACTIVATED) THEN
291 CALL GET_CUT(IW(IOLDPS+HF:IOLDPS+HF+NFRONT-1), NASS,
292 & 0, LRGROUPS, NPARTSCB,
293 & NPARTSASS, BEGS_BLR)
294 CALL REGROUPING2(BEGS_BLR, NPARTSASS, NASS, NPARTSCB,
295 & 0, KEEP(488), .FALSE., KEEP(472))
296 NB_BLR = NPARTSASS + NPARTSCB
297 call MAX_CLUSTER(BEGS_BLR,NB_BLR,MAXI_CLUSTER)
298 MAXI_RANK = KEEP(479)*MAXI_CLUSTER
299 LWORK = MAXI_CLUSTER*MAXI_CLUSTER
302!$ OMP_NUM = OMP_GET_MAX_THREADS()
304 ALLOCATE(BLOCK(MAXI_CLUSTER, OMP_NUM*MAXI_CLUSTER),
305 & RWORK(2*MAXI_CLUSTER*OMP_NUM),
306 & TAU(MAXI_CLUSTER*OMP_NUM),
307 & JPVT(MAXI_CLUSTER*OMP_NUM),
308 & WORK(LWORK*OMP_NUM),stat=allocok)
309 IF (allocok > 0) THEN
311 IERROR = OMP_NUM*(LWORK + MAXI_CLUSTER*(MAXI_CLUSTER+4))
314 ALLOCATE(ACC_LUA(OMP_NUM),stat=allocok)
315 IF (allocok > 0) THEN
320.GE.
IF (KEEP(480)3) THEN
322 CALL ALLOC_LRB(ACC_LUA(MY_NUM), MAXI_RANK,
323 & MAXI_CLUSTER, MAXI_CLUSTER, .TRUE.,
324 & IFLAG, IERROR, KEEP8)
325.LT.
IF (IFLAG0) GOTO 480
326 ACC_LUA(MY_NUM)%K = 0
330.AND..NE.
IF (LR_ACTIVATED(KEEP(480)0
338 CALL CMUMPS_BLR_INIT_FRONT(IW(IOLDPS+XXF), INFO_TMP)
341.LT.
IF (IFLAG0) GOTO 500
342 CALL CMUMPS_BLR_SAVE_INIT(IW(IOLDPS+XXF),
352.LT.
IF (IFLAG0) GOTO 500
355 DO WHILE (IEND_BLR < NASS )
356 CURRENT_BLR = CURRENT_BLR + 1
357 IBEG_BLR = IW(IOLDPS+1+KEEP(IXSZ)) + 1
358.NOT.
IF ( LR_ACTIVATED)THEN
359 IEND_BLR = min(IEND_BLR + NBLR_ORIG, NASS)
361 IEND_BLR = BEGS_BLR(CURRENT_BLR+1)-1
362 BEGS_BLR( CURRENT_BLR ) = IBEG_BLR
363.GT.
IF ( IEND_BLR - IBEG_BLR + 1 MAXI_CLUSTER ) THEN
364 MAXI_CLUSTER = IEND_BLR - IBEG_BLR + 1
365 LWORK = MAXI_CLUSTER*MAXI_CLUSTER
366 DEALLOCATE(BLOCK, WORK, RWORK, TAU, JPVT)
367 ALLOCATE(BLOCK(MAXI_CLUSTER, OMP_NUM*MAXI_CLUSTER),
368 & RWORK(2*MAXI_CLUSTER*OMP_NUM),
369 & TAU(MAXI_CLUSTER*OMP_NUM),
370 & JPVT(MAXI_CLUSTER*OMP_NUM),
371 & WORK(LWORK*OMP_NUM),stat=allocok)
372 IF (allocok > 0) THEN
374 IERROR = OMP_NUM*(LWORK + MAXI_CLUSTER*(MAXI_CLUSTER+4))
377.GE.
IF (KEEP(480)3) THEN
379 CALL DEALLOC_LRB(ACC_LUA(MY_NUM), KEEP8, KEEP(34))
380 CALL ALLOC_LRB(ACC_LUA(MY_NUM), MAXI_RANK,
381 & MAXI_CLUSTER, MAXI_CLUSTER, .TRUE.,
382 & IFLAG, IERROR, KEEP8)
383.LT.
IF (IFLAG0) GOTO 480
384 ACC_LUA(MY_NUM)%K = 0
389 DO WHILE (IEND_BLOCK < IEND_BLR )
390 IBEG_BLOCK = IW(IOLDPS+1+KEEP(IXSZ)) + 1
391.EQ.
IF (KEEP(405)0) THEN
392 KEEP(425)=max(KEEP(425),IEND_BLOCK-IBEG_BLOCK)
395 KEEP(425)=max(KEEP(425),IEND_BLOCK-IBEG_BLOCK)
398 IEND_BLOCK = min(IEND_BLOCK + NBKJIB_ORIG, IEND_BLR)
401 IBEG_BLOCK_FOR_IPIV = IBEG_BLOCK
403 IBEG_BLOCK_FOR_IPIV = IBEG_BLR
405 CALL CMUMPS_FAC_I_LDLT_NIV2(
406 & DIAG_ORIG, SIZEDIAG_ORIG, GW_FACTCUMUL,
407 & NFRONT,NASS,IBEG_BLOCK_FOR_IPIV,
408 & IBEG_BLOCK, IEND_BLOCK,
410 & N,INODE,IW,LIW,A,LA,
411 & NNEGW,NB22T2W,NBTINYW,
412 & DET_EXPW, DET_MANTW, DET_SIGNW,
414 & IFLAG,IOLDPS,POSELT,UU, SEUIL_LOC,
416 & DKEEP(1),PIVNUL_LIST(1),LPN_LIST,
417 & PP_FIRST2SWAP_L, MonBloc%LastPanelWritten_L,
418 & PP_LastPIVRPTRFilled,
420 & Inextpiv, IEND_BLR, LR_ACTIVATED,
421 & OOC_EFFECTIVE_ON_FRONT)
422.LT.
IF (IFLAG0) GOTO 500
423.EQ.
IF (INOPV 1) THEN
429.LE.
ELSE IF (INOPV 0) THEN
432 CALL CMUMPS_FAC_MQ_LDLT_NIV2(IEND_BLOCK,
433 & NASS, IW(IOLDPS+1+XSIZE), INODE,A,LA,
434 & LDAFS, POSELT,IFINB,
437 & PIVOT_OPTION, IEND_BLR, LR_ACTIVATED)
438.EQ.
IF(PIVSIZ 2) THEN
439 IWPOSPIV = IOLDPS+XSIZE+IW(IOLDPS+1+XSIZE)+6+
441 IW(IWPOSPIV+NFRONT) = -IW(IWPOSPIV+NFRONT)
443 IW(IOLDPS+1+XSIZE) = IW(IOLDPS+1+XSIZE) + PIVSIZ
446.EQ.
ELSE IF (IFINB -1) THEN
450 NPIV = IW(IOLDPS+1+XSIZE)
451 IF ( OOC_EFF_AND_WRITE_BYPANEL ) THEN
452.NOT..OR..EQ.
IF (RESET_TO_ONEK109_SAVEKEEP(109)) THEN
453 MonBloc%Last = .FALSE.
454 MonBloc%LastPiv= NPIV
456 CALL CMUMPS_OOC_IO_LU_PANEL(
458 & TYPEFile, A(POSELT),
459 & LAFAC, MonBloc, NextPiv2beWritten, IDUMMY, IW(IOLDPS),
460 & LIWFAC, MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
461.LT.
IF (IFLAG_OOC 0 ) IFLAG = IFLAG_OOC
462.LT.
IF (IFLAG 0) GOTO 500
466 NELIM = IEND_BLR - NPIV
467 CALL CMUMPS_SEND_FACTORED_BLK( COMM_LOAD, ASS_IRECV,
468 & N, INODE, FPERE, IW, LIW,
469 & IOLDPS, POSELT, A, LA, LDAFS,
470 & IBEG_BLOCK, NPIV, IPIV, NASS,LASTBL, NB_BLOC_FAC,
471 & COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,NBFIN,LEAF,
472 & IFLAG, IERROR, IPOOL,LPOOL,
473 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
474 & LRLUS, COMP, PTRIST, PTRAST, PTLUST_S, PTRFAC, STEP,
475 & PIMASTER, PAMASTER,
476 & NSTK_S,PERM,PROCNODE_STEPS, root,
477 & OPASSW, OPELIW, ITLOC, RHS_MUMPS,
478 & FILS, DAD, PTRARW, PTRAIW,
479 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND,FRERE,
480 & LPTRAR, NELT, FRTPTR, FRTELT,
481 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
483 & , NPARTSASS, CURRENT_BLR, BLR_DUMMY, LRGROUPS
485.LT.
IF ( IFLAG 0 ) GOTO 500
486.AND..LT.
IF (RESET_TO_ONEK109_SAVEKEEP(109)) THEN
487 CALL CMUMPS_RESET_TO_ONE(
488 & IW(IOLDPS+KEEP(IXSZ)+IW(IOLDPS+5+KEEP(IXSZ))+6),
490 & K109_SAVE, KEEP(109), PIVNUL_LIST, LPN_LIST,
491 & A, POSELT, LA, LDAFS)
493 IF ( OOC_EFF_AND_WRITE_BYPANEL) THEN
494 MonBloc%Last = .FALSE.
495 MonBloc%LastPiv= NPIV
497 CALL CMUMPS_OOC_IO_LU_PANEL(
499 & TYPEFile, A(POSELT),
500 & LAFAC, MonBloc, NextPiv2beWritten, IDUMMY, IW(IOLDPS),
501 & LIWFAC, MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
502.LT.
IF (IFLAG_OOC 0 ) THEN
504.LT.
IF (IFLAG 0) GOTO 500
508.GT.
IF ( IEND_BLR IEND_BLOCK ) THEN
509.EQ.
IF (PIVOT_OPTION2) THEN
514 CALL CMUMPS_FAC_SQ_LDLT(IBEG_BLOCK,IEND_BLOCK,NPIV,
515 & NASS,NASS,INODE,A,LA,
519 & IEND_BLR, LAST_ROW,
520 & .FALSE., .TRUE., LR_ACTIVATED,
524 CALL CMUMPS_BUF_TEST()
526 NPIV = IW(IOLDPS+1+XSIZE)
527 IF (LR_ACTIVATED) THEN
528 ALLOCATE(BLR_L(NB_BLR-CURRENT_BLR),stat=allocok)
529 IF (allocok > 0) THEN
531 IERROR = NB_BLR-CURRENT_BLR
534 NELIM = IEND_BLOCK - NPIV
535.NE.
IF (IEND_BLRIEND_BLOCK) THEN
536 WRITE(*,*) "Internal error 1 in CMUMPS_FAC2_LDLT",
537 & IEND_BLR, IEND_BLOCK
540.EQ.
IF (NELIM IEND_BLR - IBEG_BLR + 1) THEN
547 DO J=1,NB_BLR-CURRENT_BLR
551 BLR_L(J)%ISLR=.FALSE.
555 CALL CMUMPS_BLR_SAVE_PANEL_LORU (
558 & CURRENT_BLR, BLR_L)
566 CALL CMUMPS_COMPRESS_PANEL(A, LA, POSELT, IFLAG, IERROR, NASS,
567 & BEGS_BLR, NB_BLR, DKEEP(8), KEEP(466), KEEP(473),
569 & CURRENT_BLR, 'V
', WORK, TAU, JPVT, LWORK, RWORK,
570 & BLOCK, MAXI_CLUSTER, NELIM,
572 & 2, KEEP(483), KEEP8
577.LT.
IF (IFLAG0) GOTO 400
578.LT.
IF (PIVOT_OPTION2) THEN
579 CALL CMUMPS_BLR_PANEL_LRTRSM(A, LA, POSELT, NFRONT,
581 & NB_BLR, BLR_L, CURRENT_BLR, CURRENT_BLR+1,
582 & NB_BLR, 2, 1, 0, .FALSE.,
583 & IW, OFFSET_IW=IOLDPS+6+XSIZE+NFRONT+IBEG_BLR-1,
593.LT.
IF (IFLAG0) GOTO 480
600.LT.
IF (KEEP(480)5) THEN
601 CALL CMUMPS_BLR_SAVE_PANEL_LORU (
604 & CURRENT_BLR, BLR_L)
609.NOT.
IF ( LR_ACTIVATED) THEN
610 CALL CMUMPS_FAC_SQ_LDLT(IBEG_BLR,IEND_BLR,NPIV,
611 & NASS, NASS, INODE, A, LA,
616.LE.
& (PIVOT_OPTION1), .FALSE., LR_ACTIVATED,
617 & IW, LIW, IOLDPS+6+XSIZE+NFRONT+IBEG_BLR-1)
620 NELIM = IEND_BLR-NPIV
622 IF (associated(BLR_L)) THEN
625 CALL CMUMPS_SEND_FACTORED_BLK( COMM_LOAD, ASS_IRECV,
626 & N, INODE, FPERE, IW, LIW,
627 & IOLDPS, POSELT, A, LA, LDAFS,
628 & IBEG_BLR, NPIV, IPIV, NASS,LASTBL, NB_BLOC_FAC,
630 & COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,NBFIN,LEAF,
631 & IFLAG, IERROR, IPOOL,LPOOL,
632 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
633 & LRLUS, COMP, PTRIST, PTRAST, PTLUST_S, PTRFAC, STEP,
634 & PIMASTER, PAMASTER,
635 & NSTK_S,PERM,PROCNODE_STEPS, root,
636 & OPASSW, OPELIW, ITLOC, RHS_MUMPS,
637 & FILS, DAD, PTRARW, PTRAIW,
638 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND,FRERE,
639 & LPTRAR, NELT, FRTPTR, FRTELT,
640 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
641 & , NELIM, LR_ACTIVATED
642 & , NPARTSASS, CURRENT_BLR , BLR_SEND , LRGROUPS
644.LT.
IF ( IFLAG 0 ) GOTO 500
645.AND..LT.
IF (RESET_TO_ONEK109_SAVEKEEP(109)) THEN
646 CALL CMUMPS_RESET_TO_ONE(
647 & IW(IOLDPS+KEEP(IXSZ)+IW(IOLDPS+5+KEEP(IXSZ))+6),
649 & K109_SAVE, KEEP(109), PIVNUL_LIST, LPN_LIST,
650 & A, POSELT, LA, LDAFS)
652 IF ( OOC_EFF_AND_WRITE_BYPANEL ) THEN
653 MonBloc%Last = .FALSE.
654 MonBloc%LastPiv= NPIV
656 CALL CMUMPS_OOC_IO_LU_PANEL(
658 & TYPEFile, A(POSELT),
659 & LAFAC, MonBloc, NextPiv2beWritten, IDUMMY, IW(IOLDPS),
660 & LIWFAC, MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
661.LT.
IF (IFLAG_OOC 0 ) THEN
663.LT.
IF (IFLAG 0) GOTO 500
667.NOT.
IF ( LR_ACTIVATED) THEN
668.EQ.
IF (PIVOT_OPTION2) THEN
673 CALL CMUMPS_FAC_SQ_LDLT(IBEG_BLR,IEND_BLR,NPIV,
674 & NASS,NASS,INODE,A,LA,
679 & .FALSE., .TRUE., LR_ACTIVATED,
683 NELIM = IEND_BLOCK - NPIV
684.NE.
IF (IEND_BLRIEND_BLOCK) THEN
690.GE.
IF (KEEP(480)2) THEN
691.LT.
IF (IEND_BLRNASS) THEN
692 CALL CMUMPS_BLR_UPD_PANEL_LEFT_LDLT(A, LA, POSELT,
693 & NASS, IW(IOLDPS+XXF),
694 & BEGS_BLR, CURRENT_BLR, NB_BLR, NPARTSASS,
696 & IW(HF+IOLDPS+NFRONT), BLOCK,
697 & ACC_LUA, MAXI_CLUSTER, MAXI_RANK,
699 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
700 & KEEP(480), KEEP(479), KEEP(478), KEEP(476),
704.EQ.
IF (NELIM IEND_BLR - IBEG_BLR + 1) GOTO 450
705.LT.
IF (KEEP(480)2) THEN
706 CALL CMUMPS_BLR_UPDATE_TRAILING_LDLT(A, LA, POSELT,
707 & IFLAG, IERROR, NASS,
708 & BEGS_BLR, NB_BLR, CURRENT_BLR, BLR_L, NELIM,
709 & IW(HF+IOLDPS+NFRONT+IBEG_BLR-1), BLOCK,
710 & MAXI_CLUSTER, NPIV,
712 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477)
718.LT.
IF (IFLAG0) GOTO 450
719.LT.
IF (PIVOT_OPTION2) THEN
720.GT..OR..NE.
IF ((UU0)(KEEP(486)2)) THEN
721 CALL CMUMPS_DECOMPRESS_PANEL(A, LA, POSELT, NASS, NASS,
723 & BEGS_BLR(CURRENT_BLR),
724 & BEGS_BLR(CURRENT_BLR+1), NB_BLR, BLR_L, CURRENT_BLR,
732.LT.
IF (IFLAG0) GOTO 480
733.EQ.
IF (NELIM IEND_BLR - IBEG_BLR + 1) THEN
734.EQ.
IF (KEEP(486)3) THEN
735.EQ.
IF (KEEP(480)0) THEN
742.EQ.
IF (KEEP(486)3) THEN
743.EQ.
IF (KEEP(480)0) THEN
744 CALL DEALLOC_BLR_PANEL(BLR_L, NB_BLR-CURRENT_BLR, KEEP8,
751 IF ( OOC_EFF_AND_WRITE_BYPANEL ) THEN
752 MonBloc%Last = .FALSE.
753 MonBloc%LastPiv= NPIV
755 CALL CMUMPS_OOC_IO_LU_PANEL(
757 & TYPEFile, A(POSELT),
758 & LAFAC, MonBloc, NextPiv2beWritten, IDUMMY, IW(IOLDPS),
759 & LIWFAC, MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
760 IF (IFLAG_OOC < 0 ) THEN
767 IF (LR_ACTIVATED) THEN
768 IBEG_BLR = IW(IOLDPS+1+KEEP(IXSZ)) + 1
769 BEGS_BLR( CURRENT_BLR + 1 ) = IBEG_BLR
775 CALL CMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW(IOLDPS+XXF),
778 allocate(BEGS_BLR_TMP(NB_BLR+1),stat=allocok)
779 IF (allocok > 0) THEN
785 BEGS_BLR_TMP(J) = BEGS_BLR_STATIC(J)
796!$OMP& PRIVATE(IP, NELIM)
799!$OMP DO PRIVATE(DIAG, DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, POSELT_DIAG, MEM,
801!$OMP& REDUCTION(+:MEM_TOT)
804.LT.
IF (IFLAG0) CYCLE
805 DIAGSIZ_DYN = BEGS_BLR(IP+1)-BEGS_BLR(IP)
806 DIAGSIZ_STA = BEGS_BLR_STATIC(IP+1)-BEGS_BLR(IP)
807 MEM = DIAGSIZ_DYN*DIAGSIZ_STA
808 MEM_TOT = MEM_TOT + MEM
809 ALLOCATE(DIAG(MEM),stat=allocok)
810 IF (allocok > 0) THEN
816 POSELT_DIAG = POSELT + int(BEGS_BLR(IP)-1,8)*int(LDAFS,8)
817 & + int(BEGS_BLR(IP)-1,8)
819 DIAG(DPOS:DPOS+DIAGSIZ_DYN-1) =
820 & A(POSELT_DIAG:POSELT_DIAG+int(DIAGSIZ_DYN-1,8))
821 DPOS = DPOS + DIAGSIZ_DYN
822 POSELT_DIAG = POSELT_DIAG + int(LDAFS,8)
824 CALL CMUMPS_BLR_SAVE_DIAG_BLOCK(
832 CALL MUMPS_DM_FAC_UPD_DYN_MEMCNTS(int(MEM_TOT,8),
833 & .FALSE., KEEP8, IFLAG, IERROR, .TRUE., .TRUE.)
837.LT.
IF (IFLAG0) GOTO 460
840 NELIM = BEGS_BLR_TMP(IP+1)-BEGS_BLR(IP+1)
844 CALL CMUMPS_BLR_RETRIEVE_PANEL_LORU(
845 & IW(IOLDPS+XXF), 0, IP, BLR_PANEL)
846 CALL DEALLOC_BLR_PANEL(BLR_PANEL, NPARTSASS-IP, KEEP8,
851 CALL CMUMPS_COMPRESS_PANEL(A, LA, POSELT, IFLAG,
852 & IERROR, LDAFS, BEGS_BLR_TMP,
853 & NB_BLR, DKEEP(8), KEEP(466), KEEP(473),
855 & 'V
', WORK, TAU, JPVT, LWORK, RWORK,
856 & BLOCK, MAXI_CLUSTER, NELIM,
858 & 2, KEEP(483), KEEP8,
859 & END_I_IN=NPARTSASS, FRSWAP=.TRUE.
864.LT.
IF (IFLAG0) GOTO 440
868 BEGS_BLR_TMP(IP+1) = BEGS_BLR(IP+1)
883 deallocate(BEGS_BLR_TMP)
885.LT.
IF (IFLAG0) GOTO 500
891 CALL CMUMPS_BLR_SAVE_BEGS_BLR_DYN(IW(IOLDPS+XXF),
895 IF (OOC_EFFECTIVE_ON_FRONT) THEN
896 STRAT = STRAT_WRITE_MAX
897 MonBloc%Last = .TRUE.
898 MonBloc%LastPiv = IW(IOLDPS+1+XSIZE)
900 CALL CMUMPS_OOC_IO_LU_PANEL
902 & A(POSELT), LAFAC, MonBloc,
903 & NextPiv2beWritten, IDUMMY,
904 & IW(IOLDPS), LIWFAC,
905 & MYID, KEEP8(31), IFLAG_OOC, LAST_CALL )
906.LT.
IF (IFLAG_OOC 0 ) THEN
908.LT.
IF (IFLAG 0) GOTO 500
910 CALL CMUMPS_OOC_PP_TRYRELEASE_SPACE (IWPOS,
911 & IOLDPS, IW, LIW, MonBloc , NFRONT, KEEP)
916 CALL CMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
918 IF(allocated(IPIV)) DEALLOCATE( IPIV )
919 IF (allocated(DIAG_ORIG)) DEALLOCATE(DIAG_ORIG)
920 IF (LR_ACTIVATED) THEN
922 CALL UPD_MRY_LU_FR(NASS, NFRONT-NASS, 1, NELIM)
924 CALL CMUMPS_BLR_RETRIEVE_PANEL_LORU(
925 & IW(IOLDPS+XXF), 0, IP, BLR_PANEL)
926 CALL UPD_MRY_LU_LRGAIN(BLR_PANEL, NPARTSASS-IP
929 CALL UPD_FLOP_FACTO_FR(NFRONT, NASS, NASS-NELIM, 2, 2)
931 IF (allocated(RWORK)) DEALLOCATE(RWORK)
932 IF (allocated(WORK)) DEALLOCATE(WORK)
933 IF (allocated(TAU)) DEALLOCATE(TAU)
934 IF (allocated(JPVT)) DEALLOCATE(JPVT)
935 IF (allocated(BLOCK)) DEALLOCATE(BLOCK)
936 IF (associated(ACC_LUA)) THEN
937.GE.
IF (KEEP(480)3) THEN
939 CALL DEALLOC_LRB(ACC_LUA(MY_NUM), KEEP8, KEEP(34))
944 IF (associated(BEGS_BLR)) THEN
949.NE.
IF (KEEP(486)0) THEN
950.NOT.
IF (LR_ACTIVATED) THEN
951 CALL UPD_FLOP_FRFRONTS(NFRONT, NPIV, NASS, KEEP(50), 2)
954.AND..NE.
IF (LR_ACTIVATEDKEEP(480)0) THEN
960 CALL CMUMPS_BLR_FREE_ALL_PANELS(IW(IOLDPS+XXF), 0,
964 IF (LR_ACTIVATED) THEN
970 CALL CMUMPS_BLR_END_FRONT(IW(IOLDPS+XXF), IFLAG, KEEP8,
subroutine cmumps_fac2_ldlt(comm_load, ass_irecv, n, inode, fpere, iw, liw, a, la, uu, nnegw, npvw, nb22t2w, nbtinyw, det_expw, det_mantw, det_signw, comm, myid, bufr, lbufr, lbufr_bytes, nbfin, leaf, iflag, ierror, ipool, lpool, slavef, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, comp, ptrist, ptrast, ptlust_s, ptrfac, step, pimaster, pamaster, nstk_s, perm, procnode_steps, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, nd, frere, lptrar, nelt, frtptr, frtelt, seuil, istep_to_iniv2, tab_pos_in_pere, avoid_delayed, dkeep, pivnul_list, lpn_list, lrgroups)