15 & PROCNODE, STEP, PTRAIW, PTRARW, ISTEP_TO_INIV2,
17 & KEEP, KEEP8, ICNTL, id )
20 TYPE (DMUMPS_STRUC) :: id
21 INTEGER MYID, N, SLAVEF
22 INTEGER KEEP( 500 ), ICNTL( 60 )
24 INTEGER PROCNODE( KEEP(28) ), STEP( N )
25 INTEGER(8),
INTENT(INOUT) :: PTRAIW( N ), PTRARW( N )
26 INTEGER ISTEP_TO_INIV2(KEEP(71))
27 LOGICAL I_AM_CAND(max(1,KEEP(56)))
30 INTEGER MUMPS_TYPENODE, MUMPS_PROCNODE, MUMPS_TYPESPLIT
31 EXTERNAL mumps_typenode, mumps_procnode, mumps_typesplit
32 INTEGER ISTEP, I, NCOL, NROW, allocok
33 INTEGER TYPE_PARALL, ITYPE, IRANK, INIV2, TYPESPLIT
34 LOGICAL T4_MASTER_CONCERNED, EARLYT3ROOTINS
35 INTEGER(8) :: IPTRI, IPTRR
36 earlyt3rootins = keep(200) .EQ. 0
37 & .OR. (keep(200) .LT. 0 .AND. keep(400) .EQ. 0)
38 type_parall = keep(46)
39 i_am_slave = (keep(46).EQ.1 .OR. myid.NE.0)
44 itype = mumps_typenode( procnode(istep), keep(199) )
45 irank = mumps_procnode( procnode(istep), keep(199) )
46 i_am_cand_loc = .false.
47 typesplit = mumps_typesplit( procnode(istep), keep(199) )
48 t4_master_concerned = .false.
50 iniv2 = istep_to_iniv2(istep)
52 i_am_cand_loc = i_am_cand(iniv2)
53 IF ( (typesplit.EQ.5).OR.(typesplit.EQ.6))
THEN
54 IF ( type_parall .eq. 0 )
THEN
56 & ( id%CANDIDATES (id%CANDIDATES(slavef+1,iniv2)+1,iniv2)
60 & ( id%CANDIDATES (id%CANDIDATES(slavef+1, iniv2)+1,iniv2 )
66 IF ( type_parall .eq. 0 )
THEN
70 & ( (itype .EQ. 1.OR.itype.EQ.2) .AND.
73 & ( t4_master_concerned )
75 keep8(26) = keep8(26) + 1_8 + ptraiw(i)+ptrarw(i)
76 keep8(27) = keep8(27) + 3_8 + ptraiw(i)+ptrarw(i)
77 ELSE IF ( itype .EQ. 3 )
THEN
78 IF (earlyt3rootins)
THEN
80 keep8(26) = keep8(26) + 1_8 + ptraiw(i)+ptrarw(i)
81 keep8(27) = keep8(27) + 3_8 + ptraiw(i)+ptrarw(i)
83 ELSE IF ( itype .EQ. 2 .AND. i_am_cand_loc )
THEN
85 keep8(26) = keep8(26) + 1_8 + ptraiw(i)+ptrarw(i)
86 keep8(27) = keep8(27) + 3_8 + ptraiw(i)+ptrarw(i)
89 IF (
associated( id%INTARR ) )
THEN
90 DEALLOCATE( id%INTARR )
93 IF ( keep8(27) > 0 )
THEN
94 ALLOCATE( id%INTARR( keep8(27) ), stat = allocok )
95 IF ( allocok .GT. 0 )
THEN
101 ALLOCATE( id%INTARR( 1 ), stat = allocok )
102 IF ( allocok .GT. 0 )
THEN
112 itype = mumps_typenode( procnode(istep), keep(199) )
113 irank = mumps_procnode( procnode(istep), keep(199) )
114 typesplit = mumps_typesplit( procnode(istep), keep(199) )
115 i_am_cand_loc = .false.
116 t4_master_concerned = .false.
118 iniv2 = istep_to_iniv2(istep)
120 i_am_cand_loc = i_am_cand(iniv2)
121 IF ( (typesplit.EQ.5).OR.(typesplit.EQ.6))
THEN
122 IF ( type_parall .eq. 0 )
THEN
123 t4_master_concerned =
124 & (id%CANDIDATES (id%CANDIDATES(slavef+1,iniv2)+1,iniv2)
127 t4_master_concerned =
128 & (id%CANDIDATES (id%CANDIDATES(slavef+1,iniv2)+1,iniv2)
134 IF ( type_parall .eq. 0 )
THEN
138 & ( itype .eq. 2 .and.
141 & ( itype .eq. 1 .and.
144 & ( t4_master_concerned )
146 ncol = int(ptraiw( i ))
148 id%INTARR( iptri ) = ncol
149 id%INTARR( iptri + 1 ) = -nrow
150 id%INTARR( iptri + 2 ) = i
153 iptri = iptri + int(ncol + nrow + 3,8)
154 iptrr = iptrr + int(ncol + nrow + 1,8)
155 ELSE IF ( itype .eq. 3)
THEN
156 IF ( earlyt3rootins )
THEN
160 ncol = int(ptraiw( i ))
161 nrow = int(ptrarw( i ))
162 id%INTARR( iptri ) = ncol
163 id%INTARR( iptri + 1 ) = -nrow
164 id%INTARR( iptri + 2 ) = i
167 iptri = iptri + int(ncol + nrow + 3,8)
168 iptrr = iptrr + int(ncol + nrow + 1,8)
170 ELSE IF ( itype .eq. 2 .AND. i_am_cand_loc )
THEN
171 ncol = int(ptraiw( i ))
173 id%INTARR( iptri ) = ncol
174 id%INTARR( iptri + 1 ) = -nrow
175 id%INTARR( iptri + 2 ) = i
178 iptri = iptri + int(ncol + nrow + 3, 8)
179 iptrr = iptrr + int(ncol + nrow + 1, 8)
185 IF ( iptri - 1_8 .NE. keep8(27) )
THEN
186 WRITE(*,*)
'Error 1 in ana_arrowheads',
187 &
' IPTRI - 1, KEEP8(27)=', iptri - 1, keep8(27)
190 IF ( iptrr - 1_8 .NE. keep8(26) )
THEN
191 WRITE(*,*)
'Error 2 in ana_arrowheads'
198 & LSCAL,COLSCA,ROWSCA,
199 & MYID, SLAVEF, PROCNODE_STEPS, NBRECORDS,
200 & LP, COMM, root, KEEP, KEEP8, FILS, RG2L,
201 & INTARR, LINTARR, DBLARR, LDBLARR, PTRAIW, PTRARW, FRERE_STEPS,
202 & STEP, A, LA, ISTEP_TO_INIV2, I_AM_CAND, CANDIDATES )
206 INTEGER :: N, COMM, NBRECORDS
207 INTEGER(8),
INTENT(IN) :: NZ
209 INTEGER(8) KEEP8(150)
210 DOUBLE PRECISION ASPK(NZ)
211 DOUBLE PRECISION COLSCA(*), ROWSCA(*)
212 INTEGER IRN(NZ), ICN(NZ)
213 INTEGER PERM(N), PROCNODE_STEPS(KEEP(28))
214 INTEGER RG2L( N ), FILS( N )
215 INTEGER ISTEP_TO_INIV2(KEEP(71))
216 LOGICAL I_AM_CAND(max(1,KEEP(56)))
217 INTEGER LP, SLAVEF, MYID
218 INTEGER CANDIDATES(SLAVEF+1, max(1,KEEP(56)))
220 TYPE (DMUMPS_ROOT_STRUC) :: root
221 INTEGER(8),
INTENT(IN) :: LA
222 INTEGER(8),
INTENT(INOUT) :: PTRAIW( N ), PTRARW( N )
223 INTEGER :: FRERE_STEPS( KEEP(28) )
225 INTEGER(8) :: LINTARR, LDBLARR
226 INTEGER :: INTARR( LINTARR )
227 DOUBLE PRECISION :: DBLARR( LDBLARR )
228 DOUBLE PRECISION :: A( LA )
229 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: BUFI
230 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: BUFR
231 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE, numroc,
233 EXTERNAL mumps_procnode, mumps_typenode, numroc,
235 DOUBLE PRECISION VAL, VAL_SHR
236 INTEGER IOLD,JOLD,ISEND,JSEND,DEST,I,IARR
237 INTEGER ISEND_SHR, JSEND_SHR, DEST_SHR
238 INTEGER IPOSROOT, JPOSROOT
239 INTEGER IROW_GRID, JCOL_GRID
242 INTEGER ARROW_ROOT, TAILLE
243 INTEGER LOCAL_M, LOCAL_N
244 INTEGER(8) :: PTR_ROOT
245 INTEGER TYPE_NODE, MASTER_NODE
246 LOGICAL I_AM_CAND_LOC, I_AM_SLAVE
247 INTEGER JARR, ILOCROOT, JLOCROOT
248 INTEGER allocok, INIV2, TYPESPLIT, T4MASTER
249 INTEGER(8) :: I1, IA, IS1, IAS, ISHIFT, K
251 LOGICAL T4_MASTER_CONCERNED, EARLYT3ROOTINS
252 DOUBLE PRECISION ZERO
253 parameter( zero = 0.0d0 )
254 INTEGER,
ALLOCATABLE,
DIMENSION(:,:) :: IW4
255 LOGICAL :: DOIT, OMP_FLAG, OMP_FLAG_P
256 INTEGER NOMP, NOMP_P, IOMP, P2
258 earlyt3rootins = keep(200) .EQ. 0
259 & .OR. (keep(200) .LT. 0 .AND. keep(400) .EQ. 0)
260 i_am_slave=(myid.NE.0.OR.keep(46).EQ.1)
261 IF ( keep(46) .eq. 0 )
THEN
265 ALLOCATE( iw4( n, 2 ), stat = allocok )
266 IF ( allocok .GT. 0 )
THEN
267 WRITE(*,*)
'Error allocating IW4'
276 IF ( ia .GT. 0 )
THEN
278 iw4( i, 1 ) = intarr( i1 )
279 iw4( i, 2 ) = -intarr( i1 + 1 )
283 IF ( keep(38) .NE. 0 .AND. earlyt3rootins )
THEN
288 local_m = -19999; local_n = -29999; ptr_root = -99999_8
292 ALLOCATE( bufi(nbrecords*2+1,nbufs),stat=allocok )
293 IF ( allocok .GT. 0 )
THEN
294 WRITE(*,*)
'Error allocating BUFI'
297 ALLOCATE( bufr( nbrecords, nbufs ), stat=allocok )
298 IF ( allocok .GT. 0 )
THEN
299 WRITE(*,*)
'Error allocating BUFR'
308 DO WHILE ( inode .GT. 0 )
310 inode = fils( inode )
315 omp_flag = keep(399).EQ.1 .AND. nomp.GE.2 .AND. slavef.EQ.1
316 & .AND. keep(46) .EQ. 1
331!$ omp_flag_p = omp_flag .AND. nomp_p .GT. 1
333 IF ( nomp_p .GE. 16 )
THEN
336 ELSE IF (nomp_p.GE.8)
THEN
339 ELSE IF (nomp_p.GE.4)
THEN
342 ELSE IF (nomp_p.GE.2)
THEN
350 IF ( iomp .LT. nomp_p )
THEN
354 IF ( (iold.GT.n).OR.(jold.GT.n).OR.(iold.LT.1)
355 & .OR.(jold.LT.1) )
THEN
359 IF (iold.EQ.jold)
THEN
361 ELSE IF (perm(iold).LT.perm(jold))
THEN
366 doit = ( iomp .EQ. ibits(iarr, p2-1, p2))
371 IF (iold.EQ.jold)
THEN
375 ELSE IF (perm(iold).LT.perm(jold))
THEN
377 IF ( keep(50) .NE. 0 )
THEN
388 istep = abs( step(iarr) )
390 & procnode_steps(istep), keep(199) )
391 i_am_cand_loc = .false.
392 t4_master_concerned = .false.
394 IF ( type_node .EQ. 1 )
THEN
395 IF ( keep(46) .eq. 0 )
THEN
396 dest = master_node + 1
400 ELSE IF ( type_node .EQ. 2 )
THEN
401 IF ( isend .LT. 0 )
THEN
404 IF ( keep( 46 ) .eq. 0 )
THEN
405 dest = master_node + 1
410 iniv2 = istep_to_iniv2(istep)
411 IF (i_am_slave) i_am_cand_loc = i_am_cand(iniv2)
412 IF ( keep(79) .GT. 0)
THEN
415 IF ( (typesplit.EQ.5).OR.(typesplit.EQ.6))
THEN
416 t4_master_concerned = .true.
417 t4master=candidates(candidates(slavef+1,iniv2)+1,iniv2)
418 IF ( keep(46) .eq. 0 )
THEN
424 arrow_root = arrow_root + 1
425 IF (earlyt3rootins)
THEN
426 IF ( isend .LT. 0 )
THEN
427 iposroot = rg2l(jsend)
428 jposroot = rg2l(iarr)
430 iposroot = rg2l( iarr )
431 jposroot = rg2l( jsend )
433 irow_grid = mod( ( iposroot-1 )/root%MBLOCK, root%NPROW )
434 jcol_grid = mod( ( jposroot-1 )/root%NBLOCK, root%NPCOL )
435 IF ( keep( 46 ) .eq. 0 )
THEN
436 dest = irow_grid * root%NPCOL + jcol_grid + 1
438 dest = irow_grid * root%NPCOL + jcol_grid
445 val = aspk(k)*rowsca(iold)*colsca(jold)
451 & ( dest .eq. -1 .and. keep( 46 ) .eq. 1 .AND.
452 & ( i_am_cand_loc .OR. master_node .EQ. 0 ) )
456 & ( dest .EQ. -2 .AND. keep( 46 ) .EQ. 1 )
460 IF ( type_node .eq. 3 .AND. earlyt3rootins )
THEN
461 IF ( irow_grid .EQ. root%MYROW .AND.
462 & jcol_grid .EQ. root%MYCOL )
THEN
463 ilocroot = root%MBLOCK * ( ( iposroot - 1 ) /
464 & ( root%MBLOCK * root%NPROW ) )
465 & + mod( iposroot - 1, root%MBLOCK ) + 1
466 jlocroot = root%NBLOCK * ( ( jposroot - 1 ) /
467 & ( root%NBLOCK * root%NPCOL ) )
468 & + mod( jposroot - 1, root%NBLOCK ) + 1
469 IF (keep(60)==0)
THEN
471 & + int(jlocroot - 1,8) * int(local_m,8)
472 & + int(ilocroot - 1,8) )
474 & + int(jlocroot - 1,8) * int(local_m,8)
475 & + int(ilocroot - 1,8) )
478 root%SCHUR_POINTER( int(jlocroot - 1,8)
479 & * int(root%SCHUR_LLD,8)
480 & + int(ilocroot,8) )
481 & = root%SCHUR_POINTER( int(jlocroot - 1,8)
482 & * int(root%SCHUR_LLD,8)
487 WRITE(*,*) myid,
':INTERNAL Error: root arrowhead '
488 WRITE(*,*) myid,
':is not belonging to me. IARR,JARR='
492 ELSE IF ( iarr .GE. 0 )
THEN
493 IF ( iarr .eq. jarr )
THEN
495 dblarr( ia ) = dblarr( ia ) + val
498 ishift = int(intarr(is1) + iw4(iarr,2),8)
499 iw4(iarr,2) = iw4(iarr,2) - 1
500 intarr(is1 + ishift + 2_8) = jarr
501 dblarr(ptrarw(iarr)+ishift) = val
505 ishift = int(ptraiw(iarr)+iw4(iarr,1)+2,8)
506 intarr(ishift) = jarr
507 ias = ptrarw(iarr)+int(iw4(iarr,1),8)
508 iw4(iarr,1) = iw4(iarr,1) - 1
510 IF ( iw4(iarr,1) .EQ. 0 .AND.
511 & step( iarr) > 0 )
THEN
512 IF ( master_node == myid)
THEN
513 taille = intarr( ptraiw(iarr) )
515 & intarr( ptraiw(iarr) + 3 ),
516 & dblarr( ptrarw(iarr) + 1 ),
517 & taille, 1, taille )
522 IF ( dest.EQ. -1 )
THEN
523 iniv2 = istep_to_iniv2(istep)
524 ncand = candidates(slavef+1,iniv2)
525 IF (keep(79).GT.0)
THEN
527 dest=candidates(i,iniv2)
528 IF (keep(46).EQ.0.AND.(dest.GE.0)) dest=dest+1
530 IF (i.EQ.ncand+1) cycle
532 isend_shr=isend; jsend_shr=jsend
533 val_shr=val; dest_shr=dest
539 dest=candidates(i,iniv2)
540 IF (keep(46).EQ.0) dest=dest+1
542 isend_shr=isend; jsend_shr=jsend
543 val_shr=val; dest_shr=dest
549 IF (keep(46).EQ.0) dest=dest+1
550 IF ( dest .NE. 0 )
THEN
551 isend_shr=isend; jsend_shr=jsend
552 val_shr=val; dest_shr=dest
555 IF ((t4_master_concerned).AND.(t4master.GT.0))
THEN
556 isend_shr=isend; jsend_shr=jsend
557 val_shr=val; dest_shr=t4master
560 ELSE IF ( dest .GT. 0 )
THEN
561 isend_shr=isend; jsend_shr=jsend
562 val_shr=val; dest_shr=dest
564 IF ( t4master.GT.0 )
THEN
565 isend_shr=isend; jsend_shr=jsend
566 val_shr=val; dest_shr=t4master
569 ELSE IF ( t4master.GT.0 )
THEN
570 isend_shr=isend; jsend_shr=jsend
571 val_shr=val; dest_shr=t4master
573 ELSE IF ( dest .EQ. -2 )
THEN
576 IF (keep(46) .EQ. 0) dest = dest + 1
577 IF (dest .NE. 0)
THEN
578 isend_shr=isend; jsend_shr=jsend
579 val_shr=val; dest_shr=dest
588 keep(49) = arrow_root
591 & bufi, bufr, nbrecords, nbufs,
592 & lp, comm, keep( 46 ) )
594 IF ( keep( 46 ) .NE. 0 )
DEALLOCATE( iw4 )
604 include
'mumps_tags.h'
606 INTEGER TAILLE_SENDI, TAILLE_SENDR, IREQ
607 IF (bufi(1,dest_shr)+1.GT.nbrecords)
THEN
608 taille_sendi = bufi(1,dest_shr) * 2 + 1
609 taille_sendr = bufi(1,dest_shr)
610 CALL mpi_send(bufi(1,dest_shr),taille_sendi,
612 & dest_shr, arrowhead, comm, ierr )
613 CALL mpi_send( bufr(1,dest_shr), taille_sendr,
614 & mpi_double_precision, dest_shr,
615 & arrowhead, comm, ierr )
618 ireq = bufi(1,dest_shr) + 1
619 bufi(1,dest_shr) = ireq
620 bufi( ireq * 2, dest_shr ) = isend_shr
621 bufi( ireq * 2 + 1, dest_shr ) = jsend_shr
622 bufr( ireq, dest_shr ) = val_shr
627 & ISEND_SHR, JSEND_SHR, VAL_SHR,
628 & DEST_SHR, BUFI, BUFR, NBRECORDS, NBUFS, LP, COMM )
630 INTEGER,
INTENT(in) :: ISEND_SHR, JSEND_SHR
631 DOUBLE PRECISION,
INTENT(in) :: VAL_SHR
632 INTEGER :: DEST_SHR, NBRECORDS, NBUFS, LP, COMM
633 INTEGER :: BUFI( NBRECORDS*2+1, NBUFS )
634 DOUBLE PRECISION :: BUFR( NBRECORDS, NBUFS )
636 include
'mumps_tags.h'
638 INTEGER TAILLE_SENDI, TAILLE_SENDR, IREQ
639 IF (BUFI(1,DEST_SHR)+1.GT.NBRECORDS) THEN
640 taille_sendi = bufi(1,dest_shr) * 2 + 1
641 taille_sendr = bufi(1,dest_shr)
642 CALL mpi_send(bufi(1,dest_shr),taille_sendi,
644 & dest_shr, arrowhead, comm, ierr )
645 CALL mpi_send( bufr(1,dest_shr), taille_sendr,
646 & mpi_double_precision, dest_shr,
647 & arrowhead, comm, ierr )
650 ireq = bufi(1,dest_shr) + 1
651 bufi(1,dest_shr) = ireq
652 bufi( ireq * 2, dest_shr ) = isend_shr
653 bufi( ireq * 2 + 1, dest_shr ) = jsend_shr
654 bufr( ireq, dest_shr ) = val_shr
726 & DBLARR, LDBLARR, INTARR, LINTARR, PTRAIW, PTRARW,
727 & KEEP, KEEP8, MYID, COMM, NBRECORDS,
730 & SLAVEF, PERM, FRERE_STEPS, STEP, INFO1, INFO2
734 INTEGER N, MYID, COMM
735 INTEGER(8),
INTENT(IN) :: LDBLARR, LINTARR
736 INTEGER INTARR(LINTARR)
737 INTEGER(8),
INTENT(IN) :: PTRAIW(N), PTRARW(N)
739 INTEGER(8) KEEP8(150)
740 INTEGER(8),
intent(IN) :: LA
741 INTEGER PROCNODE_STEPS( KEEP(28) ), PERM( N )
742 INTEGER SLAVEF, NBRECORDS
743 DOUBLE PRECISION A( LA )
745 DOUBLE PRECISION DBLARR(LDBLARR)
746 INTEGER FRERE_STEPS( KEEP(28) ), STEP(N)
747 TYPE (DMUMPS_ROOT_STRUC) :: root
748 INTEGER,
POINTER,
DIMENSION(:) :: BUFI
749 DOUBLE PRECISION,
POINTER,
DIMENSION(:) :: BUFR
750 INTEGER,
POINTER,
DIMENSION(:,:) :: IW4
751 LOGICAL :: EARLYT3ROOTINS
753 INTEGER IREC, NB_REC, IARR, JARR, I, allocok
754 INTEGER(8) :: I18, IA8, IS18, IIW8, IS8, IAS8
756 INTEGER LOCAL_M, LOCAL_N, ILOCROOT, JLOCROOT,
757 & iposroot, jposroot, taille,
759 INTEGER(8) :: PTR_ROOT
760 INTEGER ARROW_ROOT, TYPE_PARALL
761 INTEGER MUMPS_TYPENODE, MUMPS_PROCNODE
762 EXTERNAL mumps_typenode, mumps_procnode
764 DOUBLE PRECISION ZERO
765 parameter( zero = 0.0d0 )
767 include
'mumps_tags.h'
771 INTEGER :: STATUS(MPI_STATUS_SIZE)
774 type_parall = keep(46)
776 earlyt3rootins = keep(200) .EQ. 0
777 & .OR. (keep(200) .LT. 0 .AND. keep(400) .EQ. 0)
778 ALLOCATE( bufi( nbrecords * 2 + 1 ), stat = allocok )
779 IF ( allocok .GT. 0 )
THEN
781 info2 = nbrecords * 2 + 1
782 WRITE(*,*) myid,
': Could not allocate BUFI: goto 500'
785 ALLOCATE( bufr( nbrecords ) , stat = allocok )
786 IF ( allocok .GT. 0 )
THEN
789 WRITE(*,*) myid,
': Could not allocate BUFR: goto 500'
792 ALLOCATE( iw4(n,2), stat = allocok )
793 IF ( allocok .GT. 0 )
THEN
796 WRITE(*,*) myid,
': Could not allocate IW4: goto 500'
799 IF ( keep(38).NE.0 .AND. earlyt3rootins )
THEN
803 local_m = -19999; local_n = -29999; ptr_root = -99999_8
814 iw4(i,1) = intarr(i18)
815 iw4(i,2) = -intarr(i18+1_8)
820 CALL mpi_recv( bufi(1), 2*nbrecords+1,
821 & mpi_integer, master,
823 & comm, status, ierr )
825 IF (nb_rec.LE.0)
THEN
829 IF (nb_rec.EQ.0)
EXIT
830 CALL mpi_recv( bufr(1), nbrecords, mpi_double_precision,
832 & comm, status, ierr )
834 iarr = bufi( irec * 2 )
835 jarr = bufi( irec * 2 + 1 )
837 IF ( mumps_typenode( procnode_steps(abs(step(abs(iarr)))),
839 & .AND. earlyt3rootins )
THEN
840 IF ( iarr .GT. 0 )
THEN
841 iposroot = root%RG2L_ROW( iarr )
842 jposroot = root%RG2L_COL( jarr )
844 iposroot = root%RG2L_ROW( jarr )
845 jposroot = root%RG2L_COL( -iarr )
847 ilocroot = root%MBLOCK * ( ( iposroot - 1 ) /
848 & ( root%MBLOCK * root%NPROW ) )
849 & + mod( iposroot - 1, root%MBLOCK ) + 1
850 jlocroot = root%NBLOCK * ( ( jposroot - 1 ) /
851 & ( root%NBLOCK * root%NPCOL ) )
852 & + mod( jposroot - 1, root%NBLOCK ) + 1
853 IF (keep(60)==0)
THEN
854 a( ptr_root + int(jlocroot - 1,8) * int(local_m,8)
856 & = a( ptr_root + int(jlocroot - 1,8)
858 & + int(ilocroot - 1,8))
861 root%SCHUR_POINTER( int(jlocroot-1,8)
863 & + int(ilocroot,8) )
864 & = root%SCHUR_POINTER( int(jlocroot - 1,8)
865 & * int(root%SCHUR_LLD,8)
869 ELSE IF (iarr.GE.0)
THEN
870 IF (iarr.EQ.jarr)
THEN
872 dblarr(ia8) = dblarr(ia8) + val
875 ishift = intarr(is18) + iw4(iarr,2)
877 iiw8 = is18 + ishift + 2
885 is8 = ptraiw(iarr)+iw4(iarr,1)+2
887 ias8 = ptrarw(iarr)+iw4(iarr,1)
888 iw4(iarr,1) = iw4(iarr,1) - 1
890 IF ( iw4(iarr,1) .EQ. 0
891 & .AND. step(iarr) > 0 )
THEN
892 iproc = mumps_procnode( procnode_steps(step(iarr)),
894 IF ( type_parall .eq. 0 )
THEN
897 IF (iproc .EQ. myid)
THEN
898 taille = intarr( ptraiw(iarr) )
900 & intarr( ptraiw(iarr) + 3 ),
901 & dblarr( ptrarw(iarr) + 1 ),
902 & taille, 1, taille )
912 keep(49) = arrow_root
subroutine dmumps_facto_send_arrowheads(n, nz, aspk, irn, icn, perm, lscal, colsca, rowsca, myid, slavef, procnode_steps, nbrecords, lp, comm, root, keep, keep8, fils, rg2l, intarr, lintarr, dblarr, ldblarr, ptraiw, ptrarw, frere_steps, step, a, la, istep_to_iniv2, i_am_cand, candidates)