16 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
17 & IWPOS, IWPOSCB, IPTRLU,
18 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
20 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
21 & IFLAG, IERROR, COMM,
24 & NBFIN, MYID, SLAVEF,
26 & OPASSW, OPELIW, ITLOC, RHS_MUMPS,
27 & FILS, DAD, PTRARW, PTRAIW,
28 & INTARR, DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND,
29 & LPTRAR, NELT, FRTPTR, FRTELT,
30 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
37 TYPE (SMUMPS_ROOT_STRUC) :: root
39 INTEGER ICNTL( 60 ), KEEP( 500 )
42 INTEGER COMM_LOAD, ASS_IRECV
43 INTEGER LBUFR, LBUFR_BYTES
45 INTEGER(8) :: POSFAC,IPTRLU, LRLU, LRLUS
46 INTEGER IWPOS, IWPOSCB
51 INTEGER, intent(in) :: LRGROUPS(N)
52 INTEGER(8) :: PTRAST(KEEP(28))
53 INTEGER(8) :: PTRFAC(KEEP(28))
54 INTEGER(8) :: PAMASTER(KEEP(28))
55 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
56 INTEGER STEP(N), PIMASTER(KEEP(28))
58 INTEGER NSTK_S( KEEP(28) ), PROCNODE_STEPS( KEEP(28) )
60 INTEGER IFLAG, IERROR, COMM
62 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
64 INTEGER IPOOL( LPOOL )
65 INTEGER MYID, SLAVEF, NBFIN
66 INTEGER ISTEP_TO_INIV2(KEEP(71)),
67 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
68 DOUBLE PRECISION OPASSW, OPELIW
69 INTEGER ITLOC( N+KEEP(253) ), FILS( N ), DAD( KEEP(28) )
70 REAL :: RHS_MUMPS(KEEP(255))
71 INTEGER(8), INTENT(IN) :: PTRARW( LPTRAR ), PTRAIW( LPTRAR )
72 INTEGER ND(KEEP(28)), FRERE(KEEP(28))
73 REAL DBLARR( KEEP8(26) )
74 INTEGER INTARR( KEEP8(27) )
75 INTEGER I, NELIM, NB_CONTRI_GLOBAL, NUMORG,
76 & NFRONT, IROW, JCOL, PDEST, HF, IOLDPS,
77 & IN, DEB_ROW, ILOC_ROW, IFSON, ILOC_COL,
78 & IPOS_SON, NELIM_SON, NSLAVES_SON, HS,
79 & IROW_SON, ICOL_SON, ISLAVE, IERR,
80 & NELIM_SENT, IPOS_STATREC, TYPE_SON
81 INTEGER MUMPS_PROCNODE
82 EXTERNAL MUMPS_PROCNODE
83 INCLUDE 'mumps_headers.h
'
84 INCLUDE 'mumps_tags.h
'
85 NB_CONTRI_GLOBAL = KEEP(41)
86 NUMORG = root%ROOT_SIZE
88 NFRONT = NUMORG + KEEP(42)
89 DO IROW = 0, root%NPROW - 1
90 DO JCOL = 0, root%NPCOL - 1
91 PDEST = IROW * root%NPCOL + JCOL
92.NE.
IF ( PDEST MYID ) THEN
93 CALL SMUMPS_BUF_SEND_ROOT2SLAVE(NFRONT,
94 & NB_CONTRI_GLOBAL, PDEST, COMM, KEEP, IERR)
96 write(6,*) ' error detected by
',
103 CALL SMUMPS_PROCESS_ROOT2SLAVE( NFRONT,
104 & NB_CONTRI_GLOBAL, root,
105 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
106 & IWPOS, IWPOSCB, IPTRLU,
107 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
109 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
110 & IFLAG, IERROR, COMM, COMM_LOAD,
111 & IPOOL, LPOOL, LEAF,
112 & NBFIN, MYID, SLAVEF,
114 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD,
115 & LPTRAR, NELT, FRTPTR, FRTELT,
117 & INTARR,DBLARR,ICNTL,KEEP,KEEP8,DKEEP,ND )
118 IF (IFLAG < 0 ) RETURN
120 IOLDPS = PTLUST_S(STEP(IROOT))
122 DEB_ROW = IOLDPS + HF
126 IW(ILOC_ROW+NFRONT) = IN
127 ILOC_ROW = ILOC_ROW + 1
131 ILOC_ROW = IOLDPS + HF + NUMORG
132 ILOC_COL = ILOC_ROW + NFRONT
133.GT.
IF ( NELIM0 ) THEN
136 IPOS_SON = PIMASTER(STEP(IN))
137.EQ.
IF (IPOS_SON 0) GOTO 100
138 NELIM_SON = IW(IPOS_SON+1+KEEP(IXSZ))
139.eq.
if (NELIM_SON0) then
140 write(6,*) ' error 1 in process_last_rtnelind
'
143 NSLAVES_SON = IW(IPOS_SON+5+KEEP(IXSZ))
144 HS = 6 + NSLAVES_SON + KEEP(IXSZ)
145 IROW_SON = IPOS_SON + HS
146 ICOL_SON = IROW_SON + NELIM_SON
148 IW( ILOC_ROW+I-1 ) = IW( IROW_SON+I-1 )
151 IW( ILOC_COL+I-1 ) = IW( ICOL_SON+I-1 )
153 NELIM_SENT = ILOC_ROW - IOLDPS - HF + 1
154 DO ISLAVE = 0,NSLAVES_SON
155.EQ.
IF (ISLAVE0) THEN
156 PDEST= MUMPS_PROCNODE(PROCNODE_STEPS(STEP(IN)),KEEP(199))
158 PDEST = IW(IPOS_SON + 5 + ISLAVE+KEEP(IXSZ))
160.NE.
IF (PDESTMYID) THEN
161 CALL SMUMPS_BUF_SEND_ROOT2SON(IN, NELIM_SENT,
162 & PDEST, COMM, KEEP, IERR )
164 write(6,*) ' error detected by
',
169 CALL SMUMPS_PROCESS_ROOT2SON( COMM_LOAD, ASS_IRECV,
170 & IN, NELIM_SENT, root,
172 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
173 & IWPOS, IWPOSCB, IPTRLU,
174 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
176 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
177 & IFLAG, IERROR, COMM,
179 & IPOOL, LPOOL, LEAF,
180 & NBFIN, MYID, SLAVEF,
182 & OPASSW, OPELIW, ITLOC, RHS_MUMPS,
183 & FILS, DAD, PTRARW, PTRAIW,
184 & INTARR, DBLARR, ICNTL, KEEP, KEEP8, DKEEP, ND, FRERE,
185 & LPTRAR, NELT, FRTPTR, FRTELT,
186 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
189.NE.
IF ( ISLAVE 0 ) THEN
190.EQ.
IF (KEEP(50) 0) THEN
191 IPOS_STATREC = PTRIST(STEP(IN))+6+KEEP(IXSZ)
193 IPOS_STATREC = PTRIST(STEP(IN))+8+KEEP(IXSZ)
195.EQ.
IF (IW(IPOS_STATREC) S_REC_CONTSTATIC) THEN
196 IW(IPOS_STATREC) = S_ROOT2SON_CALLED
198.EQ.
IF (NSLAVES_SON 0) THEN
203 CALL SMUMPS_FREE_BAND( N, IN, PTRIST, PTRAST,
204 & IW, LIW, A, LA, LRLU, LRLUS, IWPOSCB,
205 & IPTRLU, STEP, MYID, KEEP, KEEP8, TYPE_SON
209 IPOS_SON = PIMASTER(STEP(IN))
212 CALL SMUMPS_FREE_BLOCK_CB_STATIC(
213 & .FALSE., MYID, N, IPOS_SON,
215 & LRLU, LRLUS, IPTRLU,
216 & IWPOSCB, LA, KEEP,KEEP8, .FALSE.
218 ILOC_ROW = ILOC_ROW + NELIM_SON
219 ILOC_COL = ILOC_COL + NELIM_SON
subroutine smumps_last_rtnelind(comm_load, ass_irecv, root, frere, iroot, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)