15 & COMM_LOAD, ASS_IRECV,
20 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
21 & IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, IW, LIW, A, LA,
22 & PTRIST, PTLUST_S, PTRFAC, PTRAST, STEP, PIMASTER,
24 & NSTK, COMP, IFLAG, IERROR, PERM,
25 & IPOOL, LPOOL, LEAF, NBFIN, SLAVEF,
26 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD, PTRARW, PTRAIW,
27 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
28 & LPTRAR, NELT, FRTPTR, FRTELT,
29 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
33#if ! defined(NO_FDM_MAPROW)
39 include
'mumps_headers.h'
41 include
'mumps_tags.h'
43 TYPE (cmumps_root_struc) :: root
45 INTEGER icntl( 60 ), keep( 500 )
48 INTEGER comm_load, ass_irecv
50 INTEGER lbufr, lbufr_bytes
52 INTEGER(8) :: posfac, iptrlu, lrlu, lrlus, la
53 INTEGER (keep(28)), ptrist(keep(28)),
54 & nstk(keep(28)), ptlust_s(keep(28))
55 INTEGER iwpos, iwposcb
59 INTEGER,
intent(in) :: lrgroups(n)
61 INTEGER frtptr( n+1 ), frtelt( nelt )
62 INTEGER(8) :: ptrast(keep(28))
63 INTEGER(8) :: ptrfac(keep(28))
64 INTEGER(8) :: pamaster(keep(28))
65 INTEGER step(n), pimaster(keep(28))
69 INTEGER ipool( lpool )
71 DOUBLE PRECISION opassw, opeliw
72 INTEGER itloc( n + keep(253) ), fils( n ), dad( keep(28) )
73 COMPLEX :: rhs_mumps(keep(255))
74 INTEGER nd( keep(28) )
75 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
76 INTEGER frere(keep(28))
77 INTEGER intarr( keep8(27) )
78 COMPLEX dblarr( keep8(26) )
79 INTEGER istep_to_iniv2(keep(71)),
80 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
83 INTEGER mrs_nslaves_pere
85 INTEGER mrs_nfront_pere
87 INTEGER mrs_nfs4father
88 INTEGER,
POINTER,
DIMENSION(:) :: mrs_slaves_pere, mrs_trow
92 INTEGER ioldps, nrow, lda
93 INTEGER , lcont, nelim, nass, ncol_to_send,
94 & shift_list_row_son, shift_list_col_son
95 INTEGER(8) :: shift_val_son
96 INTEGER(8) :: mem_gain
97 INTEGER(8) :: dyn_size
98#if ! defined(NO_FDM_MAPROW)
99 TYPE(),
POINTER :: mrs
101 INTEGER :: iwhandler_save
103 LOGICAL :: cb_stored_in_blrstruc, compress_cb
104 IF (keep(50).EQ.0)
THEN
109 ioldps = ptrist(step(inode))
110 iwhandler_save = iw(ioldps+xxa)
112 compress_cb = ((lrstatus.EQ.1).OR.
118 & .AND..NOT.compress_cb)
THEN
123 ioldps = ptrist(step(inode))
124 lrstatus = iw(ioldps+xxlr)
125 IF ( (keep(214).EQ.1)
128 & ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la,
129 & lrlu, lrlus, iwpos, iwposcb, posfac,
comp,
130 & iptrlu, opeliw, step, pimaster, pamaster,
131 & iflag, ierror, slavef, procnode_steps, dad,
myid, comm,
132 & keep,keep8, dkeep, itype2
134 ioldps = ptrist(step(inode))
135 IF (keep(38).NE.fpere)
THEN
136 cb_stored_in_blrstruc = .false.
137 lrstatus = iw(ioldps+xxlr)
138 IF ((lrstatus.EQ.1).OR.(lrstatus.EQ.3))
THEN
139 cb_stored_in_blrstruc = .true.
140 iw(ioldps+xxs) = s_nolnocb
142 lrlus = lrlus + mem_gain
143 keep8(69) = keep8(69) - mem_gain
145 & la-lrlus,0_8,-mem_gain,keep,keep8,lrlus)
147 iw(ioldps+xxs)=s_nolcbnocontig
149 IF (dyn_size .GT.0)
THEN
150 ELSE IF (keep(216).NE.3)
THEN
151 mem_gain=int(iw( ioldps + 2 + keep(ixsz) ),8)*
152 & int(iw( ioldps + 3 + keep(ixsz) ),8)
153 lrlus = lrlus+mem_gain
154 keep8(69) = keep8(69) - mem_gain
156 & la-lrlus,0_8,-mem_gain,keep,keep8,lrlus)
161 IF (dyn_size > 0_8)
THEN
162 ELSE IF (keep(216).EQ.2)
THEN
163 IF (fpere.NE.keep(38))
THEN
164 IF (.NOT. cb_stored_in_blrstruc)
THEN
166 & iw( ioldps + 2 + keep(ixsz) ),
167 & iw( ioldps + keep(ixsz) ),
168 & iw( ioldps + 3 + keep(ixsz) )+
169 & iw( ioldps + keep(ixsz) ), 0,
170 & iw( ioldps + xxs ), 0_8 )
171 iw(ioldps+xxs)=s_nolcbcontig
176 IF ( keep(38).EQ.fpere)
THEN
177 lcont = iw(ioldps+keep(ixsz))
178 nrow = iw(ioldps+2+keep(ixsz))
179 npiv = iw(ioldps+3+keep(ixsz))
180 nass = iw(ioldps+4+keep(ixsz))
182 ncol_to_send = lcont-nelim
183 shift_list_row_son = 6 + iw(ioldps+5+keep(ixsz)) + keep(ixsz)
184 shift_list_col_son = shift_list_row_son + nrow + nass
185 shift_val_son = int(nass,8)
187 IF (iw(ioldps+ihdr_rec+keep(ixsz)).EQ.s_rootband_init)
THEN
188 iw(ioldps+ihdr_rec+keep(ixsz)) = s_rec_contstatic
194 & root, nrow, ncol_to_send, shift_list_row_son,
195 & shift_list_col_son , shift_val_son, lda,
196 & root_cont_static,
myid, comm,
198 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
199 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
200 & ptrist, ptlust_s, ptrfac, ptrast, step, pimaster,
202 & nstk,
comp, iflag, ierror, perm,
203 & ipool, lpool, leaf, nbfin, slavef,
204 & opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw,
205 & intarr,dblarr,icntl,keep,keep8,dkeep,.false.,nd,frere,
206 & lptrar, nelt, frtptr, frtelt,
207 & istep_to_iniv2, tab_pos_in_pere
210 IF ( iflag < 0 )
GOTO 600
212 IF (keep(214).EQ.2)
THEN
214 & ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la,
215 & lrlu, lrlus, iwpos, iwposcb, posfac,
comp,
216 & iptrlu, opeliw, step, pimaster, pamaster,
217 & iflag, ierror, slavef, procnode_steps, dad,
myid,
218 & comm, keep,keep8,dkeep, itype2
223 &
myid, keep, keep8, itype2
226 ioldps = ptrist(step(inode))
227 IF (iw(ioldps+ihdr_rec+keep(ixsz)).EQ.s_root2son_called)
THEN
229 & a, la, lrlu, lrlus, iwposcb, iptrlu, step,
230 &
myid, keep, keep8, itype2
233 iw(ioldps+ihdr_rec+keep(ixsz)) = s_rootband_init
234 IF (keep(214).EQ.1.AND.keep(216).NE.3)
THEN
235 iw(ioldps+xxs)=s_nolcbnocontig38
238 & mem_gain, keep(ixsz) )
239 lrlus = lrlus + mem_gain
240 keep8(69) = keep8(69) - mem_gain
242 & la-lrlus,0_8,-mem_gain,keep,keep8,lrlus)
243 IF (keep(216).EQ.2)
THEN
245 & iw( ioldps + 2 + keep(ixsz) ),
246 & iw( ioldps + keep(ixsz) ),
247 & iw( ioldps + 3 + keep(ixsz) )+
248 & iw( ioldps + keep(ixsz) ),
249 & iw( ioldps + 4 + keep(ixsz) ) -
250 & iw( ioldps + 3 + keep(ixsz) ),
251 & iw( ioldps + xxs ),0_8)
252 iw(ioldps+xxs)=s_nolcbcontig38
259#if ! defined(NO_FDM_MAPROW)
260 ioldps = ptrist(step(inode))
261 IF (fpere .NE. keep(38))
THEN
264 IF (fpere .NE. mrs%INODE)
THEN
265 WRITE(*,*)
" Internal error 1 in CMUMPS_END_FACTO_SLAVE",
266 & inode, mrs%INODE, fpere
269 mrs_inode = mrs%INODE
271 mrs_nslaves_pere = mrs%NSLAVES_PERE
272 mrs_nass_pere = mrs%NASS_PERE
273 mrs_nfront_pere = mrs%NFRONT_PERE
275 mrs_nfs4father = mrs%NFS4FATHER
276 mrs_slaves_pere => mrs%SLAVES_PERE
279 & bufr, lbufr, lbufr_bytes,
280 & mrs_inode, mrs_ison,
281 & mrs_nslaves_pere, mrs_slaves_pere(1),
282 & mrs_nfront_pere, mrs_nass_pere, mrs_nfs4father,
283 & mrs_lmap, mrs_trow(1),
284 & procnode_steps, slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
285 & lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac,
286 & ptrast, step, pimaster, pamaster, nstk,
comp,
287 & iflag, ierror,
myid, comm, perm, ipool, lpool, leaf,
288 & nbfin, icntl, keep,keep8,dkeep,
289 & root, opassw, opeliw,
291 & fils, dad, ptrarw, ptraiw, intarr, dblarr, nd, frere,
292 & lptrar, nelt, frtptr, frtelt,
294 & istep_to_iniv2, tab_pos_in_pere
recursive subroutine cmumps_end_facto_slave(comm_load, ass_irecv, n, inode, fpere, root, myid, comm bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, perm, ipool, lpool, leaf, nbfin, slavef, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
recursive subroutine cmumps_maplig(comm_load, ass_irecv, bufr, lbufr, lbufr_bytes inode_pere, ison, nslaves_pere, list_slaves_pere, nfront_pere, nass_pere, nfs4father, lmap, trow, procnode_steps, slavef, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, myid, comm, perm, ipool, lpool, leaf, nbfin, icntl, keep, keep8, dkeep, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
recursive subroutine cmumps_build_and_send_cb_root(comm_load, ass_irecv, n, ison, iroot, ptri, ptrr, root, nbrow, nbcol, shift_list_row_son, shift_list_col_son, shift_val_son_arg, lda_arg, tag, myid, comm, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, perm, ipool, lpool, leaf, nbfin, slavef, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, transpose_asm, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)