17 & N, INODE, IW, LIW, A,
19 & IOLDPS, POSELT, IFLAG, IERROR, UU,
20 & NOFFW, NPVW, NBTINYW,
21 & DET_EXPW, DET_MANTW, DET_SIGNW,
23 & PROCNODE_STEPS, MYID, SLAVEF, SEUIL,
24 & AVOID_DELAYED, ETATASS,
25 & DKEEP,PIVNUL_LIST,LPN_LIST,
41 INTEGER(8) :: LA, POSELT
42 INTEGER N, INODE, LIW, IFLAG, IERROR
43 INTEGER,
INTENT(INOUT) :: NOFFW, NPVW, NBTINYW
44 INTEGER,
INTENT(INOUT) :: DET_EXPW, DET_SIGNW
45 COMPLEX(kind=8),
INTENT(INOUT) :: DET_MANTW
47 COMPLEX(kind=8) A( LA )
48 INTEGER MYID, SLAVEF, IOLDPS
51 INTEGER PROCNODE_STEPS( KEEP(28) ), STEP(N)
52 DOUBLE PRECISION UU, SEUIL
54 INTEGER ETATASS, IWPOS
56 INTEGER PIVNUL_LIST(LPN_LIST)
57 DOUBLE PRECISION DKEEP(230)
58 INTEGER :: LRGROUPS(N), PERM(N)
59 INTEGER INOPV, IFINB, NFRONT, NPIV, IBEG_BLOCK, IEND_BLOCK
60 INTEGER NASS, NBKJIB_ORIG, XSIZE
61 INTEGER NBLR_ORIG, IBEG_BLR, IEND_BLR
63 INTEGER LAST_ROW, LAST_COL, FIRST_COL
64 LOGICAL CALL_LTRSM, CALL_UTRSM
65 DOUBLE PRECISION UUTEMP
67 DOUBLE PRECISION SEUIL_LOC
71 INTEGER LIWFAC, STRAT, LNextPiv2beWritten,
72 & unextpiv2bewritten, iflag_ooc,
73 & pp_first2swap_l, pp_first2swap_u,
74 & pp_lastpivrptrfilled_l,
75 & pp_lastpivrptrfilled_u
77 TYPE(io_block) :: MonBloc
82 LOGICAL COMPRESS_CB, COMPRESS_PANEL
83 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR,
84 & ooc_effective_on_front,
85 & ooc_eff_and_write_bypanel
87 INTEGER FIRST_BLOCK, LAST_BLOCK
88 INTEGER INFO_TMP(2), MAXI_RANK
89 INTEGER HF, NPARTSASS, NPARTSCB,
90 INTEGER MAXI_CLUSTER, LWORK, NELIM, NELIM_LOC
91 INTEGER :: IROW_L, NVSCHUR
92 INTEGER,
POINTER,
DIMENSION(:) :: PTDummy
93 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
94 TYPE(
lrb_type),
POINTER,
DIMENSION(:,:) :: CB_LRB
95 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: ACC_LUA
96 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: BLR_U, BLR_L
97 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_TMP
98 TYPE(LRB_TYPE),
POINTER,
DIMENSION(:) :: BLR_PANEL
99 COMPLEX(kind=8),
POINTER,
DIMENSION(:) :: DIAG
100 INTEGER :: DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, LorU, I, MEM, MEM_TOT
101 INTEGER(8) :: POSELT_DIAG
102 CHARACTER(len=1) :: DIR
103 COMPLEX(kind=8),
ALLOCATABLE :: WORK(:), TAU(:)
104 INTEGER,
ALLOCATABLE :: JPVT(:)
105 DOUBLE PRECISION,
ALLOCATABLE :: RWORK(:)
106 COMPLEX(kind=8),
ALLOCATABLE :: BLOCK(:,:)
110 INTEGER(8) :: UPOS, LPOS
112 TYPE(
lrb_type),
POINTER,
DIMENSION(:) :: NEXT_BLR_U, NEXT_BLR_L
113 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR_STATIC
114 COMPLEX(kind=8) :: ZERO
115 parameter(zero=(0.0d0,0.0d0))
116 include
'mumps_headers.h'
120 IF (keep(206).GE.1)
THEN
127 IF(keep(97) .EQ. 0)
THEN
132 IF (avoid_delayed)
THEN
135 seuil_loc =
max(seuil,epsilon(seuil))
139 pivot_option = keep(468)
140 lrtrsm_option = keep(475)
143 nfront = iw(ioldps+xsize)
144 nass = iabs(iw(ioldps+2+xsize))
145 iw(ioldps+3+xsize) = -99999
146 lr_activated = .false.
147 compress_panel = .false.
148 compress_cb = .false.
155 NULLIFY(begs_blr_tmp)
158 compress_panel = (iw(ioldps+xxlr).GE.2)
159 compress_cb = ((iw(ioldps+xxlr).EQ.1).OR.
160 & (iw(ioldps+xxlr).EQ.3))
161 lr_activated = (iw(ioldps+xxlr).GT.0)
162 IF (compress_cb.AND.(.NOT.compress_panel))
THEN
168 oocwrite_compatible_with_blr =
169 & ( .NOT.lr_activated.OR.(.NOT.compress_panel).OR.
172 ooc_effective_on_front= ((keep(201).EQ.1).AND.
173 & oocwrite_compatible_with_blr)
175 & lr_activated, parpiv_t1)
176 IF (uutemp.EQ.zero)
THEN
178 ELSE IF (parpiv_t1.NE.0)
THEN
179 pivot_option =
min(pivot_option,2)
181 IF (lr_activated)
THEN
182 IF (lrtrsm_option.EQ.3)
THEN
183 pivot_option =
min(pivot_option,1)
184 ELSEIF (lrtrsm_option.EQ.2)
THEN
185 pivot_option =
min(pivot_option, 2)
188 IF (pivot_option.LE.1)
THEN
191 IF (nass.LT.keep(4))
THEN
193 ELSE IF (nass .GT. keep(3))
THEN
194 nbkjib_orig =
min( keep(6), nass )
196 nbkjib_orig =
min( keep(5), nass )
198 IF (.not.lr_activated)
THEN
199 nblr_orig = keep(420)
203 IF ((keep(114).EQ.1) .AND.
204 & (keep(116).GT.0) .AND. ((nfront-nass-keep(253)).GT.0)
206 irow_l = ioldps+6+xsize+nass
209 & nfront-nass-keep(253),
220 liwfac = iw(ioldps+xxi)
221 IF ( ooc_effective_on_front )
THEN
222 lnextpiv2bewritten = 1
223 unextpiv2bewritten = 1
224 pp_first2swap_l = lnextpiv2bewritten
225 pp_first2swap_u = unextpiv2bewritten
226 monbloc%LastPanelWritten_L = 0
227 monbloc%LastPanelWritten_U = 0
228 pp_lastpivrptrfilled_l = 0
229 pp_lastpivrptrfilled_u = 0
230 monbloc%INODE = inode
231 monbloc%MASTER = .true.
233 monbloc%NROW = nfront
234 monbloc%NCOL = nfront
236 monbloc%Last = .false.
237 monbloc%LastPiv = -88877
238 NULLIFY(monbloc%INDICES)
240 IF (lr_activated)
THEN
241 IF (keep(405) .EQ. 1)
THEN
248 ELSE IF (keep(486).NE.0)
THEN
250 ooc_eff_and_write_bypanel = ( (pivot_option.GE.3) .AND.
251 & ooc_effective_on_front )
252 hf = 6 + iw(ioldps+5+xsize)+xsize
253 IF (lr_activated)
THEN
254 CALL get_cut(iw(ioldps+hf:ioldps+hf+nfront-1), nass,
255 & nfront-nass, lrgroups, npartscb,
256 & npartsass, begs_blr)
257 CALL regrouping2(begs_blr, npartsass, nass, npartscb,
258 & nfront-nass, keep(488), .false., keep(472))
259 nb_blr = npartsass + npartscb
260 call max_cluster(begs_blr,nb_blr,maxi_cluster)
261 maxi_rank = keep(479)*maxi_cluster
262 lwork = maxi_cluster*maxi_cluster
267 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
268 & rwork(2*maxi_cluster*omp_num),
269 & tau(maxi_cluster*omp_num),
270 & jpvt(maxi_cluster*omp_num),
271 & work(lwork*omp_num),
273 IF (allocok > 0)
THEN
275 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
278 ALLOCATE(acc_lua(omp_num),stat=allocok)
279 IF (allocok > 0)
THEN
284 IF (keep(480).GE.3)
THEN
286 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
287 & maxi_cluster, maxi_cluster, .true.,
288 & iflag, ierror, keep8)
289 IF (iflag.LT.0)
GOTO 490
290 acc_lua(my_num)%K = 0
294 IF (lr_activated.AND.
314 IF (iflag.LT.0)
GOTO 500
316 IF (compress_cb.AND.npartscb.GT.0)
THEN
317 allocate(cb_lrb(npartscb,npartscb),stat=allocok)
318 IF (allocok > 0)
THEN
320 ierror = npartscb*npartscb
325 DO WHILE (iend_blr < nass )
326 current_blr = current_blr + 1
327 ibeg_blr = iw(ioldps+1+keep(ixsz)) + 1
328 IF (.NOT. lr_activated)
THEN
329 iend_blr =
min(iend_blr + nblr_orig, nass)
331 iend_blr = begs_blr(current_blr+1)-1
332 begs_blr( current_blr ) = ibeg_blr
333 IF ( iend_blr - ibeg_blr + 1 .GT. maxi_cluster )
THEN
334 maxi_cluster = iend_blr - ibeg_blr + 1
335 lwork = maxi_cluster*maxi_cluster
336 DEALLOCATE(block, work, rwork, tau, jpvt)
337 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
338 & rwork(2*maxi_cluster*omp_num),
339 & tau(maxi_cluster*omp_num),
340 & jpvt(maxi_cluster*omp_num),
341 & work(lwork*omp_num),stat=allocok)
342 IF (allocok > 0)
THEN
344 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
347 IF (keep(480).GE.3)
THEN
350 CALL alloc_lrb(acc_lua(my_num), maxi_rank,
351 & maxi_cluster, maxi_cluster, .true.,
352 & iflag, ierror, keep8)
353 IF (iflag.LT.0)
GOTO 500
354 acc_lua(my_num)%K = 0
359 IF (lr_activated)
THEN
360 IF (keep(480).GE.5)
THEN
361 IF (current_blr.EQ.1)
THEN
362 ALLOCATE(blr_u(nb_blr-current_blr),stat=allocok)
363 IF (allocok > 0)
THEN
365 ierror = nb_blr-current_blr
368 ALLOCATE(blr_l(nb_blr-current_blr),stat=allocok)
369 IF (allocok > 0)
THEN
371 ierror = nb_blr-current_blr
374 IF (nb_blr.GT.current_blr)
THEN
375 blr_u(1:nb_blr-current_blr)%ISLR=.false.
379 & current_blr, blr_u)
380 blr_l(1:nb_blr-current_blr)%ISLR=.false.
384 & current_blr, blr_l)
387 IF (nb_blr.GT.current_blr)
THEN
391 & current_blr, blr_u)
395 & current_blr, blr_l)
398 IF (current_blr.LT.npartsass)
THEN
399 ALLOCATE(next_blr_u(nb_blr-current_blr-1),stat=allocok)
400 IF (allocok > 0)
THEN
402 ierror = nb_blr-current_blr-1
405 ALLOCATE(next_blr_l(nb_blr-current_blr-1),stat=allocok)
406 IF (allocok > 0)
THEN
408 ierror = nb_blr-current_blr-1
411 IF (nb_blr.GT.current_blr+1)
THEN
415 & current_blr+1, next_blr_u)
419 & current_blr+1, next_blr_l)
423 ALLOCATE(blr_u(nb_blr-current_blr),stat=allocok)
424 IF (allocok > 0)
THEN
426 ierror = nb_blr-current_blr
429 ALLOCATE(blr_l(nb_blr-current_blr),stat=allocok)
430 IF (allocok > 0)
THEN
432 ierror = nb_blr-current_blr
437 DO WHILE (iend_block < iend_blr )
438 ibeg_block = iw(ioldps+1+keep(ixsz)) + 1
439 IF (keep(405).EQ.0)
THEN
440 keep(425)=
max(keep(425),iend_block-ibeg_block)
443 keep(425)=
max(keep(425),iend_block-ibeg_block)
446 iend_block =
min(iend_block + nbkjib_orig, iend_blr)
449 & ibeg_block,iend_block,n,inode,
450 & iw,liw,a,la,inopv,noffw,nbtinyw,
451 & det_expw, det_mantw, det_signw,
452 & iflag,ioldps,poselt,uu,seuil_loc,keep,keep8,
453 & dkeep(1),pivnul_list(1),lpn_list,
454 & pp_first2swap_l, monbloc%LastPanelWritten_L,
455 & pp_lastpivrptrfilled_l,
456 & pp_first2swap_u, monbloc%LastPanelWritten_U,
457 & pp_lastpivrptrfilled_u,
458 & pivot_option, lr_activated, iend_blr,
459 & inextpiv, ooc_effective_on_front,
462 IF (iflag.LT.0)
GOTO 500
468 ELSE IF ( inopv.LE.0 )
THEN
470 IF (pivot_option.GE.3)
THEN
472 ELSEIF (pivot_option.EQ.2)
THEN
478 & nfront, nass, iw(ioldps+1+xsize),
479 & last_col, a, la, poselt, ifinb,
482 iw(ioldps+1+xsize) = iw(ioldps+1+xsize) + 1
487 IF ( ooc_eff_and_write_bypanel )
THEN
488 monbloc%LastPiv= iw(ioldps+1+xsize)
489 strat = strat_try_write
493 & a(poselt), lafac, monbloc,
494 & lnextpiv2bewritten, unextpiv2bewritten,
495 & iw(ioldps), liwfac,
496 & myid, keep8(31), iflag_ooc,last_call )
497 IF (iflag_ooc < 0 )
THEN
502 npiv = iw(ioldps+1+xsize)
503 IF ( iend_blr .GT. iend_block )
THEN
504 IF (pivot_option.GE.3)
THEN
506 ELSEIF (pivot_option.EQ.2)
THEN
512 & npiv, nfront, iend_blr, last_col,
515 & .true., .false., .true.,
521 npiv = iw(ioldps+1+xsize)
522 IF (.NOT. lr_activated
523 & .OR. (.NOT. compress_panel)
525 IF (pivot_option.EQ.4)
THEN
530 IF (pivot_option.GE.3)
THEN
535 IF (iend_blr.LT.last_row)
THEN
537 & npiv, nfront, last_row, last_col,
538 & a, la, poselt, iend_blr, .true., (pivot_option.LT.2),
543 nelim = iend_blr - npiv
544 IF (nelim .EQ. iend_blr - ibeg_blr + 1)
THEN
551 DO j=1,nb_blr-current_blr
555 blr_u(j)%ISLR=.false.
562 & current_blr, blr_u)
563 DO j=1,nb_blr-current_blr
567 blr_l(j)%ISLR=.false.
574 & current_blr, blr_l)
577 IF (keep(480).GE.2 .AND. iend_blr.LT.nass)
THEN
578 IF (lrtrsm_option.EQ.3)
THEN
581 first_block = npartsass-current_blr
587 & nfront, iw(ioldps+xxf), 0,
588 & begs_blr, begs_blr, current_blr, acc_lua,
589 & nb_blr, npartsass, nelim,
591 & .false., iflag, ierror, 0,
592 & keep(481), dkeep(11), keep(466), keep(477),
593 & keep(480), keep(479), keep(478), keep(476),
594 & keep(483), maxi_cluster, maxi_rank,
595 & keep(474), 0, blr_u,
597 & first_block=first_block)
598 IF (iflag.LT.0)
GOTO 900
600 & nfront, iw(ioldps+xxf), 1,
601 & begs_blr, begs_blr, current_blr, acc_lua,
602 & nb_blr, npartsass, nelim,
604 & .false., iflag, ierror, 0,
605 & keep(481), dkeep(11), keep(466), keep(477),
606 & keep(480), keep(479), keep(478), keep(476),
607 & keep(483), maxi_cluster, maxi_rank,
608 & keep(474), 0, blr_u,
610 & first_block=first_block)
615 IF (iflag.LT.0)
GOTO 500
618 IF (keep(486).EQ.3)
THEN
619 IF (keep(480).EQ.0)
THEN
620 DEALLOCATE(blr_u,blr_l)
627 IF (pivot_option.GE.3)
THEN
629 ELSEIF (pivot_option.EQ.2)
THEN
634 IF (lrtrsm_option.EQ.3)
THEN
636 ELSEIF (lrtrsm_option.EQ.2)
THEN
641 call_ltrsm = (lrtrsm_option.EQ.0)
642 call_utrsm = (last_col-first_col.GT.0)
643 IF ((iend_blr.LT.nfront) .AND.
644 & (call_ltrsm.OR.call_utrsm))
THEN
646 & npiv, nfront, nfront,
649 & first_col, call_ltrsm,
650 & call_utrsm, .false.,
662 & begs_blr, nb_blr, dkeep(8), keep(466), k473_loc,
663 & blr_u, current_blr,
664 &
'H', work, tau, jpvt, lwork, rwork,
665 & block, maxi_cluster, nelim,
667 & 1, keep(483), keep8,
673 IF (iflag.LT.0)
GOTO 400
676 & begs_blr, nb_blr, dkeep(8), keep(466), k473_loc, blr_l
678 &
'V', work, tau, jpvt, lwork, rwork,
679 & block, maxi_cluster, nelim,
681 & 1, keep(483), keep8,
694 IF (keep(480).LT.5)
THEN
698 & current_blr, blr_u)
702 & current_blr, blr_l)
709 IF (iflag.LT.0)
GOTO 400
710 IF (lrtrsm_option.GT.0)
THEN
713 & nb_blr, blr_l, current_blr, current_blr+1,
714 & nb_blr, 1, 0, 0, .false.)
715 IF (pivot_option.LT.3.AND.lrtrsm_option.GE.2)
THEN
716 IF (pivot_option.LE.1.AND.lrtrsm_option.EQ.3)
THEN
717 first_block = current_blr+1
719 first_block = npartsass+1
722 & ibeg_blr, nb_blr, blr_u,
723 & current_blr, first_block, nb_blr,
729 & a, la, poselt, iflag, ierror, nfront,
730 & begs_blr, current_blr, blr_u, nb_blr,
731 & first_block, ibeg_blr, npiv, nelim)
737 IF (iflag.LT.0)
GOTO 400
738 IF (keep(480).GE.2)
THEN
739 upos = poselt+int(begs_blr(current_blr)-1,8)*int(nfront,8)
740 & +int(begs_blr(current_blr+1)-nelim-1,8)
741 lpos = poselt+int(begs_blr(current_blr+1)-1,8)*int(nfront,8)
742 & +int(begs_blr(current_blr+1)-nelim-1,8)
744 & lpos, iflag, ierror, nfront, nfront,
745 & begs_blr, current_blr, blr_l, nb_blr,
746 & current_blr+1, nelim,
'N')
747 IF (iflag.LT.0)
GOTO 444
748 IF (iend_blr.LT.nass)
THEN
749 IF (lrtrsm_option.EQ.3)
THEN
752 first_block = npartsass-current_blr
755 & nfront, iw(ioldps+xxf), 0,
756 & begs_blr, begs_blr, current_blr, acc_lua,
757 & nb_blr, npartsass, nelim,
759 & .false., iflag, ierror, 0,
760 & keep(481), dkeep(11), keep(466), keep(477),
761 & keep(480), keep(479), keep(478), keep(476),
762 & keep(483), maxi_cluster, maxi_rank,
763 & keep(474), 0, blr_u,
765 & first_block=first_block)
766 IF (iflag.LT.0)
GOTO 442
768 & nfront, iw(ioldps+xxf), 1,
769 & begs_blr, begs_blr, current_blr, acc_lua,
770 & nb_blr, npartsass, nelim,
772 & .false., iflag, ierror, 0,
773 & keep(481), dkeep(11), keep(466), keep(477),
774 & keep(480), keep(479), keep(478), keep(476),
775 & keep(483), maxi_cluster, maxi_rank,
776 & keep(474), 0, blr_u,
778 & first_block=first_block)
784 & iflag, ierror, nfront,
785 & begs_blr, begs_blr, current_blr, blr_l, nb_blr,
789 & keep(481), dkeep(11), keep(466), keep(477)
795 IF (iflag.LT.0)
GOTO 400
796 IF (keep(486).NE.2)
THEN
799 last_block = npartsass
801 last_block = current_blr
803 IF (lrtrsm_option.GT.0)
THEN
804 first_block = current_blr+1
807 & begs_blr(current_blr),
808 & begs_blr(current_blr+1),
809 & nb_blr, blr_l, current_blr,
'V', 1,
810 & beg_i_in=first_block, end_i_in=last_block)
814 IF (lrtrsm_option.GE.2)
THEN
815 IF (lrtrsm_option.EQ.2)
THEN
816 first_block = npartsass+1
818 first_block = current_blr+1
822 & begs_blr(current_blr),
823 & begs_blr(current_blr+1),
824 & nb_blr, blr_u, current_blr, 'h
', 1,
825 & BEG_I_IN=FIRST_BLOCK, END_I_IN=LAST_BLOCK)
831.LT.
IF (IFLAG0) GOTO 500
832.EQ.
IF (KEEP(486)3) THEN
833.EQ.
IF (KEEP(480)0) THEN
834 CALL DEALLOC_BLR_PANEL(BLR_U, NB_BLR-CURRENT_BLR, KEEP8,
836 CALL DEALLOC_BLR_PANEL(BLR_L, NB_BLR-CURRENT_BLR, KEEP8,
838 DEALLOCATE(BLR_U,BLR_L)
844 IF ( OOC_EFF_AND_WRITE_BYPANEL ) THEN
845.LT.
IF (PIVOT_OPTION4) THEN
848 TYPEF_LOC = TYPEF_BOTH_LU
850 MonBloc%LastPiv= IW(IOLDPS+1+XSIZE)
851 STRAT = STRAT_TRY_WRITE
853 CALL ZMUMPS_OOC_IO_LU_PANEL
854 & ( STRAT, TYPEF_LOC,
855 & A(POSELT), LAFAC, MonBloc,
856 & LNextPiv2beWritten, UNextPiv2beWritten,
857 & IW(IOLDPS), LIWFAC,
858 & MYID, KEEP8(31), IFLAG_OOC,LAST_CALL )
859 IF (IFLAG_OOC < 0 ) THEN
866 IF (LR_ACTIVATED) THEN
867 IBEG_BLR = IW(IOLDPS+1+KEEP(IXSZ)) + 1
868 BEGS_BLR( CURRENT_BLR + 1 ) = IBEG_BLR
872 CALL ZMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW(IOLDPS+XXF),
875 allocate(BEGS_BLR_TMP(NB_BLR+1),stat=allocok)
876 IF (allocok > 0) THEN
882 BEGS_BLR_TMP(IP) = BEGS_BLR_STATIC(IP)
889!$OMP& PRIVATE(IP, LorU, DIR, NELIM_LOC, BLR_PANEL)
895!$OMP DO PRIVATE(DIAG, DIAGSIZ_STA, DIAGSIZ_DYN, DPOS, POSELT_DIAG, MEM,
897!$OMP& REDUCTION(+:MEM_TOT)
900.LT.
IF (IFLAG0) CYCLE
901 DIAGSIZ_DYN = BEGS_BLR(IP+1)-BEGS_BLR(IP)
902 DIAGSIZ_STA = BEGS_BLR_STATIC(IP+1)-BEGS_BLR(IP)
903 MEM = DIAGSIZ_DYN*(2*DIAGSIZ_STA-DIAGSIZ_DYN)
904 MEM_TOT = MEM_TOT + MEM
905 ALLOCATE(DIAG(MEM), stat=allocok)
906 IF (allocok > 0) THEN
912 POSELT_DIAG = POSELT + int(BEGS_BLR(IP)-1,8)*int(NFRONT,8)
913 & + int(BEGS_BLR(IP)-1,8)
915.LE.
IF (IDIAGSIZ_DYN) THEN
916 DIAG(DPOS:DPOS+DIAGSIZ_STA-1) =
917 & A(POSELT_DIAG:POSELT_DIAG+int(DIAGSIZ_STA-1,8))
918 DPOS = DPOS + DIAGSIZ_STA
920 DIAG(DPOS:DPOS+DIAGSIZ_DYN-1) =
921 & A(POSELT_DIAG:POSELT_DIAG+int(DIAGSIZ_DYN-1,8))
922 DPOS = DPOS + DIAGSIZ_DYN
924 POSELT_DIAG = POSELT_DIAG + int(NFRONT,8)
926 CALL ZMUMPS_BLR_SAVE_DIAG_BLOCK(
934 CALL MUMPS_DM_FAC_UPD_DYN_MEMCNTS(int(MEM_TOT,8),
935.NE.
& (KEEP(405)0), KEEP8, IFLAG, IERROR, .TRUE., .TRUE.)
939.LT.
IF (IFLAG0) GOTO 447
942 NELIM_LOC = BEGS_BLR_TMP(IP+1)-BEGS_BLR(IP+1)
944 CALL ZMUMPS_BLR_RETRIEVE_PANEL_LORU(
945 & IW(IOLDPS+XXF), LorU, IP, BLR_PANEL)
949 CALL DEALLOC_BLR_PANEL(BLR_PANEL, NPARTSASS-IP, KEEP8,
959 CALL ZMUMPS_COMPRESS_PANEL(A, LA, POSELT, IFLAG,
960 & IERROR, NFRONT, BEGS_BLR_TMP,
961 & NB_BLR, DKEEP(8), KEEP(466), K473_LOC,
963 & DIR, WORK, TAU, JPVT, LWORK, RWORK,
964 & BLOCK, MAXI_CLUSTER, NELIM_LOC,
966 & 1, KEEP(483), KEEP8,
967 & END_I_IN=NPARTSASS, FRSWAP=.TRUE.
972.LT.
IF (IFLAG0) GOTO 445
978 BEGS_BLR_TMP(IP+1) = BEGS_BLR(IP+1)
990.LT.
IF (IFLAG 0) GOTO 450
991.GE.
IF (KEEP(480) 2) THEN
995 CALL ZMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW(IOLDPS+XXF),
1000 CALL ZMUMPS_BLR_UPD_CB_LEFT(A, LA, POSELT, NFRONT,
1001 & BEGS_BLR_STATIC, BEGS_BLR_STATIC,
1002 & NPARTSCB, NPARTSCB, NPARTSASS, NASS,
1004 & 1, .FALSE., IFLAG, IERROR,
1005 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477),
1006 & ACC_LUA, KEEP(480),KEEP(479),KEEP(478),KEEP(476),
1007 & KEEP(484), MAXI_CLUSTER, MAXI_RANK,
1008 & KEEP(474), 0, BLR_U,
1015.LT.
IF (IFLAG0) GOTO 450
1025 CALL ZMUMPS_BLR_SAVE_BEGS_BLR_DYN(IW(IOLDPS+XXF),
1028 IF (COMPRESS_CB) THEN
1029 IEND_BLR = BEGS_BLR(CURRENT_BLR+2)
1030.GT.
IF ( IEND_BLR - IBEG_BLR + 1 MAXI_CLUSTER ) THEN
1031 MAXI_CLUSTER = IEND_BLR - IBEG_BLR + 1
1032 LWORK = MAXI_CLUSTER*MAXI_CLUSTER
1033 DEALLOCATE(BLOCK, WORK, RWORK, TAU, JPVT)
1034 ALLOCATE(BLOCK(MAXI_CLUSTER, OMP_NUM*MAXI_CLUSTER),
1035 & RWORK(2*MAXI_CLUSTER*OMP_NUM),
1036 & TAU(MAXI_CLUSTER*OMP_NUM),
1037 & JPVT(MAXI_CLUSTER*OMP_NUM),
1038 & WORK(LWORK*OMP_NUM),stat=allocok)
1039 IF (allocok > 0) THEN
1041 IERROR = OMP_NUM*(LWORK + MAXI_CLUSTER*(MAXI_CLUSTER+4))
1049.LT.
IF (IFLAG0) GOTO 450
1050 IF (COMPRESS_CB) THEN
1051 CALL ZMUMPS_COMPRESS_CB(A, LA, POSELT, NFRONT,
1052 & BEGS_BLR, BEGS_BLR, NPARTSCB, NPARTSCB, NPARTSASS,
1053 & NFRONT-NASS, NFRONT-NASS, INODE,
1054 & IW(IOLDPS+XXF), 0, 1, IFLAG, IERROR,
1055 & DKEEP(12), KEEP(466), KEEP(484), KEEP(489), CB_LRB,
1056 & WORK, TAU, JPVT, LWORK, RWORK, BLOCK,
1057 & MAXI_CLUSTER, KEEP8,
1058 & -9999, -9999, -9999, KEEP(1),
1074 deallocate(BEGS_BLR_TMP)
1076.LT.
IF (IFLAG0) GOTO 500
1077 CALL UPD_MRY_LU_FR(NASS, NFRONT-NASS, 0, NASS-NPIV)
1080 CALL ZMUMPS_BLR_RETRIEVE_PANEL_LORU(
1081 & IW(IOLDPS+XXF), LorU, IP, BLR_PANEL)
1082 CALL UPD_MRY_LU_LRGAIN(BLR_PANEL, NB_BLR-IP
1086 CALL UPD_FLOP_FACTO_FR(NFRONT, NASS, NPIV, 0, 1)
1088.LT..AND..NOT.
IF ( (PIVOT_OPTION4) (LR_ACTIVATED) ) THEN
1089 CALL ZMUMPS_FAC_FR_UPDATE_CBROWS( INODE,
1090.LT.
& NFRONT, NASS, (PIVOT_OPTION3), A, LA, LAFAC, POSELT,
1091 & IW, LIW, IOLDPS, MonBloc, MYID, NOFFW,
1092 & DET_EXPW, DET_MANTW, DET_SIGNW,
1094 & PP_FIRST2SWAP_L, PP_FIRST2SWAP_U,
1095 & LNextPiv2beWritten, UNextPiv2beWritten,
1096 & PP_LastPIVRPTRFilled_L, PP_LastPIVRPTRFilled_U,
1098 & XSIZE, SEUIL, UU, DKEEP, KEEP8, KEEP, IFLAG,
1099 & OOC_EFFECTIVE_ON_FRONT, NVSCHUR )
1101.NE.
IF (KEEP(486)0) THEN
1102.NOT.
IF (LR_ACTIVATED) THEN
1103 CALL UPD_FLOP_FRFRONTS(NFRONT, NPIV, NASS, 0, 1)
1106 IF ( OOC_EFFECTIVE_ON_FRONT ) THEN
1107 STRAT = STRAT_WRITE_MAX
1108 MonBloc%Last = .TRUE.
1109 MonBloc%LastPiv = IW(IOLDPS+1+XSIZE)
1111 CALL ZMUMPS_OOC_IO_LU_PANEL
1112 & ( STRAT, TYPEF_BOTH_LU,
1113 & A(POSELT), LAFAC, MonBloc,
1114 & LNextPiv2beWritten, UNextPiv2beWritten,
1115 & IW(IOLDPS), LIWFAC,
1116 & MYID, KEEP8(31), IFLAG_OOC, LAST_CALL )
1117 IF (IFLAG_OOC < 0 ) THEN
1121 CALL ZMUMPS_OOC_PP_TRYRELEASE_SPACE (IWPOS,
1122 & IOLDPS, IW, LIW, MonBloc , NFRONT, KEEP)
1128 IF (LR_ACTIVATED) THEN
1129 IF (allocated(WORK)) deallocate(WORK)
1130 IF (allocated(RWORK)) DEALLOCATE(RWORK)
1131 IF (allocated(TAU)) deallocate(TAU)
1132 IF (allocated(JPVT)) deallocate(JPVT)
1133 IF (allocated(BLOCK)) deallocate(BLOCK)
1134 IF (associated(ACC_LUA)) THEN
1135.GE.
IF (KEEP(480)3) THEN
1137 CALL DEALLOC_LRB(ACC_LUA(MY_NUM), KEEP8, KEEP(34))
1143 IF (associated(BEGS_BLR)) THEN
1144 DEALLOCATE(BEGS_BLR)
1148.AND..NE.
IF (LR_ACTIVATED(KEEP(480)0)) THEN
1154 CALL ZMUMPS_BLR_FREE_ALL_PANELS(IW(IOLDPS+XXF), 2,
1158 IF (LR_ACTIVATED) THEN
1163.AND..NOT.
& COMPRESS_CB) THEN
1164 CALL ZMUMPS_BLR_END_FRONT(IW(IOLDPS+XXF), IFLAG, KEEP8,
1165 & KEEP(34), MTK405=KEEP(405))
1168 NPVW = NPVW + IW(IOLDPS+1+XSIZE)