15 & COMM_LOAD, ASS_IRECV,
17 & LBUFR_BYTES, PROCNODE_STEPS, MSGSOU,
18 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, N, IW, LIW,
19 & A, LA, PTRIST, PTRAST, NSTK_S, PERM,
20 & COMP, STEP, PIMASTER, PAMASTER, POSFAC,
21 & MYID, COMM, IFLAG, IERROR, NBFIN,
23 & PTLUST_S, PTRFAC, root, OPASSW, OPELIW,
24 & ITLOC, RHS_MUMPS, FILS, DAD,
25 & PTRARW, PTRAIW, INTARR, DBLARR,
26 & ICNTL, KEEP,KEEP8, DKEEP,
27 & IPOOL, LPOOL, LEAF, ND, FRERE_STEPS,
28 & LPTRAR, NELT, FRTPTR, FRTELT,
29 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
45 include
'mumps_headers.h'
46 TYPE (smumps_root_struc) :: root
47 INTEGER icntl( 60 ), keep( 500 )
50 INTEGER lbufr, lbufr_bytes
51 INTEGER comm_load, ass_irecv
53 INTEGER n, slavef, iwpos, iwposcb, liw
54 INTEGER(8) :: iptrlu, lrlu, lrlus, la
57 INTEGER iflag, ierror, nbfin, msgsou
58 INTEGER procnode_steps(keep(28)), ptrist(keep(28)),
60 INTEGER(8) :: pamaster(keep(28))
61 INTEGER(8) :: ptrast(keep(28))
62 INTEGER(8) :: ptrfac(keep(28))
63 INTEGER perm(n), step(n),
67 INTEGER,
intent(in) :: lrgroups(n)
70 INTEGER frtptr( n+1 ), frtelt( nelt )
71 INTEGER ptlust_s(keep(28)),
72 & itloc(n+keep(253)), fils(n), dad(keep(28)), nd(keep(28))
73 REAL :: rhs_mumps(keep(255))
74 INTEGER(8),
INTENT(IN) :: ptraiw(
75INTEGER frere_steps(keep(28))
76 DOUBLE PRECISION opassw, opeliw
77 DOUBLE PRECISION flop1
78 INTEGER intarr( keep8(27) )
79 REAL dblarr( keep8(26) )
81 INTEGER ipool( lpool )
82 INTEGER istep_to_iniv2(keep(71)),
83 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
85 include
'mumps_tags.h'
86 INTEGER :: status(mpi_status_size)
87 LOGICAL :: i_have_set_k117
88 INTEGER inode, position, npiv, ierr, lp
90 INTEGER(8) :: posblocfacto
91 INTEGER :: ld_blocfacto
92 INTEGER(8) :: la_blocfacto
95 REAL,
DIMENSION(:),
POINTER :: a_ptr
96 INTEGER ioldps, lcont1, nass1, nrow1, ncol1, npiv1
97 INTEGER nslav1, hs, isw
98 INTEGER (8) :: lpos, upos, lpos2, ipos, kpos
100 INTEGER i, ipiv, fpere
101 LOGICAL lastbl, keep_begs_blr_l
102 LOGICAL blocking, set_irecv, message_received
104 parameter(one = 1.0e0,
alpha=-1.0e0)
105 INTEGER liwfac, strat, nextpivdummy
109 INTEGER :: info_tmp(2)
111 INTEGER :: nelim, npartsass_master, npartsass_master_aux,
114 & nb_blr_l, nb_blr_u, nb_blr_col
115 TYPE (
lrb_type),
POINTER,
DIMENSION(:,:) :: cb_lrb
116 TYPE (
lrb_type),
DIMENSION(:),
POINTER :: blr_u, blr_l
117 LOGICAL :: lr_activated, compress_cb, compress_panel
118 LOGICAL oocwrite_compatible_with_blr
119 INTEGER :: lr_activated_int
120 INTEGER,
POINTER,
DIMENSION(:) :: begs_blr_l, begs_blr_u,
122 REAL,
ALLOCATABLE,
DIMENSION(:) :: work, tau
123 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: jpvt
124 REAL,
ALLOCATABLE,
DIMENSION(:) :: rwork
125 REAL,
ALLOCATABLE,
DIMENSION(:,:) :: block
127 INTEGER npartsass, npartscb, maxi_cluster, lwork,
128 & maxi_cluster_l, maxi_cluster_u, maxi_cluster_col
132 keep_begs_blr_l = .false.
136 i_have_set_k117 = .false.
139 CALL mpi_unpack( bufr, lbufr_bytes, position, inode, 1,
140 & mpi_integer, comm, ierr )
141 CALL mpi_unpack( bufr, lbufr_bytes, position, npiv, 1,
142 & mpi_integer, comm, ierr )
146 CALL mpi_unpack( bufr, lbufr_bytes, position, fpere, 1,
147 & mpi_integer, comm, ierr )
149 CALL mpi_unpack( bufr, lbufr_bytes, position, ncol, 1,
150 & mpi_integer, comm, ierr )
151 CALL mpi_unpack( bufr, lbufr_bytes, position, nelim, 1,
152 & mpi_integer, comm, ierr )
154 & npartsass_master , 1,
155 & mpi_integer, comm, ierr )
156 CALL mpi_unpack( bufr, lbufr_bytes, position, ipanel,
157 & 1, mpi_integer, comm, ierr )
158 CALL mpi_unpack( bufr, lbufr_bytes, position, lr_activated_int,
159 & 1, mpi_integer, comm, ierr )
160 lr_activated = (lr_activated_int.EQ.1)
161 IF ( lr_activated )
THEN
162 la_blocfacto = int(npiv,8) * int(npiv+nelim,8)
164 la_blocfacto = int(npiv,8) * int(ncol,8)
167 & npiv, la_blocfacto, .false.,
171 & iwpos, iwposcb, ptrist, ptrast,
172 & step, pimaster, pamaster, lrlus,
173 & keep(ixsz),
comp,dkeep(97),
myid,slavef, procnode_steps,
174 & dad, iflag, ierror)
175 IF (iflag.LT.0)
GOTO 700
176 lrlu = lrlu - la_blocfacto
177 lrlus = lrlus - la_blocfacto
178 keep8(67) =
min(lrlus, keep8(67))
179 keep8(69) = keep8(69) + la_blocfacto
180 keep8(68) =
max(keep8(69), keep8(68))
181 posblocfacto = posfac
182 posfac = posfac + la_blocfacto
184 & la-lrlus,0_8,la_blocfacto,keep,keep8,lrlus)
191 IF (npiv .GT. 0)
THEN
194 & mpi_integer, comm, ierr )
196 IF ( lr_activated )
THEN
198 & a(posblocfacto), npiv*(npiv+nelim),
201 ld_blocfacto = npiv+nelim
203 & nb_blr_u, 1, mpi_integer,
205 ALLOCATE(blr_u(
max(nb_blr_u,1)), stat=allocok)
206 IF (allocok > 0 )
THEN
208 ierror =
max(nb_blr_u,1)
210 IF (icntl(4) .LE. 0) lp=-1
211 IF (lp > 0)
WRITE(lp,*)
myid,
212 &
': ERROR allocation during SMUMPS_PROCESS_BLOCFACTO'
215 ALLOCATE(begs_blr_u(nb_blr_u+2), stat=allocok)
216 IF (allocok > 0 )
THEN
220 IF (icntl(4) .LE. 0) lp=-1
221 IF (lp > 0)
WRITE(lp,*)
myid,
222 &
': ERROR allocation during SMUMPS_PROCESS_BLOCFACTO'
226 & position, npiv, nelim,
'H',
227 & blr_u(1), nb_blr_u,
229 & keep8, comm, ierr, iflag, ierror)
230 IF (iflag.LT.0)
GOTO 700
233 & a(posblocfacto), npiv*ncol,
241 & mpi_integer, comm, ierr )
242 IF (ptrist(step( inode )) .EQ. 0)
THEN
245 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
246 & iwpos, iwposcb, iptrlu,
247 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
249 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
250 & iflag, ierror, comm,
251 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
253 & root, opassw, opeliw, itloc, rhs_mumps,
254 & fils, dad, ptrarw, ptraiw,
255 & intarr, dblarr, icntl,keep,keep8,dkeep,nd, frere_steps,
256 & lptrar, nelt, frtptr, frtelt,
257 & istep_to_iniv2, tab_pos_in_pere, .true.
260 IF ( iflag .LT. 0 )
GOTO 600
262 IF ( iw( ptrist(step(inode)) + 3 +keep(ixsz)) .EQ. 0 )
THEN
263 DO WHILE ( iw(ptrist(step(inode)) + xxnbpr) .NE. 0)
266 message_received = .false.
268 & ass_irecv, blocking, set_irecv, message_received,
269 & mpi_any_source, contrib_type2,
271 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
272 & iwpos, iwposcb, iptrlu,
273 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
275 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
276 & iflag, ierror, comm,
277 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
279 & root, opassw, opeliw, itloc, rhs_mumps,
280 & fils, dad, ptrarw, ptraiw,
281 & intarr, dblarr, icntl,keep,keep8,dkeep,nd, frere_steps,
282 & lptrar, nelt, frtptr, frtelt,
283 & istep_to_iniv2, tab_pos_in_pere, .true.
286 IF ( iflag .LT. 0 )
GOTO 600
291 message_received = .true.
293 & blocking, set_irecv, message_received,
294 & mpi_any_source, mpi_any_tag,
296 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
297 & iwpos, iwposcb, iptrlu,
298 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
300 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
301 & iflag, ierror, comm,
302 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
304 & root, opassw, opeliw, itloc, rhs_mumps,
305 & fils, dad, ptrarw, ptraiw,
306 & intarr, dblarr,icntl,keep,keep8,dkeep,nd, frere_steps,
307 & lptrar, nelt, frtptr, frtelt,
308 & istep_to_iniv2, tab_pos_in_pere, .true.
311 ioldps = ptrist(step(inode))
313 & ptrast(step(inode)), iw(ioldps+xxd), iw(ioldps+xxr),
314 & a_ptr, poselt, la_ptr )
315 lcont1 = iw( ioldps + keep(ixsz))
316 nass1 = iw( ioldps + 1 + keep(ixsz))
317 compress_panel = (iw(ioldps+xxlr).GE.2)
318 oocwrite_compatible_with_blr =
319 & ( .NOT.lr_activated.OR. (.NOT.compress_panel).OR.
322 IF ( nass1 < 0 )
THEN
324 iw( ioldps + 1 + keep(ixsz)) = nass1
325 IF (keep(55) .EQ. 0)
THEN
327 & ioldps, a_ptr(poselt), la_ptr, 1_8, keep, keep8, itloc,
329 & ptrarw, intarr, dblarr, keep8(27), keep8(26), rhs_mumps,
333 & ioldps, a_ptr(poselt), la_ptr, 1_8, keep, keep8, itloc,
335 & ptrarw, intarr, dblarr, keep8(27), keep8(26),
336 & frtptr, frtelt, rhs_mumps, lrgroups)
339 nrow1 = iw( ioldps + 2 +keep(ixsz))
340 npiv1 = iw( ioldps + 3 +keep(ixsz))
341 nslav1 = iw( ioldps + 5 + keep(ixsz))
342 hs = 6 + nslav1 + keep(ixsz)
343 ncol1 = lcont1 + npiv1
345 ict11 = ioldps+hs+nrow1+npiv1 - 1
347 IF (iw(ipiv+i-1).EQ.i) cycle
349 iw(ict11+i) = iw(ict11+iw(ipiv+i-1))
350 iw(ict11+iw(ipiv+i-1)) = isw
351 ipos = poselt + int(npiv1 + i - 1,8)
352 kpos = poselt + int(npiv1 + iw(ipiv+i-1) - 1,8)
353 CALL sswap(nrow1, a_ptr(ipos), ncol1, a_ptr(kpos), ncol1)
355 lpos2 = poselt + int(npiv1,8)
356 lpos = lpos2 + int(npiv,8)
357 IF ((.NOT. lr_activated).OR.keep(475).EQ.0)
THEN
358 CALL strsm(
'L',
'L',
'N',
'N', npiv, nrow1, one,
359 & a(posblocfacto), ld_blocfacto,
360 & a_ptr(lpos2), ncol1)
363 compress_cb = .false.
364 IF ( lr_activated)
THEN
365 compress_cb = ((iw(ioldps+xxlr).EQ.1).OR.
366 & (iw(ioldps+xxlr).EQ.3))
367 IF (compress_cb.AND.npiv.EQ.0)
THEN
368 compress_cb = .false.
369 iw(ioldps+xxlr) = iw(ioldps+xxlr) -1
374 ioldps = ptrist(step(inode))
375 CALL get_cut(iw(ioldps+hs:ioldps+hs+nrow1-1), 0,
376 & nrow1, lrgroups, npartscb,
377 & npartsass, begs_blr_l)
378 CALL regrouping2(begs_blr_l, npartsass, 0, npartscb,
379 & nrow1-0, keep(488), .true., keep(472))
381 IF (ipanel.EQ.1)
THEN
382 begs_blr_col=>begs_blr_u
384 ALLOCATE(begs_blr_col(
size(begs_blr_u)+ipanel-1),
386 IF (allocok > 0 )
THEN
388 ierror =
size(begs_blr_u)+ipanel-1
390 IF (icntl(4) .LE. 0) lp=-1
391 IF (lp > 0)
WRITE(lp,*)
myid,
392 &
': ERROR allocation during SMUMPS_PROCESS_BLOCFACTO'
395 begs_blr_col(1:ipanel-1) = 1
396 DO i=1,
size(begs_blr_u)
397 begs_blr_col(ipanel+i-1) = begs_blr_u(i)
402 IF (iflag.LT.0)
GOTO 700
410 & huge(npartsass_master),
414 IF (ipanel.NE.1)
THEN
415 DEALLOCATE(begs_blr_col)
417 IF (iflag.LT.0)
GOTO 700
421 keep_begs_blr_l = .true.
422 nb_blr_l =
size(begs_blr_l) - 2
430 IF (lr_activated)
THEN
431 call max_cluster(begs_blr_l,nb_blr_l+1,maxi_cluster_l)
433 IF (lastbl.AND.compress_cb)
THEN
434 maxi_cluster=
max(maxi_cluster_u+nelim,maxi_cluster_l)
436 maxi_cluster=
max(maxi_cluster_u,maxi_cluster_l)
438 lwork = maxi_cluster*maxi_cluster
443 ALLOCATE(block(maxi_cluster, omp_num*maxi_cluster),
444 & rwork(2*maxi_cluster*omp_num),
445 & tau(maxi_cluster*omp_num),
446 & jpvt(maxi_cluster*omp_num),
447 & work(lwork*omp_num), stat=allocok)
448 IF (allocok > 0 )
THEN
450 ierror = maxi_cluster*omp_num*maxi_cluster
451 & + 2*maxi_cluster*omp_num
452 & + maxi_cluster*omp_num
453 & + maxi_cluster*omp_num
456 IF (icntl(4) .LE. 0) lp=-1
457 IF (lp > 0)
WRITE(lp,*)
myid,
458 &
': ERROR allocation during SMUMPS_PROCESS_BLOCFACTO'
462 ALLOCATE(blr_l(nb_blr_l), stat=allocok)
463 IF (allocok > 0 )
THEN
467 IF (icntl(4) .LE. 0) lp=-1
468 IF (lp > 0)
WRITE(lp,*)
myid,
469 &
': ERROR allocation during SMUMPS_PROCESS_BLOCFACTO'
476 & (a_ptr(poselt), la_ptr, 1_8,
477 & iflag, ierror, ncol1,
478 & begs_blr_l(1),
size(begs_blr_l), nb_blr_l+1,
479 & dkeep(8), keep(466), keep(473),
481 & current_blr,
'V', work, tau, jpvt, lwork, rwork,
482 & block, maxi_cluster, nelim,
485 & 2, keep(483), keep8,
490 IF ( (keep(486).EQ.2)
501 IF (iflag.LT.0)
GOTO 300
502 IF (keep(475).GE.1)
THEN
504 & ld_blocfacto, -6666,
506 & blr_l, current_blr, current_blr+1, nb_blr_l+1,
512 IF (keep(486).NE.2)
THEN
514 & a_ptr(poselt), la_ptr, 1_8,
519 & nb_blr_l+1, blr_l(1), current_blr, 'v
', 1)
526.LT.
IF (IFLAG0) GOTO 700
529.eq..AND.
IF ( (KEEP(201)1)
530.OR..EQ.
& (OOCWRITE_COMPATIBLE_WITH_BLR NPIV0) ) THEN
531 MonBloc%INODE = INODE
532 MonBloc%MASTER = .FALSE.
537 MonBloc%LastPiv = NPIV1 + NPIV
538 MonBloc%LastPanelWritten_L = -9999
539 MonBloc%LastPanelWritten_U = -9999
540 NULLIFY(MonBloc%INDICES)
541 MonBloc%Last = LASTBL
542 STRAT = STRAT_TRY_WRITE
544 LIWFAC = IW(IOLDPS+XXI)
546 CALL SMUMPS_OOC_IO_LU_PANEL_I( STRAT, TYPEF_L,
548 & LA_PTR, MonBloc, NextPivDummy, NextPivDummy,
549 & IW(IOLDPS), LIWFAC, MYID, KEEP8(31), IFLAG,LAST_CALL)
553 IF (LR_ACTIVATED) THEN
555 UPOS = 1_8+int(NPIV,8)
556 CALL SMUMPS_BLR_UPD_NELIM_VAR_L_I(
557 & A(POSBLOCFACTO), LA_BLOCFACTO, UPOS,
558 & A_PTR(POSELT), LA_PTR, LPOS-POSELT+1_8,
559 & IFLAG, IERROR, LD_BLOCFACTO, NCOL1,
560 & BEGS_BLR_L(1), size(BEGS_BLR_L),
561 & CURRENT_BLR, BLR_L(1), NB_BLR_L+1,
562 & CURRENT_BLR+1, NELIM, 'n
')
567 CALL SMUMPS_BLR_UPDATE_TRAILING_I(
568 & A_PTR(POSELT), LA_PTR, 1_8,
569 & IFLAG, IERROR, NCOL1,
570 & BEGS_BLR_L(1), size(BEGS_BLR_L),
571 & BEGS_BLR_U(1), size(BEGS_BLR_U), CURRENT_BLR,
572 & BLR_L(1), NB_BLR_L+1,
573 & BLR_U(1), NB_BLR_U+1,
578 & KEEP(481), DKEEP(11), KEEP(466), KEEP(477)
583.LT.
IF (IFLAG0) GOTO 700
585 UPOS = POSBLOCFACTO+int(NPIV,8)
586 CALL sgemm('n
','n
', NCOL-NPIV, NROW1, NPIV,
587 & ALPHA,A(UPOS), NCOL,
588 & A_PTR(LPOS2), NCOL1, ONE, A_PTR(LPOS), NCOL1)
591 IW(IOLDPS+KEEP(IXSZ) ) = IW(IOLDPS+KEEP(IXSZ) ) - NPIV
592 IW(IOLDPS + 3+KEEP(IXSZ) ) = IW(IOLDPS+3+KEEP(IXSZ) ) + NPIV
594 IW(IOLDPS+1+KEEP(IXSZ) ) = IW(IOLDPS + 3+KEEP(IXSZ) )
596.not..AND.
IF ( LASTBL
597.EQ.
& (IW(IOLDPS+1+KEEP(IXSZ)) IW(IOLDPS + 3+KEEP(IXSZ))) ) THEN
598 write(*,*) 'internal error 1 **** in blacfacto
'
601 IF (LR_ACTIVATED) THEN
604 CALL DEALLOC_BLR_PANEL( BLR_U, NB_BLR_U, KEEP8, KEEP(34))
606.EQ.
IF (KEEP(486)3) THEN
607 CALL DEALLOC_BLR_PANEL( BLR_L, NB_BLR_L, KEEP8, KEEP(34))
610 CALL UPD_MRY_LU_LRGAIN(BLR_L, NPARTSCB
615 LRLU = LRLU + LA_BLOCFACTO
616 LRLUS = LRLUS + LA_BLOCFACTO
617 KEEP8(69) = KEEP8(69) - LA_BLOCFACTO
618 POSFAC = POSFAC - LA_BLOCFACTO
619 CALL SMUMPS_LOAD_MEM_UPDATE(.FALSE.,.FALSE.,
620 & LA-LRLUS,0_8,-LA_BLOCFACTO,KEEP,KEEP8,LRLUS)
622 FLOP1 = dble( NPIV1*NROW1 ) +
623 & dble(NROW1*NPIV1)*dble(2*NCOL1-NPIV1-1)
625 & dble((NPIV1+NPIV)*NROW1 ) -
626 & dble(NROW1*(NPIV1+NPIV))*dble(2*NCOL1-NPIV1-NPIV-1)
627 CALL SMUMPS_LOAD_UPDATE( 1, .FALSE., FLOP1, KEEP,KEEP8 )
629.NE.
IF (KEEP(486)0) THEN
630 IF (LR_ACTIVATED) THEN
631 CALL STATS_COMPUTE_FLOP_SLAVE_TYPE2(NROW1, NCOL1, NASS1,
634 CALL UPD_FLOP_FRFRONT_SLAVE(NROW1, NCOL1, NASS1,
638 IF (LR_ACTIVATED) THEN
639 IF (COMPRESS_CB) THEN
640 CALL SMUMPS_BLR_RETRIEVE_BEGS_BLR_C (IW(IOLDPS+XXF),
641 & BEGS_BLR_COL, NPARTSASS_MASTER_AUX)
642 BEGS_BLR_COL(1+NPARTSASS_MASTER) =
643 & BEGS_BLR_COL(1+NPARTSASS_MASTER) - NELIM
644 NB_BLR_COL = size(BEGS_BLR_COL) - 1
646 call MAX_CLUSTER(BEGS_BLR_L,NB_BLR_L+1,MAXI_CLUSTER_L)
647 call MAX_CLUSTER(BEGS_BLR_COL,NB_BLR_COL,MAXI_CLUSTER_COL)
648 IF (COMPRESS_CB) THEN
649 MAXI_CLUSTER=max(MAXI_CLUSTER_COL+NELIM,MAXI_CLUSTER_L)
651 MAXI_CLUSTER=max(MAXI_CLUSTER_COL,MAXI_CLUSTER_L)
653 LWORK = MAXI_CLUSTER*MAXI_CLUSTER
656!$ OMP_NUM = OMP_GET_MAX_THREADS()
658 ALLOCATE(BLOCK(MAXI_CLUSTER, OMP_NUM*MAXI_CLUSTER),
659 & RWORK(2*MAXI_CLUSTER*OMP_NUM),
660 & TAU(MAXI_CLUSTER*OMP_NUM),
661 & JPVT(MAXI_CLUSTER*OMP_NUM),
662 & WORK(LWORK*OMP_NUM), stat=allocok)
663 IF (allocok > 0 ) THEN
665 IERROR = MAXI_CLUSTER*OMP_NUM*MAXI_CLUSTER
666 & + 2*MAXI_CLUSTER*OMP_NUM
667 & + MAXI_CLUSTER*OMP_NUM
668 & + MAXI_CLUSTER*OMP_NUM
671.LE.
IF (ICNTL(4) 0) LP=-1
672 IF (LP > 0) WRITE(LP,*) MYID,
677 allocate(CB_LRB(NB_BLR_L,NB_BLR_COL-NPARTSASS_MASTER),
679 IF (allocok > 0) THEN
681 IERROR = NB_BLR_L*(NB_BLR_COL-NPARTSASS_MASTER)
684 CALL SMUMPS_BLR_SAVE_CB_LRB(IW(IOLDPS+XXF),CB_LRB)
689 IF (COMPRESS_CB) THEN
690 CALL SMUMPS_COMPRESS_CB_I(
691 & A_PTR(POSELT), LA_PTR, 1_8, NCOL1,
692 & BEGS_BLR_L(1), size(BEGS_BLR_L),
693 & BEGS_BLR_COL(1), size(BEGS_BLR_COL),
694 & NB_BLR_L, NB_BLR_COL-NPARTSASS_MASTER,
696 & NROW1, NCOL1-NPIV1-NPIV, INODE,
697 & IW(IOLDPS+XXF), 0, 2, IFLAG, IERROR,
698 & DKEEP(12), KEEP(466), KEEP(484), KEEP(489),
700 & WORK, TAU, JPVT, LWORK, RWORK, BLOCK,
701 & MAXI_CLUSTER, KEEP8, OMP_NUM,
702 & -9999, -9999, -9999, KEEP(1),
711.LT.
IF (IFLAG0) GOTO 700
713 CALL SMUMPS_END_FACTO_SLAVE(
714 & COMM_LOAD, ASS_IRECV,
719 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
720 & IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, IW, LIW, A, LA,
721 & PTRIST, PTLUST_S, PTRFAC, PTRAST, STEP, PIMASTER,
723 & NSTK_S, COMP, IFLAG, IERROR, PERM,
724 & IPOOL, LPOOL, LEAF, NBFIN, SLAVEF,
725 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD, PTRARW, PTRAIW,
726 & INTARR, DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND, FRERE_STEPS,
727 & LPTRAR, NELT, FRTPTR, FRTELT,
728 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
732 IF (LR_ACTIVATED) THEN
733 IF (allocated(RWORK)) DEALLOCATE(RWORK)
734 IF (allocated(WORK)) DEALLOCATE(WORK)
735 IF (allocated(TAU)) DEALLOCATE(TAU)
736 IF (allocated(JPVT)) DEALLOCATE(JPVT)
737 IF (allocated(BLOCK)) DEALLOCATE(BLOCK)
738 IF (associated(BEGS_BLR_L)) THEN
739.NOT.
IF ( KEEP_BEGS_BLR_L) DEALLOCATE(BEGS_BLR_L)
743 IF (associated(BEGS_BLR_U)) DEALLOCATE(BEGS_BLR_U)
749 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )