17 & N, INODE, IW, LIW, A, LA, INFO, ND,
18 & FILS, FRERE, DAD, MAXFRW, root,
19 & OPASSW, OPELIW, PTRIST, PTLUST, PTRFAC, PTRAST,
20 & STEP, PIMASTER, PAMASTER,PTRARW,
21 & PTRAIW, ITLOC, RHS_MUMPS, NSTEPS, SON_LEVEL2,
22 & COMP, LRLU, IPTRLU, IWPOS, IWPOSCB, POSFAC, LRLUS, LRLUSM,
23 & ICNTL, KEEP,KEEP8,DKEEP,INTARR,LINTARR,DBLARR,LDBLARR,
25 & NSTK_S,PROCNODE_STEPS, SLAVEF, COMM,MYID,
26 & BUFR, LBUFR, LBUFR_BYTES, NBFIN, IPOOL, LPOOL, LEAF,
28 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, JOBASS, ETATASS
30 & , MUMPS_TPS_ARR, CMUMPS_TPS_ARR, L0_OMP_MAPPING
49 TYPE (CMUMPS_ROOT_STRUC) :: root
50 INTEGER COMM_LOAD, ASS_IRECV
54 INTEGER(8) LA, LRLU, LRLUS, , IPTRLU, POSFAC
55 INTEGER KEEP(500), ICNTL(60)
58 INTEGER,
INTENT(INOUT) :: INFO(2)
61 INTEGER,
TARGET :: IWPOS, LIW
62 TYPE (MUMPS_TPS_T),
TARGET,
OPTIONAL :: MUMPS_TPS_ARR(:)
63 TYPE (CMUMPS_TPS_T),
TARGET,
OPTIONAL :: CMUMPS_TPS_ARR(:)
64 INTEGER,
INTENT(IN),
OPTIONAL :: L0_OMP_MAPPING(:)
66 INTEGER,
PARAMETER :: LIDUMMY = 1
67 INTEGER,
TARGET :: IW(LIW)
68 INTEGER(8),
INTENT(IN) :: PTRARW(N), PTRAIW(N)
69 INTEGER ITLOC(N+KEEP(253)),
70 & nd(keep(28)), perm(n),
71 & fils(n), frere(keep(28)), dad(keep(28)),
72 & ptrist(keep(28)), ptlust(keep(28)),
73 & step(n), pimaster(keep(28))
74 COMPLEX :: RHS_MUMPS(KEEP(255))
75 INTEGER(8) :: PTRFAC(KEEP(28)), PTRAST(KEEP(28)),
77 INTEGER COMM, NBFIN, SLAVEF, MYID
78 INTEGER ISTEP_TO_INIV2(KEEP(71)),
79 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
80 INTEGER JOBASS,ETATASS
82 COMPLEX,
TARGET :: A(LA)
83 INTEGER,
INTENT(IN) :: LRGROUPS(N)
84 DOUBLE PRECISION OPASSW, OPELIW
85 INTEGER(8),
INTENT(IN) :: LINTARR, LDBLARR
86 COMPLEX DBLARR(LDBLARR)
87 INTEGER INTARR(LINTARR)
89 INTEGER LBUFR, LBUFR_BYTES
90 INTEGER IPOOL( LPOOL )
91 INTEGER NSTK_S(KEEP(28))
92 INTEGER PROCNODE_STEPS(KEEP(28))
94 LOGICAL PACKED_CB, IS_CB_LR
95 INTEGER,
EXTERNAL :: MUMPS_TYPENODE
96 INTEGER,
EXTERNAL :: MUMPS_PROCNODE
99 INTEGER :: STATUS(MPI_STATUS_SIZE)
101 include
'mumps_headers.h'
104 INTEGER NBPANELS_L, NBPANELS_U
105 INTEGER IN,NUMSTK,NASS,ISON,IFSON,NASS1,IELL
106 INTEGER NFS4FATHER, ESTIM_NFS4FATHER_ATSON
108 INTEGER(8) NFRONT8, LAELL8, LAELL_REQ8, ITMP8, KEEP8TMPCOPY
109 INTEGER NFRONT,,ISTCHK,ISTCHK_CB_RIGHT,LSTK,LREQ
111 INTEGER :: , SON_XXLR, SON_XXG
112 INTEGER(8) LSTK8, SIZFR8
113 LOGICAL :: IS_DYNAMIC_CB
114 INTEGER(8) :: DYN_SIZE
116 INTEGER NCOLS, NROWS, LDA_SON
117 INTEGER NELIM, IORG, IBROT
118#if ! defined(ZERO_TRIANGLE)
119 INTEGER(8) :: NUMROWS, JJ3
125 INTEGER IJROW,NBCOL,,IOLDPS
126 INTEGER(8) IACHK, POSELT, LAPOS2, IACHK_ini
127 INTEGER(8) APOS, APOS2, APOS3, , ICT12
128 INTEGER(8) :: JJ2, ICT13
129 INTEGER(8) :: JK8, J18, J28, , J48, JJ8
130 INTEGER(8) :: AINPUT8
131 INTEGER :: K1, K2, K3, KK, KK1
133 INTEGER NSLAVES, NSLSON, NPIVS,NPIV_ANA,NPIV
134 INTEGER PTRCOL, ISLAVE, PDEST,
135 INTEGER ISON_IN_PLACE
136 LOGICAL SKIP_TOP_STACK
138 INTEGER(8) SIZE_ISON_TOP8, DYN_SIZE_ISON_TOP8
139 LOGICAL RESET_TO_ZERO, RISK_OF_SAME_POS,
140 & risk_of_same_pos_this_line
144 INTEGER INDX, FIRST_INDEX, SHIFT_INDEX
146 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
148 LOGICAL COMPRESS_PANEL, LR_ACTIVATED, COMPRESS_CB,
149 & oocwrite_compatible_with_blr
151 INTEGER,
POINTER :: SON_IWPOS, SON_LIW
152 INTEGER,
POINTER,
DIMENSION(:) :: SON_IW
153 COMPLEX,
POINTER,
DIMENSION(:) :: SON_A
156 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
157 INTEGER :: NB_BLR, NPARTSCB, NPARTSASS, MAXI_CLUSTER,
161 parameter( zero = (0.0e0,0.0e0) )
164 LOGICAL MUMPS_INSSARBR
166 DOUBLE PRECISION FLOP1,FLOP1_EFF
168 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
171 lpok = ((lp.GT.0).AND.(icntl(4).GE.1))
178 level = mumps_typenode(procnode_steps(step(inode)),keep(199))
180 WRITE(*,*)
'INTERNAL ERROR 1 in CMUMPS_FAC_ASM_NIV1 '
184 hf = 6 + nslaves + keep(ixsz)
185 IF (jobass.EQ.0)
THEN
189 ioldps = ptlust(step(inode))
190 nfront = iw(ioldps + keep(ixsz))
191 nass1 = iabs(iw(ioldps + 2 + keep(ixsz)))
192 ict11 = ioldps + hf - 1 + nfront
193 ssarbr=mumps_inssarbr(procnode_steps(step(inode)),
203 IF (ison .NE. 0)
THEN
204 DO WHILE (ison .GT. 0)
206 ison = frere(step(ison))
222 IF (ison .NE. 0)
THEN
223 DO WHILE (ison .GT. 0)
226 IF (keep(400).GT.0)
THEN
227 IF (
present(l0_omp_mapping))
THEN
228 ithread=l0_omp_mapping(step(ison))
229 IF (ithread .NE.0)
THEN
230 son_iw=>mumps_tps_arr(ithread)%IW
234 nass = nass + son_iw(pimaster(step(ison))+1+keep(ixsz))
235 ison = frere(step(ison))
238 nfront = nd(step(inode)) + nass + keep(253)
239 nass1 = nass + numorg
242 & keep(489), keep(490), keep(491), keep(492),
243 & keep(20), keep(60), dad(step(inode)), keep(38),
244 & lrstatus, n, lrgroups)
245 IF (dad(step(inode)).NE.0)
THEN
246 IF ( mumps_procnode(procnode_steps(step(dad(step(inode)))),
250 & mumps_typenode(procnode_steps(step(dad(step(inode)))),
254 IF (lrstatus.EQ.1 .OR. lrstatus.EQ.3)
THEN
255 lrstatus = lrstatus-1
259 compress_panel = (lrstatus.GE.2)
260 compress_cb = ((lrstatus.EQ.1).OR.
262 lr_activated = (lrstatus.GT.0)
263 IF (compress_cb.AND.(.NOT.compress_panel))
THEN
264 compress_panel = .true
267 oocwrite_compatible_with_blr =
268 & ( .NOT.lr_activated.OR.(.NOT.compress_panel).OR.
272 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
274 & nbpanels_l, nbpanels_u, lreq_ooc)
276 lreq = hf + 2 * nfront + lreq_ooc
277 IF ((iwpos + lreq -1) .GT. iwposcb)
THEN
281 & iwpos, iwposcb, ptrist, ptrast,
282 & step, pimaster, pamaster, lrlus,
283 & keep(ixsz),
comp, dkeep(97), myid, slavef,
284 & procnode_steps, dad)
285 IF (lrlu .NE. lrlus)
THEN
287 WRITE(lp, * )
'INTERNAL ERROR 2 after compress '
288 WRITE(lp, * )
'IN CMUMPS_FAC_ASM_NIV1 '
289 WRITE(lp, * )
'LRLU,LRLUS=', lrlu,lrlus
293 IF ((iwpos + lreq -1) .GT. iwposcb)
GOTO 270
298 ison_in_place = -9999
300 IF (keep(234).NE.0)
THEN
301 IF ( iwposcb .NE. liw )
THEN
302 IF ( iwposcb+iw(iwposcb+1+xxi).NE.liw)
THEN
303 ison = iw( iwposcb + 1 + xxn )
304 IF ( dad( step( ison ) ) .EQ. inode .AND.
305 & mumps_typenode(procnode_steps(step(ison)),keep(199))
309 CALL mumps_geti8(size_ison_top8,iw(iwposcb + 1 + xxr))
310 CALL mumps_geti8(dyn_size_ison_top8, iw(iwposcb + 1 + xxd))
311 IF (dyn_size_ison_top8 .EQ. 0_8)
THEN
312 IF (lrlu .LT. int(nfront,8) * int(nfront,8))
THEN
321 IF (.NOT.
present(mumps_tps_arr).AND.
322 & .NOT.
present(l0_omp_mapping) )
THEN
324 & myid, inode, n, ioldps, hf, lp, lpok,
325 & nfront, nfront_eff, perm, dad,
326 & nass1, nass, numstk, numorg, iwposcb, iwpos,
327 & ifson, step, pimaster, ptrist, ptraiw, iw, liw,
328 & intarr, lintarr, itloc, fils, frere,
329 & son_level2, niv1, keep, keep8, info(1),
331 & procnode_steps, slavef, idummy, lidummy )
334 & myid, inode, n, ioldps, hf, lp, lpok,
335 & nfront, nfront_eff, perm, dad,
336 & nass1, nass, numstk, numorg, iwposcb, iwpos,
337 & ifson, step, pimaster, ptrist, ptraiw, iw, liw,
338 & intarr, lintarr, itloc, fils, frere,
339 & son_level2, niv1, keep, keep8, info(1),
341 & procnode_steps, slavef, idummy, lidummy
342 & , mumps_tps_arr, l0_omp_mapping )
344 IF (info(1).LT.0)
GOTO 300
345 IF (nfront_eff.NE.nfront)
THEN
346 IF (nfront.GT.nfront_eff)
THEN
347 IF(mumps_in_or_root_ssarbr(procnode_steps(step(inode)),
349 npiv=nass1-(nfront_eff-nd(step(inode)))
356 & keep(50),1,flop1_eff)
360 iwpos = iwpos - ((2*nfront)-(2*nfront_eff))
362 lreq = hf + 2 * nfront + lreq_ooc
365 WRITE(lp,*)
' INTERNAL ERROR 3 ',
366 &
' IN CMUMPS_FAC_ASM_NIV1 ',
367 &
' NFRONT, NFRONT_EFF = ',
373 IF (keep(201).EQ.1.AND.keep(50).NE.1.AND.
374 & oocwrite_compatible_with_blr)
THEN
376 & nbpanels_l, nbpanels_u, nass1,
377 & ioldps + hf + 2 * nfront, iw, liw)
380 maxfrw = max0(maxfrw, nfront)
381 ict11 = ioldps + hf - 1 + nfront
383 & lr_activated, parpiv_t1)
384 nfront8=int(nfront,8)
385 laell8 = nfront8 * nfront8
386 IF(parpiv_t1.NE.0)
THEN
387 laell8 = laell8+int(nass1,8)
390 IF ( ison_in_place > 0 )
THEN
391 laell_req8 = laell8 - size_ison_top8
393 skip_top_stack = (ison_in_place.GT.0)
395 & (0, laell_req8, skip_top_stack,
398 & lrlu,iptrlu,iwpos,iwposcb,
400 & step, pimaster,pamaster,lrlus,
401 & keep(ixsz),
comp, dkeep(97), myid,
402 & slavef, procnode_steps, dad,
404 IF (info(1).LT.0)
GOTO 490
406 lrlus = lrlus - laell8 + size_ison_top8
407 lrlusm =
min( lrlus, lrlusm )
408 itmp8 = laell8 - size_ison_top8
409 IF (keep(405).EQ.0)
THEN
410 keep8(69) = keep8(69) + itmp8
411 keep8(68) =
max(keep8(69), keep8(68))
414 keep8(69) = keep8(69) + itmp8
415 keep8tmpcopy = keep8(69)
418 keep8(68) =
max(keep8(68), keep8tmpcopy)
422 posfac = posfac + laell8
423 ssarbr=mumps_inssarbr(procnode_steps(step(inode)),keep(199))
427 & laell8-size_ison_top8,
430 IF (keep(405).EQ.0) keep(429)= keep(429)+1
431#if defined(ZERO_TRIANGLE)
432 lapos2 =
min(poselt + laell8 - 1_8, iptrlu)
433 a(poselt:lapos2) = zero
435 IF ( keep(50) .eq. 0 .OR. nfront .LT. keep(63) )
THEN
436 lapos2 =
min(poselt + laell8 - 1_8, iptrlu)
443 DO jj8 = poselt, lapos2
448 topdiag =
max(keep(7), keep(8), keep(218))-1
449 IF (lr_activated)
THEN
451 CALL get_cut(iw(ioldps+hf:ioldps+hf+nfront-1), nass1,
452 & ncb, lrgroups, npartscb,
453 & npartsass, begs_blr)
454 nb_blr = npartsass + npartscb
458 minsize = int(ibcksz2 / 2)
459 topdiag =
max(2*minsize + maxi_cluster-1,topdiag)
461 IF (etatass.EQ.1)
THEN
462 IF (keep(234).NE.0)
THEN
464 & .EQ.
"Internal error: ETATASS1 and IN-PLACE ACTIVATED"
473 DO jj8 = 0_8, nfront8 - 1_8
474 jj3 =
min(jj8+topdiag,int(nass1-1,8))
475 apos = poselt + jj8 * nfront8
476 a(apos:apos+jj3) = zero
480 numrows =
min(nfront8, (iptrlu-poselt) / nfront8 )
488 DO jj8 = 0_8, numrows - 1_8
489 apos = poselt + jj8 * nfront8
490 jj3 =
min( nfront8 - 1_8, jj8 + topdiag )
491 a(apos:apos + jj3) = zero
494 IF( numrows .LT. nfront8 )
THEN
495 apos = poselt + nfront8*numrows
496 a(apos :
min(iptrlu,apos+numrows)) = zero
501 ptrast(step(inode)) = poselt
502 ptrfac(step(inode)) = poselt
503 ptlust(step(inode)) = ioldps
504 iw(ioldps+xxi) = lreq
507 iw(ioldps+xxs) = -9999
508 iw(ioldps+xxn) = -99999
509 iw(ioldps+xxp) = -99999
510 iw(ioldps+xxa) = -99999
511 iw(ioldps+xxf) = -99999
512 iw(ioldps+xxlr) = lrstatus
513 iw(ioldps + keep(ixsz)) = nfront
515 iw(ioldps + keep(ixsz) + 2) = -nass1
516 iw(ioldps + keep(ixsz) + 3) = -nass1
517 iw(ioldps + keep(ixsz) + 4) = step(inode)
518 iw(ioldps + keep(ixsz) + 5) = nslaves
519 IF (lr_activated.AND.
527 CALL cmumps_blr_init_front (iw(ioldps+xxf), info,
529 IF (info(1).LT.0)
GOTO 500
531 estim_nfs4father_atson = -9999
532 IF (keep(219).NE.0.AND.keep(50).EQ.2)
THEN
533 ifath = dad( step( inode) )
538 ioldps = ptlust(step(inode))
540 & n, inode, ifath, fils, perm, keep,
541 & ioldps, hf, iw, liw, nfront, nass1,
542 & estim_nfs4father_atson
544 CALL cmumps_blr_save_nfs4father ( iw(ioldps+xxf),
545 & estim_nfs4father_atson )
546 IF (info(1).LT.0)
GOTO 500
551 IF (numstk.NE.0)
THEN
552 IF (ison_top > 0)
THEN
557 DO 220 iell = 1, numstk
558 istchk = pimaster(step(ison))
564 IF (keep(400).GT.0)
THEN
565 IF (
present(l0_omp_mapping))
THEN
566 ithread=l0_omp_mapping(step(ison))
567 IF (ithread .NE.0)
THEN
568 son_liw => mumps_tps_arr(ithread)%LIW
569 son_iw => mumps_tps_arr(ithread)%IW
570 son_iwpos => mumps_tps_arr(ithread)%IWPOS
571 son_a => cmumps_tps_arr(ithread)%A
575 lstk = son_iw(istchk + keep(ixsz))
577 nelim = son_iw(istchk + keep(ixsz) + 1)
578 npivs = son_iw(istchk + keep(ixsz) + 3)
579 IF ( npivs .LT. 0 ) npivs = 0
580 nslson = son_iw(istchk + keep(ixsz) + 5)
581 hs = 6 + keep(ixsz) + nslson
583 same_proc = (istchk.LT.son_iwpos)
584 IF ( same_proc )
THEN
585 istchk_cb_right = ptrist(step(ison))
587 istchk_cb_right = istchk
589 son_xxs = son_iw(istchk_cb_right+xxs)
590 son_xxlr = son_iw(istchk_cb_right+xxlr)
591 son_xxg = son_iw(istchk_cb_right+xxg)
592 packed_cb = ( son_xxs .EQ. s_cb1comp )
593 is_cb_lr = ( son_xxlr.EQ.1 .OR. son_xxlr.EQ.3 )
594 & .AND. (keep(489).EQ.1.OR.keep(489).EQ.3)
596 IF (.NOT.same_proc)
THEN
597 nrows = son_iw( istchk + keep(ixsz) + 2)
601 sizfi = hs + nrows + ncols
602 k1 = istchk + hs + nrows + npivs
603 IF ( .NOT. level1 .AND. nelim.EQ.0 )
GOTO 205
604 IF (level1 .AND. .NOT. is_cb_lr)
THEN
607 sizfr8 = (lstk8*(lstk8+1_8)/2_8)
612 IF ( keep(50).eq.0 )
THEN
613 sizfr8 = int(nelim,8) * lstk8
616 sizfr8 = int(nelim,8) * int(nelim+1,8)/2_8
618 sizfr8 = int(nelim,8) * int(nelim,8)
623 IF (jobass.EQ.0)
THEN
624 IF (level1 .AND. .NOT. is_cb_lr)
THEN
625 IF (keep(50).EQ.0)
THEN
626 opassw = opassw + lstk8*lstk8
628 opassw = opassw + lstk8*(lstk8+1)/2_8
631 IF (keep(50).EQ.0)
THEN
632 opassw = opassw + int(nelim,8)*lstk8
634 opassw = opassw + int(nelim,8)*int(nelim,8)/2_8
638 CALL mumps_geti8(dyn_size, son_iw(istchk_cb_right+xxd))
639 is_dynamic_cb = dyn_size .GT. 0_8
640 IF ( is_dynamic_cb )
THEN
641 CALL cmumps_dm_set_ptr( pamaster(step(ison)), dyn_size,
645 iachk = pamaster(step(ison))
647 IF (is_cb_lr .AND. level1)
THEN
648 posel1 = ptrast(step(inode))
649 CALL cmumps_blr_asm_niv1 (a, la,
650 & posel1, nfront, nass1, son_iw(istchk+xxf),
652 & lstk, nelim, k1, k1+lstk-1, keep(50),
653 & keep, keep8, opassw)
655 IF ( keep(50) .eq. 0 )
THEN
656 posel1 = ptrast(step(inode)) - nfront8
657 IF (nfront .EQ. lstk.AND. ison.EQ.ison_in_place
658 & .AND.iachk + sizfr8 - 1_8 .EQ. posfac - 1_8 )
THEN
662 reset_to_zero = (iachk .LT. posfac .AND.
663 & ison.EQ.ison_in_place)
664 risk_of_same_pos = iachk + sizfr8 - 1_8 .EQ. posfac - 1_8
665 & .AND. ison.EQ.ison_in_place
666 risk_of_same_pos_this_line = .false.
674 apos = posel1 + int(son_iw(kk),8) * int(nfront,8)
675 iachk = iachk_ini + int(kk-k1,8)*int(lstk,8)
676 IF (reset_to_zero)
THEN
677 IF (risk_of_same_pos)
THEN
679 risk_of_same_pos_this_line =
680 & (ison .EQ. ison_in_place)
681 & .AND. ( apos + int(son_iw(k1+lstk-1)-1,8).EQ.
682 & iachk+int(lstk-1,8) )
685 IF ((iachk .GE. posfac).AND.(kk>k1))
THEN
686 reset_to_zero =.false.
688 IF (risk_of_same_pos_this_line)
THEN
690 jj2 = apos + int(son_iw(k1 + kk1 - 1) - 1,8)
691 IF ( iachk+int(kk1-1,8) .NE. jj2 )
THEN
692 a(jj2) = a(iachk + int(kk1 - 1,8))
693 a(iachk + int(kk1 -1,8)) = zero
701 jj2 = apos + int(son_iw(k1+kk1-1),8) - 1_8
702 a(jj2) = a(iachk + int(kk1 - 1,8))
703 a(iachk + int(kk1 -1,8)) = zero
711 jj2 = apos + int(son_iw(k1+kk1-1)
712 a(jj2) = a(jj2) + son_a(iachk + int(kk1 - 1,8))
720 IF (level1 .AND. .NOT. is_cb_lr)
THEN
725 IF (ison .EQ. ison_in_place)
THEN
727 & ptrast(step( inode )), nfront, nass1,
728 & iachk, lda_son, sizfr8,
729 & son_iw( k1 ), k2 - k1 + 1, nelim, etatass
732 IF (sizfr8 .GT. 0)
THEN
734 & ptrast(step( inode )), nfront, nass1,
736 & son_iw( k1 ), k2 - k1 + 1, nelim, etatass,
744 IF (same_proc) istchk = ptrist(step(ison))
745 IF ((same_proc).AND.etatass.NE.1)
THEN
746 IF (keep(50).NE.0)
THEN
752 son_iw(kk) = son_iw(kk - nrows)
761 son_iw(kk) = son_iw(kk - nrows)
763 IF (nelim .NE. 0)
THEN
769 jpos = son_iw(kk) + ict11
770 son_iw(kk) = iw(jpos)
775 IF (etatass.NE.1)
THEN
776 IF ( same_proc )
THEN
777 ptrist(step(ison)) = -99999999
779 pimaster(step( ison )) = -99999999
781 IF (ithread .EQ. 0)
THEN
783 & ssarbr, myid, n, istchk,
784 & iw, liw, lrlu, lrlus, iptrlu,
785 & iwposcb, la, keep,keep8,
786 & (ison .EQ. ison_top)
789 CALL mumps_load_disable()
791 & ssarbr, myid, n, istchk,
792 & mumps_tps_arr(ithread)%IW(1),
793 & mumps_tps_arr(ithread)%LIW,
794 & mumps_tps_arr(ithread)%LRLU,
795 & mumps_tps_arr(ithread)%LRLUS,
796 & mumps_tps_arr(ithread)%IPTRLU,
797 & mumps_tps_arr(ithread)%IWPOSCB,
798 & mumps_tps_arr(ithread)%LA, keep,keep8, .false.
800 CALL mumps_load_enable()
802 IF (is_dynamic_cb)
THEN
803 CALL cmumps_dm_free_block(son_xxg,
805 & keep(405).EQ.1, keep8 )
809 pdest = istchk + 6 + keep(ixsz)
810 ncbson = lstk - nelim
811 ptrcol = istchk + hs + nrows + npivs + nelim
812 DO islave = 0, nslson-1
813 IF (iw(pdest+islave).EQ.myid)
THEN
815 & keep, keep8, ison, step, n, slavef
816 & istep_to_iniv2, tab_pos_in_pere,
819 & trow_size, first_index )
820 shift_index = first_index - 1
821 indx = ptrcol + shift_index
823 & bufr, lbufr, lbufr_bytes,
824 & inode, ison, nslaves, idummy,
825 & nfront, nass1, nfs4father,
826 & trow_size, iw( indx ),
828 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
829 & lrlus, n, iw, liw, a, la,
830 & ptrist, ptlust, ptrfac, ptrast, step,
831 & pimaster, pamaster, nstk_s,
comp,
832 & info(1), info(2), myid, comm, perm, ipool, lpool,
833 & leaf, nbfin, icntl, keep, keep8, dkeep, root,
834 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
835 & ptrarw, ptraiw, intarr, dblarr, nd, frere,
836 & lptrar, nelt, iw, iw,
838 & istep_to_iniv2, tab_pos_in_pere, lrgroups
840 IF ( info(1) .LT. 0 )
GOTO 500
844 IF (pimaster(step(ison)).GT.0)
THEN
846 DO WHILE (ierr.EQ.-1)
847 ptrcol = pimaster(step(ison)) + hs + nrows + npivs + nelim
848 pdest = pimaster(step(ison)) + 6 + keep(ixsz)
849 CALL cmumps_buf_send_maplig(
850 & inode, nfront, nass1, nfs4father,
852 & izero, idummy, iw(ptrcol), ncbson,
853 & comm, ierr, iw(pdest), nslson, slavef,
854 & keep, keep8, step, n,
855 & istep_to_iniv2, tab_pos_in_pere
860 message_received = .false.
862 & blocking, set_irecv, message_received,
863 & mpi_any_source, mpi_any_tag,
865 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
866 & iwpos, iwposcb, iptrlu,
867 & lrlu, lrlus, n, iw, liw, a, la,
868 & ptrist, ptlust, ptrfac,
869 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
870 & info(1), info(2), comm,
872 & ipool, lpool, leaf,
873 & nbfin, myid, slavef,
874 & root, opassw, opeliw, itloc, rhs_mumps,
875 & fils, dad, ptrarw, ptraiw,
876 & intarr, dblarr, icntl, keep, keep8,dkeep, nd, frere,
877 & lptrar, nelt, iw, iw,
878 & istep_to_iniv2, tab_pos_in_pere, .true., lrgroups )
879 IF ( info(1) .LT. 0 )
GOTO 500
882 IF (ierr .EQ. -2)
GOTO 290
883 IF (ierr .EQ. -3)
GOTO 295
886 ison = frere(step(ison))
887 IF (ison .LE. 0)
THEN
892 IF (etatass.EQ.2)
GOTO 500
893 poselt = ptrast(step(inode))
895 DO 260 iorg = 1, numorg
897 ainput8 = ptrarw(ibrot)
900 j28 = j18 + intarr(jk8)
902 j48 = j28 - intarr(jj8)
904 ict12 = poselt + int(ijrow - nfront - 1,8)
906 IF ( keep(265).NE. 0 )
THEN
910 apos2 = ict12 + int(intarr(jj8),8) * nfront8
911 a(apos2) = a(apos2) + dblarr(ainput8)
912 ainput8 = ainput8 + 1_8
917 apos2 = ict12 + int(intarr(jj8),8) * nfront8
918 a(apos2) = a(apos2) + dblarr(ainput8)
919 ainput8 = ainput8 + 1_8
923 IF (j38 .LE. j48)
THEN
924 ict13 = poselt + int(ijrow - 1,8) * nfront8
925 nbcol = int(j48 - j38 + 1_8)
927 IF ( keep(265) .NE. 0 )
THEN
930 DO jj8 = 1_8, int(nbcol,8)
931 apos3 = ict13 + int(intarr(j38 + jj8 - 1_8) - 1_8,8)
932 a(apos3) = a(apos3) + dblarr(ainput8 + jj8 - 1_8)
936 DO jj8 = 1_8, int(nbcol,8)
937 apos3 = ict13 + int(intarr(j38 + jj8 - 1_8) - 1_8,8)
938 a(apos3) = a(apos3) + dblarr(ainput8 + jj8 - 1_8)
943 IF (keep(50).EQ.0)
THEN
946 & int(ijrow-1,8) * nfront8 +
947 & int(nfront-keep(253)+j253-1,8)
948 a(apos) = a(apos) + rhs_mumps( (j253-1)*keep(254)+ibrot )
953 & int(nfront-keep(253)+j253-1,8) * nfront8 +
955 a(apos) = a(apos) + rhs_mumps( (j253-1)*keep(254)+ibrot )
960 IF (parpiv_t1.NE.0.AND.(.NOT.son_level2))
THEN
961 ioldps = ptlust(step(inode))
963 & n, inode, iw, liw, a, la, keep, perm,
965 & nfront, nass1, lr_activated, parpiv_t1, nass)
973 &
' FAILURE IN INTEGER ALLOCATION DURING CMUMPS_FAC_ASM'
979 &
' FAILURE, SEND BUFFER TOO SMALL DURING CMUMPS_FAC_ASM'
982 lreq = ncbson + 6+nslson+keep(ixsz)
983 info(2) = lreq * keep( 34 )
988 &
' FAILURE, RECV BUFFER TOO SMALL DURING CMUMPS_FAC_ASM'
991 lreq = ncbson + 6+nslson+keep(ixsz)
992 info(2) = lreq * keep( 34 )
995 IF( info(1).EQ.-13 )
THEN
998 &
' FAILURE IN INTEGER DYNAMIC ALLOCATION DURING CMUMPS_FAC_ASM'
1000 info(2) = numstk + 1
1003 IF ( keep(405) .EQ. 0 )
THEN
1010 & N, INODE, IW, LIW, A, LA, INFO,
1011 & ND, FILS, FRERE, DAD,
1013 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1015 & OPASSW, OPELIW, PTRIST, PTLUST, PTRFAC,
1016 & PTRAST, STEP, PIMASTER, PAMASTER, PTRARW, NSTK_S,
1017 & PTRAIW, ITLOC, RHS_MUMPS, NSTEPS,
1018 & COMP, LRLU, IPTRLU, IWPOS, IWPOSCB, POSFAC, LRLUS,
1019 & ICNTL, KEEP, KEEP8,DKEEP,INTARR,LINTARR,DBLARR,LDBLARR,
1020 & PROCNODE_STEPS, SLAVEF, COMM,MYID,
1021 & BUFR, LBUFR, LBUFR_BYTES, NBFIN, LEAF, IPOOL, LPOOL,
1037 TYPE (CMUMPS_ROOT_STRUC) :: root
1038 INTEGER COMM_LOAD, ASS_IRECV
1039 INTEGER N,LIW,NSTEPS, NBFIN
1040 INTEGER (500), ICNTL(60)
1041 INTEGER(8) KEEP8(150)
1043 INTEGER(8) :: LRLUS, LRLU, IPTRLU, POSFAC, LA
1044 INTEGER,
INTENT(INOUT) :: INFO(2)
1045 INTEGER INODE, MAXFRW, LPOOL, LEAF,
1046 & IWPOS, IWPOSCB, COMP, SLAVEF
1047 COMPLEX,
TARGET :: A(LA)
1048 INTEGER,
intent(in) :: LRGROUPS(N)
1049 DOUBLE PRECISION OPASSW, OPELIW
1050 INTEGER COMM, MYID, LBUFR, LBUFR_BYTES
1051 INTEGER,
DIMENSION(0:SLAVEF - 1) :: MEM_DISTRIB
1052 INTEGER IPOOL(LPOOL)
1053 INTEGER(8) :: PTRAST(KEEP(28))
1054 INTEGER(8) :: PTRFAC(KEEP(28))
1055 INTEGER(8) :: PAMASTER(KEEP(28))
1056 INTEGER(8),
INTENT(IN) :: PTRARW(N), PTRAIW(N)
1057 INTEGER IW(LIW), ITLOC(N+KEEP(253)),
1059 & fils(n), frere(keep(28)), dad(keep(28)),
1060 & ptrist(keep(28)), ptlust(keep(28)),
1062 & pimaster(keep(28)),
1063 & nstk_s(keep(28)), perm(n)
1064 COMPLEX :: RHS_MUMPS(KEEP(255))
1065 INTEGER CAND(SLAVEF+1, max(1,KEEP(56)))
1066 INTEGER ISTEP_TO_INIV2(KEEP(71)),
1067 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
1068 INTEGER (KEEP(28)), BUFR(LBUFR)
1069 INTEGER(8),
INTENT(IN) :: LINTARR,LDBLARR
1070 COMPLEX DBLARR(LDBLARR)
1071 INTEGER INTARR(LINTARR)
1074 INTEGER :: STATUS(MPI_STATUS_SIZE)
1076 INTEGER LP, HS, HF, HF_OLD, NCBSON, NSLAVES_OLD
1079 INTEGER IN,NUMSTK,,ISON,IFSON,,IELL
1080 INTEGER :: IBC_SOURCE
1081 COMPLEX,
DIMENSION(:),
POINTER :: SON_A
1082 INTEGER :: MAXWASTEDPROCS
1083 parameter(maxwastedprocs=1)
1084 INTEGER NFS4FATHER, ESTIM_NFS4FATHER_ATSON
1087 INTEGER NFRONT,NFRONT_EFF,ISTCHK,ISTCHK_CB_RIGHT,LSTK,
1089 INTEGER(8) :: LAELL8
1091 INTEGER NBPANELS_L, NBPANELS_U
1092 LOGICAL PACKED_CB, IS_CB_LR
1095 INTEGER(8) :: DYN_SIZE
1098 INTEGER :: K1, K2, KK, KK1
1100 INTEGER(8) :: JK8, AINPUT8, J18, J28, J38, J48,
1101 INTEGER(8) :: LAPOS2, JJ2, JJ3
1103 INTEGER(8) :: IACHK, APOS, APOS2, POSELT, ICT12, POSEL1
1104#if ! defined(ZERO_TRIANGLE)
1109 INTEGER NELIM,NPIVS,NCOLS,NROWS,
1111 INTEGER LDAFS, LDA_SON, IJROW, IBROT
1112 INTEGER NBCOL,NUMORG,IOLDPS, NUMORG_SPLIT
1113 INTEGER NSLAVES, NSLSON
1114 INTEGER NBLIG, PTRCOL, PTRROW, PDEST
1118 INTEGER ISON_IN_PLACE
1119 LOGICAL IS_ofType5or6, SPLIT_MAP_RESTART
1120 INTEGER NMB_OF_CAND, NMB_OF_CAND_ORIG
1121 LOGICAL SAME_PROC, NIV1, SON_LEVEL2
1122 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
1123 INTEGER TROW_SIZE, INDX, FIRST_INDEX, SHIFT_INDEX
1125 LOGICAL COMPRESS_PANEL, LR_ACTIVATED, COMPRESS_CB,
1126 & oocwrite_compatible_with_blr
1129 parameter( izero = 0 )
1130 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE, MUMPS_TYPESPLIT
1131 EXTERNAL mumps_procnode, mumps_typenode, mumps_typesplit
1134 PARAMETER( RZERO = 0.0e0 )
1135 parameter( zero = (0.0e0,0.0e0) )
1136 INTEGER NELT, LPTRAR
1137 logical :: force_cand
1139 include
'mumps_headers.h'
1140 INTEGER(8) :: APOSMAX
1142 INTEGER INIV2, SIZE_TMP_SLAVES_LIST, allocok
1143 INTEGER NCB_SPLIT, SIZE_LIST_SPLIT, NBSPLIT
1144 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: TMP_SLAVES_LIST, COPY_CAND
1145 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: SONROWS_PER_ROW
1146 INTEGER,
POINTER,
DIMENSION(:) :: BEGS_BLR
1147 INTEGER :: NB_BLR, NPARTSCB, , MAXI_CLUSTER,
1152 lpok = ((lp.GT.0).AND.(icntl(4).GE.1))
1153 is_oftype5or6 = .false.
1158 keep(429) = keep(429)+1
1171 DO WHILE (ison .GT. 0)
1173 IF ( keep(48)==5 .AND.
1174 & mumps_typenode(procnode_steps(step(ison)),
1175 & keep(199)) .EQ. 1)
THEN
1177 & max(ncbson_max,iw(pimaster(step(ison))+keep(ixsz)))
1179 nass = nass + iw(pimaster(step(ison)) + 1 + keep(ixsz))
1180 ison = frere(step(ison))
1182 nfront = nd(step(inode)) + nass + keep(253)
1183 nass1 = nass + numorg
1184 ncb = nfront - nass1
1186 & keep(489), keep(490), keep(491), keep(492),
1187 & keep(20), keep(60), dad(step(inode)), keep(38),
1188 & lrstatus, n, lrgroups)
1189 compress_panel = (lrstatus.GE.2)
1190 compress_cb = ((lrstatus.EQ.1).OR.
1192 lr_activated = (lrstatus.GT.0)
1193 IF (compress_cb.AND.(.NOT.compress_panel))
THEN
1194 compress_panel = .true.
1197 oocwrite_compatible_with_blr =
1198 & ( .NOT.lr_activated.OR.(.NOT.compress_panel
1201 IF((keep(24).eq.0).or.(keep(24).eq.1))
then
1204 force_cand=(mod(keep(24),2).eq.0)
1206 typesplit = mumps_typesplit(procnode_steps(step(inode)),
1208 is_oftype5or6 = (typesplit.EQ.5 .OR. typesplit.EQ.6)
1209 istchk = pimaster(step(ifson))
1210 pdest = istchk + 6 + keep(ixsz)
1211 nslson = iw(istchk + keep(ixsz) + 5)
1212 split_map_restart = .false.
1213 IF (force_cand)
THEN
1214 iniv2 = istep_to_iniv2( step( inode ))
1215 nmb_of_cand = cand( slavef+1, iniv2 )
1216 nmb_of_cand_orig = nmb_of_cand
1217 size_tmp_slaves_list = nmb_of_cand
1218 IF (is_oftype5or6)
THEN
1219 DO i=nmb_of_cand+1,slavef
1220 IF ( cand( i, iniv2 ).LT.0)
EXIT
1221 nmb_of_cand = nmb_of_cand +1
1223 size_tmp_slaves_list = nslson-1
1224 IF (inode.EQ.-999999)
THEN
1225 split_map_restart = .true.
1228 IF (is_oftype5or6.AND.split_map_restart)
THEN
1230 is_oftype5or6 = .false.
1231 size_tmp_slaves_list = nmb_of_cand
1232 cand(slavef+1, iniv2) = size_tmp_slaves_list
1236 size_tmp_slaves_list = slavef - 1
1237 nmb_of_cand = slavef - 1
1238 nmb_of_cand_orig = slavef - 1
1240 ALLOCATE(tmp_slaves_list(size_tmp_slaves_list),stat=allocok)
1241 IF (allocok > 0 )
THEN
1244 IF ( (typesplit.EQ.4)
1245 & .OR.(typesplit.EQ.5).OR.(typesplit.EQ.6)
1247 IF (typesplit.EQ.4)
THEN
1248 ALLOCATE(copy_cand(slavef+1),stat=allocok)
1249 IF (allocok > 0 )
THEN
1253 & inode, step, n, slavef,
1254 & procnode_steps, keep, dad, fils,
1255 & cand(1,iniv2), icntl, copy_cand,
1256 & nbsplit, numorg_split, tmp_slaves_list(1),
1257 & size_tmp_slaves_list
1259 ncb_split = ncb-numorg_split
1260 size_list_split = size_tmp_slaves_list - nbsplit
1263 & mem_distrib(0), ncb_split, nfront, nslaves,
1264 & tab_pos_in_pere(1,iniv2),
1265 & tmp_slaves_list(nbsplit+1),
1266 & size_list_split,inode
1268 DEALLOCATE (copy_cand)
1270 & inode, step, n, slavef, nbsplit, ncb,
1271 & procnode_steps, keep, dad, fils,
1273 & tab_pos_in_pere(1,iniv2),
1276 IF (split_map_restart)
THEN
1277 is_oftype5or6 = .true.
1278 typesplit = mumps_typesplit(procnode_steps(step(inode)),
1280 cand( slavef+1, iniv2 ) = nmb_of_cand_orig
1283 istchk = pimaster(step(ifson))
1284 pdest = istchk + 6 + keep(ixsz)
1285 nslson = iw(istchk + keep(ixsz) + 5)
1286 IF (keep(376) .EQ. 1)
THEN
1287 nfront = iw( pimaster(step(ifson)) + keep(ixsz))
1290 & inode, typesplit, ifson,
1291 & cand(1,iniv2), nmb_of_cand_orig,
1292 & iw(pdest), nslson,
1294 & procnode_steps, keep, dad, fils,
1295 & icntl, istep_to_iniv2, iniv2,
1296 & tab_pos_in_pere, nslaves,
1298 & size_tmp_slaves_list
1303 & icntl, cand(1,iniv2),
1304 & mem_distrib(0), ncb, nfront, nslaves,
1305 & tab_pos_in_pere(1,iniv2),
1307 & size_tmp_slaves_list,inode
1310 hf = nslaves + 6 + keep(ixsz)
1312 IF (keep(201).EQ.1.AND.oocwrite_compatible_with_blr)
THEN
1314 & nbpanels_l, nbpanels_u, lreq_ooc)
1316 lreq = hf + 2 * nfront + lreq_ooc
1317 IF ((iwpos + lreq -1) .GT. iwposcb)
THEN
1321 & iwpos, iwposcb, ptrist, ptrast,
1322 & step, pimaster, pamaster,
1324 & comp, dkeep(97), myid, slavef,
1325 & procnode_steps, dad)
1326 IF (lrlu .NE. lrlus)
THEN
1328 WRITE(lp, * )
'PB compress CMUMPS_FAC_ASM_NIV2 ',
1329 &
'LRLU,LRLUS=',lrlu,lrlus
1333 IF ((iwpos + lreq -1) .GT. iwposcb)
GOTO 270
1336 iwpos = iwpos + lreq
1338 ALLOCATE(sonrows_per_row(nfront-nass1), stat=allocok)
1339 IF (allocok > 0)
THEN
1342 ison_in_place = -9999
1344 & myid, inode, n, ioldps, hf, lp, lpok,
1345 & nfront, nfront_eff, perm, dad,
1346 & nass1, nass, numstk, numorg, iwposcb, iwpos,
1347 & ifson, step, pimaster, ptrist, ptraiw, iw, liw,
1348 & intarr, lintarr, itloc, fils, frere,
1349 & son_level2, niv1, keep,keep8, info(1),
1351 & procnode_steps, slavef, sonrows_per_row,
1353 IF (info(1).LT.0)
GOTO 250
1354 IF ( nfront .NE. nfront_eff )
THEN
1356 & (typesplit.EQ.5) .OR. (typesplit.EQ.6))
THEN
1357 WRITE(*,*)
' Internal error 1 in fac_ass due to splitting ',
1358 & ' inode, nfront, nfront_eff =
', INODE, NFRONT, NFRONT_EFF
1359 WRITE(*,*) ' splitting not yet ready
for'
1362.GT.
IF (NFRONTNFRONT_EFF) THEN
1363 NCB = NFRONT_EFF - NASS1
1364 NSLAVES_OLD = NSLAVES
1366.EQ.
IF (TYPESPLIT4) THEN
1367 ALLOCATE(COPY_CAND(SLAVEF+1),stat=allocok)
1368 IF (allocok > 0 ) THEN
1371 CALL CMUMPS_SPLIT_PREP_PARTITION (
1372 & INODE, STEP, N, SLAVEF,
1373 & PROCNODE_STEPS, KEEP, DAD, FILS,
1374 & CAND(1,INIV2), ICNTL, COPY_CAND,
1375 & NBSPLIT, NUMORG_SPLIT, TMP_SLAVES_LIST(1),
1376 & SIZE_TMP_SLAVES_LIST
1378 NCB_SPLIT = NCB-NUMORG_SPLIT
1379 SIZE_LIST_SPLIT = SIZE_TMP_SLAVES_LIST - NBSPLIT
1380 CALL CMUMPS_LOAD_SET_PARTITION( NCBSON_MAX,
1381 & SLAVEF, KEEP,KEEP8,
1383 & MEM_DISTRIB(0), NCB_SPLIT, NFRONT_EFF, NSLAVES,
1384 & TAB_POS_IN_PERE(1,INIV2),
1385 & TMP_SLAVES_LIST(NBSPLIT+1),
1386 & SIZE_LIST_SPLIT,INODE
1388 DEALLOCATE (COPY_CAND)
1389 CALL CMUMPS_SPLIT_POST_PARTITION (
1390 & INODE, STEP, N, SLAVEF, NBSPLIT, NCB,
1391 & PROCNODE_STEPS, KEEP, DAD, FILS,
1393 & TAB_POS_IN_PERE(1,INIV2),
1397 CALL CMUMPS_LOAD_SET_PARTITION( NCBSON_MAX,
1398 & SLAVEF, KEEP, KEEP8, ICNTL,
1400 & MEM_DISTRIB(0), NCB, NFRONT_EFF, NSLAVES,
1401 & TAB_POS_IN_PERE(1,INIV2),
1402 & TMP_SLAVES_LIST, SIZE_TMP_SLAVES_LIST,INODE
1405 HF = NSLAVES + 6 + KEEP(IXSZ)
1406 IWPOS = IWPOS - ((2*NFRONT)-(2*NFRONT_EFF)) -
1407 & (NSLAVES_OLD - NSLAVES)
1408.NE.
IF (NSLAVES_OLD NSLAVES) THEN
1409 IF (NSLAVES_OLD > NSLAVES) THEN
1410 DO KK=0,2*NFRONT_EFF-1
1411 IW(IOLDPS+HF+KK)=IW(IOLDPS+HF_OLD+KK)
1414 IF (IWPOS - 1 > IWPOSCB ) GOTO 270
1415 DO KK=2*NFRONT_EFF-1, 0, -1
1416 IW(IOLDPS+HF+KK) = IW(IOLDPS+HF_OLD+KK)
1421 LREQ = HF + 2 * NFRONT + LREQ_OOC
1424 WRITE(LP,*) MYID,': internal error 2
',
1426 & INODE, ' nfront, nfront_eff=
', NFRONT, NFRONT_EFF
1431.EQ..AND..NE..AND.
IF (KEEP(201)1KEEP(50)1
1432 & OOCWRITE_COMPATIBLE_WITH_BLR) THEN
1433 CALL CMUMPS_OOC_PP_SET_PTR(KEEP(50),
1434 & NBPANELS_L, NBPANELS_U, NASS1,
1435 & IOLDPS + HF + 2 * NFRONT, IW, LIW)
1437 MAXFRW = max0(MAXFRW, NFRONT)
1438 PTLUST(STEP(INODE)) = IOLDPS
1439 IW(IOLDPS+KEEP(IXSZ)) = NFRONT
1440 IW(IOLDPS + 1+KEEP(IXSZ)) = 0
1441 IW(IOLDPS + 2+KEEP(IXSZ)) = -NASS1
1442 IW(IOLDPS + 3+KEEP(IXSZ)) = -NASS1
1443 IW(IOLDPS + 4+KEEP(IXSZ)) = STEP(INODE)
1444 IW(IOLDPS+5+KEEP(IXSZ)) = NSLAVES
1445 IW(IOLDPS+6+KEEP(IXSZ):IOLDPS+5+KEEP(IXSZ)+NSLAVES)=
1446 & TMP_SLAVES_LIST(1:NSLAVES)
1447 ESTIM_NFS4FATHER_ATSON = -9999
1448.NE..AND..EQ.
IF (KEEP(219)0KEEP(50)2) THEN
1449 IFATH = DAD( STEP( INODE) )
1450.NE.
IF (IFATH0) THEN
1451.AND.
IF (COMPRESS_CB
1452 & MUMPS_TYPENODE(PROCNODE_STEPS(STEP(IFATH)),KEEP(199))
1454 IOLDPS = PTLUST(STEP(INODE))
1455 CALL CMUMPS_COMPUTE_ESTIM_NFS4FATHER (
1456 & N, INODE, IFATH, FILS, PERM, KEEP,
1457 & IOLDPS, HF, IW, LIW, NFRONT, NASS1,
1458 & ESTIM_NFS4FATHER_ATSON
1463 CALL CMUMPS_LOAD_MASTER_2_ALL(MYID, SLAVEF, COMM_LOAD,
1464 & TAB_POS_IN_PERE(1,ISTEP_TO_INIV2(STEP(INODE))),
1465 & NASS1, KEEP, KEEP8, IW(IOLDPS+6+KEEP(IXSZ)), NSLAVES,INODE)
1466.EQ.
IF(KEEP(86)1)THEN
1467.eq.
IF(mod(KEEP(24),2)0)THEN
1468 CALL CMUMPS_LOAD_SEND_MD_INFO(SLAVEF,
1469 & CAND(SLAVEF+1,INIV2),
1471 & TAB_POS_IN_PERE(1,ISTEP_TO_INIV2(STEP(INODE))),
1472 & NASS1, KEEP,KEEP8, TMP_SLAVES_LIST,
1474.EQ..OR..EQ.
ELSEIF((KEEP(24)0)(KEEP(24)1))THEN
1475 CALL CMUMPS_LOAD_SEND_MD_INFO(SLAVEF,
1478 & TAB_POS_IN_PERE(1,ISTEP_TO_INIV2(STEP(INODE))),
1479 & NASS1, KEEP,KEEP8, TMP_SLAVES_LIST,
1483 DEALLOCATE(TMP_SLAVES_LIST)
1484.EQ.
IF (KEEP(50)0) THEN
1485 LAELL8 = int(NASS1,8) * int(NFRONT,8)
1488 LAELL8 = int(NASS1,8)*int(NASS1,8)
1489.NE..AND..EQ.
IF(KEEP(219)0KEEP(50) 2)
1490 & LAELL8 = LAELL8+int(NASS1,8)
1493 CALL CMUMPS_GET_SIZE_NEEDED
1494 & (0, LAELL8, .FALSE.,
1495 & KEEP(1), KEEP8(1),
1497 & LRLU,IPTRLU,IWPOS,IWPOSCB,
1499 & STEP, PIMASTER,PAMASTER,LRLUS,
1500 & KEEP(IXSZ), COMP, DKEEP(97), MYID,
1501 & SLAVEF, PROCNODE_STEPS, DAD,
1503.LT.
IF (INFO(1)0) GOTO 490
1504 LRLU = LRLU - LAELL8
1505 LRLUS = LRLUS - LAELL8
1506 KEEP8(67) = min(LRLUS, KEEP8(67))
1507 KEEP8(69) = KEEP8(69) + LAELL8
1508 KEEP8(68) = max(KEEP8(69), KEEP8(68))
1510 PTRAST(STEP(INODE)) = POSELT
1511 PTRFAC(STEP(INODE)) = POSELT
1512 POSFAC = POSFAC + LAELL8
1513 IW(IOLDPS+XXI) = LREQ
1514 CALL MUMPS_STOREI8(LAELL8,IW(IOLDPS+XXR))
1515 CALL MUMPS_STOREI8(0_8,IW(IOLDPS+XXD))
1516 IW(IOLDPS+XXS) = -9999
1517 IW(IOLDPS+XXN) = -99999
1518 IW(IOLDPS+XXP) = -99999
1519 IW(IOLDPS+XXA) = -99999
1520 IW(IOLDPS+XXF) = -99999
1521 IW(IOLDPS+XXLR)= LRSTATUS
1522 IW(IOLDPS+XXG) = MemNotPinned
1523 CALL CMUMPS_LOAD_MEM_UPDATE(.FALSE.,.FALSE.,LA-LRLUS,0_8,LAELL8,
1525 POSEL1 = POSELT - int(LDAFS,8)
1526#if defined(ZERO_TRIANGLE)
1527 LAPOS2 = POSELT + LAELL8 - 1_8
1528 A(POSELT:LAPOS2) = ZERO
1530.eq..OR..lt.
IF ( KEEP(50) 0 LDAFS KEEP(63) ) THEN
1531 LAPOS2 = POSELT + LAELL8 - 1_8
1532!$ CHUNK8 = int(KEEP(361),8)
1533!$OMP PARALLEL DO PRIVATE(JJ8) SCHEDULE(STATIC, CHUNK8)
1534.AND..GT.
!$OMP& IF (LAPOS2 - POSELT > int(KEEP(361),8) NOMP 1)
1538 DO JJ8 = POSELT, LAPOS2
1541!$OMP END PARALLEL DO
1543 TOPDIAG = max(KEEP(7), KEEP(8))-1
1544 IF (LR_ACTIVATED) THEN
1546 CALL GET_CUT(IW(IOLDPS+HF:IOLDPS+HF+NFRONT-1), NASS1,
1547 & 0, LRGROUPS, NPARTSCB,
1548 & NPARTSASS, BEGS_BLR)
1549 NB_BLR = NPARTSASS + NPARTSCB
1550 CALL MAX_CLUSTER(BEGS_BLR,NB_BLR,MAXI_CLUSTER)
1551 DEALLOCATE(BEGS_BLR)
1552 CALL COMPUTE_BLR_VCS(KEEP(472), IBCKSZ2, KEEP(488), NASS1)
1553 MINSIZE = int(IBCKSZ2 / 2)
1554 TOPDIAG = max(2*MINSIZE + MAXI_CLUSTER-1, TOPDIAG)
1556!$ CHUNK = max(KEEP(360)/2,
1557!$ & ( (( LDAFS + NOMP -1 ) / NOMP + 2) / 3) )
1562!$OMP PARALLEL DO PRIVATE(APOS,JJ3) SCHEDULE(STATIC, CHUNK)
1563.GT..AND..GT.
!$OMP& IF (LDAFS - 1 KEEP(360) NOMP 1)
1564 DO JJ8 = 0_8, int(LDAFS-1,8)
1565 APOS = POSELT + JJ8 * int(LDAFS,8)
1566 JJ3 = min( int(LDAFS,8) - 1_8, JJ8 + TOPDIAG )
1567 A(APOS:APOS+JJ3) = ZERO
1569!$OMP END PARALLEL DO
1570.NE..AND..EQ.
IF (KEEP(219)0KEEP(50)2) THEN
1571 APOSMAX = POSELT + int(NASS1,8)*int(NASS1,8)
1572 A(APOSMAX:APOSMAX+int(LDAFS-1,8))=ZERO
1576.NE..AND..NE.
IF ((NUMSTK0)(NASS0)) THEN
1578 DO 220 IELL = 1, NUMSTK
1579 ISTCHK = PIMASTER(STEP(ISON))
1580 NELIM = IW(ISTCHK + KEEP(IXSZ) + 1)
1581.EQ.
IF (NELIM0) GOTO 210
1582 LSTK = IW(ISTCHK + KEEP(IXSZ))
1583 NPIVS = IW(ISTCHK + 3+KEEP(IXSZ))
1584.LT.
IF (NPIVS0) NPIVS=0
1585 NSLSON = IW(ISTCHK + 5+KEEP(IXSZ))
1586 HS = 6 + NSLSON + KEEP(IXSZ)
1587 NCOLS = NPIVS + LSTK
1588.LT.
SAME_PROC = (ISTCHKIWPOS)
1589 IF ( SAME_PROC ) THEN
1590 ISTCHK_CB_RIGHT=PTRIST(STEP(ISON))
1592 ISTCHK_CB_RIGHT=ISTCHK
1594 SON_XXS = IW(ISTCHK_CB_RIGHT + XXS)
1595.EQ.
PACKED_CB = ( SON_XXS S_CB1COMP )
1596.NOT.
IF (SAME_PROC) THEN
1597 NROWS = IW(ISTCHK + KEEP(IXSZ) + 2)
1601.EQ.
IF (KEEP(50)0) THEN
1603 LCB = int(NELIM,8)*int(LSTK,8)
1605.EQ.
IF (NSLSON0) THEN
1607.EQ..OR.
IS_CB_LR = IW(ISTCHK_CB_RIGHT+XXLR) 1
1608.EQ.
& IW(ISTCHK_CB_RIGHT+XXLR) 3
1621 LCB = (int(NELIM,8)*int(NELIM+1,8))/2_8
1623 LCB = int(LDA_SON,8)*int(NELIM,8)
1626.EQ.
IF (KEEP(50) 0) THEN
1627 OPASSW = OPASSW + dble(LCB)
1629 OPASSW = OPASSW + int(NELIM,8)*int(NELIM+1,8)/2_8
1632 & CMUMPS_DM_IS_DYNAMIC(IW(ISTCHK_CB_RIGHT+XXD:
1633 & ISTCHK_CB_RIGHT+XXD+1))
1634 IF ( IS_DYNAMIC_CB ) THEN
1635 CALL MUMPS_GETI8(DYN_SIZE, IW(ISTCHK_CB_RIGHT+XXD))
1636 CALL CMUMPS_DM_SET_PTR( PAMASTER(STEP(ISON)), DYN_SIZE,
1640 IACHK = PAMASTER(STEP(ISON))
1643 K1 = ISTCHK + HS + NROWS + NPIVS
1645.eq.
IF (KEEP(50)0) THEN
1646 IF (IS_ofType5or6) THEN
1648 DO JJ8 = 1_8, int(NELIM,8)*int(LSTK,8)
1649 A(APOS+JJ8-1_8) = A(APOS+JJ8-1_8) + SON_A(IACHK+JJ8-1_8)
1653 APOS = POSEL1 + int(IW(KK),8) * int(LDAFS,8)
1654 DO 160 KK1 = 1, LSTK
1655 JJ2 = APOS + int(IW(K1 + KK1 - 1),8) - 1_8
1656 A(JJ2) = A(JJ2) + SON_A(IACHK + int(KK1 - 1,8))
1658 IACHK = IACHK + int(LSTK,8)
1663 CALL CMUMPS_LDLT_ASM_NIV12(A, LA, SON_A(IACHK),
1664 & POSELT, LDAFS, NASS1,
1666 & IW( K1 ), NELIM, NELIM, ETATASS,
1672 210 ISON = FRERE(STEP(ISON))
1676 APOSMAX = POSELT + int(NASS1,8)*int(NASS1,8)
1677 DO 260 IORG = 1, NUMORG
1679 AINPUT8 = PTRARW(IBROT)
1682 J28 = J18 + INTARR(JK8)
1684 J48 = J28 - INTARR(JJ8)
1686 ICT12 = POSELT + int(IJROW - 1 - LDAFS, 8)
1689.NE.
IF (KEEP(219)0) THEN
1690.LE.
IF (INTARR(JJ8)NASS1) THEN
1691 APOS2 = ICT12 + int(INTARR(JJ8),8) * int(LDAFS,8)
1692 A(APOS2) = A(APOS2) + DBLARR(AINPUT8)
1693.EQ.
ELSEIF (KEEP(50)2) THEN
1694 MAXARR = max(MAXARR,abs(DBLARR(AINPUT8)))
1697.LE.
IF (INTARR(JJ8)NASS1) THEN
1698 APOS2 = ICT12 + int(INTARR(JJ8),8) * int(LDAFS,8)
1699 A(APOS2) = A(APOS2) + DBLARR(AINPUT8)
1702 AINPUT8 = AINPUT8 + 1_8
1704.NE..AND..EQ.
IF(KEEP(219)0KEEP(50) 2) THEN
1705 A(APOSMAX+int(IJROW-1,8)) = cmplx(MAXARR,kind=kind(A))
1707.GT.
IF (J38 J48) GOTO 255
1708 ICT13 = POSELT + int(IJROW - 1,8) * int(LDAFS,8)
1709 NBCOL = int(J48 - J38 + 1_8)
1710 DO JJ8 = 1_8, int(NBCOL,8)
1711 JJ3 = ICT13 + int(INTARR(J38 + JJ8 - 1_8),8) - 1_8
1712 A(JJ3) = A(JJ3) + DBLARR(AINPUT8 + JJ8 - 1_8)
1715.EQ.
IF (KEEP(50)0) THEN
1716 DO J253 = 1, KEEP(253)
1718 & int(IJROW-1,8) * int(LDAFS,8) +
1719 & int(LDAFS-KEEP(253)+J253-1,8)
1720 A(APOS) = A(APOS) + RHS_MUMPS( (J253-1)*KEEP(254)+IBROT )
1725 PTRCOL = IOLDPS + HF + NFRONT
1726 PTRROW = IOLDPS + HF + NASS1
1727 PDEST = IOLDPS + 6 + KEEP(IXSZ)
1729 DO ISLAVE = 1, NSLAVES
1730 CALL MUMPS_BLOC2_GET_SLAVE_INFO(
1731 & KEEP,KEEP8, INODE, STEP, N, SLAVEF,
1732 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1735 & NBLIG, FIRST_INDEX )
1736 SHIFT_INDEX = FIRST_INDEX - 1
1738.EQ.
DO WHILE (IERR -1)
1739.eq.
IF ( KEEP(50) 0 ) THEN
1741 CALL CMUMPS_BUF_SEND_DESC_BANDE( INODE,
1742 & sum(SONROWS_PER_ROW(FIRST_INDEX:FIRST_INDEX+NBLIG-1)),
1743 & NBLIG, IW(PTRROW), NBCOL, IW(PTRCOL), NASS1,
1746 & ESTIM_NFS4FATHER_ATSON,
1747 & IW(PDEST), IBC_SOURCE, NFRONT, COMM, KEEP, IERR
1751 NBCOL = NASS1+SHIFT_INDEX+NBLIG
1752 CALL CMUMPS_BUF_SEND_DESC_BANDE( INODE,
1753 & sum(SONROWS_PER_ROW(FIRST_INDEX:FIRST_INDEX+NBLIG-1)),
1754 & NBLIG, IW(PTRROW), NBCOL, IW(PTRCOL), NASS1,
1756 & IW( PTLUST(STEP(INODE))+6+KEEP(IXSZ)+ISLAVE),
1758 & ESTIM_NFS4FATHER_ATSON,
1759 & IW(PDEST), IBC_SOURCE, NFRONT, COMM, KEEP, IERR
1763.EQ.
IF (IERR-1) THEN
1766 MESSAGE_RECEIVED = .FALSE.
1767 CALL CMUMPS_TRY_RECVTREAT( COMM_LOAD, ASS_IRECV,
1768 & BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
1769 & MPI_ANY_SOURCE, MPI_ANY_TAG,
1770 & STATUS, BUFR, LBUFR,
1772 & PROCNODE_STEPS, POSFAC, IWPOS, IWPOSCB, IPTRLU,
1773 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
1775 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, INFO(1),
1778 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
1779 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
1780 & FILS, DAD, PTRARW, PTRAIW,
1781 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
1782 & LPTRAR, NELT, IW, IW,
1783 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, .TRUE.
1786.LT.
IF ( INFO(1) 0 ) GOTO 500
1787 IF (MESSAGE_RECEIVED) THEN
1788 IOLDPS = PTLUST(STEP(INODE))
1789 PTRCOL = IOLDPS + HF + NFRONT
1790 PTRROW = IOLDPS + HF + NASS1 + SHIFT_INDEX
1794.EQ.
IF (IERR -2) GOTO 300
1795.EQ.
IF (IERR -3) GOTO 305
1796 PTRROW = PTRROW + NBLIG
1799 DEALLOCATE(SONROWS_PER_ROW)
1800.EQ.
IF (NUMSTK0) GOTO 500
1803 ISTCHK = PIMASTER(STEP(ISON))
1804 NELIM = IW(ISTCHK + 1 + KEEP(IXSZ))
1805 LSTK = IW(ISTCHK + KEEP(IXSZ))
1806 NPIVS = IW(ISTCHK + 3 + KEEP(IXSZ))
1807.LT.
IF ( NPIVS 0 ) NPIVS = 0
1808 NSLSON = IW(ISTCHK + 5 + KEEP(IXSZ))
1809 HS = 6 + NSLSON + KEEP(IXSZ)
1810 NCOLS = NPIVS + LSTK
1811.LT.
SAME_PROC = (ISTCHKIWPOS)
1812.NOT.
IF (SAME_PROC) THEN
1813 NROWS = IW(ISTCHK + 2 + KEEP(IXSZ) )
1817 PDEST = ISTCHK + 6 + KEEP(IXSZ)
1818 NCBSON = LSTK - NELIM
1819 PTRCOL = ISTCHK + HS + NROWS + NPIVS + NELIM
1820.NE..AND..EQ.
IF (KEEP(219)0KEEP(50)2) THEN
1823.GT.
IF(IW(PTRCOL+I) NASS1) THEN
1828 NFS4FATHER = NFS4FATHER + NELIM
1832.EQ.
IF (NSLSON0) THEN
1834 PDEST1(1) = MUMPS_PROCNODE(PROCNODE_STEPS(STEP(ISON)),
1836.EQ.
IF (PDEST1(1)MYID) THEN
1837 CALL CMUMPS_MAPLIG_FILS_NIV1( COMM_LOAD, ASS_IRECV,
1838 & BUFR, LBUFR, LBUFR_BYTES,
1839 & INODE, ISON, NSLAVES,
1840 & IW( PTLUST(STEP(INODE)) + 6 +KEEP(IXSZ)),
1841 & NFRONT, NASS1, NFS4FATHER, NCBSON, IW( PTRCOL ),
1843 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
1844 & LRLUS, N, IW, LIW, A, LA,
1845 & PTRIST, PTLUST, PTRFAC, PTRAST, STEP,
1846 & PIMASTER, PAMASTER, NSTK_S, COMP,
1847 & INFO(1), INFO(2), MYID, COMM, PERM,
1848 & IPOOL, LPOOL, LEAF,
1849 & NBFIN, ICNTL, KEEP, KEEP8, DKEEP, root,
1851 & ITLOC, RHS_MUMPS, FILS, DAD,
1852 & PTRARW, PTRAIW, INTARR, DBLARR,
1853 & ND, FRERE, LPTRAR, NELT, IW, IW,
1854 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1856.LT.
IF ( INFO(1) 0 ) GOTO 500
1859.EQ.
DO WHILE (IERR-1)
1860 PTRCOL = PIMASTER(STEP(ISON)) + HS + NROWS + NPIVS + NELIM
1861 CALL CMUMPS_BUF_SEND_MAPLIG(
1862 & INODE, NFRONT,NASS1,NFS4FATHER,
1864 & NSLAVES, IW( PTLUST(STEP(INODE)) + 6 +KEEP(IXSZ)),
1865 & IW(PTRCOL), NCBSON,
1866 & COMM, IERR, PDEST1, NSLSON, SLAVEF,
1867 & KEEP,KEEP8, STEP, N,
1868 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
1870.EQ.
IF (IERR-1) THEN
1873 MESSAGE_RECEIVED = .FALSE.
1874 CALL CMUMPS_TRY_RECVTREAT( COMM_LOAD, ASS_IRECV,
1875 & BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
1876 & MPI_ANY_SOURCE, MPI_ANY_TAG,
1877 & STATUS, BUFR, LBUFR, LBUFR_BYTES,
1878 & PROCNODE_STEPS, POSFAC, IWPOS, IWPOSCB, IPTRLU,
1879 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
1881 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, INFO(1),
1884 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
1885 & root,OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD,
1887 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
1890 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, .TRUE.
1893.LT.
IF ( INFO(1) 0 ) GOTO 500
1896.EQ.
IF (IERR -2) GOTO 290
1897.EQ.
IF (IERR -3) GOTO 295
1900.GT.
IF (PIMASTER(STEP(ISON))0) THEN
1902.EQ.
DO WHILE (IERR-1)
1903 PTRCOL = PIMASTER(STEP(ISON)) + HS + NROWS + NPIVS + NELIM
1904 PDEST = PIMASTER(STEP(ISON)) + 6 + KEEP(IXSZ)
1905 CALL CMUMPS_BUF_SEND_MAPLIG(
1906 & INODE, NFRONT, NASS1, NFS4FATHER,
1908 & NSLAVES, IW(PTLUST(STEP(INODE))+6+KEEP(IXSZ)),
1909 & IW(PTRCOL), NCBSON,
1910 & COMM, IERR, IW(PDEST), NSLSON, SLAVEF,
1911 & KEEP,KEEP8, STEP, N,
1912 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
1914.EQ.
IF (IERR-1) THEN
1917 MESSAGE_RECEIVED = .FALSE.
1918 CALL CMUMPS_TRY_RECVTREAT( COMM_LOAD, ASS_IRECV,
1919 & BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
1920 & MPI_ANY_SOURCE, MPI_ANY_TAG,
1921 & STATUS, BUFR, LBUFR,
1923 & PROCNODE_STEPS, POSFAC, IWPOS, IWPOSCB, IPTRLU,
1924 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
1926 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, INFO(1),
1929 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
1930 & root,OPASSW, OPELIW, ITLOC, RHS_MUMPS,
1931 & FILS, DAD, PTRARW, PTRAIW,
1932 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
1933 & LPTRAR, NELT, IW, IW,
1934 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, .TRUE.
1937.LT.
IF ( INFO(1) 0 ) GOTO 500
1940.EQ.
IF (IERR -2) GOTO 290
1941.EQ.
IF (IERR -3) GOTO 295
1943 DO ISLAVE = 0, NSLSON-1
1944.EQ.
IF (IW(PDEST+ISLAVE)MYID) THEN
1945 CALL MUMPS_BLOC2_GET_SLAVE_INFO(
1946 & KEEP,KEEP8, ISON, STEP, N, SLAVEF,
1947 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1950 & TROW_SIZE, FIRST_INDEX )
1951 SHIFT_INDEX = FIRST_INDEX - 1
1952 INDX = PTRCOL + SHIFT_INDEX
1953 CALL CMUMPS_MAPLIG( COMM_LOAD, ASS_IRECV,
1954 & BUFR, LBUFR, LBUFR_BYTES,
1955 & INODE, ISON, NSLAVES,
1956 & IW( PTLUST(STEP(INODE))+6+KEEP(IXSZ)),
1957 & NFRONT, NASS1,NFS4FATHER,
1958 & TROW_SIZE, IW( INDX ),
1960 & SLAVEF, POSFAC, IWPOS, IWPOSCB, IPTRLU, LRLU,
1961 & LRLUS, N, IW, LIW, A, LA,
1962 & PTRIST, PTLUST, PTRFAC, PTRAST, STEP,
1963 & PIMASTER, PAMASTER, NSTK_S, COMP, INFO(1), INFO(2),
1964 & MYID, COMM, PERM, IPOOL, LPOOL, LEAF,
1965 & NBFIN, ICNTL, KEEP,KEEP8,DKEEP, root,
1966 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD,
1968 & INTARR, DBLARR, ND, FRERE, LPTRAR, NELT, IW,
1971 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, LRGROUPS)
1972.LT.
IF ( INFO(1) 0 ) GOTO 500
1977 ISON = FRERE(STEP(ISON))
1981.EQ.
IF (INFO(1)-13) THEN
1984 & ' failure in
INTEGER DYNAMIC ALLOCATION DURING
1985 & CMUMPS_FAC_ASM_NIV2
'
1987 INFO(2) = NUMSTK + 1
1992 WRITE( LP, * ) ' FAILURE ALLOCATING COPY_CAND
',
1993 & ' DURING CMUMPS_FAC_ASM_NIV2
'
2000 WRITE( LP, * ) ' FAILURE ALLOCATING TMP_SLAVES_LIST
',
2001 & ' DURING CMUMPS_FAC_ASM_NIV2
'
2004 INFO(2) = SIZE_TMP_SLAVES_LIST
2011 & ' FAILURE IN
INTEGER ALLOCATION DURING CMUMPS_FAC_ASM_NIV2
'
2016 WRITE( LP, * ) ' FAILURE ALLOCATING SONROWS_PER_ROW
',
2017 & ' DURING CMUMPS_FAC_ASM_NIV2
'
2020 INFO(2) = NFRONT-NASS1
2023.GT..AND..GE.
IF ((ICNTL(1) 0) (ICNTL(4) 1)) THEN
2026 &' FAILURE, SEND BUFFER TOO SMALL (1) DURING CMUMPS_FAC_ASM_NIV2
'
2029 LREQ = NCBSON + 6 + NSLSON+KEEP(IXSZ)
2030 INFO(2) = LREQ * KEEP( 34 )
2033.GT..AND..GE.
IF ((ICNTL(1) 0) (ICNTL(4) 1)) THEN
2036 &' FAILURE, RECV BUFFER TOO SMALL (1) DURING CMUMPS_FAC_ASM_NIV2
'
2039 LREQ = NCBSON + 6 + NSLSON+KEEP(IXSZ)
2040 INFO(2) = LREQ * KEEP( 34 )
2043.GT..AND..GE.
IF ((ICNTL(1) 0) (ICNTL(4) 1)) THEN
2046 &' FAILURE, SEND BUFFER TOO SMALL (2)
',
2047 &' DURING CMUMPS_FAC_ASM_NIV2
'
2050 LREQ = NBLIG + NBCOL + 4 + KEEP(IXSZ)
2051 INFO(2) = LREQ * KEEP( 34 )
2054.GT..AND..GE.
IF ((ICNTL(1) 0) (ICNTL(4) 1)) THEN
2057 &' FAILURE, RECV BUFFER TOO SMALL (2)
',
2058 &' DURING CMUMPS_FAC_ASM_NIV2
'
2061 LREQ = NBLIG + NBCOL + 4 + KEEP(IXSZ)
2062 INFO(2) = LREQ * KEEP( 34 )
2064 490 CALL CMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )