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, , 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 ))
147 nrow = int(ptrarw( 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.NE.
IF ( IPTRR - 1_8 KEEP8(26) ) THEN
191 WRITE(*,*) 'error 2 in ana_arrowheads
'