33 USE omp_lib
38 & , smumps_l0ompfac_t
39 IMPLICIT NONE
40 include 'mpif.h'
41 TYPE (SMUMPS_ROOT_STRUC) :: root
42 INTEGER(8) :: LA
43 INTEGER N,LIW,LPOOL,SLAVEF,COMM_NODES
44 INTEGER MYID, MYID_NODES,LNA
45 TYPE (S_IS_POINTERS_T) :: S_IS_POINTERS
46 REAL RINFO(40)
47 INTEGER, INTENT( IN ) :: LBUFR, LBUFR_BYTES
48 INTEGER :: BUFR( LBUFR )
49 INTEGER, INTENT( IN ) :: SMUMPS_LBUF
50 INTEGER, DIMENSION(0:SLAVEF - 1) :: MEM_DISTRIB
51 INTEGER NELT, LDPTRAR
52 INTEGER FRTPTR(*), FRTELT(*)
53 INTEGER LRGROUPS(N)
54 REAL CNTL1
55 INTEGER ICNTL(60)
56 INTEGER INFO(80), KEEP(500)
57 INTEGER(8) KEEP8(150)
58 INTEGER SYM_PERM(N), NA(),
59 & NE_STEPS(KEEP(28)), FILS(N),
60 & FRERE(KEEP(28)), NFSIZ(KEEP(28)),
61 & DAD(KEEP(28))
62 INTEGER CAND(SLAVEF+1, max(1,KEEP(56)))
63 INTEGER (N)
64 INTEGER(8), INTENT(IN) :: PTRAR(LDPTRAR,2)
65 INTEGER(8) :: PTRFAC((28))
66 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
67 INTEGER IW1(2*KEEP(28)), ITLOC(N+KEEP(253)), POOL(LPOOL)
68 REAL :: RHS_MUMPS(KEEP(255))
69 INTEGER(8) :: IW2(2*KEEP(28))
70 INTEGER PROCNODE_STEPS(KEEP(28))
71 INTEGER COMM_LOAD, ASS_IRECV
72 INTEGER ISTEP_TO_INIV2(KEEP(71)),
73 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
74 REAL DBLARR(KEEP8(26))
75 INTEGER INTARR(KEEP8(27))
76 REAL SEUIL, SEUIL_LDLT_NIV2
77 INTEGER LPN_LIST
78 INTEGER PIVNUL_LIST(LPN_LIST)
79 REAL DKEEP(230)
80 INTEGER, INTENT (IN) :: LPOOL_B_L0_OMP
81 INTEGER, INTENT (IN) :: IPOOL_B_L0_OMP( LPOOL_B_L0_OMP )
82 INTEGER, INTENT (IN) :: LPOOL_A_L0_OMP
83 INTEGER, INTENT (IN) :: IPOOL_A_L0_OMP( LPOOL_A_L0_OMP )
84 INTEGER, INTENT (IN) :: L_PHYS_L0_OMP
85 INTEGER, INTENT (IN) :: PHYS_L0_OMP( L_PHYS_L0_OMP )
86 INTEGER, INTENT (IN) :: L_VIRT_L0_OMP
87 INTEGER, INTENT (IN) :: ( L_VIRT_L0_OMP )
88 INTEGER, INTENT (IN) :: VIRT_L0_OMP_MAPPING( L_VIRT_L0_OMP )
89 INTEGER, INTENT (IN) :: PERM_L0_OMP( L_PHYS_L0_OMP )
90 INTEGER, INTENT (IN) :: PTR_LEAFS_L0_OMP( L_PHYS_L0_OMP + 1)
91 INTEGER, INTENT (IN) :: LL0_OMP_MAPPING
92 INTEGER, INTENT (OUT):: L0_OMP_MAPPING( LL0_OMP_MAPPING )
93 INTEGER, INTENT (IN) :: LL0_OMP_FACTORS
94 TYPE(SMUMPS_L0OMPFAC_T), INTENT (OUT) :: L0_OMP_FACTORS(
95 & LL0_OMP_FACTORS )
96 INTEGER, INTENT (IN) :: NBSTATS_I4, NBSTATS_I8
97 INTEGER, INTENT (IN) :: NBCOLS_I4, NBCOLS_I8
98 INTEGER, INTENT (IN) :: I4_L0_OMP(NBSTATS_I4, NBCOLS_I4)
99 INTEGER(8), INTENT (IN) :: I8_L0_OMP(NBSTATS_I8, NBCOLS_I8)
100 INTEGER(8), INTENT ( IN ) :: THREAD_LA
101 INTEGER, EXTERNAL :: MUMPS_PROCNODE
102 INTEGER allocok
103 REAL UULOC
104 INTEGER IERR
105 INTEGER LP, MPRINT
106 LOGICAL LPOK
107 INTEGER NSTK,PTRAST
108 INTEGER PIMASTER, PAMASTER
109 LOGICAL PROK
110 REAL,PARAMETER :: ZERO = 0.0e0
111 INTEGER I
112 INTEGER LTPS_ARR
113 TYPE (MUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: MUMPS_TPS_ARR
114 TYPE (SMUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: SMUMPS_TPS_ARR
115 INTEGER NBROOT_UNDER_L0
116 INTEGER :: NSTEPSDONE
117 DOUBLE PRECISION :: OPASS, OPELI
118 INTEGER :: NELVA, COMP
119 INTEGER :: MAXFRT, NTOTPV, NMAXNPIV, NOFFNEGPV
120 INTEGER :: NB22T1, NB22T2, NBTINY, DET_EXP, DET_SIGN
121 REAL :: DET_MANT
122 INTEGER :: NTOTPVTOT
123 INTEGER(8) :: POSFAC, LRLU, IPTRLU, LRLUS
124 INTEGER IWPOS, LEAF, NBROOT, NROOT
125 INTEGER :: LIW_ARG_FAC_PAR
126 INTEGER(8) :: LA_ARG_FAC_PAR
127 REAL, TARGET:: CDUMMY(1)
128 INTEGER, TARGET :: IDUMMY(1)
129 LOGICAL :: IW_DUMMY, A_DUMMY
130 keep(41)=0
131 keep(42)=0
132 lp = icntl(1)
133 lpok = (lp.GT.0) .AND. (icntl(4).GE.1)
134 mprint = icntl(2)
135 prok = (mprint.GT.0) .AND. (icntl(4).GE.2)
136 uuloc = cntl1
137 pimaster = 1
138 nstk = pimaster + keep(28)
139 ptrast = 1
140 pamaster = 1 + keep(28)
141 IF (keep(4).LE.0) keep(4)=32
142 IF (keep(5).LE.0) keep(5)=16
143 IF (keep(5).GT.keep(4)) keep(5) = keep(4)
144 IF (keep(6).LE.0) keep(6)=24
145 IF (keep(3).LE.keep(4)) keep(3)=keep(4)*2
146 IF (keep(6).GT.keep(3)) keep(6) = keep(3)
147 posfac = 1_8
148 iwpos = 1
149 lrlu = la
150 lrlus = lrlu
151 keep8(63) = 0_8
152 keep8(64) = 0_8
153 keep8(65) = 0_8
154 keep8(66) = 0_8
155 keep8(68) = 0_8
156 keep8(69) = 0_8
157 keep8(70) = 0_8
158 keep8(71) = 0_8
159 keep8(73) = 0_8
160 keep8(74) = 0_8
161 iptrlu = lrlu
162 nstepsdone = 0
163 opass = 0.0d0
164 opeli = 0.0d0
165 nelva = 0
167 maxfrt = 0
168 nmaxnpiv = 0
169 ntotpv = 0
170 noffnegpv = 0
171 nb22t1 = 0
172 nb22t2 = 0
173 nbtiny = 0
174 det_exp = 0
175 det_sign = 1
176 det_mant = 1.0e0
177 iw1(nstk:nstk+keep(28)-1) = ne_steps(1:keep(28))
179 & myid_nodes,
180 & slavef, na, lna,
181 & keep, step,
182 & procnode_steps)
183 IF (keep(400) .GT. 0
184 & ) THEN
185 IF (lpool .NE. lpool_a_l0_omp) THEN
186 WRITE(*,*) "Check LPOOL vs. LPOOL_A_L0_OMP",
187 & lpool, lpool_a_l0_omp, keep(28)
189 ENDIF
190 DO i = 1, lpool
191 pool(i) = ipool_a_l0_omp(i)
192 ENDDO
193 ELSE
195 & myid_nodes,
196 & slavef, na, lna,
197 & keep,keep8, step,
198 & procnode_steps,
199 & pool, lpool)
201 ENDIF
203 IF ( keep( 38 ) .NE. 0 ) THEN
204 nbroot = nbroot + root%NPROW * root%NPCOL - 1
205 END IF
206 IF ( root%yes ) THEN
208 & keep(199) )
209 & .NE. myid_nodes ) THEN
210 nroot = nroot + 1
211 END IF
212 END IF
213 ptrist(1:keep(28))=0
214 ptlust_s(1:keep(28))=0
215 ptrfac(1:keep(28))=-99999_8
216 iw2(ptrast:ptrast+keep(28)-1)=0_8
217 iw1(pimaster:pimaster+keep(28)-1)=-99999_8
218 keep(405) = 0
219 dkeep(95)=0.0d0
220 dkeep(96)=0.0d0
221 nbroot_under_l0 = 0
222 IF (keep(400).GT.0
223 & ) THEN
224 keep(405)=1
225 ALLOCATE( mumps_tps_arr( keep(400) ), stat=allocok )
226 IF (allocok .GT. 0) THEN
227 IF (lpok) THEN
228 WRITE(lp,*) "Problem allocating MUMPS_TPS_ARR",
229 & keep(400)
230 ENDIF
232 ENDIF
233 ALLOCATE( smumps_tps_arr( keep(400) ), stat=allocok )
234 IF (allocok .GT. 0) THEN
235 WRITE(*,*) "Problem allocating SMUMPS_TPS_ARR", keep(400)
237 ENDIF
239 & fils,step, frere, dad, istep_to_iniv2, tab_pos_in_pere, ptrist,
240 & iw2(ptrast), iw1(pimaster), iw2(pamaster), ptrar(1,2),
241 & ptrar(1,1),
242 & itloc, rhs_mumps, rinfo, nroot, nbroot, nbroot_under_l0,
243 & uuloc, icntl, ptlust_s, ptrfac, info, keep, keep8,
244 & procnode_steps,slavef,
comm_nodes, myid_nodes, bufr,
245 & lbufr,lbufr_bytes,intarr,dblarr,root, sym_perm, nelt, frtptr,
246 & frtelt, ldptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2,
247 & mem_distrib, ne_steps, dkeep,pivnul_list,lpn_list,
248 & lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp,
249 & virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp,
250 & perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping,
251 & thread_la, mumps_tps_arr, smumps_tps_arr, nstepsdone,
252 & opass, opeli, nelva,
comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv,
253 & nb22t1, nbtiny, det_exp, det_mant, det_sign,
254 & lrgroups(1), l0_omp_factors, ll0_omp_factors,
255 & i4_l0_omp, nbstats_i4, nbcols_i4,
256 & i8_l0_omp, nbstats_i8, nbcols_i8 )
257 keep(405)=0
258 dkeep(16) = opeli
259 keep8(75)=keep8(76)
260 keep8(63)=keep8(74)
261 keep8(62) = keep8(74)-keep8(62)
262 IF (info(1) .LT. 0) THEN
263 keep8(69) = keep8(73)
264 ENDIF
265 keep8(74) = keep8(73)
266 IF ((info(1).GE.0).AND.(keep8(74).GT.keep8(75))) THEN
267 info(1) = -19
269 & keep8(74)-keep8(75), info(2))
270 IF (lpok) THEN
271 WRITE(lp,'(/A/,A,I8,A,I10/,A/,A/)')
272 & '** ERROR: memory allowed (ICNTL(23)) is not large enough:',
273 & ' INFO(1)=', info(1), ' INFO(2)=', info(2),
274 & ' memory used at the end of the treatment of L0 thread ',
275 & ' does not enable processing nodes above L0 thread '
276 ENDIF
277 ENDIF
278 keep8(66) = keep8(68)
279 keep8(65) = keep8(64) + keep8(71)
280 ENDIF
281 keep8(67) = lrlus
282 IF (associated(s_is_pointers%IW)) THEN
283 WRITE(*,*) " Internal error SMUMPS_FAC_B IW"
285 ENDIF
286 IF (info(1) .GE. 0 ) THEN
287 ALLOCATE(s_is_pointers%IW(liw), stat=allocok)
288 IF (allocok .GT.0) THEN
289 info(1) = -13
290 info(2) = liw
291 IF (lpok) THEN
292 WRITE(lp,*)
293 & 'Allocation error for id%IS(',liw,') on worker',
294 & myid_nodes
295 ENDIF
296 ENDIF
297 ENDIF
298 IF (info(1) .GE. 0) THEN
299 IF (.NOT. associated(s_is_pointers%A)) THEN
300 ALLOCATE(s_is_pointers%A(la), stat=allocok)
301 IF (allocok .GT. 0) THEN
302 info(1) = -13
304 DEALLOCATE(s_is_pointers%IW); NULLIFY(s_is_pointers%IW)
305 keep8(23)=0_8
306 ELSE
307 keep8(23)=la
308 ENDIF
309 ENDIF
310 ENDIF
311 IF (info(1) .GE. 0) THEN
313 IF ( ierr .NE. 0 ) THEN
314 info(1)= -13
315 info(2)= (smumps_lbuf+keep(34)-1)/keep(34)
316 IF (lpok) THEN
317 WRITE(lp,*)
318 & 'Allocation error in SMUMPS_BUF_ALLOC_CB'
319 & ,info(2), ' on worker', myid_nodes
320 ENDIF
321 DEALLOCATE(s_is_pointers%IW); NULLIFY(s_is_pointers%IW)
322 DEALLOCATE(s_is_pointers%A); NULLIFY(s_is_pointers%A)
323 END IF
324 ENDIF
325 IF ( keep(400) .EQ. 0
326 & ) THEN
327 ltps_arr = 1
328 ALLOCATE( mumps_tps_arr(1))
329 ALLOCATE(smumps_tps_arr(1))
330 ELSE
331 ltps_arr = keep(400)
332 ENDIF
333 iw_dummy = .false.
334 a_dummy = .false.
335 IF (info(1) .GE. 0) THEN
336 liw_arg_fac_par = liw
337 la_arg_fac_par = la
338 ELSE
339 liw_arg_fac_par = 1
340 la_arg_fac_par = 1_8
341 IF (.NOT. associated(s_is_pointers%IW)) THEN
342 s_is_pointers%IW => idummy
343 iw_dummy = .true.
344 ENDIF
345 IF (.NOT. associated(s_is_pointers%A)) THEN
346 s_is_pointers%A => cdummy
347 a_dummy = .true.
348 ENDIF
349 ENDIF
350 IF ( info(1) .LT. 0 ) THEN
352 ENDIF
353 keep(398)=nstepsdone
355 & s_is_pointers%A(1),la_arg_fac_par,iw1(nstk),
356 & nfsiz,fils,step,frere,dad,cand,istep_to_iniv2, tab_pos_in_pere,
357 & nstepsdone, opass, opeli, nelva,
comp, maxfrt, nmaxnpiv, ntotpv,
358 & noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign,
359 & ptrist, iw2(ptrast), iw1(pimaster), iw2(pamaster),
360 & ptrar(1,2), ptrar(1,1),
361 & itloc, rhs_mumps, pool, lpool,
362 & l0_omp_mapping, ll0_omp_mapping,
363 & mumps_tps_arr, smumps_tps_arr, ltps_arr,
364 & rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nroot, nbroot,
365 & nbroot_under_l0,
366 & uuloc, icntl, ptlust_s, ptrfac, info, keep, keep8,
368 & lbufr_bytes, intarr, dblarr, root, sym_perm, nelt, frtptr,
369 & frtelt, ldptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2,
370 & mem_distrib,ne_steps, dkeep(1),pivnul_list(1),lpn_list,
371 & lrgroups(1) )
372 IF (iw_dummy) THEN
373 NULLIFY( s_is_pointers%IW )
374 ENDIF
375 IF (a_dummy) THEN
376 NULLIFY( s_is_pointers%A )
377 ENDIF
379 rinfo(2) = real(opass)
380 rinfo(3) = real(opeli)
381 info(13) = nelva
383 keep(33) = maxfrt; info(11) = maxfrt
384 keep(246) = nmaxnpiv
385 keep(89) = ntotpv; info(23) = ntotpv
386 info(12) = noffnegpv
387 keep(103) = nb22t1
388 keep(105) = nb22t2
389 keep(98) = nbtiny
390 IF (keep(258) .NE. 0) THEN
391 keep(260) = keep(260) * det_sign
392 keep(259) = keep(259) + det_exp
394 ENDIF
395 IF (keep(400) .GT. 0
396 & ) THEN
397 IF (ll0_omp_factors.NE.keep(400)) THEN
398 WRITE(*,*) "Internal error in SMUMPS_FAC_B, KEEP(400), L..=",
399 & keep(400), ll0_omp_factors
401 ENDIF
402 IF ( info(1) .GE. 0 ) THEN
404 & liw, iwpos, mumps_tps_arr, keep, ptlust_s,
405 & icntl, info)
406 ENDIF
407
408 DO i=1, keep(400)
409 IF (info(1) .LT. 0) THEN
410 IF ( associated( l0_omp_factors(i)%A ) ) THEN
411 DEALLOCATE( l0_omp_factors(i)%A )
412 NULLIFY ( l0_omp_factors(i)%A )
414 & -l0_omp_factors(i)%LA, .true.,
415 & keep8, info(1), info(2), .true., .false. )
416 ENDIF
417 l0_omp_factors(i)%LA = -99999_8
418 ENDIF
419 IF (associated(mumps_tps_arr(i)%IW)) THEN
420 DEALLOCATE(mumps_tps_arr(i)%IW)
421 NULLIFY(mumps_tps_arr(i)%IW)
423 & -((int(mumps_tps_arr(i)%LIW,8) * int(keep(34),8))
424 & / int(keep(35),8)),
425 & .true.,
426 & keep8, info(1), info(2), .true., .false. )
427 ENDIF
428 ENDDO
429
430 ENDIF
431 IF (allocated(mumps_tps_arr)) THEN
432 DEALLOCATE(mumps_tps_arr)
433 ENDIF
434 IF (allocated(smumps_tps_arr)) THEN
435 DEALLOCATE(smumps_tps_arr)
436 ENDIF
437 posfac = posfac -1_8
438 iwpos = iwpos -1
439 IF (keep(201).LE.0) THEN
440 IF (keep(201) .EQ. -1 .AND. info(1) .LT. 0) THEN
441 posfac = 0_8
442 ENDIF
443 keep8(31) = posfac
444 rinfo(6) = zero
445 ELSE
446 rinfo(6) = real(keep8(31)*int(keep(35),8))/1e6
447 ENDIF
448 keep8(48) = keep8(31)+keep8(71)+keep8(64)
449 keep(32) = iwpos
451 info(10) = keep(32)
452 keep8(67) = la - keep8(67)
453 CALL mpi_allreduce(ntotpv, ntotpvtot, 1, mpi_integer, mpi_sum,
455 IF ( ( (info(1).EQ.-10 .OR. info(1).EQ.-40)
456 & .AND. (ntotpvtot.EQ.n) )
457 & .OR. ( ntotpvtot.GT.n ) ) THEN
458 write(*,*) ' Error 1 NTOTPVTOT=', ntotpvtot,n
460 ENDIF
461 IF ( (keep(19).NE.0 ) .AND. (ntotpvtot.NE.n) .AND.
462 & (info(1).GE.0) ) THEN
463 write(*,*) ' Error 2 NTOTPVTOT=', ntotpvtot
465 ENDIF
466 IF ( (info(1) .GE. 0 )
467 & .AND. (ntotpvtot.NE.n) ) THEN
468 info(1) = -10
469 ENDIF
470 IF (info(1).EQ.-10) THEN
471 info(2) = ntotpvtot
472 ENDIF
473 IF (prok) THEN
474 WRITE (mprint,99980) info(1), info(2),
475 & keep(28), keep8(48), info(10), info(11)
476 IF(keep(50) .EQ. 0) THEN
477 WRITE(mprint,99982) info(12)
478 ENDIF
479 IF (keep(50) .NE. 0) THEN
480 WRITE(mprint,99984) info(12)
481 ENDIF
482 WRITE (mprint, 99986)
483 & info(13), info(14), rinfo(2), rinfo(3)
484 IF (keep(97) .NE. 0) THEN
485 WRITE (mprint, 99987) info(25)
486 ENDIF
487 ENDIF
488 RETURN
48999980 FORMAT (/' LEAVING FACTORIZATION PHASE WITH ...'/
490 & ' INFO (1) =',i15/
491 & ' --- (2) =',i15/
492 & ' Number of nodes in the tree =',i15/
493 & ' INFO (9) Real space for factors =',i15/
494 & ' --- (10) Integer space for factors =',i15/
495 & ' --- (11) Maximum size of frontal matrices =',i15)
49699982 FORMAT (' --- (12) Number of off diagonal pivots =',i15)
49799984 FORMAT (' --- (12) Number of negative pivots =',i15)
49899986 FORMAT (' --- (13) Number of delayed pivots =',i15/
499 & ' --- (14) Number of memory compresses =',i15/
500 & ' RINFO(2) Operations during node assembly =',1pd10.3/
501 & ' -----(3) Operations during node elimination =',1pd10.3)
50299987 FORMAT (' INFO (25) Number of tiny pivots(static) =',i15)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine, public smumps_buf_deall_cb(ierr)
subroutine, public smumps_buf_alloc_cb(size, ierr)
subroutine smumps_fac_l0_omp(n, liw, nstk_steps, nd, fils, step, frere, dad, istep_to_iniv2, tab_pos_in_pere, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, rinfo, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust_s, ptrfac, info, keep, keep8, procnode_steps, slavef, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, thread_la, mumps_tps_arr, smumps_tps_arr, nstepsw, opassw, opeliw, nelvaw, comp, maxfrw, nmaxnpivw, npvw, noffnegw, nb22t1w, nbtinyw, det_expw, det_mantw, det_signw, lrgroups, l0_omp_factors, ll0_omp_factors, i4_l0_omp, nbstats_i4, nbcols_i4, i8_l0_omp, nbstats_i8, nbcols_i8)
subroutine smumps_l0omp_copy_iw(iw, liw, iwpos, mumps_tps_arr, keep, ptlust, icntl, info)
subroutine, public smumps_load_init_sbtr_struct(pool, lpool, keep, keep8)
integer, save, private comm_nodes
integer, save, private myid
subroutine smumps_bdc_error(myid, slavef, comm, keep)
subroutine smumps_fac_par_i(n, iw, liw, a, la, nstk_steps, nd, fils, step, frere, dad, cand, istep_to_iniv2, tab_pos_in_pere, nstepsdone, opass, opeli, nelva, comp, maxfrt, nmaxnpiv, ntotpv, noffnegpv, nb22t1, nb22t2, nbtiny, det_exp, det_mant, det_sign, ptrist, ptrast, pimaster, pamaster, ptrarw, ptraiw, itloc, rhs_mumps, ipool, lpool, l0_omp_mapping, ll0_omp_mapping, mumps_tps_arr, smumps_tps_arr, ltps_arr, rinfo, posfac, iwpos, lrlu, iptrlu, lrlus, leaf, nbroot, nbrtot, nbroot_under_l0, uu, icntl, ptlust, ptrfac, info, keep, keep8, procnode_steps, slavef, myid, comm_nodes, myid_nodes, bufr, lbufr, lbufr_bytes, intarr, dblarr, root, perm, nelt, frtptr, frtelt, lptrar, comm_load, ass_irecv, seuil, seuil_ldlt_niv2, mem_distrib, ne, dkeep, pivnul_list, lpn_list, lrgroups)
subroutine smumps_updatedeter(piv, deter, nexp)
subroutine smumps_init_pool_last3(ipool, lpool, leaf)