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, SMUMPS_TPS_ARR, L0_OMP_MAPPING
50 INTEGER COMM_LOAD, ASS_IRECV
54 INTEGER(8) LA, LRLU, LRLUS, LRLUSM, 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 (SMUMPS_TPS_T),
TARGET,
OPTIONAL :: SMUMPS_TPS_ARR(:)
64 INTEGER,
INTENT(IN),
OPTIONAL :: L0_OMP_MAPPING(:)
66 INTEGER,
PARAMETER :: LIDUMMY = 1
68INTEGER(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 REAL :: 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
83 INTEGER,
INTENT(IN) :: LRGROUPS(N)
84 DOUBLE PRECISION OPASSW,
85 INTEGER(8),
INTENT(IN) :: LINTARR, 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
99 INTEGER :: STATUS(MPI_STATUS_SIZE)
101 include
'mumps_headers.h'
104 INTEGER NBPANELS_L, NBPANELS_U
105 INTEGER IN,NUMSTK,NASS,ISON,,NASS1,IELL
106 INTEGER NFS4FATHER, ESTIM_NFS4FATHER_ATSON
108 INTEGER(8) NFRONT8, LAELL8, LAELL_REQ8, ITMP8, KEEP8TMPCOPY
109 INTEGER NFRONT,NFRONT_EFF,ISTCHK,ISTCHK_CB_RIGHT,LSTK,LREQ
111 INTEGER :: SON_XXS, 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 , IORG, IBROT
118#if ! defined(ZERO_TRIANGLE)
119 INTEGER(8) :: NUMROWS, JJ3
125 INTEGER IJROW,NBCOL,NUMORG,IOLDPS
126 INTEGER(8) IACHK, POSELT, LAPOS2, IACHK_ini
127 INTEGER(8) APOS, APOS2, APOS3, POSEL1, ICT12
128 INTEGER(8) :: JJ2, ICT13
129 INTEGER(8) :: JK8, J18, , J38, 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,LEVEL
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 , LR_ACTIVATED, COMPRESS_CB,
149 & oocwrite_compatible_with_blr
151 INTEGER,
POINTER :: SON_IWPOS, SON_LIW
152 INTEGER,
POINTER,
DIMENSION(:) :: SON_IW
153 REAL,
POINTER,
DIMENSION(:) :: SON_A
156 INTEGER,
POINTER,
DIMENSION(:) ::
157 INTEGER :: NB_BLR, NPARTSCB, NPARTSASS, MAXI_CLUSTER,
161 parameter( zero = 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))
180 WRITE(*,*)
'INTERNAL ERROR 1 in SMUMPS_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
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 SMUMPS_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.
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 SMUMPS_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,
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 )
482!$ & ( ((int(numrows)+nomp-1) / nomp + 2) / 3) )
488 DO jj8 = 0_8, numrows - 1_8
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
514 iw(ioldps + keep(ixsz)+ 1) = 0
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.
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
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
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 => smumps_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
645 iachk = pamaster(step(ison))
647 IF (is_cb_lr .AND. level1)
THEN
648 posel1 = ptrast(step(inode))
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.
670!$omp parallel
IF(omp_parallel_flag) private(apos, kk1, jj2,iachk)
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),8) - 1_8
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)
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.
802 IF (is_dynamic_cb)
THEN
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)
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 SMUMPS_FAC_ASM
'
979 & ' FAILURE, SEND BUFFER TOO SMALL DURING SMUMPS_FAC_ASM
'
982 LREQ = NCBSON + 6+NSLSON+KEEP(IXSZ)
983 INFO(2) = LREQ * KEEP( 34 )
988 & ' FAILURE, RECV BUFFER TOO SMALL DURING SMUMPS_FAC_ASM
'
991 LREQ = NCBSON + 6+NSLSON+KEEP(IXSZ)
992 INFO(2) = LREQ * KEEP( 34 )
995.EQ.
IF( INFO(1)-13 ) THEN
998 & ' FAILURE IN
INTEGER DYNAMIC ALLOCATION DURING SMUMPS_FAC_ASM
'
1000 INFO(2) = NUMSTK + 1
1003.EQ.
IF ( KEEP(405) 0 ) THEN
1004 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )