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, NBTINYW
50 INTEGER,
intent(inout) :: DET_EXPW, DET_SIGNW
51 DOUBLE PRECISION,
intent(inout) :: DET_MANTW
53 INTEGER,
TARGET :: IW( LIW )
54 DOUBLE PRECISION A( LA )
55 DOUBLE PRECISION UU, SEUIL
56 TYPE (DMUMPS_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 IWPOS, IWPOSCB, COMP
66 INTEGER FRTPTR( N + 1 ), FRTELT( NELT )
67 INTEGER BUFR( LBUFR ), IPOOL(),
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 DOUBLE PRECISION :: RHS_MUMPS(KEEP(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 DOUBLE PRECISION DBLARR(KEEP8(26))
83 INTEGER INTARR(KEEP8(27))
86 INTEGER PIVNUL_LIST(LPN_LIST)
87 DOUBLE PRECISION DKEEP(230)
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 LASTBL, 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
104 DOUBLE PRECISION UUTEMP
105 include
'mumps_headers.h'
106 INTEGER ,
ALLOCATABLE,
DIMENSION ( : ) :: IPIV
107 DOUBLE PRECISION ,
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 ::
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 DOUBLE PRECISION,
POINTER,
DIMENSION(:) :: DIAG
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 DOUBLE PRECISION,
ALLOCATABLE :: WORK(:), TAU(:)
131 INTEGER,
ALLOCATABLE :: JPVT(:)
132 DOUBLE PRECISION,
ALLOCATABLE :: RWORK(:)
133 DOUBLE PRECISION,
ALLOCATABLE :: (:,:)
140 DOUBLE PRECISION SEUIL_LOC
141 DOUBLE PRECISION GW_FACTCUMUL
142 INTEGER PIVSIZ,IWPOSPIV
144 parameter(one = 1.0d0)
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.0d0))
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.0d0) .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,
' : DMUMPS_FAC2_LDLT failed to allocate ',
243 IF (keep(219).GE.3)
THEN
248 ALLOCATE ( diag_orig(sizediag_orig), stat = allocok )
249 IF ( allocok .GT. 0 )
THEN
251 &
' : FAC_NIV2 failed to allocate ',
252 & nass,
' REAL/COMPLEX entries'
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 IF (keep(475).EQ.3)
THEN
279 IF (uutemp == 0.0d0)
THEN
287 hf = 6 + iw(ioldps+5+xsize)+xsize
288 ooc_eff_and_write_bypanel = ( (pivot_option.GE.2) .AND.
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)
299 lwork = maxi_cluster*maxi_cluster
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 IF (keep(480).GE.3)
THEN
322 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
323 & maxi_cluster, maxi_cluster, .true.,
324 & iflag, ierror, keep8)
325 IF (iflag.LT.0)
GOTO 480
326 acc_lua(my_num)%K = 0
330 IF (lr_activated.AND.(keep(480).NE.0
341 IF (iflag.LT.0)
GOTO 500
352 IF (iflag.LT.0)
GOTO 500
355 DO WHILE (iend_blr < nass )
356 current_blr = current_blr + 1
357 ibeg_blr = iw(ioldps+1+keep(ixsz)) + 1
358 IF (.NOT. 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 IF ( iend_blr - ibeg_blr + 1 .GT. 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 IF (keep(480).GE.3)
THEN
380 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
381 & maxi_cluster, maxi_cluster, .true.,
382 & iflag, ierror, keep8)
383 IF (iflag.LT.0)
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 IF (keep(405).EQ.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
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 IF (iflag.LT.0)
GOTO 500
423 IF (inopv.EQ. 1)
THEN
429 ELSE IF (inopv .LE. 0)
THEN
433 & nass, iw(ioldps+1+xsize), inode,a,la,
434 & ldafs, poselt,ifinb,
437 & pivot_option, iend_blr, lr_activated)
438 IF(pivsiz .EQ. 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 ELSE IF (ifinb .EQ. -1)
THEN
450 npiv = iw(ioldps+1+xsize)
451 IF ( ooc_eff_and_write_bypanel )
THEN
452 IF (.NOT.reset_to_one.OR.k109_save.EQ.keep(109))
THEN
453 monbloc%Last = .false.
454 monbloc%LastPiv= npiv
458 & typefile, a(poselt),
459 & lafac, monbloc, nextpiv2bewritten, idummy, iw(ioldps),
460 & liwfac, myid, keep8(31), iflag_ooc,last_call )
461 IF (iflag_ooc .LT. 0 ) iflag = iflag_ooc
462 IF (iflag .LT. 0)
GOTO 500
466 nelim = iend_blr - npiv
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 IF ( iflag .LT. 0 )
GOTO 500
486 IF (reset_to_one.AND.k109_save.LT.keep(109))
THEN
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
499 & typefile, a(poselt),
500 & lafac, monbloc, nextpiv2bewritten, idummy, iw(ioldps),
501 & liwfac, myid, keep8(31), iflag_ooc,last_call )
502 IF (iflag_ooc .LT. 0 )
THEN
504 IF (iflag .LT. 0)
GOTO 500
508 IF ( iend_blr .GT. iend_block )
THEN
509 IF (pivot_option.EQ.2)
THEN
515 & nass,nass,inode,a,la,
519 & iend_blr, last_row,
520 & .false., .true., lr_activated,
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 IF (iend_blr.NE.iend_block)
THEN
536 WRITE(*,*)
"Internal error 1 in DMUMPS_FAC2_LDLT",
537 & iend_blr, iend_block
540 IF (nelim .EQ. iend_blr - ibeg_blr + 1)
THEN
547 DO j=1,nb_blr-current_blr
551 blr_l(j)%ISLR=.false.
558 & current_blr, blr_l)
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 IF (iflag.LT.0)
GOTO 400
578 IF (pivot_option.LT.2)
THEN
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 IF (iflag.LT.0)
GOTO 480
600 IF (keep(480).LT.5)
THEN
604 & current_blr, blr_l)
609 IF (.NOT. lr_activated)
THEN
611 & nass, nass, inode, a, la,
616 & (pivot_option.LE.1), .false., lr_activated,
617 & iw, liw, ioldps+6+xsize+nfront+ibeg_blr-1)
620 nelim = iend_blr-npiv
622 IF (
associated(blr_l))
THEN
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 IF ( iflag .LT. 0 )
GOTO 500
645 IF (reset_to_one.AND.k109_save.LT.keep(109))
THEN
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
658 & typefile, a(poselt),
659 & lafac, monbloc, nextpiv2bewritten, idummy, iw(ioldps),
660 & liwfac, myid, keep8(31), iflag_ooc,last_call )
661 IF (iflag_ooc .LT. 0 )
THEN
663 IF (iflag .LT. 0)
GOTO 500
667 IF (.NOT. lr_activated)
THEN
668 IF (pivot_option.EQ.2)
THEN
674 & nass,nass,inode,a,la,
679 & .false., .true., lr_activated,
683 nelim = iend_block - npiv
684 IF (iend_blr.NE.iend_block)
THEN
690 IF (keep(480).GE.2)
THEN
691 IF (iend_blr.LT.nass)
THEN
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 IF (nelim .EQ. iend_blr - ibeg_blr + 1)
GOTO 450
705 IF (keep(480).LT.2)
THEN
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 IF (iflag.LT.0)
GOTO 450
719 IF (pivot_option.LT.2)
THEN
720 IF ((uu.GT.0).OR.(keep(486).NE.2))
THEN
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 DMUMPS_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 DMUMPS_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 DMUMPS_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 DMUMPS_BLR_RETRIEVE_PANEL_LORU(
845 & IW(IOLDPS+XXF), 0, IP, BLR_PANEL)
846 CALL DEALLOC_BLR_PANEL(BLR_PANEL, NPARTSASS-IP, KEEP8,
851 CALL DMUMPS_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 DMUMPS_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 DMUMPS_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 DMUMPS_OOC_PP_TRYRELEASE_SPACE (IWPOS,
911 & IOLDPS, IW, LIW, MonBloc , NFRONT, KEEP)
916 CALL DMUMPS_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 DMUMPS_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 DMUMPS_BLR_FREE_ALL_PANELS(IW(IOLDPS+XXF), 0,
964 IF (LR_ACTIVATED) THEN
970 CALL DMUMPS_BLR_END_FRONT(IW(IOLDPS+XXF), IFLAG, KEEP8,