33 USE omp_lib
38 & , dmumps_l0ompfac_t
39 IMPLICIT NONE
40 include 'mpif.h'
41 TYPE (DMUMPS_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 DOUBLE PRECISION RINFO(40)
47 INTEGER, INTENT( IN ) :: LBUFR, LBUFR_BYTES
48 INTEGER :: BUFR( LBUFR )
49 INTEGER, INTENT( IN ) :: DMUMPS_LBUF
50 INTEGER, DIMENSION(0:SLAVEF - 1) :: MEM_DISTRIB
51 INTEGER NELT, LDPTRAR
52 INTEGER FRTPTR(*), FRTELT(*)
53 INTEGER LRGROUPS(N)
54 DOUBLE PRECISION CNTL1
55 INTEGER ICNTL(60)
56 INTEGER INFO(80), KEEP(500)
57 INTEGER(8) KEEP8(150)
58 INTEGER SYM_PERM(N), NA(LNA),
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 STEP(N)
64 INTEGER(8), INTENT(IN) :: PTRAR(LDPTRAR,2)
65 INTEGER(8) :: PTRFAC(KEEP(28))
66 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
67 INTEGER IW1(2*KEEP(28)), ITLOC(N+KEEP(253)), POOL(LPOOL)
68 DOUBLE PRECISION :: 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 DOUBLE PRECISION DBLARR(KEEP8(26))
75 INTEGER INTARR(KEEP8(27))
76 DOUBLE PRECISION SEUIL, SEUIL_LDLT_NIV2
77 INTEGER LPN_LIST
78 INTEGER PIVNUL_LIST(LPN_LIST)
79 DOUBLE PRECISION 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) :: VIRT_L0_OMP( 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(DMUMPS_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 DOUBLE PRECISION UULOC
104 INTEGER IERR
105 INTEGER LP, MPRINT
106 LOGICAL LPOK
107 INTEGER NSTK,PTRAST
108 INTEGER PIMASTER, PAMASTER
109 LOGICAL PROK
110 DOUBLE PRECISION,PARAMETER :: ZERO = 0.0d0
111 INTEGER I
112 INTEGER LTPS_ARR
113 TYPE (MUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: MUMPS_TPS_ARR
114 TYPE (DMUMPS_TPS_T), DIMENSION(:), ALLOCATABLE :: DMUMPS_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, , NBTINY, DET_EXP, DET_SIGN
121 DOUBLE PRECISION :: 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 DOUBLE PRECISION, 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.0d0
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( dmumps_tps_arr( keep(400) ), stat=allocok )
234 IF (allocok .GT. 0) THEN
235 WRITE(*,*) "Problem allocating DMUMPS_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, dmumps_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 DMUMPS_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)= (dmumps_lbuf+keep(34)-1)/keep(34)
316 IF (lpok) THEN
317 WRITE(lp,*)
318 & 'Allocation error in DMUMPS_BUF_ALLOC_CB'
319 & ,info(2), ' on worker', myid_nodes
320 ENDIF
321 DEALLOCATE(s_is_pointers%IW); NULLIFY(s_is_pointers%IW)
322 DEALLOCATENULLIFY
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(dmumps_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, dmumps_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) = dble(opass)
380 rinfo(3) = dble(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 DMUMPS_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(dmumps_tps_arr)) THEN
435 DEALLOCATE(dmumps_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) = dble(keep8(31)*int(keep(35),8))/1d6
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 dmumps_bdc_error(myid, slavef, comm, keep)
subroutine dmumps_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, dmumps_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 dmumps_updatedeter(piv, deter, nexp)
subroutine dmumps_init_pool_last3(ipool, lpool, leaf)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine, public dmumps_buf_alloc_cb(size, ierr)
subroutine, public dmumps_buf_deall_cb(ierr)
subroutine dmumps_l0omp_copy_iw(iw, liw, iwpos, mumps_tps_arr, keep, ptlust, icntl, info)
subroutine dmumps_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, dmumps_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, public dmumps_load_init_sbtr_struct(pool, lpool, keep, keep8)
integer, save, private myid
integer, save, private comm_nodes