OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_process_message.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14 RECURSIVE SUBROUTINE smumps_traiter_message(
15 & COMM_LOAD, ASS_IRECV,
16 & MSGSOU, MSGTAG, MSGLEN,
17 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
18 & IWPOS, IWPOSCB, IPTRLU,
19 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
20 & PTLUST, PTRFAC,
21 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
22 & IFLAG, IERROR, COMM,
23 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
24 &
25 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
26 & FILS, DAD, PTRARW, PTRAIW,
27 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
28 & LPTRAR, NELT, FRTPTR, FRTELT,
29 &
30 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
31 & , LRGROUPS
32 & )
33 USE smumps_load
34 USE smumps_struc_def, ONLY : smumps_root_struc
35 IMPLICIT NONE
36 include 'mumps_headers.h'
37 TYPE (smumps_root_struc) :: root
38 INTEGER msgsou, msgtag, msglen
39 INTEGER lbufr, LBUFR_BYTES
40 INTEGER bufr( lbufr )
41 INTEGER keep(500), icntl( 60 )
42 INTEGER(8) keep8(150)
43 REAL dkeep(230)
44 INTEGER(8) :: posfac, iptrlu, lrlu, lrlus, la
45 INTEGER iwpos, iwposcb
46 INTEGER n, liw
47 INTEGER iw( liw )
48 INTEGER, intent(in) :: lrgroups(n)
49 REAL a( la )
50 INTEGER(8) :: ptrfac(keep(28))
51 INTEGER(8) :: ptrast(keep(28))
52 INTEGER(8) :: pamaster(keep(28))
53 INTEGER ptrist(keep(28)), ptlust(keep(28))
54 INTEGER step(n), pimaster(keep(28))
55 INTEGER comp
56 INTEGER nstk_s(keep(28)), procnode_steps( keep(28) )
57 INTEGER perm(n)
58 INTEGER iflag, ierror, comm
59 INTEGER lpool, leaf
60 INTEGER ipool( lpool )
61 INTEGER comm_load, ass_irecv
62 INTEGER myid, slavef, nbfin
63 DOUBLE PRECISION opassw, opeliw
64 INTEGER nelt, lptrar
65 INTEGER frtptr( n+1), frtelt( nelt )
66 INTEGER itloc( n+keep(253) ), fils( n ), dad(keep(28))
67 REAL :: rhs_mumps(keep(255))
68 INTEGER(8), INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
69 INTEGER nd( keep(28) ), frere( keep(28) )
70 INTEGER istep_to_iniv2(keep(71)),
71 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
72 INTEGER intarr( keep8(27) )
73 REAL dblarr( keep8(26) )
74 INTEGER iniv2, ishift, ibeg
75 INTEGER ishift_hdr
78 LOGICAL flag
79 INTEGER mp, lp
80 INTEGER tmp( 2 )
81 INTEGER nbrecu, position, inode, ison, iroot
82 INTEGER nslaves_pere, nfront_pere, nass_pere,
83 & lmap, fpere, nelim,
84 & hdmaplig,nfs4father,
85 & tot_root_size, tot_cont_to_recv
86 DOUBLE PRECISION flop1
87 CHARACTER(LEN=35) :: subname
88 include 'mumps_tags.h'
89 include 'mpif.h'
90 INTEGER :: ierr
91 INTEGER :: status(mpi_status_size)
92 mp = icntl(2)
93 lp = icntl(1)
94 subname="??????"
95 CALL smumps_load_recv_msgs(comm_load)
96 IF ( msgtag .EQ. racine ) THEN
97 position = 0
98 CALL mpi_unpack( bufr, lbufr_bytes, position, nbrecu,
99 & 1, mpi_integer, comm, ierr)
100 nbrecu = bufr( 1 )
101 nbfin = nbfin - nbrecu
102 ELSEIF ( msgtag .EQ. noeud ) THEN
103 CALL smumps_process_node( myid, keep, keep8, dkeep,
104 & bufr, lbufr, lbufr_bytes,
105 & iwpos, iwposcb, iptrlu,
106 & lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad,
107 & ptrist, ptrast,
108 & step, pimaster, pamaster,
109 & nstk_s, comp, fpere, flag, iflag, ierror, comm,
110 & itloc, rhs_mumps )
111 subname="SMUMPS_PROCESS_NODE"
112 IF ( iflag .LT. 0 ) GO TO 500
113 IF ( flag ) THEN
114 CALL smumps_insert_pool_n(n, ipool, lpool,
115 & procnode_steps, slavef, keep(199), keep(28), keep(76),
116 & keep(80), keep(47), step, fpere )
117 IF (keep(47) .GE. 3) THEN
119 & ipool, lpool,
120 & procnode_steps, keep,keep8, slavef, comm_load,
121 & myid, step, n, nd, fils )
122 ENDIF
123 CALL mumps_estim_flops( fpere, n,
124 & procnode_steps,keep(199),
125 & nd, fils, frere, step, pimaster,
126 & keep(28), keep(50), keep(253), flop1,
127 & iw, liw, keep(ixsz) )
128 IF (fpere.NE.keep(20))
129 & CALL smumps_load_update(1,.false.,flop1,keep,keep8)
130 ENDIF
131 ELSEIF ( msgtag .EQ. end_niv2_ldlt ) THEN
132 inode = bufr( 1 )
133 CALL smumps_insert_pool_n(n, ipool, lpool,
134 & procnode_steps, slavef, keep(199),
135 & keep(28), keep(76), keep(80), keep(47),
136 & step, -inode )
137 IF (keep(47) .GE. 3) THEN
139 & ipool, lpool,
140 & procnode_steps, keep,keep8, slavef, comm_load,
141 & myid, step, n, nd, fils )
142 ENDIF
143 ELSEIF ( msgtag .EQ. terreur ) THEN
144 iflag = -001
145 ierror = msgsou
146 GOTO 100
147 ELSEIF ( msgtag .EQ. maitre_desc_bande ) THEN
148 CALL smumps_process_desc_bande( myid,bufr, lbufr,
149 & lbufr_bytes, iwpos,
150 & iwposcb,
151 & iptrlu, lrlu, lrlus,
152 & n, iw, liw, a, la, slavef, procnode_steps, dad,
153 & ptrist, ptrast, step, pimaster, pamaster, comp,
154 & keep, keep8, dkeep, itloc, rhs_mumps, istep_to_iniv2,
155#if ! defined (NO_FDM_DESCBAND)
156 & -1,
157#endif
158 & iflag, ierror )
159 subname="SMUMPS_PROCESS_DESC_BANDE"
160 IF ( iflag .LT. 0 ) GO to 500
161 ELSEIF ( msgtag .EQ. maitre2 ) THEN
162 CALL smumps_process_master2(myid,bufr, lbufr, lbufr_bytes,
163 & procnode_steps, slavef, iwpos, iwposcb,
164 & iptrlu, lrlu, lrlus, n, iw, liw, a, la,
165 & ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp,
166 & iflag, ierror, comm, comm_load,
167 & ipool, lpool, leaf,
168 & keep, keep8, dkeep, nd, fils, dad, frere, itloc, rhs_mumps,
169 & istep_to_iniv2, tab_pos_in_pere )
170 subname="SMUMPS_PROCESS_MASTER2"
171 IF ( iflag .LT. 0 ) GO to 500
172 ELSEIF ( msgtag .EQ. bloc_facto .OR.
173 & msgtag .EQ. bloc_facto_relay ) THEN
174 CALL smumps_process_blocfacto( comm_load, ass_irecv,
175 & bufr, lbufr, lbufr_bytes,
176 & procnode_steps, msgsou,
177 & slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw,
178 & a, la, ptrist, ptrast, nstk_s, perm,
179 & comp, step, pimaster, pamaster, posfac,
180 & myid, comm , iflag, ierror, nbfin,
181 &
182 & ptlust, ptrfac, root, opassw, opeliw, itloc, rhs_mumps,
183 & fils, dad, ptrarw, ptraiw, intarr, dblarr,
184 & icntl, keep,keep8,dkeep, ipool, lpool, leaf, nd, frere,
185 & lptrar, nelt, frtptr, frtelt,
186 & istep_to_iniv2, tab_pos_in_pere
187 & , lrgroups
188 & )
189 ELSEIF ( msgtag .EQ. bloc_facto_sym_slave ) THEN
190 CALL smumps_process_blfac_slave( comm_load, ass_irecv,
191 & bufr, lbufr,
192 & lbufr_bytes, procnode_steps, msgsou,
193 & slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw,
194 & a, la, ptrist, ptrast, nstk_s, perm,
195 & comp, step, pimaster, pamaster, posfac,
196 & myid, comm, iflag, ierror, nbfin,
197 &
198 & ptlust, ptrfac, root, opassw, opeliw, itloc, rhs_mumps,
199 & fils, dad, ptrarw, ptraiw, intarr, dblarr,
200 & icntl, keep,keep8,dkeep, ipool, lpool, leaf, nd, frere,
201 & lptrar, nelt, frtptr, frtelt,
202 & istep_to_iniv2, tab_pos_in_pere
203 & , lrgroups
204 & )
205 ELSEIF ( msgtag .EQ. bloc_facto_sym ) THEN
206 CALL smumps_process_sym_blocfacto( comm_load, ass_irecv,
207 & bufr, lbufr,
208 & lbufr_bytes, procnode_steps, msgsou,
209 & slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw,
210 & a, la, ptrist, ptrast, nstk_s, perm,
211 & comp, step, pimaster, pamaster, posfac,
212 & myid, comm, iflag, ierror, nbfin,
213 &
214 & ptlust, ptrfac, root, opassw, opeliw, itloc, rhs_mumps,
215 & fils, dad, ptrarw, ptraiw, intarr, dblarr,
216 & icntl,keep,keep8,dkeep,ipool, lpool, leaf, nd, frere,
217 & lptrar, nelt, frtptr, frtelt,
218 & istep_to_iniv2, tab_pos_in_pere
219 & , lrgroups
220 & )
221 ELSEIF ( msgtag .EQ. contrib_type2 ) THEN
222 CALL smumps_process_contrib_type2( comm_load, ass_irecv,
223 & msglen, bufr, lbufr,
224 & lbufr_bytes, procnode_steps,
225 & slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, posfac,
226 & n, iw, liw, a, la, ptrist,
227 & ptlust, ptrfac, ptrast,
228 & step, pimaster, pamaster, perm, comp, root,
229 & opassw, opeliw, itloc, rhs_mumps, nstk_s, fils, dad,
230 & ptrarw, ptraiw, intarr, dblarr, nbfin, myid, comm,
231 & icntl,keep,keep8,dkeep,iflag, ierror, ipool, lpool, leaf,
232 & nd, frere, lptrar, nelt, frtptr, frtelt,
233 & istep_to_iniv2, tab_pos_in_pere
234 & , lrgroups
235 & )
236 IF ( iflag .LT. 0 ) GO TO 100
237 ELSEIF ( msgtag .EQ. maplig ) THEN
238 hdmaplig = 7
239 inode = bufr( 1 )
240 ison = bufr( 2 )
241 nslaves_pere = bufr( 3 )
242 nfront_pere = bufr( 4 )
243 nass_pere = bufr( 5 )
244 lmap = bufr( 6 )
245 nfs4father = bufr( 7 )
246 IF ( nslaves_pere.NE.0 ) THEN
247 iniv2 = istep_to_iniv2( step(inode) )
248 ishift = nslaves_pere+1
249 tab_pos_in_pere(1:nslaves_pere+1, iniv2) =
250 & bufr(hdmaplig+1:hdmaplig+1+nslaves_pere)
251 tab_pos_in_pere(slavef+2, iniv2) = nslaves_pere
252 ELSE
253 ishift = 0
254 ENDIF
255 ibeg = hdmaplig+1+ishift
256 CALL smumps_maplig( comm_load, ass_irecv,
257 & bufr, lbufr, lbufr_bytes,
258 & inode, ison, nslaves_pere,
259 & bufr(ibeg),
260 & nfront_pere, nass_pere, nfs4father,lmap,
261 & bufr(ibeg+nslaves_pere),
262 & procnode_steps, slavef, posfac, iwpos, iwposcb,
263 & iptrlu, lrlu, lrlus, n, iw, liw, a, la,
264 & ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster,
265 & nstk_s, comp,
266 & iflag, ierror, myid, comm, perm,
267 & ipool, lpool, leaf, nbfin, icntl, keep,keep8,dkeep, root,
268 & opassw, opeliw,
269 & itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr,
270 & nd, frere, lptrar, nelt, frtptr, frtelt,
271 &
272 & istep_to_iniv2, tab_pos_in_pere
273 & , lrgroups
274 & )
275 IF ( iflag .LT. 0 ) GO TO 100
276 ELSE IF ( msgtag .EQ. root_cont_static ) THEN
278 & bufr, lbufr, lbufr_bytes,
279 & root, n, iw, liw, a, la,
280 & lrlu, iptrlu, iwpos, iwposcb,
281 & ptrist, ptlust, ptrfac, ptrast,
282 & step, pimaster, pamaster,
283 & comp, lrlus, ipool, lpool, leaf,
284 & fils, dad, myid,
285 & lptrar, nelt, frtptr, frtelt,
286 & ptraiw, ptrarw, intarr, dblarr,
287 & keep, keep8, dkeep, iflag, ierror, comm, comm_load,
288 & itloc, rhs_mumps,
289 & nd, procnode_steps, slavef, opassw)
290 subname="SMUMPS_PROCESS_CONTRIB_TYPE3"
291 IF ( iflag .LT. 0 ) GO TO 500
292 ELSE IF ( msgtag .EQ. root_non_elim_cb ) THEN
293 iroot = keep( 38 )
294 msgsou = mumps_procnode( procnode_steps(step(iroot)),
295 & keep(199) )
296 IF ( ptlust( step(iroot)) .EQ. 0 ) THEN
297 keep(266)=keep(266)-1
298 CALL mpi_recv( tmp, 2 * keep(34), mpi_packed,
299 & msgsou, root_2slave,
300 & comm, status, ierr )
301 CALL smumps_process_root2slave( tmp( 1 ), tmp( 2 ),
302 & root,
303 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
304 & iwpos, iwposcb, iptrlu,
305 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
306 & ptlust, ptrfac,
307 & ptrast, step, pimaster, pamaster, nstk_s, comp,
308 & iflag, ierror, comm, comm_load,
309 & ipool, lpool, leaf,
310 & nbfin, myid, slavef,
311 &
312 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
313 & lptrar, nelt, frtptr, frtelt,
314 & ptrarw, ptraiw,
315 & intarr, dblarr, icntl, keep,keep8, dkeep,nd )
316 subname="SMUMPS_PROCESS_ROOT2SLAVE"
317 IF ( iflag .LT. 0 ) GOTO 500
318 END IF
320 & bufr, lbufr, lbufr_bytes,
321 & root, n, iw, liw, a, la,
322 & lrlu, iptrlu, iwpos, iwposcb,
323 & ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster,
324 & comp, lrlus, ipool, lpool, leaf,
325 & fils, dad, myid,
326 & lptrar, nelt, frtptr, frtelt,
327 & ptraiw, ptrarw, intarr, dblarr,
328 & keep, keep8, dkeep, iflag, ierror, comm, comm_load,
329 & itloc, rhs_mumps,
330 & nd, procnode_steps, slavef, opassw )
331 subname="SMUMPS_PROCESS_CONTRIB_TYPE3"
332 IF ( iflag .LT. 0 ) GO TO 500
333 ELSE IF ( msgtag .EQ. root_2son ) THEN
334 ison = bufr( 1 )
335 nelim = bufr( 2 )
336 CALL smumps_process_root2son( comm_load, ass_irecv,
337 & ison, nelim, root,
338 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
339 & iwpos, iwposcb, iptrlu,
340 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
341 & ptlust, ptrfac,
342 & ptrast, step, pimaster, pamaster, nstk_s, comp,
343 & iflag, ierror, comm,
344 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
345 &
346 & opassw, opeliw, itloc, rhs_mumps,
347 & fils, dad, ptrarw, ptraiw,
348 & intarr,dblarr,icntl,keep,keep8,dkeep,nd, frere,
349 & lptrar, nelt, frtptr, frtelt,
350 & istep_to_iniv2, tab_pos_in_pere
351 & , lrgroups
352 & )
353 IF ( iflag .LT. 0 ) GO TO 100
354 IF ( myid.NE.mumps_procnode(procnode_steps(step(ison)),
355 & keep(199)) ) THEN
356 IF (keep(50).EQ.0) THEN
357 ishift_hdr = 6
358 ELSE
359 ishift_hdr = 8
360 ENDIF
361 IF (iw(ptrist(step(ison))+ishift_hdr+keep(ixsz)).EQ.
362 & s_rec_contstatic) THEN
363 iw(ptrist(step(ison))+ishift_hdr+keep(ixsz)) =
364 & s_root2son_called
365 ELSE
366 CALL smumps_free_band( n, ison, ptrist, ptrast,
367 & iw, liw, a, la, lrlu, lrlus, iwposcb,
368 & iptrlu, step, myid, keep, keep8,
369 & mumps_typenode(procnode_steps(step(ison)),keep(199))
370 & )
371 ENDIF
372 ENDIF
373 ELSE IF ( msgtag .EQ. root_2slave ) THEN
374 tot_root_size = bufr( 1 )
375 tot_cont_to_recv = bufr( 2 )
376 CALL smumps_process_root2slave( tot_root_size,
377 & tot_cont_to_recv, root,
378 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
379 & iwpos, iwposcb, iptrlu,
380 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
381 & ptlust, ptrfac,
382 & ptrast, step, pimaster, pamaster, nstk_s, comp,
383 & iflag, ierror, comm, comm_load,
384 & ipool, lpool, leaf,
385 & nbfin, myid, slavef,
386 &
387 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
388 & lptrar, nelt, frtptr, frtelt,
389 & ptrarw, ptraiw,
390 & intarr, dblarr, icntl, keep,keep8, dkeep, nd )
391 IF ( iflag .LT. 0 ) GO TO 100
392 ELSE IF ( msgtag .EQ. root_nelim_indices ) THEN
393 ison = bufr( 1 )
394 nelim = bufr( 2 )
395 nslaves_pere = bufr( 3 )
396 CALL smumps_process_rtnelind( root,
397 & ison, nelim, nslaves_pere, bufr(4), bufr(4+bufr(2)),
398 & bufr(4+2*bufr(2)),
399 &
400 & procnode_steps,
401 & iwpos, iwposcb, iptrlu,
402 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
403 & ptlust, ptrfac,
404 & ptrast, step, pimaster, pamaster, nstk_s,
405 & itloc, rhs_mumps, comp,
406 & iflag, ierror,
407 & ipool, lpool, leaf, myid, slavef,
408 & keep, keep8, dkeep,
409 & comm, comm_load, fils, dad, nd)
410 subname="SMUMPS_PROCESS_RTNELIND"
411 IF ( iflag .LT. 0 ) GO TO 500
412 ELSE IF ( msgtag .EQ. update_load ) THEN
413 WRITE(*,*) "Internal error 3 in SMUMPS_TRAITER_MESSAGE"
414 CALL mumps_abort()
415 ELSE IF ( msgtag .EQ. tag_dummy ) THEN
416 ELSE
417 IF ( lp > 0 )
418 & WRITE(lp,*) myid,
419 &': Internal error, routine SMUMPS_TRAITER_MESSAGE.',msgtag
420 iflag = -100
421 ierror= msgtag
422 GOTO 500
423 ENDIF
424 100 CONTINUE
425 RETURN
426 500 CONTINUE
427 IF ( icntl(1) .GT. 0 .AND. icntl(4).GE.1 ) THEN
428 lp=icntl(1)
429 IF (iflag.EQ.-9) THEN
430 WRITE(lp,*) 'failure, workspace too small during ',SUBNAME
431 ENDIF
432.EQ. IF (IFLAG-8) THEN
433 WRITE(LP,*) 'failure in INTEGER allocation during ',SUBNAME
434 ENDIF
435.EQ. IF (IFLAG-13) THEN
436 WRITE(LP,*) 'failure in dynamic allocation during ',SUBNAME
437 ENDIF
438 ENDIF
439 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
440 RETURN
441 END SUBROUTINE SMUMPS_TRAITER_MESSAGE
442 RECURSIVE SUBROUTINE SMUMPS_RECV_AND_TREAT(
443 & COMM_LOAD, ASS_IRECV,
444 & STATUS,
445 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
446 & IWPOS, IWPOSCB, IPTRLU,
447 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
448 & PTLUST, PTRFAC,
449 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
450 & IFLAG, IERROR, COMM,
451 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
452 &
453 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
454 & FILS, DAD, PTRARW, PTRAIW,
455 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
456 & LPTRAR, NELT, FRTPTR, FRTELT ,
457 &
458 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
459 & , LRGROUPS
460 & )
461 USE SMUMPS_STRUC_DEF, ONLY : SMUMPS_ROOT_STRUC
462 IMPLICIT NONE
463 INCLUDE 'mpif.h'
464 INCLUDE 'mumps_tags.h'
465 TYPE (SMUMPS_ROOT_STRUC) :: root
466 INTEGER :: STATUS(MPI_STATUS_SIZE)
467 INTEGER KEEP(500), ICNTL(60)
468 INTEGER(8) KEEP8(150)
469 REAL DKEEP(230)
470 INTEGER COMM_LOAD, ASS_IRECV
471 INTEGER LBUFR, LBUFR_BYTES
472 INTEGER BUFR( LBUFR )
473 INTEGER(8) :: POSFAC, LA, IPTRLU, LRLU, LRLUS
474 INTEGER IWPOS, IWPOSCB
475 INTEGER N, LIW
476 INTEGER IW( LIW )
477 REAL A( LA )
478 INTEGER, intent(in) :: LRGROUPS(N)
479 INTEGER(8) :: PTRFAC(KEEP(28))
480 INTEGER(8) :: PTRAST(KEEP(28))
481 INTEGER(8) :: PAMASTER(KEEP(28))
482 INTEGER PTRIST( KEEP(28) ),
483 & PTLUST( KEEP(28) )
484 INTEGER STEP(N), PIMASTER(KEEP(28))
485 INTEGER COMP
486 INTEGER NSTK_S(KEEP(28)), PROCNODE_STEPS( KEEP(28) )
487 INTEGER PERM(N)
488 INTEGER IFLAG, IERROR, COMM
489 INTEGER LPOOL, LEAF
490 INTEGER IPOOL( LPOOL )
491 INTEGER MYID, SLAVEF, NBFIN
492 DOUBLE PRECISION OPASSW, OPELIW
493 INTEGER NELT, LPTRAR
494 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
495 INTEGER ITLOC( N+KEEP(253) ), FILS( N ), DAD( KEEP(28) )
496 REAL :: RHS_MUMPS(KEEP(255))
497 INTEGER(8), INTENT(IN) :: PTRARW( LPTRAR ), PTRAIW( LPTRAR )
498 INTEGER ND( KEEP(28) ), FRERE( KEEP(28) )
499 INTEGER ISTEP_TO_INIV2(KEEP(71)),
500 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
501 INTEGER INTARR( KEEP8(27) )
502 REAL DBLARR( KEEP8(26) )
503 INTEGER MSGSOU, MSGTAG, MSGLEN, IERR
504 MSGSOU = STATUS( MPI_SOURCE )
505 MSGTAG = STATUS( MPI_TAG )
506 CALL MPI_GET_COUNT( STATUS, MPI_PACKED, MSGLEN, IERR )
507.GT. IF ( MSGLEN LBUFR_BYTES ) THEN
508 IFLAG = -20
509 IERROR = MSGLEN
510 WRITE(*,*) ' reception buf too small, msgtag/len=',
511 & MSGTAG,MSGLEN
512 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
513 RETURN
514 ENDIF
515 KEEP(266)=KEEP(266)-1
516 CALL MPI_RECV( BUFR, LBUFR_BYTES, MPI_PACKED, MSGSOU,
517 & MSGTAG,
518 & COMM, STATUS, IERR )
519 CALL SMUMPS_TRAITER_MESSAGE(
520 & COMM_LOAD, ASS_IRECV,
521 & MSGSOU, MSGTAG, MSGLEN, BUFR, LBUFR,
522 & LBUFR_BYTES,
523 & PROCNODE_STEPS, POSFAC,
524 & IWPOS, IWPOSCB, IPTRLU,
525 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
526 & PTLUST, PTRFAC,
527 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, IFLAG,
528 & IERROR, COMM,
529 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
530 &
531 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
532 & FILS, DAD, PTRARW, PTRAIW,
533 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
534 & LPTRAR, NELT, FRTPTR, FRTELT,
535 &
536 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
537 & , LRGROUPS
538 & )
539 RETURN
540 END SUBROUTINE SMUMPS_RECV_AND_TREAT
541 RECURSIVE SUBROUTINE SMUMPS_TRY_RECVTREAT(
542 & COMM_LOAD, ASS_IRECV, BLOCKING, SET_IRECV,
543 & MESSAGE_RECEIVED, MSGSOU, MSGTAG,
544 & STATUS,
545 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
546 & IWPOS, IWPOSCB, IPTRLU,
547 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
548 & PTLUST, PTRFAC,
549 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
550 & IFLAG, IERROR, COMM, PERM,
551 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
552 &
553 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
554 & FILS, DAD, PTRARW, PTRAIW,
555 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
556 & LPTRAR, NELT, FRTPTR, FRTELT,
557 &
558 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
559 & STACK_RIGHT_AUTHORIZED, LRGROUPS )
560 USE SMUMPS_LOAD
561 USE SMUMPS_STRUC_DEF, ONLY : SMUMPS_ROOT_STRUC
562 IMPLICIT NONE
563 INCLUDE 'mpif.h'
564 INCLUDE 'mumps_tags.h'
565 TYPE (SMUMPS_ROOT_STRUC) :: root
566 INTEGER :: STATUS(MPI_STATUS_SIZE)
567 LOGICAL, INTENT (IN) :: BLOCKING
568 LOGICAL, INTENT (IN) :: SET_IRECV
569 LOGICAL, INTENT (INOUT) :: MESSAGE_RECEIVED
570 INTEGER, INTENT (IN) :: MSGSOU, MSGTAG
571 INTEGER KEEP(500), ICNTL(60)
572 INTEGER(8) KEEP8(150)
573 REAL DKEEP(230)
574 INTEGER LBUFR, LBUFR_BYTES
575 INTEGER COMM_LOAD, ASS_IRECV
576 INTEGER BUFR( LBUFR )
577 INTEGER(8) :: LA, POSFAC, IPTRLU, LRLU, LRLUS
578 INTEGER IWPOS, IWPOSCB
579 INTEGER N, LIW
580 INTEGER IW( LIW )
581 REAL A( LA )
582 INTEGER, intent(in) :: LRGROUPS(N)
583 INTEGER(8) :: PTRAST(KEEP(28))
584 INTEGER(8) :: PTRFAC(KEEP(28))
585 INTEGER(8) :: PAMASTER(KEEP(28))
586 INTEGER PTRIST( KEEP(28) ),
587 & PTLUST(KEEP(28))
588 INTEGER STEP(N),
589 & PIMASTER(KEEP(28))
590 INTEGER COMP
591 INTEGER NSTK_S(KEEP(28)), PROCNODE_STEPS( KEEP(28) )
592 INTEGER PERM(N)
593 INTEGER IFLAG, IERROR, COMM
594 INTEGER LPOOL, LEAF
595 INTEGER IPOOL( LPOOL )
596 INTEGER MYID, SLAVEF, NBFIN
597 DOUBLE PRECISION OPASSW, OPELIW
598 INTEGER NELT, LPTRAR
599 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
600 INTEGER ITLOC( N + KEEP(253) ), FILS( N ), DAD( KEEP(28) )
601 REAL :: RHS_MUMPS(KEEP(255))
602 INTEGER(8), INTENT(IN) :: PTRARW( LPTRAR ), PTRAIW( LPTRAR )
603 INTEGER ND( KEEP(28) ), FRERE( KEEP(28) )
604 INTEGER ISTEP_TO_INIV2(KEEP(71)),
605 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
606 INTEGER INTARR( KEEP8(27) )
607 REAL DBLARR( KEEP8(26) )
608 LOGICAL, intent(in) :: STACK_RIGHT_AUTHORIZED
609 LOGICAL FLAG, RIGHT_MESS, FLAGbis
610 INTEGER LP, MSGSOU_LOC, MSGTAG_LOC, MSGLEN_LOC
611 INTEGER IERR
612 INTEGER :: STATUS_BIS(MPI_STATUS_SIZE)
613 INTEGER, SAVE :: RECURS = 0
614 CALL SMUMPS_LOAD_RECV_MSGS(COMM_LOAD)
615.NOT. IF ( STACK_RIGHT_AUTHORIZED ) THEN
616 RETURN
617 ENDIF
618 RECURS = RECURS + 1
619 LP = ICNTL(1)
620.LT. IF (ICNTL(4)1) LP=-1
621 IF ( MESSAGE_RECEIVED ) THEN
622 MSGSOU_LOC = MPI_ANY_SOURCE
623 MSGTAG_LOC = MPI_ANY_TAG
624 GOTO 250
625 ENDIF
626.NE. IF ( ASS_IRECV MPI_REQUEST_NULL) THEN
627.NE. IF (KEEP(117)0) THEN
628 WRITE(*,*) "Problem of active IRECV with KEEP(117)=",KEEP(117)
629 CALL MUMPS_ABORT()
630 ENDIF
631 RIGHT_MESS = .TRUE.
632 IF (BLOCKING) THEN
633 CALL MPI_WAIT(ASS_IRECV,
634 & STATUS, IERR)
635 FLAG = .TRUE.
636.NE..OR. IF ( ( (MSGSOUMPI_ANY_SOURCE)
637.NE. & (MSGTAGMPI_ANY_TAG) ) ) THEN
638.NE. IF ( MSGSOUMPI_ANY_SOURCE) THEN
639.EQ. RIGHT_MESS = MSGSOUSTATUS(MPI_SOURCE)
640 ENDIF
641.NE. IF ( MSGTAGMPI_ANY_TAG) THEN
642 RIGHT_MESS =
643.EQ..AND. & ( (MSGTAGSTATUS(MPI_TAG))RIGHT_MESS )
644 ENDIF
645.NOT. IF (RIGHT_MESS) THEN
646 CALL MPI_PROBE(MSGSOU,MSGTAG,
647 & COMM, STATUS_BIS, IERR)
648 ENDIF
649 ENDIF
650 ELSE
651 CALL MPI_TEST(ASS_IRECV,
652 & FLAG, STATUS, IERR)
653 ENDIF
654.LT. IF (IERR0) THEN
655 IFLAG = -20
656.GT. IF (LP0)
657 & write(LP,*) ' error return from mpi_test ',
658 & IFLAG, ' in smumps_try_recvtreat'
659 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
660 RETURN
661 ENDIF
662 IF ( FLAG ) THEN
663 KEEP(266)=KEEP(266)-1
664 MESSAGE_RECEIVED = .TRUE.
665 MSGSOU_LOC = STATUS( MPI_SOURCE )
666 MSGTAG_LOC = STATUS( MPI_TAG )
667 CALL MPI_GET_COUNT( STATUS, MPI_PACKED, MSGLEN_LOC, IERR )
668.NOT. IF (RIGHT_MESS) RECURS = RECURS + 10
669 CALL SMUMPS_TRAITER_MESSAGE( COMM_LOAD, ASS_IRECV,
670 & MSGSOU_LOC, MSGTAG_LOC, MSGLEN_LOC, BUFR, LBUFR,
671 & LBUFR_BYTES,
672 & PROCNODE_STEPS, POSFAC,
673 & IWPOS, IWPOSCB, IPTRLU,
674 & LRLU, LRLUS, N, IW, LIW, A, LA,
675 & PTRIST, PTLUST, PTRFAC,
676 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, IFLAG,
677 & IERROR, COMM,
678 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
679 &
680 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD,
681 & PTRARW, PTRAIW,
682 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
683 & LPTRAR, NELT, FRTPTR, FRTELT,
684 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
685 & , LRGROUPS
686 & )
687.NOT. IF (RIGHT_MESS) RECURS = RECURS - 10
688.LT. IF ( IFLAG 0 ) RETURN
689.NOT. IF (RIGHT_MESS) THEN
690.NE. IF (ASS_IRECV MPI_REQUEST_NULL) THEN
691 CALL MUMPS_ABORT()
692 ENDIF
693 CALL MPI_IPROBE(MSGSOU,MSGTAG,
694 & COMM, FLAGbis, STATUS, IERR)
695 IF (FLAGbis) THEN
696 MSGSOU_LOC = STATUS( MPI_SOURCE )
697 MSGTAG_LOC = STATUS( MPI_TAG )
698 CALL SMUMPS_RECV_AND_TREAT( COMM_LOAD, ASS_IRECV,
699 & STATUS, BUFR, LBUFR,
700 & LBUFR_BYTES,
701 & PROCNODE_STEPS, POSFAC,
702 & IWPOS, IWPOSCB, IPTRLU,
703 & LRLU, LRLUS, N, IW, LIW, A, LA,
704 & PTRIST, PTLUST, PTRFAC,
705 & PTRAST, STEP, PIMASTER, PAMASTER,
706 & NSTK_S, COMP, IFLAG,
707 & IERROR, COMM,
708 & PERM, IPOOL, LPOOL,LEAF,NBFIN,MYID,SLAVEF,
709 &
710 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
711 & FILS, DAD, PTRARW, PTRAIW,
712 & INTARR, DBLARR, ICNTL,
713 & KEEP,KEEP8, DKEEP,ND, FRERE,
714 & LPTRAR, NELT, FRTPTR, FRTELT,
715 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
716 & , LRGROUPS
717 & )
718.LT. IF ( IFLAG 0 ) RETURN
719 ENDIF
720 ENDIF
721 ENDIF
722 ELSE
723 IF (BLOCKING) THEN
724 CALL MPI_PROBE(MSGSOU,MSGTAG,
725 & COMM, STATUS, IERR)
726 FLAG = .TRUE.
727 ELSE
728 CALL MPI_IPROBE( MPI_ANY_SOURCE, MPI_ANY_TAG,
729 & COMM, FLAG, STATUS, IERR)
730 ENDIF
731 IF (FLAG) THEN
732 MSGSOU_LOC = STATUS( MPI_SOURCE )
733 MSGTAG_LOC = STATUS( MPI_TAG )
734 MESSAGE_RECEIVED = .TRUE.
735 CALL SMUMPS_RECV_AND_TREAT( COMM_LOAD, ASS_IRECV,
736 & STATUS, BUFR, LBUFR,
737 & LBUFR_BYTES,
738 & PROCNODE_STEPS, POSFAC,
739 & IWPOS, IWPOSCB, IPTRLU,
740 & LRLU, LRLUS, N, IW, LIW, A, LA,
741 & PTRIST, PTLUST, PTRFAC,
742 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP, IFLAG,
743 & IERROR, COMM,
744 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
745 &
746 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
747 & FILS, DAD, PTRARW, PTRAIW,
748 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
749 & LPTRAR, NELT, FRTPTR, FRTELT,
750 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
751 & , LRGROUPS
752 & )
753.LT. IF ( IFLAG 0 ) RETURN
754 ENDIF
755 ENDIF
756 250 CONTINUE
757 RECURS = RECURS - 1
758.EQ. IF ( NBFIN 0 ) RETURN
759.GT. IF ( RECURS 3 ) RETURN
760.EQ..AND..AND. IF ( KEEP(36)1 SET_IRECV
761.EQ..AND. & (ASS_IRECVMPI_REQUEST_NULL)
762 & MESSAGE_RECEIVED ) THEN
763 CALL MPI_IRECV ( BUFR(1),
764 & LBUFR_BYTES, MPI_PACKED, MPI_ANY_SOURCE,
765 & MPI_ANY_TAG, COMM,
766 & ASS_IRECV, IERR )
767 ENDIF
768 RETURN
769 END SUBROUTINE SMUMPS_TRY_RECVTREAT
770 SUBROUTINE SMUMPS_CANCEL_IRECV( INFO1,
771 & KEEP, ASS_IRECV,
772 & BUFR, LBUFR, LBUFR_BYTES,
773 & COMM,
774 & MYID, SLAVEF)
775 USE SMUMPS_BUF
776 IMPLICIT NONE
777 INCLUDE 'mpif.h'
778 INCLUDE 'mumps_tags.h'
779 INTEGER LBUFR, LBUFR_BYTES
780 INTEGER ASS_IRECV
781 INTEGER BUFR( LBUFR )
782 INTEGER COMM
783 INTEGER MYID, SLAVEF, INFO1, DEST
784 INTEGER, INTENT(INOUT) :: KEEP(500)
785 INTEGER :: STATUS(MPI_STATUS_SIZE)
786 LOGICAL NO_ACTIVE_IRECV
787 INTEGER IERR, DUMMY
788 INTRINSIC mod
789.EQ. IF (SLAVEF 1) RETURN
790.EQ. IF (ASS_IRECVMPI_REQUEST_NULL) THEN
791 NO_ACTIVE_IRECV=.TRUE.
792 ELSE
793 CALL MPI_TEST(ASS_IRECV, NO_ACTIVE_IRECV,
794 & STATUS, IERR)
795 IF (NO_ACTIVE_IRECV) THEN
796 KEEP(266) = KEEP(266) - 1
797 ENDIF
798 ENDIF
799 CALL MPI_BARRIER(COMM,IERR)
800 DUMMY = 1
801 DEST = mod(MYID+1, SLAVEF)
802 CALL SMUMPS_BUF_SEND_1INT
803 & (DUMMY, DEST, TAG_DUMMY, COMM, KEEP, IERR)
804 IF (NO_ACTIVE_IRECV) THEN
805 CALL MPI_RECV( BUFR, LBUFR,
806 & MPI_INTEGER, MPI_ANY_SOURCE,
807 & TAG_DUMMY, COMM, STATUS, IERR )
808 ELSE
809 CALL MPI_WAIT(ASS_IRECV,
810 & STATUS, IERR)
811 ENDIF
812 KEEP(266)=KEEP(266)-1
813 RETURN
814 END SUBROUTINE SMUMPS_CANCEL_IRECV
815 SUBROUTINE SMUMPS_CLEAN_PENDING(
816 & INFO1, KEEP, BUFR, LBUFR, LBUFR_BYTES,
817 & COMM_NODES, COMM_LOAD, SLAVEF,
818 & CLEAN_COMM_NODES, CLEAN_COMM_LOAD )
819 USE SMUMPS_BUF
820 IMPLICIT NONE
821 INTEGER, INTENT(IN) :: LBUFR, LBUFR_BYTES
822 INTEGER, INTENT(OUT) :: BUFR( LBUFR )
823 INTEGER, INTENT(IN) :: COMM_NODES, COMM_LOAD, SLAVEF, INFO1
824 INTEGER, INTENT(INOUT) :: KEEP(500)
825 LOGICAL, INTENT(IN) :: CLEAN_COMM_LOAD, CLEAN_COMM_NODES
826 INCLUDE 'mpif.h'
827 INCLUDE 'mumps_tags.h'
828 INTEGER :: STATUS(MPI_STATUS_SIZE)
829 LOGICAL :: FLAG, BUFFERS_EMPTY, BUFFERS_EMPTY_ON_ALL_PROCS
830 INTEGER :: MSGSOU_LOC, MSGTAG_LOC, MSGLEN_LOC
831 INTEGER :: COMM_EFF
832 INTEGER :: IERR
833 INTEGER :: IBUF_EMPTY, IBUF_EMPTY_ON_ALL_PROCS
834 INTEGER :: TOTAL_SEND_MINUS_RECV266
835 INTEGER :: TOTAL_SEND_MINUS_RECV267
836.EQ. IF (SLAVEF1) RETURN
837.NOT..AND..NOT. IF ( CLEAN_COMM_NODES CLEAN_COMM_LOAD) THEN
838 RETURN
839 ENDIF
840 DO WHILE (.TRUE.)
841 FLAG = .TRUE.
842 DO WHILE ( FLAG )
843 FLAG = .FALSE.
844 IF (CLEAN_COMM_NODES) THEN
845.NOT. IF ( FLAG ) THEN
846 COMM_EFF = COMM_NODES
847 CALL MPI_IPROBE(MPI_ANY_SOURCE,MPI_ANY_TAG,
848 & COMM_NODES, FLAG, STATUS, IERR)
849 END IF
850 END IF
851 IF (CLEAN_COMM_LOAD) THEN
852.NOT. IF ( FLAG ) THEN
853 COMM_EFF = COMM_LOAD
854 CALL MPI_IPROBE( MPI_ANY_SOURCE, MPI_ANY_TAG,
855 & COMM_LOAD, FLAG, STATUS, IERR)
856 END IF
857 END IF
858 IF (FLAG) THEN
859 MSGSOU_LOC = STATUS( MPI_SOURCE )
860 MSGTAG_LOC = STATUS( MPI_TAG )
861.EQ. IF (COMM_EFF COMM_NODES) THEN
862 KEEP(266) = KEEP(266) - 1
863 ELSE
864 KEEP(267) = KEEP(267) - 1
865 ENDIF
866 CALL MPI_GET_COUNT( STATUS, MPI_PACKED, MSGLEN_LOC, IERR )
867.LE. IF (MSGLEN_LOC LBUFR_BYTES) THEN
868 CALL MPI_RECV( BUFR, LBUFR_BYTES,
869 & MPI_PACKED, MSGSOU_LOC,
870 & MSGTAG_LOC, COMM_EFF, STATUS, IERR )
871 ENDIF
872 ENDIF
873 END DO
874 CALL SMUMPS_BUF_ALL_EMPTY( CLEAN_COMM_NODES,
875 & CLEAN_COMM_LOAD,
876 & BUFFERS_EMPTY )
877 IF ( BUFFERS_EMPTY ) THEN
878 IBUF_EMPTY = 0
879 ELSE
880 IBUF_EMPTY = 1
881 ENDIF
882 IF (CLEAN_COMM_NODES) THEN
883 COMM_EFF = COMM_NODES
884 ELSE
885 COMM_EFF = COMM_LOAD
886 ENDIF
887 CALL MPI_ALLREDUCE(IBUF_EMPTY,
888 & IBUF_EMPTY_ON_ALL_PROCS,
889 & 1, MPI_INTEGER, MPI_MAX,
890 & COMM_EFF, IERR)
891 IF ( IBUF_EMPTY_ON_ALL_PROCS == 0) THEN
892 BUFFERS_EMPTY_ON_ALL_PROCS = .TRUE.
893 ELSE
894 BUFFERS_EMPTY_ON_ALL_PROCS = .FALSE.
895 ENDIF
896 IF (BUFFERS_EMPTY_ON_ALL_PROCS) THEN
897 IF (CLEAN_COMM_NODES) THEN
898 CALL MPI_ALLREDUCE(KEEP(266),
899 & TOTAL_SEND_MINUS_RECV266,
900 & 1, MPI_INTEGER, MPI_SUM,
901 & COMM_EFF, IERR)
902 ELSE
903 TOTAL_SEND_MINUS_RECV266 = 0
904 ENDIF
905 IF (CLEAN_COMM_LOAD) THEN
906 CALL MPI_ALLREDUCE(KEEP(267),
907 & TOTAL_SEND_MINUS_RECV267,
908 & 1, MPI_INTEGER, MPI_SUM,
909 & COMM_EFF, IERR)
910 ELSE
911 TOTAL_SEND_MINUS_RECV267 = 0
912 ENDIF
913.EQ..AND. IF (TOTAL_SEND_MINUS_RECV266 0
914.EQ. & TOTAL_SEND_MINUS_RECV267 0) THEN
915 EXIT
916 ENDIF
917 ENDIF
918 ENDDO
919 RETURN
920 END SUBROUTINE SMUMPS_CLEAN_PENDING
#define mumps_abort
Definition VE_Metis.h:25
subroutine mumps_estim_flops(inode, n, procnode_steps, keep199, nd, fils, frere_steps, step, pimaster, keep28, keep50, keep253, flop1, iw, liw, xsize)
Definition estim_flops.F:20
#define max(a, b)
Definition macros.h:21
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
Definition mpi.f:461
subroutine mpi_test(ireq, flag, status, ierr)
Definition mpi.f:502
subroutine mpi_unpack(inbuf, insize, position, outbuf, outcnt, datatype, comm, ierr)
Definition mpi.f:514
recursive subroutine, public smumps_load_recv_msgs(comm)
subroutine, public smumps_load_pool_upd_new_pool(pool, lpool, procnode, keep, keep8, slavef, comm, myid, step, n, nd, fils)
integer, save, private myid
Definition smumps_load.F:57
subroutine, public smumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
int comp(int a, int b)
subroutine smumps_process_desc_bande(myid, bufr, lbufr, lbufr_bytes, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, comp, keep, keep8, dkeep, itloc, rhs_mumps, istep_to_iniv2, iwhandler_in, iflag, ierror)
recursive subroutine smumps_process_blfac_slave(comm_load, ass_irecv, bufr, lbufr, lbufr_bytes, procnode_steps, msgsou, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, nstk_s, perm, comp, step, pimaster, pamaster, posfac, myid, comm, iflag, ierror, nbfin ptlust_s, ptrfac, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, ipool, lpool, leaf, nd, frere_steps, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
recursive subroutine smumps_process_blocfacto(comm_load, ass_irecv, bufr, lbufr, lbufr_bytes, procnode_steps, msgsou, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, nstk_s, perm, comp, step, pimaster, pamaster, posfac, myid, comm, iflag, ierror, nbfin ptlust_s, ptrfac, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, ipool, lpool, leaf, nd, frere_steps, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
recursive subroutine smumps_process_sym_blocfacto(comm_load, ass_irecv, bufr, lbufr, lbufr_bytes, procnode_steps, msgsou, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, nstk_s, perm, comp, step, pimaster, pamaster, posfac, myid, comm, iflag, ierror, nbfin ptlust_s, ptrfac, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, ipool, lpool, leaf, nd, frere_steps, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine smumps_process_node(myid, keep, keep8, dkeep, bufr, lbufr, lbufr_bytes, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp, fpere, flag, iflag, ierror, comm, itloc, rhs_mumps)
subroutine smumps_process_contrib_type2(comm_load, ass_irecv, msglen, bufr, lbufr, lbufr_bytes, procnode_steps, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, posfac, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, perm, comp, root, opassw, opeliw, itloc, rhs_mumps, nstk_s, fils, dad, ptrarw, ptraiw, intarr, dblarr, nbfin, myid, comm, icntl, keep, keep8, dkeep, iflag, ierror, ipool, lpool, leaf, nd, frere_steps, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine smumps_process_contrib_type3(bufr, lbufr, lbufr_bytes, root, n, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, comp, lrlus, ipool, lpool, leaf, fils, dad, myid, lptrar, nelt, frtptr, frtelt, ptraiw, ptrarw, intarr, dblarr, keep, keep8, dkeep, iflag, ierror, comm, comm_load, itloc, rhs_mumps, nd, procnode_steps, slavef, opassw)
recursive subroutine smumps_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)
subroutine smumps_process_master2(myid, bufr, lbufr, lbufr_bytes, procnode_steps, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, comm_load, ipool, lpool, leaf, keep, keep8, dkeep, nd, fils, dad, frere, itloc, rhs_mumps, istep_to_iniv2, tab_pos_in_pere)
recursive subroutine smumps_traiter_message(comm_load, ass_irecv, msgsou, msgtag, msglen, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, 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 smumps_try_recvtreat(comm_load, ass_irecv, blocking, set_irecv, message_received, msgsou, msgtag, status, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, 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, stack_right_authorized, lrgroups)
subroutine smumps_process_root2slave(tot_root_size, tot_cont_to_recv, root, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, comm_load, ipool, lpool, leaf, nbfin, myid, slavef opassw, opeliw, itloc, rhs_mumps, fils, dad, lptrar, nelt, frtptr, frtelt, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd)
recursive subroutine smumps_process_root2son(comm_load, ass_irecv, inode, nelim_root, root, 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, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine smumps_process_rtnelind(root, inode, nelim, nslaves, row_list, col_list, slave_list, procnode_steps, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, itloc, rhs_mumps, comp, iflag, ierror, ipool, lpool, leaf, myid, slavef, keep, keep8, dkeep, comm, comm_load, fils, dad, nd)
subroutine smumps_insert_pool_n(n, pool, lpool, procnode, slavef, keep199, k28, k76, k80, k47, step, inode)
subroutine smumps_free_band(n, ison, ptrist, ptrast, iw, liw, a, la, lrlu, lrlus, iwposcb, iptrlu, step, myid, keep, keep8, type_son)
Definition stools.F:461
integer function mumps_typenode(procinfo_inode, k199)
integer function mumps_procnode(procinfo_inode, k199)