16 & root, N, IW, LIW, A, LA,
17 & LRLU, IPTRLU, IWPOS, IWPOSCB,
18 & PTRIST, PTLUST, PTRFAC, PTRAST, STEP, PIMASTER, PAMASTER,
19 & COMP, LRLUS, IPOOL, LPOOL, LEAF,
21 & LPTRAR, NELT, FRTPTR, FRTELT,
22 & PTRAIW, PTRARW, INTARR, DBLARR,
23 & KEEP, KEEP8, DKEEP, IFLAG, IERROR, COMM, COMM_LOAD,
25 & ND,PROCNODE_STEPS, SLAVEF, OPASSW )
30 TYPE (CMUMPS_ROOT_STRUC ) :: root
31 INTEGER :: KEEP( 500 )
32 INTEGER(8) :: KEEP8(150)
34 INTEGER(8) :: LA, LRLU, , LRLUS
35 INTEGER(8) :: PAMASTER(KEEP(28))
36 INTEGER(8) :: PTRAST(KEEP(28))
37 INTEGER(8) :: PTRFAC(KEEP(28))
38 INTEGER LBUFR, LBUFR_BYTES, N, LIW,
39 & iwpos, iwposcb,
comp, comm, comm_load, iflag,
43 INTEGER PTRIST(KEEP(28))
44 INTEGER PTLUST(KEEP(28))
45 INTEGER STEP(N), PIMASTER(KEEP(28)), ITLOC( N+KEEP(253) )
46 COMPLEX :: RHS_MUMPS(KEEP(255))
47 INTEGER BUFR( LBUFR_BYTES )
49 INTEGER ND(KEEP(28)), PROCNODE_STEPS(KEEP(28))
53 INTEGER FILS( N ), DAD(KEEP(28))
55 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
56 INTEGER(8),
INTENT(IN) :: PTRAIW( LPTRAR ), PTRARW( LPTRAR )
57 INTEGER INTARR(KEEP8(27))
58 COMPLEX DBLARR(KEEP8(26))
59 DOUBLE PRECISION OPASSW
63 INTEGER MUMPS_PROCNODE
64 INTEGER POSITION, LOCAL_M, LOCAL_N, LREQI
65 INTEGER(8) :: LREQA, POS_ROOT
66 INTEGER NSUBSET_ROW, NSUBSET_COL, IROOT, ISON, NSUBSET_COL_EFF
68 INTEGER NBROWS_ALREADY_SENT, NBROWS_PACKET
69 INTEGER NSUPROW, NSUPCOL, BBPCBP
70 include
'mumps_headers.h'
73 & ison, 1, mpi_integer, comm
75 & nsubset_row, 1, mpi_integer, comm, ierr )
77 & nsuprow, 1, mpi_integer, comm, ierr )
79 & nsubset_col, 1, mpi_integer, comm, ierr )
81 & nsupcol, 1, mpi_integer, comm, ierr )
83 & nbrows_already_sent, 1, mpi_integer,
86 & nbrows_packet, 1, mpi_integer,
89 & bbpcbp, 1, mpi_integer,
91 IF (bbpcbp .EQ. 1)
THEN
92 nsubset_col_eff = nsubset_col - nsupcol
95 nsubset_col_eff = nsubset_col
99 IF ( ptrist( step(iroot) ) .NE. 0 .OR.
100 & ptlust( step(iroot)) .NE. 0 )
THEN
101 IF (nbrows_already_sent + nbrows_packet .EQ. nsubset_row
102 & - nsuprow .OR. nsubset_row - nsuprow.EQ.0 .OR.
103 & nsubset_col_eff .EQ. 0)
THEN
104 keep(121) = keep(121) - 1
105 IF ( keep(121) .eq. 0 )
THEN
106 IF (keep(201).EQ.1)
THEN
108 ELSEIF (keep(201).EQ.2)
THEN
112 & procnode_steps, slavef, keep(199),
113 & keep(28), keep(76),
114 & keep(80), keep(47),
116 IF (keep(47) .GE. 3)
THEN
119 & procnode_steps, keep,keep8, slavef, comm_load,
120 & myid, step, n, nd, fils )
125 IF (nbrows_already_sent + nbrows_packet .EQ.
126 & nsubset_row - nsuprow .OR.
127 & nsubset_row - nsuprow.EQ.0 .OR.
128 & nsubset_col_eff .EQ. 0)
THEN
133 & fils, dad, myid, slavef, procnode_steps,
134 & lptrar, nelt, frtptr, frtelt,
135 & ptraiw, ptrarw, intarr, dblarr,
137 & iwpos, iwposcb, ptrist, ptrast,
138 & step, pimaster, pamaster, itloc, rhs_mumps,
139 &
comp, lrlus, iflag, keep,keep8,dkeep,ierror )
140 IF ( iflag .LT. 0 )
RETURN
142 IF (keep(60) .EQ.0)
THEN
143 IF ( ptrist(step(iroot)) .GE. 0 )
THEN
144 IF ( ptrist(step(iroot)) .NE. 0 )
THEN
145 local_n = -iw( ptrist(step( iroot )) + keep(ixsz) )
146 local_m = iw( ptrist(step( iroot )) + 1 + keep(ixsz))
147 pos_root = pamaster(step( iroot ))
149 local_n = iw( ptlust(step( iroot ) ) + 1 + keep(ixsz))
150 local_m = iw( ptlust(step( iroot ) ) + 2 + keep(ixsz))
151 pos_root = ptrfac(iw(ptlust(step(iroot))+4+
156 local_m = root%SCHUR_LLD
157 local_n = root%SCHUR_NLOC
159 IF ( (bbpcbp.EQ.1).AND. (nbrows_already_sent.EQ.0).AND.
160 & (
min(nsuprow, nsupcol) .GT. 0)
162 lreqi = nsuprow+nsupcol
163 lreqa = int(nsuprow,8) * int(nsupcol,8)
164 IF ( (lreqa.NE.0_8) .AND.
165 & (ptrist(step(iroot)).LT.0).AND.
167 WRITE(*,*)
' Error in CMUMPS_PROCESS_CONTRIB_TYPE3'
171 & myid,n,keep,keep8,dkeep,iw,liw,a, la,
172 & lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad,
173 & ptrist, ptrast, step, pimaster, pamaster,
174 & lreqi, lreqa, -1234, s_notfree, .false.,
175 &
comp, lrlus, keep8(67), iflag, ierror
177 IF ( iflag .LT. 0 )
RETURN
179 & iw( iwposcb + 1 ), lreqi,
180 & mpi_integer, comm, ierr )
182 & a( iptrlu + 1_8 ), int(lreqa),
183 & mpi_complex, comm, ierr )
184 opassw = opassw + lreqa
187 & iw( iwposcb + nsuprow + 1 ), nsupcol,
191 & root%RHS_ROOT(1,1), root%RHS_NLOC,
193 iwposcb = iwposcb + lreqi
194 iptrlu = iptrlu + lreqa
196 lrlus = lrlus + lreqa
197 keep8(69) = keep8(69) - lreqa
199 & la-lrlus,0_8,-lreqa,keep,keep8,lrlus)
201 lreqi = nbrows_packet + nsubset_col_eff
202 lreqa = int(nbrows_packet,8) * int(nsubset_col_eff,8)
203 IF ( (lreqa.NE.0_8) .AND.
204 & (ptrist(step(iroot)).LT.0).AND.
206 WRITE(*,*)
' Error in CMUMPS_PROCESS_CONTRIB_TYPE3'
209 IF (lreqa.NE.0_8)
THEN
211 & myid,n,keep,keep8,dkeep,iw,liw,a, la,
212 & lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad,
213 & ptrist, ptrast, step, pimaster, pamaster,
214 & lreqi, lreqa, -1234, s_notfree, .false.,
215 &
comp, lrlus, keep8(67), iflag, ierror
217 IF ( iflag .LT. 0 )
RETURN
219 & iw( iwposcb + 1 ), lreqi,
220 & mpi_integer, comm, ierr )
223 & mpi_complex, comm, ierr )
224 opassw = opassw + lreqa
225 IF (keep(60).EQ.0)
THEN
227 & nbrows_packet, nsubset_col_eff,
229 & iw( iwposcb + nbrows_packet + 1 ),
232 & a( pos_root ), local_m, local_n,
233 & root%RHS_ROOT(1,1), root%RHS_NLOC,
239 & iw( iwposcb + nbrows_packet + 1 ),
242 & root%SCHUR_POINTER(1),
243 & root%SCHUR_LLD , root%SCHUR_NLOC,
244 & root%RHS_ROOT(1,1), root%RHS_NLOC,
247 iwposcb = iwposcb + lreqi
248 iptrlu = iptrlu + lreqa
250 lrlus = lrlus + lreqa
251 keep8(69) = keep8(69) - lreqa
253 & la-lrlus,0_8,-lreqa,keep,keep8,lrlus)