16 & inode, nelim_root, root,
18 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
19 & iwpos, iwposcb, iptrlu,
20 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
22 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
23 & iflag, ierror, comm,
24 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
26 & opassw, opeliw, itloc, rhs_mumps,
27 & fils, dad, ptrarw, ptraiw,
28 & intarr,dblarr,icntl,keep,keep8,dkeep,nd,frere,
29 & lptrar, nelt, frtptr, frtelt,
30 & istep_to_iniv2, tab_pos_in_pere
36 TYPE (smumps_root_struc) :: root
37 INTEGER keep(500), icntl( 60 )
40 INTEGER comm_load, ass_irecv
41 INTEGER inode, nelim_root
44 INTEGER(8) :: la, posfac, iptrlu, lrlu, lrlus
45 INTEGER iwpos, iwposcb
49 INTEGER,
intent(in) :: lrgroups(n)
50 INTEGER(8) :: ptrast(keep(28))
51 INTEGER(8) :: ptrfac(keep(28))
52 INTEGER(8) :: pamaster(keep(28))
53 INTEGER ptrist(keep(28)), ptlust_s(keep(28))
54 INTEGER step(n), pimaster(keep(28))
56 INTEGER nstk_s( keep(28) ), procnode_steps( keep(28) )
58 INTEGER iflag, ierror, comm
60 INTEGER ipool( lpool )
62 INTEGER frtptr( n+1 ), frtelt( nelt )
63 INTEGER myid, slavef, nbfin
64 DOUBLE PRECISION opassw, opeliw
65 INTEGER itloc( n + keep(253) ), fils( n ), dad(keep(28))
66 REAL :: rhs_mumps(keep(255))
67 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
68 INTEGER nd( keep(28) ), frere( keep(28) )
69 INTEGER intarr(keep8(27))
70 REAL dblarr(keep8(26))
71 INTEGER istep_to_iniv2(keep(71)),
72 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
73 include
'mumps_tags.h'
74 include
'mumps_headers.h'
75 INTEGER i, lcont, ncol_to_send, lda
76 INTEGER(8) :: shift_val_son, poselt
77 INTEGER fpere, ioldps, nfront, npiv, nass, nslaves,
78 & h_inode, nelim, nbcol, list_nelim_row,
79 & list_nelim_col, nelim_local, type_son,
80 & nrow, ncol, nbrow, shift_list_row_son,
81 & shift_list_col_son, ldafs, ierr,
82 & ison, pdest_master_ison
83 INTEGER :: status(mpi_status_size)
84 LOGICAL blocking, set_irecv, message_received
85 INTEGER msgsou, msgtag
92 & keep(199) ).EQ.myid)
THEN
93 ioldps = ptlust_s(step(inode))
94 nfront = iw(ioldps+keep(ixsz))
95 npiv = iw(ioldps+1+keep(ixsz))
96 nass = iabs(iw(ioldps + 2+keep(ixsz)))
98 h_inode = 6 + nslaves + keep(ixsz)
100 nbcol = nfront - npiv
101 list_nelim_row = ioldps + h_inode + npiv
102 list_nelim_col = list_nelim_row + nfront
104 write(6,*)
' ERROR 1 in SMUMPS_PROCESS_ROOT2SON ', nelim
105 write(6,*) myid,
':Process root2son: INODE=',inode,
106 &
'Header=',iw(ptlust_s(step(inode)):ptlust_s(step(inode))
110 nelim_local = nelim_root
112 root%RG2L_ROW(iw(list_nelim_row)) = nelim_local
113 root%RG2L_COL(iw(list_nelim_col)) = nelim_local
114 nelim_local = nelim_local + 1
115 list_nelim_row = list_nelim_row + 1
116 list_nelim_col = list_nelim_col + 1
118 nbrow = nfront - npiv
120 IF ( keep( 50 ) .eq. 0 )
THEN
125 shift_list_row_son = h_inode + npiv
126 shift_list_col_son = h_inode + nfront + npiv
127 IF ( keep(50).eq.0 .OR. type_son .eq. 1 )
THEN
132 shift_val_son = int(npiv,8) * int(ldafs,8) + int(npiv,8)
136 & ptlust_s(1), ptrast(1),
137 & root, nrow, ncol, shift_list_row_son,
138 & shift_list_col_son , shift_val_son, ldafs,
139 & root_non_elim_cb, myid, comm,
140 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
141 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
142 & ptrist, ptlust_s(1), ptrfac(1), ptrast(1),
143 & step, pimaster, pamaster,
144 & nstk_s,
comp, iflag, ierror, perm,
145 & ipool, lpool, leaf, nbfin, slavef,
146 & opassw, opeliw, itloc, rhs_mumps,
147 & fils, dad, ptrarw, ptraiw
148 & intarr,dblarr,icntl,keep,keep8,dkeep,.false.,nd,frere,
149 & lptrar, nelt, frtptr, frtelt,
150 & istep_to_iniv2, tab_pos_in_pere
153 IF (iflag.LT.0 )
RETURN
154 IF (type_son.EQ.1)
THEN
157 shift_list_row_son = h_inode + nass
158 shift_list_col_son = h_inode + nfront + npiv
159 shift_val_son = int(nass,8) * int(nfront,8) + int(npiv,8)
160 IF ( keep( 50 ) .eq. 0 )
THEN
161 transpose_asm = .false.
163 transpose_asm = .true.
168 & root, nrow, ncol, shift_list_row_son,
169 & shift_list_col_son , shift_val_son, nfront,
170 & root_non_elim_cb, myid, comm,
172 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
173 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
174 & ptrist, ptlust_s, ptrfac,
175 & ptrast, step, pimaster, pamaster,
176 & nstk_s,
comp, iflag, ierror, perm,
177 & ipool, lpool, leaf, nbfin, slavef,
178 & opassw, opeliw, itloc, rhs_mumps,
179 & fils, dad, ptrarw, ptraiw,
180 & intarr,dblarr,icntl,keep,keep8,dkeep,
181 & transpose_asm,nd,frere,
182 & lptrar, nelt, frtptr, frtelt,
183 & istep_to_iniv2, tab_pos_in_pere, lrgroups )
184 IF (iflag.LT.0 )
RETURN
186 ioldps = ptlust_s(step(inode))
187 poselt = ptrast(step(inode))
188 iw(ioldps + 4+keep(ixsz)) = step(inode)
189 ptrfac(step(inode))=poselt
190 IF ( type_son .eq. 1 )
THEN
191 nbrow = nfront - npiv
195 IF ( type_son .eq. 1 .OR. keep(50).EQ.0)
THEN
202 & int(lda,8)*int(nbrow+npiv,8), iw(ioldps+h_inode+nfront))
203 iw(ioldps + keep(ixsz)) = nbcol
204 iw(ioldps + 1 +keep(ixsz)) = nass - npiv
205 IF (type_son.EQ.2)
THEN
206 iw(ioldps + 2 +keep(ixsz)) = nass
208 iw(ioldps + 2 +keep(ixsz)) = nfront
210 iw(ioldps + 3 +keep(ixsz)) = npiv
212 & a, la, posfac, lrlu, lrlus,
213 & iwpos, ptrast,ptrfac,step, keep,keep8, .false.,inode,ierr
225 IF ( ptrist(step(ison)) .EQ. 0)
THEN
228 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
229 & iwpos, iwposcb, iptrlu,
230 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
232 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
233 & iflag, ierror, comm,
234 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
236 & root, opassw, opeliw, itloc, rhs_mumps,
237 & fils, dad, ptrarw, ptraiw,
238 & intarr, dblarr,icntl,keep,keep8,dkeep,nd,frere,lptrar,
239 & nelt, frtptr, frtelt,
240 & istep_to_iniv2, tab_pos_in_pere, .true.
243 IF ( iflag .LT. 0 )
RETURN
246 & ( iw( ptrist(step(ison)) + 1 +keep(ixsz)) .NE.
247 & iw( ptrist(step(ison)) + 3 +keep(ixsz)) ) .OR.
248 & ( keep(50) .NE. 0 .AND.
249 & iw( ptrist(step(ison)) + 6 +keep(ixsz)) .NE. 0 ) )
250 IF ( keep(50).eq.0)
THEN
251 msgsou = pdest_master_ison
254 IF ( iw( ptrist(step(ison)) + 1 +keep(ixsz)) .NE.
255 & iw( ptrist(step(ison)) + 3 +keep(ixsz)) )
THEN
256 msgsou = pdest_master_ison
257 msgtag = bloc_facto_sym
259 msgsou = mpi_any_source
260 msgtag = bloc_facto_sym_slave
265 message_received = .false.
267 & blocking, set_irecv, message_received,
270 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
271 & iwpos, iwposcb, iptrlu,
272 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
274 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
275 & iflag, ierror, comm,
276 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
278 & root, opassw, opeliw, itloc, rhs_mumps,
279 & fils, dad, ptrarw, ptraiw,
280 & intarr,dblarr,icntl,keep,keep8,dkeep,nd, frere, lptrar,
281 & nelt, frtptr, frtelt,
282 & istep_to_iniv2, tab_pos_in_pere, .true.
285 IF ( iflag .LT. 0 )
RETURN
287 ioldps = ptrist(step(inode))
288 lcont = iw(ioldps+keep(ixsz))
289 nrow = iw(ioldps+2+keep(ixsz))
290 npiv = iw(ioldps+3+keep(ixsz))
291 nass = iw(ioldps+4+keep(ixsz))
294 write(6,*) myid,
': INODE,LCONT, NROW, NPIV, NASS, NELIM=',
295 & inode,lcont, nrow, npiv, nass, nelim
296 write(6,*) myid,
': IOLDPS=',ioldps
297 write(6,*) myid,
': ERROR 2 in SMUMPS_PROCESS_ROOT2SON '
300 nslaves= iw(ioldps+5+keep(ixsz))
301 h_inode = 6 + nslaves + keep(ixsz)
302 list_nelim_col = ioldps + h_inode + nrow + npiv
303 nelim_local = nelim_root
305 root%RG2L_COL(iw(list_nelim_col)) = nelim_local
306 root%RG2L_ROW(iw(list_nelim_col)) = nelim_local
307 nelim_local = nelim_local + 1
308 list_nelim_col = list_nelim_col + 1
310 shift_list_row_son = 6 + iw(ioldps+5+keep(ixsz)) + keep(ixsz)
311 shift_list_col_son = shift_list_row_son + nrow + npiv
314 shift_val_son = -9999_8
316 transpose_asm = .false.
318 transpose_asm = .true.
323 & root, nrow, ncol_to_send, shift_list_row_son,
324 & shift_list_col_son , shift_val_son, lda,
325 & root_non_elim_cb, myid, comm,
327 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
328 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
329 & ptrist, ptlust_s, ptrfac,
330 & ptrast, step, pimaster, pamaster,
331 & nstk_s,
comp, iflag, ierror, perm,
332 & ipool, lpool, leaf, nbfin, slavef,
333 & opassw, opeliw, itloc, rhs_mumps,
334 & fils, dad, ptrarw, ptraiw,
335 & intarr,dblarr,icntl,keep,keep8,dkeep,transpose_asm,
336 & nd, frere, lptrar, nelt, frtptr, frtelt,
337 & istep_to_iniv2, tab_pos_in_pere, lrgroups)
338 IF (iflag.LT.0 )
RETURN
339 IF (keep(214).EQ.2)
THEN
341 & ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la,
342 & lrlu, lrlus, iwpos, iwposcb, posfac,
comp,
343 & iptrlu, opeliw, step, pimaster, pamaster,
344 & iflag, ierror, slavef, procnode_steps, dad, myid, comm,
345 & keep, keep8, dkeep,type_son