17 & N, INODE, FPERE, IW, LIW, A, LA,
18 & UU, NOFFW, NPVW, 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
49 INTEGER COMM_LOAD, ASS_IRECV
50 INTEGER N, INODE, FPERE, LIW
51 INTEGER,
intent(inout) :: NOFFW, NPVW, NBTINYW
52 INTEGER,
intent(inout) :: DET_EXPW, DET_SIGNW
53 REAL,
intent(inout) :: DET_MANTW
58 TYPE (SMUMPS_ROOT_STRUC) :: root
59 INTEGER COMM, MYID, LBUFR, LBUFR_BYTES
61 INTEGER ICNTL(60), KEEP(500)
63 INTEGER NBFIN, SLAVEF,
64 & IFLAG, IERROR, LEAF, LPOOL
65 INTEGER(8) :: POSFAC, IPTRLU, LRLU, LRLUS
66 INTEGER IWPOS, IWPOSCB, COMP
67 INTEGER FRTPTR( N + 1 ), FRTELT( NELT )
68 INTEGER BUFR( LBUFR ), IPOOL(LPOOL),
69 & itloc(n+keep(253)), fils(n), dad( keep(28) ),
70 & nd( keep(28) ), frere( keep(28) )
71 INTEGER(8),
INTENT(IN) :: PTRARW(LPTRAR), PTRAIW(LPTRAR)
72 REAL :: RHS_MUMPS(KEEP(255))
73 INTEGER(8) :: PTRAST(KEEP(28))
74 INTEGER(8) :: PTRFAC(KEEP(28))
75 INTEGER(8) :: PAMASTER(KEEP(28))
76 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28)),
77 & step(n), pimaster(keep(28)),
78 & nstk_s(keep(28)), perm(n),
79 & procnode_steps(keep(28))
80 INTEGER ISTEP_TO_INIV2(KEEP(71)),
81 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
82 DOUBLE PRECISION OPASSW, OPELIW
83 REAL DBLARR(KEEP8(26))
84 INTEGER INTARR(KEEP8(27))
87 INTEGER PIVNUL_LIST(LPN_LIST)
89 INTEGER :: LRGROUPS(N)
90 INTEGER INOPV, IFINB, NFRONT, NPIV, IBEG_BLOCK, IEND_BLOCK
91 INTEGER :: IBEG_BLOCK_FOR_IPIV
92 INTEGER NASS, NBKJIB_ORIG, XSIZE
93 INTEGER NBLR_ORIG, IBEG_BLR, IEND_BLR
97 INTEGER IOLDPS, allocok, K263,J
102 INTEGER ,
ALLOCATABLE,
DIMENSION ( : ) :: IPIV
104 INTEGER LIWFAC, STRAT, LNextPiv2beWritten,
105 & unextpiv2bewritten, iflag_ooc,
106 & pp_first2swap_l, pp_first2swap_u,
107 & pp_lastpivrptrfilled_l,
108 & pp_lastpivrptrfilled_u
109 TYPE(io_block) :: MonBloc
111 INTEGER CURRENT_BLR, NELIM
112 LOGICAL LR_ACTIVATED, COMPRESS_PANEL
113 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR,
114 & ooc_effective_on_front,
115 & ooc_eff_and_write_bypanel
116 INTEGER :: IROW_L, NVSCHUR, NSLAVES
117 INTEGER :: PIVOT_OPTION, LAST_COL, FIRST_COL
119 INTEGER FIRST_BLOCK, LAST_BLOCK
120 INTEGER :: INFO_TMP(2)
122 INTEGER HF, NPARTSASS, NPARTSCB, NB_BLR, END_I
123 INTEGER MAXI_CLUSTER, LWORK
124 TYPE(LRB_TYPE),
DIMENSION(1),
TARGET :: BLR_DUMMY
125 INTEGER,
POINTER,
DIMENSION(:) :: PTDummy
126 TYPE(LRB_TYPE),
POINTER,
DIMENSION(:) :: ACC_LUA
127 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
128 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_L, BLR_U, BLR_SEND
129 REAL,
POINTER,
DIMENSION(:) :: DIAG
130 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_PANEL
131 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_TMP, BEGS_BLR_STATIC
132 INTEGER :: DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, LorU, I, IP, MEM,
134 INTEGER(8) :: POSELT_DIAG
135 CHARACTER(len=1) :: DIR
136 REAL,
ALLOCATABLE :: WORK(:), TAU(:)
137 INTEGER,
ALLOCATABLE :: JPVT(:)
138 REAL,
ALLOCATABLE :: RWORK(:)
139 REAL,
ALLOCATABLE :: BLOCK(:,:)
141 INTEGER(8) :: UPOS, LPOS
143 include
'mumps_headers.h'
148 NULLIFY(blr_l, blr_u, blr_send)
151 NULLIFY( begs_blr_tmp, begs_blr_static)
152 IF (keep(206).GE.1)
THEN
158 ioldps = ptlust_s(step( inode ))
159 poselt = ptrast(step( inode ))
161 nfront = iw(ioldps+xsize)
162 nass = iabs(iw(ioldps+2+xsize))
163 iw(ioldps+3+xsize) = -99999
164 lr_activated = (iw(ioldps+xxlr).GT.0)
165 compress_panel = (iw(ioldps+xxlr).GE.2)
166 oocwrite_compatible_with_blr =
167 & ( .NOT.lr_activated.OR. (.NOT.compress_panel).OR.
170 ooc_effective_on_front= ((keep(201).EQ.1).AND.
171 & oocwrite_compatible_with_blr)
175 IF(keep(97) .EQ. 0)
THEN
180 IF (avoid_delayed)
THEN
183 seuil_loc =
max(seuil,epsilon(seuil))
188 IF (.not.lr_activated)
THEN
189 nblr_orig = keep(420)
193 IF ((keep(114).EQ.1) .AND.
194 & (keep(116).GT.0) .AND. ((nfront-nass-keep(253)).GT.0)
196 nslaves = iw(ioldps+5+xsize)
197 irow_l = ioldps+6+xsize+nslaves+nass
200 & nfront-nass-keep(253),
207 IF (lr_activated)
THEN
211 IF (k263 .NE. 0 .AND. nass/nblr_orig < 4)
THEN
212 IF ( nblr_orig .GT. nbkjib_orig * 4 )
THEN
213 nblr_orig =
max(nbkjib_orig, (nass+3)/4)
219 pivot_option = keep(468)
220 IF ( uutemp == 0.0e0 .AND.
222 & ooc_effective_on_front
225 IF (k263.EQ.1.AND.(.NOT.lr_activated))
THEN
232 ALLOCATE( ipiv( nass ), stat = allocok )
233 IF ( allocok .GT. 0 )
THEN
234 WRITE(*,*) myid,
' : SMUMPS_FAC2_LU :failed to allocate ',
241 liwfac = iw(ioldps+xxi)
242 IF ( ooc_effective_on_front )
THEN
243 lnextpiv2bewritten = 1
244 unextpiv2bewritten = 1
245 pp_first2swap_l = lnextpiv2bewritten
246 pp_first2swap_u = unextpiv2bewritten
247 monbloc%LastPanelWritten_L = 0
248 monbloc%LastPanelWritten_U = 0
249 monbloc%INODE = inode
250 monbloc%MASTER = .true.
253 monbloc%NCOL = nfront
255 monbloc%Last = .false.
256 monbloc%LastPiv = -68877
257 NULLIFY(monbloc%INDICES)
259 IF (lr_activated)
THEN
261 IF (keep(475).EQ.1)
THEN
263 ELSEIF (keep(475).EQ.2)
THEN
265 ELSEIF (keep(475).EQ.3)
THEN
266 IF (uutemp == 0.0e0)
THEN
274 hf = 6 + iw(ioldps+5+xsize)+xsize
275 ooc_eff_and_write_bypanel = ( (pivot_option.GE.3) .AND.
276 & ooc_effective_on_front )
277 IF (lr_activated)
THEN
278 CALL get_cut(iw(ioldps+hf:ioldps+hf+nfront-1), nass,
279 & nfront-nass, lrgroups, npartscb,
280 & npartsass, begs_blr)
281 CALL regrouping2(begs_blr, npartsass, nass, npartscb,
282 & nfront-nass, keep(488), .false., keep(472))
283 nb_blr = npartsass + npartscb
285 maxi_rank = keep(479)*maxi_cluster
286 lwork = maxi_cluster*maxi_cluster
291 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
292 & rwork(2*maxi_cluster*omp_num),
293 & tau(maxi_cluster*omp_num),
294 & jpvt(maxi_cluster*omp_num),
295 & work(lwork*omp_num),stat=allocok)
296 IF (allocok > 0)
THEN
298 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
301 ALLOCATE(acc_lua(omp_num),stat=allocok)
302 IF (allocok > 0)
THEN
307 IF (keep(480).GE.3)
THEN
309 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
310 & maxi_cluster, maxi_cluster, .true.,
311 & iflag, ierror, keep8)
312 IF (iflag.LT.0)
GOTO 500
313 acc_lua(my_num)%K = 0
317 IF (lr_activated.AND.
330 IF (iflag.LT.0)
GOTO 500
341 IF (iflag.LT.0)
GOTO 500
344 DO WHILE (iend_blr < nass )
345 current_blr = current_blr + 1
346 ibeg_blr = iw(ioldps+1+keep(ixsz)) + 1
347 IF (.NOT. lr_activated)
THEN
348 iend_blr =
min(iend_blr + nblr_orig, nass)
350 iend_blr = begs_blr(current_blr+1)-1
351 begs_blr( current_blr ) = ibeg_blr
352 IF ( iend_blr - ibeg_blr + 1 .GT. maxi_cluster )
THEN
353 maxi_cluster = iend_blr - ibeg_blr + 1
354 lwork = maxi_cluster*maxi_cluster
355 DEALLOCATE(block, work, rwork, tau, jpvt)
356 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
357 & rwork(2*maxi_cluster*omp_num),
358 & tau(maxi_cluster*omp_num),
359 & jpvt(maxi_cluster*omp_num),
360 & work(lwork*omp_num),stat=allocok)
361 IF (allocok > 0)
THEN
363 ierror = omp_num*(lwork + maxi_cluster
366 IF (keep(480).GE.3)
THEN
369 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
370 & maxi_cluster, maxi_cluster, .true.,
371 & iflag, ierror, keep8)
372 IF (iflag.LT.0)
GOTO 500
373 acc_lua(my_num)%K = 0
378 DO WHILE (iend_block < iend_blr )
379 ibeg_block = iw(ioldps+1+keep(ixsz)) + 1
380 IF (keep(405).EQ.0)
THEN
381 keep(425)=
max(keep(425),iend_block-ibeg_block)
384 keep(425)=
max(keep(425),iend_block-ibeg_block)
387 iend_block =
min(iend_block + nbkjib_orig, iend_blr)
390 ibeg_block_for_ipiv = ibeg_block
392 ibeg_block_for_ipiv = ibeg_blr
395 & ibeg_block_for_ipiv,iend_block,n,inode,
396 & iw,liw,a,la,inopv,noffw,nbtinyw,
397 & det_expw, det_mantw, det_signw,
398 & iflag,ioldps,poselt,uu,seuil_loc,keep,keep8,
399 & dkeep(1),pivnul_list(1),lpn_list,
400 & pp_first2swap_l, monbloc%LastPanelWritten_L,
401 & pp_lastpivrptrfilled_l,
402 & pp_first2swap_u, monbloc%LastPanelWritten_U,
403 & pp_lastpivrptrfilled_u,
404 & pivot_option, lr_activated, iend_blr,
405 & inextpiv, ooc_effective_on_front,
406 & nvschur, parpiv_t1,
409 IF (iflag.LT.0)
GOTO 500
416 ELSE IF (inopv .LE. 0)
THEN
418 IF (pivot_option.GE.3)
THEN
420 ELSEIF (pivot_option.EQ.2)
THEN
426 & nfront, nass, iw(ioldps+1+xsize),
427 & last_col, a, la, poselt, ifinb,
429 iw(ioldps+1+xsize) = iw(ioldps+1+xsize) + 1
433 ELSE IF (ifinb .EQ. -1)
THEN
437 npiv = iw(ioldps+1+xsize)
439 nelim = iend_blr - npiv
441 & n, inode, fpere, iw, liw, ioldps, poselt, a, la,
442 & nfront, ibeg_block, npiv, ipiv, nass,lastbl, idummy,
443 & comm, myid, bufr, lbufr, lbufr_bytes,nbfin,leaf,
444 & iflag, ierror, ipool,lpool,
445 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
446 & lrlus, comp, ptrist, ptrast, ptlust_s, ptrfac, step,
447 & pimaster, pamaster, nstk_s,perm,procnode_steps,
448 & root, opassw, opeliw, itloc, rhs_mumps,
449 & fils, dad, ptrarw, ptraiw, intarr,dblarr,
451 & dkeep,nd,frere, lptrar, nelt, frtptr, frtelt,
452 & istep_to_iniv2, tab_pos_in_pere
454 & , npartsass, current_blr
455 & , blr_dummy, lrgroups
458 IF ( iflag .LT. 0 )
GOTO 500
459 IF ( ooc_eff_and_write_bypanel )
THEN
460 monbloc%LastPiv= iw(ioldps+1+xsize)
461 strat = strat_try_write
465 & a(poselt), lafac, monbloc,
466 & lnextpiv2bewritten, unextpiv2bewritten,
467 & iw(ioldps), liwfac,
468 & myid, keep8(31), iflag_ooc,last_call )
469 IF (iflag_ooc < 0 )
THEN
474 npiv = iw(ioldps+1+xsize)
475 IF ( iend_blr .GT. iend_block )
THEN
477 IF (pivot_option.GE.3)
THEN
479 ELSEIF (pivot_option.EQ.2)
THEN
485 & npiv, nfront, iend_blr, last_col,
488 & .true., .false., .true.,
494 npiv = iw(ioldps+1+xsize)
495 IF (lr_activated)
THEN
496 ALLOCATE(blr_u(nb_blr-current_blr),stat=allocok)
497 IF (allocok > 0)
THEN
499 ierror = nb_blr-current_blr
502 ALLOCATE(blr_l(npartsass-current_blr),stat=allocok)
503 IF (allocok > 0)
THEN
505 ierror = npartsass-current_blr
508 nelim = iend_blr - npiv
509 IF (nelim .EQ. iend_blr - ibeg_blr + 1)
THEN
516 DO j=1,nb_blr-current_blr
520 blr_u(j)%ISLR=.false.
527 & current_blr, blr_u)
528 DO j=1,npartsass-current_blr
532 blr_l(j)%ISLR=.false.
539 & current_blr, blr_l)
551 & begs_blr, nb_blr, dkeep(8), keep(466), keep(473), blr_u,
553 & 'h
', WORK, TAU, JPVT, LWORK, RWORK,
554 & BLOCK, MAXI_CLUSTER, NELIM,
555 & .FALSE., 0, 0, 2, KEEP(483), KEEP8,
558.LT.
IF (IFLAG0) GOTO 300
559.NE..AND..GT.
IF ((KEEP(480)0NB_BLRCURRENT_BLR)
565.LT.
IF (KEEP(480)5) THEN
566 CALL SMUMPS_BLR_SAVE_PANEL_LORU(
569 & CURRENT_BLR, BLR_U)
575.LT.
IF (PIVOT_OPTION3) THEN
576.LT.
IF (PIVOT_OPTION2) THEN
577 FIRST_BLOCK = CURRENT_BLR+1
579 FIRST_BLOCK = NPARTSASS+1
582 CALL SMUMPS_BLR_PANEL_LRTRSM(A, LA, POSELT, NFRONT,
584 & NB_BLR, BLR_U, CURRENT_BLR,
585 & FIRST_BLOCK, LAST_BLOCK, 2, 0, 1,
594.OR..NE..AND..GE.
IF (LR_ACTIVATED (K2630PIVOT_OPTION3)) THEN
595 NELIM = IEND_BLR - NPIV
597 IF (associated(BLR_U)) THEN
600 CALL SMUMPS_SEND_FACTORED_BLK( COMM_LOAD, ASS_IRECV,
601 & N, INODE, FPERE, IW, LIW, IOLDPS, POSELT, A, LA, NFRONT,
602 & IBEG_BLR, NPIV, IPIV, NASS,LASTBL, idummy,
603 & COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,NBFIN,LEAF,
604 & IFLAG, IERROR, IPOOL,LPOOL,
605 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
606 & LRLUS, COMP, PTRIST, PTRAST, PTLUST_S, PTRFAC, STEP,
607 & PIMASTER, PAMASTER, NSTK_S,PERM,PROCNODE_STEPS,
608 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
609 & FILS, DAD, PTRARW, PTRAIW,
610 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND,FRERE,
611 & LPTRAR, NELT, FRTPTR, FRTELT,
612 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
613 & , NELIM, LR_ACTIVATED
614 & , NPARTSASS, CURRENT_BLR
615 & , BLR_SEND, LRGROUPS
618.NOT.
IF ( LR_ACTIVATED) THEN
620.EQ.
IF (PIVOT_OPTION2) THEN
625.LT..OR..LT.
IF (IEND_BLRNASS PIVOT_OPTION3) THEN
626 CALL SMUMPS_FAC_SQ(IBEG_BLR, IEND_BLR,
627 & NPIV, NFRONT, NASS, LAST_COL,
628.LT.
& A, LA, POSELT, FIRST_COL, .TRUE., (PIVOT_OPTION3),
629.EQ.
& .TRUE., (KEEP(377)1),
632.NE..AND..LT.
IF (K2630 PIVOT_OPTION3) THEN
633 NELIM = IEND_BLR - NPIV
635 IF (associated(BLR_U)) THEN
638 CALL SMUMPS_SEND_FACTORED_BLK( COMM_LOAD, ASS_IRECV,
639 & N, INODE, FPERE, IW, LIW, IOLDPS, POSELT, A, LA,
640 & NFRONT, IBEG_BLR, NPIV, IPIV, NASS,LASTBL, idummy,
641 & COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,NBFIN,LEAF,
642 & IFLAG, IERROR, IPOOL,LPOOL,
643 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
644 & LRLUS, COMP, PTRIST, PTRAST, PTLUST_S, PTRFAC, STEP,
645 & PIMASTER, PAMASTER, NSTK_S,PERM,PROCNODE_STEPS,
646 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
647 & FILS, DAD, PTRARW, PTRAIW,
648 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND,FRERE,
649 & LPTRAR, NELT, FRTPTR, FRTELT,
650 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
651 & , NELIM, LR_ACTIVATED
652 & , NPARTSASS, CURRENT_BLR
653 & , BLR_SEND, LRGROUPS
657 NELIM = IEND_BLR - NPIV
658.EQ.
IF (NELIM IEND_BLR - IBEG_BLR + 1) THEN
659.GE.
IF (KEEP(480)2) THEN
660.LT.
IF (IEND_BLRNASS) THEN
664 CALL SMUMPS_BLR_UPD_PANEL_LEFT(A, LA, POSELT,
665 & NFRONT, IW(IOLDPS+XXF), 0,
666 & BEGS_BLR, BEGS_BLR, CURRENT_BLR, ACC_LUA,
667 & NB_BLR, NPARTSASS, NELIM,
669 & .FALSE., IFLAG, IERROR, 0,
670 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
671 & KEEP(480), KEEP(479), KEEP(478), KEEP(476),
672 & KEEP(483), MAXI_CLUSTER, MAXI_RANK,
673 & KEEP(474), 0, BLR_U, KEEP8
675.LT.
IF (IFLAG0) GOTO 600
676 CALL SMUMPS_BLR_UPD_PANEL_LEFT(A, LA, POSELT,
677 & NFRONT, IW(IOLDPS+XXF), 1,
678 & BEGS_BLR, BEGS_BLR, CURRENT_BLR, ACC_LUA,
679 & NB_BLR, NPARTSASS, NELIM,
681 & .FALSE., IFLAG, IERROR, 0,
682 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
683 & KEEP(480), KEEP(479), KEEP(478), KEEP(476),
684 & KEEP(483), MAXI_CLUSTER, MAXI_RANK,
685 & KEEP(474), 0, BLR_U, KEEP8,
692.LT.
IF (IFLAG0) GOTO 500
695.EQ.
IF (KEEP(486)3) THEN
696.EQ.
IF (KEEP(480)0) THEN
697 DEALLOCATE(BLR_U,BLR_L)
704.EQ.
IF (KEEP(475)0) THEN
705.LT.
IF (IEND_BLRNFRONT) THEN
706 CALL SMUMPS_FAC_SQ(IBEG_BLR, IEND_BLR,
707 & NPIV, NFRONT, NASS,
711 & .TRUE., .FALSE., .FALSE.,
717!$OMP PARALLEL PRIVATE(UPOS,LPOS,FIRST_BLOCK,LAST_BLOCK)
719 CALL SMUMPS_COMPRESS_PANEL(A, LA, POSELT, IFLAG, IERROR,
721 & BEGS_BLR, NPARTSASS, DKEEP(8), KEEP(466), KEEP(473),
723 & CURRENT_BLR, 'v
', WORK, TAU, JPVT, LWORK, RWORK,
724 & BLOCK, MAXI_CLUSTER, NELIM,
726 & 2, KEEP(483), KEEP8
731.NE..AND..GT.
IF ((KEEP(480)0NB_BLRCURRENT_BLR)
737.LT.
IF (KEEP(480)5) THEN
738 CALL SMUMPS_BLR_SAVE_PANEL_LORU (
741 & CURRENT_BLR, BLR_L)
748.LT.
IF (IFLAG0) GOTO 400
749.GT.
IF (KEEP(475)0) THEN
750 CALL SMUMPS_BLR_PANEL_LRTRSM(A, LA, POSELT, NFRONT,
752 & NPARTSASS, BLR_L, CURRENT_BLR, CURRENT_BLR+1,
753 & NPARTSASS, 2, 0, 0, .FALSE.)
758.GE.
IF (KEEP(480)2) THEN
759 UPOS = POSELT+int(BEGS_BLR(CURRENT_BLR)-1,8)*int(NFRONT,8)
760 & +int(BEGS_BLR(CURRENT_BLR+1)-NELIM-1,8)
761 LPOS = POSELT+int(BEGS_BLR(CURRENT_BLR+1)-1,8)*int(NFRONT,8)
762 & +int(BEGS_BLR(CURRENT_BLR+1)-NELIM-1,8)
763 CALL SMUMPS_BLR_UPD_NELIM_VAR_L(A, LA, UPOS, A, LA, LPOS,
764 & IFLAG, IERROR, NFRONT, NFRONT,
765 & BEGS_BLR, CURRENT_BLR, BLR_L, NPARTSASS,
766 & CURRENT_BLR+1, NELIM, 'n
')
767.LT.
IF (IFLAG0) GOTO 444
768.LT.
IF (IEND_BLRNASS) THEN
769 CALL SMUMPS_BLR_UPD_PANEL_LEFT(A, LA, POSELT,
770 & NFRONT, IW(IOLDPS+XXF), 0,
771 & BEGS_BLR, BEGS_BLR, CURRENT_BLR, ACC_LUA,
772 & NB_BLR, NPARTSASS, NELIM,
774 & .FALSE., IFLAG, IERROR, 0,
775 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
776 & KEEP(480), KEEP(479), KEEP(478), KEEP(476),
777 & KEEP(483), MAXI_CLUSTER, MAXI_RANK,
778 & KEEP(474), 0, BLR_U, KEEP8
780.LT.
IF (IFLAG0) GOTO 442
781 CALL SMUMPS_BLR_UPD_PANEL_LEFT(A, LA, POSELT,
782 & NFRONT, IW(IOLDPS+XXF), 1,
783 & BEGS_BLR, BEGS_BLR, CURRENT_BLR, ACC_LUA,
784 & NB_BLR, NPARTSASS, NELIM,
786 & .FALSE., IFLAG, IERROR, 0,
787 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
788 & KEEP(480), KEEP(479), KEEP(478), KEEP(476),
789 & KEEP(483), MAXI_CLUSTER, MAXI_RANK,
790 & KEEP(474), 0, BLR_U, KEEP8,
797 CALL SMUMPS_BLR_UPDATE_TRAILING(A, LA, POSELT,
798 & IFLAG, IERROR, NFRONT,
799 & BEGS_BLR, BEGS_BLR, CURRENT_BLR, BLR_L, NPARTSASS,
800 & BLR_U, NB_BLR, NELIM, .FALSE., 0,
802 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477)
808.LT.
IF (IFLAG0) GOTO 400
809.GT.
IF (KEEP(475)0) THEN
810 FIRST_BLOCK = CURRENT_BLR+1
811.EQ..AND..EQ.
IF (KEEP(486)2UU0) THEN
812 LAST_BLOCK = CURRENT_BLR
814 LAST_BLOCK = NPARTSASS
816 CALL SMUMPS_DECOMPRESS_PANEL(A, LA, POSELT, NFRONT,
818 & BEGS_BLR(CURRENT_BLR),
819 & BEGS_BLR(CURRENT_BLR+1), NPARTSASS, BLR_L, CURRENT_BLR, 'v
',
821 & BEG_I_IN=FIRST_BLOCK, END_I_IN=LAST_BLOCK)
825.GE.
IF (KEEP(475)2) THEN
826.EQ.
IF (KEEP(475)2) THEN
827 FIRST_BLOCK = NPARTSASS+1
829 FIRST_BLOCK = CURRENT_BLR+1
831.NE.
IF (KEEP(486)2) THEN
834 LAST_BLOCK = NPARTSASS
836 LAST_BLOCK = CURRENT_BLR
838 CALL SMUMPS_DECOMPRESS_PANEL(A, LA, POSELT, NFRONT,
840 & BEGS_BLR(CURRENT_BLR),
841 & BEGS_BLR(CURRENT_BLR+1), NB_BLR, BLR_U, CURRENT_BLR, 'h
',
843 & BEG_I_IN=FIRST_BLOCK, END_I_IN=LAST_BLOCK)
849.LT.
IF (IFLAG0) GOTO 500
850.EQ.
IF (KEEP(486)3) THEN
851.EQ..OR..EQ.
IF (KEEP(480)0NB_BLRCURRENT_BLR) THEN
852 CALL DEALLOC_BLR_PANEL(BLR_U, NB_BLR-CURRENT_BLR,
854 CALL DEALLOC_BLR_PANEL(BLR_L, NPARTSASS-CURRENT_BLR,
856 DEALLOCATE(BLR_U,BLR_L)
862 IF ( OOC_EFFECTIVE_ON_FRONT ) THEN
863 STRAT = STRAT_TRY_WRITE
864 MonBloc%LastPiv = NPIV
866 CALL SMUMPS_OOC_IO_LU_PANEL
867 & ( STRAT, TYPEF_BOTH_LU,
868 & A(POSELT), LAFAC, MonBloc,
869 & LNextPiv2beWritten, UNextPiv2beWritten,
870 & IW(IOLDPS), LIWFAC,
871 & MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
872 IF (IFLAG_OOC < 0 ) THEN
879 IF (LR_ACTIVATED) THEN
880 IBEG_BLR = IW(IOLDPS+1+XSIZE) + 1
881 BEGS_BLR( CURRENT_BLR + 1 ) = IBEG_BLR
882.EQ.
IF ( (KEEP(486)2)
884 CALL SMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW(IOLDPS+XXF),
887 allocate(BEGS_BLR_TMP(NB_BLR+1),stat=allocok)
888 IF (allocok > 0) THEN
894 BEGS_BLR_TMP(IP) = BEGS_BLR_STATIC(IP)
904!$OMP& PRIVATE(IP, LorU, DIR, NELIM)
907!$OMP DO PRIVATE(DIAG, DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, POSELT_DIAG, MEM,
909!$OMP& REDUCTION(+:MEM_TOT)
912.LT.
IF (IFLAG0) CYCLE
913 DIAGSIZ_DYN = BEGS_BLR(IP+1)-BEGS_BLR(IP)
914 DIAGSIZ_STA = BEGS_BLR_STATIC(IP+1)-BEGS_BLR(IP)
915 MEM = DIAGSIZ_DYN*(2*DIAGSIZ_STA-DIAGSIZ_DYN)
916 MEM_TOT = MEM_TOT + MEM
917 ALLOCATE(DIAG(MEM), stat=allocok)
918 IF (allocok > 0) THEN
924 POSELT_DIAG = POSELT + int(BEGS_BLR(IP)-1,8)*int(NFRONT,8)
925 & + int(BEGS_BLR(IP)-1,8)
927.LE.
IF (IDIAGSIZ_DYN) THEN
928 DIAG(DPOS:DPOS+DIAGSIZ_STA-1) =
929 & A(POSELT_DIAG:POSELT_DIAG+int(DIAGSIZ_STA-1,8))
930 DPOS = DPOS + DIAGSIZ_STA
932 DIAG(DPOS:DPOS+DIAGSIZ_DYN-1) =
933 & A(POSELT_DIAG:POSELT_DIAG+int(DIAGSIZ_DYN-1,8))
934 DPOS = DPOS + DIAGSIZ_DYN
936 POSELT_DIAG = POSELT_DIAG + int(NFRONT,8)
938 CALL SMUMPS_BLR_SAVE_DIAG_BLOCK(
946 CALL MUMPS_DM_FAC_UPD_DYN_MEMCNTS(int(MEM_TOT,8),
947 & .FALSE., KEEP8, IFLAG, IERROR, .TRUE., .TRUE.)
951.LT.
IF (IFLAG0) GOTO 460
954 NELIM = BEGS_BLR_TMP(IP+1)-BEGS_BLR(IP+1)
959 CALL SMUMPS_BLR_RETRIEVE_PANEL_LORU(
960 & IW(IOLDPS+XXF), LorU, IP, BLR_PANEL)
961 CALL DEALLOC_BLR_PANEL(BLR_PANEL, NPARTSASS-IP, KEEP8,
971 CALL SMUMPS_COMPRESS_PANEL(A, LA, POSELT, IFLAG,
972 & IERROR, NFRONT, BEGS_BLR_TMP,
973 & NB_BLR, DKEEP(8), KEEP(466), KEEP(473),
975 & DIR, WORK, TAU, JPVT, LWORK, RWORK,
976 & BLOCK, MAXI_CLUSTER, NELIM,
978 & 2, KEEP(483), KEEP8,
979 & END_I_IN=NPARTSASS, FRSWAP=.TRUE.
984.LT.
IF (IFLAG0) GOTO 440
990 BEGS_BLR_TMP(IP+1) = BEGS_BLR(IP+1)
1005 deallocate(BEGS_BLR_TMP)
1008.LT.
IF (IFLAG0) GOTO 500
1009.EQ.
IF ( (KEEP(486)2)
1011 CALL SMUMPS_BLR_SAVE_BEGS_BLR_DYN(IW(IOLDPS+XXF),
1014.GE.
IF (IFLAG0) THEN
1015 CALL UPD_MRY_LU_FR(NASS, NFRONT-NASS, 0, NELIM)
1017 CALL SMUMPS_BLR_RETRIEVE_PANEL_LORU(
1018 & IW(IOLDPS+XXF), 0, IP, BLR_PANEL)
1019 CALL UPD_MRY_LU_LRGAIN(BLR_PANEL, NPARTSASS-IP
1021 CALL SMUMPS_BLR_RETRIEVE_PANEL_LORU(
1022 & IW(IOLDPS+XXF), 1, IP, BLR_PANEL)
1023 CALL UPD_MRY_LU_LRGAIN(BLR_PANEL, NB_BLR-IP
1026 CALL UPD_FLOP_FACTO_FR(NFRONT, NASS, NASS-NELIM, 0, 2)
1029.NE.
IF (KEEP(486)0) THEN
1030.NOT.
IF (LR_ACTIVATED) THEN
1031 CALL UPD_FLOP_FRFRONTS(NFRONT, NPIV, NASS, 0, 2)
1034.LT.
IF (IFLAG0) GOTO 500
1035 IF ( OOC_EFFECTIVE_ON_FRONT ) THEN
1036 STRAT = STRAT_WRITE_MAX
1037 MonBloc%Last = .TRUE.
1038 MonBloc%LastPiv = IW(IOLDPS+1+XSIZE)
1040 CALL SMUMPS_OOC_IO_LU_PANEL
1041 & ( STRAT, TYPEF_BOTH_LU,
1042 & A(POSELT), LAFAC, MonBloc,
1043 & LNextPiv2beWritten, UNextPiv2beWritten,
1044 & IW(IOLDPS), LIWFAC,
1045 & MYID, KEEP8(31), IFLAG_OOC, LAST_CALL )
1046 IF (IFLAG_OOC < 0 ) THEN
1050 CALL SMUMPS_OOC_PP_TRYRELEASE_SPACE (IWPOS,
1051 & IOLDPS, IW, LIW, MonBloc , NFRONT, KEEP)
1056 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
1058 IF (LR_ACTIVATED) THEN
1059 IF (allocated(RWORK)) DEALLOCATE(RWORK)
1060 IF (allocated(WORK)) DEALLOCATE(WORK)
1061 IF (allocated(TAU)) DEALLOCATE(TAU)
1062 IF (allocated(JPVT)) DEALLOCATE(JPVT)
1063 IF (allocated(BLOCK)) DEALLOCATE(BLOCK)
1064 IF (associated(ACC_LUA)) THEN
1065.GE.
IF (KEEP(480)3) THEN
1067 CALL DEALLOC_LRB(ACC_LUA(MY_NUM), KEEP8, KEEP(34))
1072 IF (associated(BEGS_BLR)) THEN
1073 DEALLOCATE(BEGS_BLR)
1077.AND..NE.
IF (LR_ACTIVATEDKEEP(480)0) THEN
1084 CALL SMUMPS_BLR_FREE_ALL_PANELS(IW(IOLDPS+XXF), 2,
1088 IF (LR_ACTIVATED) THEN
1094 CALL SMUMPS_BLR_END_FRONT(IW(IOLDPS+XXF), IFLAG, KEEP8,
subroutine smumps_fac2_lu(comm_load, ass_irecv, n, inode, fpere, iw, liw, a, la, uu, noffw, npvw, 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)
subroutine smumps_send_factored_blk(comm_load, ass_irecv, n, inode, fpere, iw, liw, ioldps, poselt, a, la, lda_fs, ibeg_block, iend, tipiv, lpiv, lastbl, nb_bloc_fac, 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, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, nelim, lr_activated, npartsass, current_blr_panel, blr_loru, lrgroups)