17 & IOLDPS, POSELT, IFLAG, IERROR,
18 & UU, NNEGW, NPVW, NB22T1W, NBTINYW,
19 & DET_EXPW, DET_MANTW, DET_SIGNW,
21 & MYID, SEUIL, AVOID_DELAYED, ETATASS,
22 & DKEEP,PIVNUL_LIST,LPN_LIST, IWPOS
37 INTEGER(8) :: LA, POSELT
38 INTEGER N, INODE, LIW, IFLAG, IERROR
39 INTEGER,
intent(inout) :: NNEGW, NPVW, NB22T1W, NBTINYW
40 INTEGER,
intent(inout) :: DET_EXPW, DET_SIGNW
41 REAL,
intent(inout) :: DET_MANTW
47 INTEGER,
TARGET :: IW( LIW )
48 INTEGER,
intent(in) :: PERM(N)
50 INTEGER ETATASS, IWPOS
52 INTEGER PIVNUL_LIST(LPN_LIST)
54 INTEGER :: LRGROUPS(N)
55 INTEGER INOPV, IFINB, NFRONT, NPIV, IBEG_BLOCK, IEND_BLOCK
56 INTEGER NASS, NBKJIB_ORIG, XSIZE
61 LOGICAL IS_MAXFROMM_AVAIL
64 INTEGER LAST_ROW, FIRST_ROW
67 INTEGER LIWFAC, STRAT, NextPiv2beWritten, IFLAG_OOC,
68 & idummy, pp_first2swap_l, pp_lastpivrptrfilled
69 TYPE(io_block) :: MonBloc
71 INTEGER PARPIV_T1, OFFSET
73 REAL,
ALLOCATABLE,
DIMENSION(:) ::
77 LOGICAL COMPRESS_CB, COMPRESS_PANEL
78 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR, OOC_EFFECTIVE_ON_FRONT,
79 & ooc_eff_and_write_bypanel
82 INTEGER FIRST_BLOCK, LAST_BLOCK
83 INTEGER HF, NPARTSASS, NPARTSCB, NB_BLR
84 INTEGER MAXI_CLUSTER, LWORK, NELIM,
85 TYPE(
lrb_type),
POINTER,
DIMENSION(:,:) :: CB_LRB
86 INTEGER,
POINTER,
DIMENSION(:) :: PTDummy
87 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: ACC_LUA
88 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
89 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_L
90 REAL,
POINTER,
DIMENSION(:) :: DIAG
91 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_TMP
92 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_PANEL
93 INTEGER :: DIAGSIZ_STA, DIAGSIZ_DYN, DIAGPOS, I, IP, MEM, MEM_TOT
94 INTEGER(8) :: POSELT_DIAG
95 REAL,
ALLOCATABLE :: WORK(:), TAU(:)
96 INTEGER,
ALLOCATABLE :: JPVT(:)
97 REAL,
ALLOCATABLE :: RWORK(:)
98 REAL,
ALLOCATABLE :: BLOCK(:,:)
102 INTEGER(8) :: UPOS, LPOS, DPOS
103 REAL :: ONE, MONE, ZERO
104 parameter(one = 1.0e0, mone=-1.0e0)
105 parameter(zero=0.0e0)
107 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: NEXT_BLR_L
108 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_STATIC
109 INTEGER :: NVSCHUR, NVSCHUR_K253, IROW_L
110 include
'mumps_headers.h'
111 INTEGER NBLR_ORIG, IBEG_BLR, IEND_BLR
113 INTEGER PIVSIZ,IWPOSP2
114 is_maxfromm_avail = .false.
115 IF (keep(206).GE.1)
THEN
121 IF(keep(97) .EQ. 0)
THEN
127 IF (avoid_delayed)
THEN
129 seuil_loc =
max(seuil,epsilon(seuil))
135 nfront = iw(ioldps+xsize)
137 nass = iabs(iw(ioldps+2+xsize))
139 lr_activated= .false.
140 compress_panel = .false.
141 compress_cb = .false.
147 NULLIFY(begs_blr_tmp)
150 compress_panel = (iw(ioldps+xxlr).GE.2)
151 compress_cb = ((iw(ioldps+xxlr).EQ.1).OR.
152 & (iw(ioldps+xxlr).EQ.3))
153 lr_activated = (iw(ioldps+xxlr
154 IF (compress_cb.AND.(.NOT.compress_panel))
THEN
155 compress_panel = .true.
160 oocwrite_compatible_with_blr =
161 & ( .NOT.lr_activated.OR.(.NOT.compress_panel).OR.
164 ooc_effective_on_front= ((keep(201).EQ.1).AND.
165 & oocwrite_compatible_with_blr)
167 & lr_activated, parpiv_t1)
168 lrtrsm_option = keep(475)
169 pivot_option = keep(468)
170 IF (uutemp.EQ.zero)
THEN
172 ELSE IF (parpiv_t1.NE.0)
THEN
173 pivot_option =
min(pivot_option,2)
175 IF (lr_activated)
THEN
176 IF (lrtrsm_option.EQ.3)
THEN
177 pivot_option =
min(pivot_option,1)
178 ELSEIF (lrtrsm_option.EQ.2)
THEN
179 pivot_option =
min(pivot_option, 2)
182 IF (pivot_option.LE.1)
THEN
185 IF (nass.LT.keep(4))
THEN
187 ELSE IF (nass .GT. keep(3))
THEN
188 nbkjib_orig =
min( keep(6), nass )
190 nbkjib_orig =
min( keep(5), nass )
192 IF (.not.lr_activated)
THEN
193 nblr_orig = keep(420)
197 IF ((keep(114).EQ.1) .AND.
198 & (keep(116).GT.0) .AND. ((nfront-nass-keep(253)).GT.0)
200 irow_l = ioldps+6+xsize+nass
203 & nfront-nass-keep(253),
215 liwfac = iw(ioldps+xxi)
216 IF (ooc_effective_on_front)
THEN
218 nextpiv2bewritten = 1
219 pp_first2swap_l = nextpiv2bewritten
220 monbloc%LastPanelWritten_L = 0
221 pp_lastpivrptrfilled = 0
222 monbloc%INODE = inode
223 monbloc%MASTER = .true.
225 monbloc%NROW = nfront
226 monbloc%NCOL = nfront
228 monbloc%Last = .false.
229 monbloc%LastPiv = -77777
231 & iw(ioldps+6+nfront+xsize:
232 & ioldps+5+nfront+xsize+nfront)
234 IF (lr_activated)
THEN
235 IF (keep(405) .EQ. 1)
THEN
242 ELSE IF (keep(486).NE.0)
THEN
244 ooc_eff_and_write_bypanel = ( (pivot_option.GE.3) .AND.
245 & ooc_effective_on_front )
246 hf = 6 + iw(ioldps+5+xsize)+xsize
247 IF (lr_activated)
THEN
248 CALL get_cut(iw(ioldps+hf:ioldps+hf+nfront-1), nass,
249 & nfront-nass, lrgroups, npartscb,
250 & npartsass, begs_blr)
251 CALL regrouping2(begs_blr, npartsass, nass, npartscb,
252 & nfront-nass, keep(488), .false., keep(472))
253 nb_blr = npartsass + npartscb
254 call max_cluster(begs_blr,nb_blr,maxi_cluster)
255 maxi_rank = keep(479)*maxi_cluster
256 lwork = maxi_cluster*maxi_cluster
261 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
262 & rwork(2*maxi_cluster*omp_num),
263 & tau(maxi_cluster*omp_num),
264 & jpvt(maxi_cluster*omp_num),
265 & work(lwork*omp_num),stat=allocok)
266 IF (allocok > 0)
THEN
268 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
271 ALLOCATE(acc_lua(omp_num),stat=allocok)
272 IF (allocok > 0)
THEN
277 IF (keep(480).GE.3)
THEN
279 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
280 & maxi_cluster, maxi_cluster, .true.,
281 & iflag, ierror, keep8)
282 IF (iflag.LT.0)
GOTO 500
283 acc_lua(my_num)%K = 0
287 IF (lr_activated.AND.(keep(480).NE.0
296 IF (iflag.LT.0)
GOTO 500
307 IF (iflag.LT.0)
GOTO 500
309 IF (compress_cb.AND.npartscb.GT.0)
THEN
310 allocate(cb_lrb(npartscb,npartscb),stat=allocok)
311 IF (allocok > 0)
THEN
313 ierror = npartscb*npartscb
320 NULLIFY(cb_lrb(ii,jj)%Q)
321 NULLIFY(cb_lrb(ii,jj)%R)
322 cb_lrb(ii,jj)%ISLR = .false.
327 DO WHILE (iend_blr < nass )
328 current_blr = current_blr + 1
329 ibeg_blr = iw(ioldps+1+keep(ixsz)) + 1
330 IF (.NOT. lr_activated)
THEN
331 iend_blr =
min(iend_blr + nblr_orig, nass)
333 iend_blr = begs_blr(current_blr+1)-1
334 begs_blr( current_blr ) = ibeg_blr
335 IF ( iend_blr - ibeg_blr + 1 .GT. maxi_cluster )
THEN
336 maxi_cluster = iend_blr - ibeg_blr + 1
337 lwork = maxi_cluster*maxi_cluster
338 DEALLOCATE(block, work, rwork, tau, jpvt)
339 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
340 & rwork(2*maxi_cluster*omp_num),
341 & tau(maxi_cluster*omp_num),
342 & jpvt(maxi_cluster*omp_num),
343 & work(lwork*omp_num),stat=allocok)
344 IF (allocok > 0)
THEN
346 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
349 IF (keep(480).GE.3)
THEN
352 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
353 & maxi_cluster, maxi_cluster, .true.,
354 & iflag, ierror, keep8)
355 IF (iflag.LT.0)
GOTO 500
356 acc_lua(my_num)%K = 0
360 IF (keep(480).GE.5)
THEN
361 IF (current_blr.EQ.1)
THEN
362 ALLOCATE(blr_l(nb_blr-current_blr),stat=allocok)
363 IF (allocok > 0)
THEN
365 ierror = nb_blr-current_blr
368 IF (nb_blr.GT.current_blr)
THEN
369 blr_l(1:nb_blr-current_blr)%ISLR=.false.
376 IF (nb_blr.GT.current_blr)
THEN
380 & current_blr, blr_l)
383 IF (current_blr.LT.npartsass)
THEN
384 ALLOCATE(next_blr_l(nb_blr-current_blr-1),stat=allocok)
385 IF (allocok > 0)
THEN
387 ierror = nb_blr-current_blr-1
390 IF (nb_blr.GT.current_blr+1)
THEN
394 & current_blr+1, next_blr_l)
398 ALLOCATE(blr_l(nb_blr-current_blr),stat=allocok)
399 IF (allocok > 0)
THEN
401 ierror = nb_blr-current_blr
406 IF (lr_activated)
THEN
408 DO WHILE (iend_block < iend_blr )
409 ibeg_block = iw(ioldps+1+keep(ixsz)) + 1
410 IF (keep(405).EQ.0)
THEN
411 keep(425)=
max(keep(425),iend_block-ibeg_block)
414 keep(425)=
max(keep(425),iend_block-ibeg_block)
417 iend_block =
min(iend_block + nbkjib_orig, iend_blr)
420 & ibeg_block, iend_block,
422 & inopv, nnegw, nb22t1w, nbtinyw,
423 & det_expw, det_mantw, det_signw,
424 & iflag,ioldps,poselt,uutemp,
425 & seuil_loc,keep,keep8,pivsiz,
426 & dkeep(1),pivnul_list(1),lpn_list, xsize,
427 & pp_first2swap_l, monbloc%LastPanelWritten_L,
428 & pp_lastpivrptrfilled, maxfromm, is_maxfromm_avail,
429 & pivot_option, iend_blr, inextpiv,
430 & ooc_effective_on_front,
431 & nvschur, parpiv_t1, lr_activated
433 IF (iflag.LT.0)
GOTO 500
440 ELSE IF ( inopv.LE.0 )
THEN
444 IF (pivot_option.GE.3)
THEN
446 nvschur_k253 = nvschur + keep(253)
447 ELSEIF (pivot_option.EQ.2)
THEN
453 & nfront, nass, iw(ioldps+1+xsize),
458 & is_maxfromm_avail, (uutemp.NE.0.0e0),
460 & last_row, iend_blr, nvschur_k253,
463 IF(pivsiz .EQ. 2)
THEN
464 iwposp2 = ioldps+iw(ioldps+1+xsize)+6
465 iw(iwposp2+nfront+xsize) =
466 & -iw(iwposp2+nfront+xsize)
468 iw(ioldps+1+xsize) = iw(ioldps+1+xsize) + pivsiz
471 ELSE IF (ifinb.EQ.-1)
THEN
475 IF ( ooc_eff_and_write_bypanel )
THEN
476 monbloc%Last = lastbl
477 monbloc%LastPiv= iw(ioldps+1+xsize)
481 & typef_l, a(poselt),
482 & lafac, monbloc, nextpiv2bewritten, idummy,
483 & iw(ioldps), liwfac,
484 & myid, keep8(31), iflag_ooc,last_call )
485 IF (iflag_ooc < 0 )
THEN
490 npiv = iw(ioldps+1+xsize)
491 IF ( iend_blr .GT. iend_block )
THEN
492 IF (pivot_option.GE.3)
THEN
494 ELSEIF (pivot_option.EQ.2)
THEN
500 & npiv, nfront,nass,inode,a,la,
504 & iend_blr, last_row,
505 & .false., .true., lr_activated,
510 npiv = iw(ioldps+1+xsize)
511 IF (.NOT. lr_activated
512 & .OR. (.NOT. compress_panel)
514 IF (pivot_option.GE.3)
THEN
516 ELSEIF (pivot_option.EQ.2)
THEN
522 & nfront,nass,inode,a,la,
527 & (pivot_option.LE.1), .true., lr_activated,
528 & iw, liw, ioldps+6+xsize+nfront+ibeg_blr-1)
530 nelim = iend_block - npiv
531 IF (nelim .EQ. iend_blr - ibeg_blr + 1)
THEN
538 DO j=1,nb_blr-current_blr
542 blr_l(j)%ISLR=.false.
549 & current_blr, blr_l)
551 IF (keep(480).GE.2 .AND. iend_blr.LT.nass)
THEN
552 IF (lrtrsm_option.EQ.2)
THEN
553 first_block = npartsass-current_blr
561 & nfront, iw(ioldps+xxf),
562 & begs_blr, current_blr, nb_blr, npartsass,
564 & iw(hf+ioldps+nfront), block,
565 & acc_lua, maxi_cluster, maxi_rank,
567 & keep(481), dkeep(11), keep(466), keep(477),
568 & keep(480), keep(479), keep(478), keep(476),
569 & keep(483), keep8, first_block=first_block)
573 IF (iflag.LT.0)
GOTO 500
576 IF (keep(486).EQ.3)
THEN
577 IF (keep(480).EQ.0)
THEN
584 IF (pivot_option.GE.3)
THEN
586 ELSEIF (pivot_option.EQ.2)
THEN
591 IF (lrtrsm_option.EQ.3)
THEN
593 ELSEIF (lrtrsm_option.EQ.2)
THEN
598 IF ((iend_blr.LT.nfront) .AND. (last_row-first_row.GT.0))
THEN
600 & npiv, nfront, nass,
601 & inode, a, la, lda, poselt,
603 & first_row, last_row,
605 & .true., .false., lr_activated,
606 & iw, liw, ioldps+6+xsize+nfront+ibeg_blr-1)
611!$omp parallel private(upos,lpos,dpos,offset)
616 & begs_blr, nb_blr, dkeep(8), keep(466), k473_loc, blr_l,
618 &
'V', work, tau, jpvt, lwork, rwork,
619 & block, maxi_cluster, nelim,
621 & 1, keep(483), keep8,
627 IF (iflag.LT.0)
GOTO 400
628 IF (pivot_option.LT.3)
THEN
629 IF (lrtrsm_option.GE.2)
THEN
630 IF (pivot_option.LE.1.AND.lrtrsm_option.EQ.3)
THEN
631 first_block = current_blr+1
633 first_block = npartsass+1
636 & ibeg_blr, nb_blr, blr_l,
637 & current_blr, first_block, nb_blr,
640 & iw, offset_iw=ioldps+6+xsize+nfront+ibeg_blr-1)
646 IF (pivot_option.LE.1)
THEN
647 first_block = current_blr+1
649 first_block = npartsass+1
652 & +int(begs_blr(current_blr+1)-1-nelim,8)*int(nfront,8)
653 & +int(begs_blr(current_blr)-1,8)
655 & +int(begs_blr(current_blr)-1,8)*int(nfront,8)
656 & +int(begs_blr(current_blr)-1,8)
657 offset=ioldps+6+xsize+nfront+ibeg_blr-1
658 upos = poselt+int(begs_blr(current_blr)-1,8)*int(nfront,8)
659 & +int(begs_blr(current_blr+1)-1-nelim,8)
664 & keep(424), nfront, npiv-ibeg_blr+1,
665 & liw, iw, offset, la, a, poselt, lpos, upos, dpos)
670 & +int(begs_blr(current_blr+1)-1,8)*int(nfront,8)
671 & +int(begs_blr(current_blr+1)-1-nelim,8)
673 & a, la, upos, a, la, lpos,
674 & iflag, ierror, nfront, nfront,
675 & begs_blr, current_blr, blr_l, nb_blr,
676 & first_block, nelim,
'N')
679 IF (iflag.LT.0)
GOTO 400
689 IF (keep(480).LT.5)
THEN
693 & current_blr, blr_l)
700 IF (keep(480).GE.2)
THEN
701 IF (iend_blr.LT.nass)
THEN
702 IF (lrtrsm_option.EQ.2)
THEN
703 first_block = npartsass-current_blr
708 & nfront, iw(ioldps+xxf),
709 & begs_blr, current_blr, nb_blr, npartsass,
711 & iw(hf+ioldps+nfront), block,
712 & acc_lua, maxi_cluster, maxi_rank,
714 & keep(481), dkeep(11), keep(466), keep(477),
715 & keep(480), keep(479), keep(478), keep(476),
716 & keep(483), keep8, first_block=first_block)
720 & iflag, ierror, nfront,
721 & begs_blr, nb_blr, current_blr, blr_l, nelim,
722 & iw(hf+ioldps+nfront+ibeg_blr-1), block,
723 & maxi_cluster, npiv,
725 & keep(481), dkeep(11), keep(466), keep(477)
731 IF (iflag.LT.0)
GOTO 400
732 IF (lrtrsm_option.GE.2)
THEN
733 IF (lrtrsm_option.EQ.2)
THEN
734 first_block = npartsass+1
736 first_block = current_blr+1
738 IF (keep(486).NE.2)
THEN
741 last_block = npartsass
743 last_block = current_blr
747 & begs_blr(current_blr),
748 & begs_blr(current_blr+1), nb_blr, blr_l, current_blr,
'V',
750 & beg_i_in=first_block, end_i_in=last_block)
756 IF (iflag.LT.0)
GOTO 500
757 IF (keep(486).EQ.3)
THEN
758 IF (keep(480).EQ.0)
THEN
768 IF ( ooc_eff_and_write_bypanel )
THEN
769 monbloc%Last = lastbl
770 monbloc%LastPiv= npiv
774 & typef_l, a(poselt),
775 & lafac, monbloc, nextpiv2bewritten, idummy, iw(ioldps),
776 & liwfac, myid, keep8(31), iflag_ooc,last_call )
777 IF (iflag_ooc < 0 )
THEN
784 IF (lr_activated)
THEN
785 ibeg_blr = iw(ioldps+1+keep(ixsz)) + 1
786 begs_blr( current_blr + 1 ) = ibeg_blr
793 allocate(begs_blr_tmp(nb_blr+1),stat=allocok)
794 IF (allocok > 0)
THEN
800 begs_blr_tmp(j) = begs_blr_static(j)
809 IF ( (keep(486).EQ.2)
817 IF (iflag.LT.0) cycle
818 diagsiz_dyn = begs_blr(ip+1)-begs_blr(ip)
819 diagsiz_sta = begs_blr_static(ip+1)-begs_blr(ip)
820 mem = diagsiz_dyn*diagsiz_sta
821 mem_tot = mem_tot + mem
822 ALLOCATE(diag(mem),stat=allocok)
823 IF (allocok > 0)
THEN
829 poselt_diag = poselt + int(begs_blr(ip)-1,8)*int(nfront,8)
830 & + int(begs_blr(ip)-1,8)
832 diag(diagpos:diagpos+diagsiz_dyn-1) =
833 & a(poselt_diag:poselt_diag+int(diagsiz_dyn-1,8))
834 diagpos = diagpos + diagsiz_dyn
835 poselt_diag = poselt_diag + int(nfront,8)
846 & (keep(405).NE.0), keep8, iflag, ierror, .true., .true.)
850 IF (iflag.LT.0)
GOTO 447
853 nelim_loc = begs_blr_tmp(ip+1)-begs_blr(ip+1)
855 & iw(ioldps+xxf), 0, ip, blr_panel)
865 & ierror, nfront, begs_blr_tmp,
866 & nb_blr, dkeep(8), keep(466), k473_loc,
868 &
'V', work, tau, jpvt, lwork, rwork,
869 & block, maxi_cluster, nelim_loc,
872 & end_i_in=npartsass, frswap=.true.
877 IF (iflag.LT.0)
GOTO 445
881 begs_blr_tmp(ip+1) = begs_blr(ip+1)
893 IF (keep(480) .GE. 2)
THEN
903 & begs_blr_static, begs_blr, npartscb, npartsass, nass,
905 & iw(hf+ioldps+nfront), block,
906 & acc_lua, maxi_cluster, maxi_rank,
908 & keep(481), dkeep(11), keep(466), keep(477),
909 & keep(480), keep(479), keep(478), keep(476),
915 IF (iflag.LT.0)
GOTO 450
928 IF (compress_cb)
THEN
929 iend_blr = begs_blr(current_blr+2)
931 maxi_cluster = iend_blr - ibeg_blr + 1
932 lwork = maxi_cluster*maxi_cluster
933 DEALLOCATE(block, work, rwork, tau, jpvt)
934 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
935 & rwork(2*maxi_cluster*omp_num),
936 & tau(maxi_cluster*omp_num),
937 & jpvt(maxi_cluster*omp_num),
938 & work(lwork*omp_num),stat=allocok)
939 IF (allocok > 0)
THEN
941 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
949 IF (iflag.LT.0)
GOTO 450
950 IF (compress_cb)
THEN
955 IF ( (keep(219).NE.0).AND.(keep(50).EQ.2) )
THEN
958 IF (nfs4father.GE.0) nfs4father = nfs4father + nelim
960 ALLOCATE(m_array(
max(nfs4father,1)), stat=allocok)
961 IF ( allocok.GT.0 )
THEN
963 ierror =
max(nfs4father,1)
969 IF (iflag.LT.0)
GOTO 448
970 CALL smumps_compress_cb(a, la, poselt, nfront,
971 & begs_blr, begs_blr, npartscb, npartscb, npartsass,
972 & nfront-nass, nfront-nass, inode,
974 & dkeep(12), keep(466), keep(484), keep(489), cb_lrb,
975 & work, tau, jpvt, lwork, rwork, block,
976 & maxi_cluster, keep8,
977 & nfs4father, npiv, nvschur+keep(253), keep(1),
983 IF (iflag.LT.0)
GOTO 448
987 IF ( (keep(219).NE.0).AND.(keep(50).EQ.2).AND.
988 & nfs4father.GT.0 )
THEN
991 CALL smumps_blr_save_m_array( iw(ioldps+xxf),
1010 & .AND.uu.GT.0)
THEN
1011 deallocate(begs_blr_tmp)
1013 IF (iflag.LT.0)
GOTO 500
1014 CALL upd_mry_lu_fr(nass, nfront-nass, 1, nass-npiv)
1016 CALL smumps_blr_retrieve_panel_loru(
1017 & iw(ioldps+xxf), 0, ip, blr_panel)
1018 CALL upd_mry_lu_lrgain(blr_panel, nb_blr-ip
1021 CALL upd_flop_facto_fr(nfront, nass, npiv, 2, 1)
1023 IF (.NOT. compress_panel)
THEN
1024 CALL smumps_fac_t_ldlt(nfront,nass,iw,liw,a,la,
1025 & lda, ioldps,poselt, keep,keep8,
1026 & (pivot_option.NE.3), etatass,
1027 & typef_l, lafac, monbloc, nextpiv2bewritten,
1028 & liwfac, myid, iflag, ioldps+6+xsize+nfront, inode )
1030 IF (keep(486).NE.0)
THEN
1031 IF (.NOT.lr_activated)
THEN
1032 CALL upd_flop_frfronts(nfront, npiv, nass, 1, 1)
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
1042 & a(poselt), lafac, monbloc,
1043 & nextpiv2bewritten, idummy,
1044 & iw(ioldps), liwfac,
1045 & myid, keep8(31), iflag_ooc,last_call )
1046 IF (iflag_ooc < 0 )
THEN
1051 & ioldps, iw, liw, monbloc , nfront, keep)
1057 IF (lr_activated)
THEN
1058 IF (
allocated(rwork))
DEALLOCATE(rwork)
1059 IF (
allocated(work))
DEALLOCATE(work)
1060 IF (
allocated(tau))
deallocate(tau)
1061 IF (
allocated(jpvt))
deallocate(jpvt)
1062 IF (
allocated(block))
deallocate(block)
1063 IF (
associated(acc_lua))
THEN
1064 IF (keep(480).GE.3)
THEN
1066 CALL dealloc_lrb(acc_lua(my_num), keep8, keep(34))
1071 IF (
associated(begs_blr))
THEN
1072 DEALLOCATE(begs_blr)
1076 IF (lr_activated.AND.keep(480).NE.0)
THEN
1082 CALL smumps_blr_free_all_panels(iw(ioldps+xxf), 0,
1086 IF (lr_activated)
THEN
1091 & .AND. .NOT.compress_cb)
THEN
1092 CALL smumps_blr_end_front(iw(ioldps+xxf), iflag, keep8,
1093 & keep(34), mtk405=keep(405))